Skip to content

Releases: oakmound/oak

Oak v2.3.2

25 Jan 17:45
5a5c0ca
Compare
Choose a tag to compare

Oak version 2.3.2 updates the project's go modules files and imports to resolve import issues with go modules and enable go getting without too much effort to work around modules (with crossed fingers).

Oak v2.3.2 Beta 2

25 Jan 16:37
Compare
Choose a tag to compare
Oak v2.3.2 Beta 2 Pre-release
Pre-release
v2.3.2-beta-2

Update module imports

Oak v2.3.2 Beta

07 Jan 01:15
b5c521e
Compare
Choose a tag to compare
Oak v2.3.2 Beta Pre-release
Pre-release

Minor release to fix modules incompatability

Oak 2.3.1

15 Sep 01:57
c979aa8
Compare
Choose a tag to compare

Changelog:

  • Travis CI is replaced with Github Actions
  • entities/x/btn supports storing and retrieving arbitrary metadata
  • dep / go modules files updated
  • A new fork of libudev is being used to accomodate a bug in go modules
  • Adds oak.RecordGIF
  • Adds oak.Config.TrackInputChanges for switching between joystick and key/mouse controls
  • Adds oak.GetViewportBounds and oak.RemoveViewportBounds
  • Use of custom polygon clipping algorithms in render.DrawPolygon

Oak 2.3.0

17 Aug 17:56
b9ed134
Compare
Choose a tag to compare

See the beta release for the changelog.

Also noteworthy is our audio library, klangsynthese, no longer requires cgo on Linux.

Oak 2.3.0 Beta 0

26 Jul 14:34
Compare
Choose a tag to compare
Oak 2.3.0 Beta 0 Pre-release
Pre-release

Beta release for 2.3.0, pending some more examples / tests / benchmarks.

2.3.0 Changelog:

Overall:

  • Improved test coverage
  • Updated example READMEs

alg:

  • Added standard direction helpers
  • Allow usage of a rand other than the default rand

Collision:

  • Minor refactoring

oak:

  • Added new screen controls
  • New debug commands

joystick:

  • Joystick support added

render:

  • Add some missing methods

Oak 2.2.0

23 Mar 16:34
393793f
Compare
Choose a tag to compare

2.2.0 Changelog:

collision:

  • Added Size method to rtrees.
  • Deprecated UpdateLabel Method.
  • Fixed race condition bug in UpdateSpace and UpdateSpaceRect, these methods will now return an error if attempting to update a space that does not exist in the tree.

entities:

  • Added GetReactiveSpace to the Reactive type.

entities/x:

  • General bug fixes
  • force/NewHurtColor and force/NewHurtDisplay now take a variadic set of layers
  • Added move/ShiftX and move/ShiftY

examples:

  • Corrected the particle demo to use 2.0.0 commands

render:

  • Added ToSprite to CompositeM
  • Corrected default font access
  • NewSheetSequence now returns an error if given invalid frames
  • Sprites now satisfy stdlib draw.Image
  • bugfix: Sprite copies now don't reuse the same pixel slice
  • Switch.Set returns an oakerr.NotFound instead of oakerr.InvalidInput

scene:

  • Added GoToPtr, taking a string pointer as the next scene to run

Oak 2.1.0

04 Mar 01:43
60bdd36
Compare
Choose a tag to compare

Full Changelog:

Overall:

-Added dependency tracking files for dep and go modules

alg:

  • Added floatgeom.Point4, mirroring Point3/2
  • Added Cross to floatgeom.Point3 to calculate cross products
  • Added Shift and Center to floatgeom.Rect2/3 and intgeom.Rect2/3
  • Added TriangulateConvex utility for converting polygons into a slice of triangles by vertex index

oak:

  • Added ResetCommands to remove all debug console commands.

entities/x:

  • The subpackages here are meant to be experimental extensions of existing oak functionality. These aren't bound to the versioning compatibility requirements, but packages here are candidates to be moved out of x and made a part of versioning compatibility.
  • Added the btn package, an experimental UI package for quick menu and button creation.
  • Added the force package, containing utilities for imparting directionality with collisions.
  • Added the 'mods' package, containing expanded color and Modifiable manipulation functions.
  • Added the 'move' package, containing quick-start entity movement control functions like WASD.
  • Added the 'stat' package, extending event tracking to also track incremental statistics over a game's life.

event:

  • Added the Caller interface to cover entities composed with CIDs.
  • Added the ScanForEntity utility, allowing searching for arbitrary entities by function matching.
  • Added the 'OnStop' event for when the engine is closed.

examples:

  • Added the radar-demo package, demonstrating how to write custom renderables and point tracking with a radar UI element.

key:

  • Added Period as a duplicate of FullStop
  • Added KeyHeld to track when a key triggers repeats by being held down for long enough.

render:

  • Added DrawPoint to draw single pixels.
  • Added 'LoadSprites' utility combining LoadSheet and ToSprites.

scene:

  • Added utilities BooleanLoop and GoTo for common Loop and End scene functions.

shape:

  • Added Condense, which finds a minimal set of rectangles covering a given shape.
  • Added Points, representing a shape via a set of (x,y) points.

Oak 2.0.0

07 Feb 12:19
d7a0494
Compare
Choose a tag to compare

Full Changelog:
alg:

  • alg has several new operations for working with degrees and radians.
  • alg/floatgeom has several new operations on points, including Normalize, Magnitude, Dot, DivConst, and Project<X/Y/Z>
  • alg/floatgeom now has a Triangle type, with minimal current functionality.
  • alg/intgeom is now parallel in API to alg/floatgeom, with only some functions that relied on floating point math removed.
  • alg has the new function F64eqEps which allows for the specification of the epsilon used for floating point equality.
  • alg.WeightedChoose has been removed.
  • alg.CumWeightedChooseOne has been renamed to alg.WeightedChooseOne.
  • alg.CumWeightedFromMap has been renamed to alg.WeightedMapChoice.
  • alg.RemainingWeights has been added, alike to alg.CumulativeWeights, but with a change to the position of the total weight index.

audio:

  • audio.Audio.Get<X/Y>() have been renamed to <X/Y>p().
  • audio.SupportsPos has been changed to require Xp() and Yp() in accordance.
  • Several errors returned by audio have been changed to oakerr error types.

collision:

  • The library github.com/200sc/rtreego, which was a fork of a fork, has been brought into Oak entirely and operates directly on collision struct types instead of on interfaces. Some math functionality required for this was split off and brought into alg/floatgeom instead. These files are subject to the rtree-LICENSE license file.
  • collision.Point is now composed of floatgeom.Point3 instead of physics.Vector
  • The subpackage collision/ray has been added to replace previous ray casting functionality.
  • All previous raycasting functionality has been removed, use collision/ray instead.
  • Previous rtreego.Rects have been replaced with floatgeom.Rect3s.
  • collision.Space.GetX() and GetY() have been renamed to X() and Y().
  • collision.Tree.UpdateLabel and collision.Tree.UpdateSpaceRect have been added
  • Several errors returned by collision have been changed to oakerr error types.

dlog:

  • Previous dlog functionality is now built into the private logger type, which will be used by default.
  • dlog.SetLogger allows for the specification of a user-made logger to replace the private type. Either Logger or FullLogger, a superset of Logger, can be implemented by arguments to SetLogger.
  • Log levels now have an explicit type, dlog.Level.
  • Disabling logging with the nolog build tag has been disabled, use a NOP custom logger implementation instead.
  • Input debug level strings are no longer case sensitive.

entities:

  • Almost all constructors in this package have changed to accommodate the ability to set the collision.Tree of created collision.Spaces, or for more realistic use in examples.
  • Several miscellaneous utilities have been added to the existing types here.

event:

  • Operations on this package now operate on a default event.Bus type, and custom event buses can be constructed for more fine management of event propagation. Events on event.CIDs operate on this default bus as well.
  • The event.Handler interface has been added and can be used to replace the event package with a custom event handler from within the main Oak package.

examples:

  • Many new examples have been added. Some of these were previously external repositories.

fileutil:

  • fileutil.ReadFile uses the same double-checking that fileutil.Open has used if filepath.Rel fails.

mouse:

  • mouse.LastMousePress has been renamed mouse.LastPress
  • mouse.LastMouseEvent has been renamed mouse.LastEvent
  • mouse.Event is now composed of a floatgeom.Point2 instead of manual X and Y fields.
  • mouse.NewEvent and mouse.NewZeroEvent helpers for constructing mouse events have been added.
  • Event.ToSpace() has been added, to convert a mouse event into a miniscule collision space.
  • "Click" events will be properly triggered now.

oakerr:

  • Several new error types have been added.

physics:

  • Vector.GetX() and Vector.GetY() have been removed.
  • NewVector32 and PtrVector have been added as additional constructors for physics.Vectors.

render:

  • Renderable.UnDraw is now Undraw
  • render.Animation has been removed and folded into render.Sequence.
  • render.Composite had been renamed to render.CompositeM.
  • Support for adding custom image decoders has been added through render.RegisterDecoder.
  • Package global NewText constructors have been added as equivalent to render.DefFont.NewText, etc.
  • render.Draw, render.DrawColor, render.DrawForTime, and render.LoadSpriteAndDraw now take in a variadic set of layers.
  • render.Addable has been renamed to render.Stackable.
  • Addable/Stackable.Add now takes in variadic layer arguments.
  • render.SetDrawPolygon and other DrawPolygon functions have been moved to a struct.
  • render.ReplaceDraw has been removed.
  • render.Layered has been renamed to Layer.
  • render.Layered is now an interface describing layering functionality.
  • render.DrawLineOnto has been renamed to render.DrawLine
  • render.LoadSprite, render.LoadSheet, render.GetSprite, and render.GetSheet have all new signatures and functionality to be more consistent.
  • render.Modification has been changed to render/mod.Mod, and is now paired with render/mod.Filter, for transformations that operate in place.
  • All render.Modification functions that were in render can now be found in render/mod
  • Several constructors that previously took slices in render now take variadic inputs.
  • render.BoundingRect and render.WrappingContains have been removed.
  • render.Positional is a new interface that describes the positional requirements of a Renderable.
  • render.Sequence now have the function SetFPS to change animation speed after initialization.
  • Previous Animation functionality is now in the constructor NewSheetSequence.
  • render.Sheet can be converted to a 2D slice of sprites through ToSprites.
  • render.Compound has been renamed to render.Switch.
  • Many errors are now using oakerr error types.

render/mod:

  • Previous render.Modifications have been split into two categories, Transforms or Mods, that create new images, and Filters, that operate in place.
  • Several new modifications are present here, many from gift.

render/particle:

  • Particles no longer have String functions.
  • In addition to Size, generators now have an EndSize field for shifts in size over the particle lifespan.

scene:

  • This is a new package which holds functionality previously in the Oak main package. No additional functionality relative to what was previously in the main package has been changed or added, except that private functions on scene maps have been exported.

timing:

  • ForceStep has been added to timing.DynamicTicker, which acts just as Step but will block until the tick is accepted (if it ever is).

oak:

  • Config.DisableKeyhold has been removed. Keyhold functionality is always on, as it no longer has a significant perfomance hit.
  • Config.LoadBuiltinCommands has been added. In order to use the built in commands described in the debugConsole files, this must be true.
  • Screen.X and Screen.Y have been added for managing the initial position of a screen.
  • All uses of "golang.org/x/exp/shiny" have been replaced with "github.com/oakmound/shiny"
  • AddCommand will now return an error if a command added would overwrite an existing command.
  • Two new builtin commands move and fullscreen, for moving the position of the window and toggling fullscreen mode, have been added.
  • Added Commands no longer use the prefix c. They no longer have any prefix, a function bound to foo will be triggered by the command line input of foo. Built in commands can fail to be added if you already use their names in a user command.
  • Driver is a new function type allowing Oak to be built on top of any underlying graphics / window management driver. By default, this will use shiny's Main driver, which itself splits to different drivers depending on OS. Shiny provides an alternative, which we do not include in Oak (as it uses C) but do note the existence of, that uses OpenGL ES: shiny/driver/gldriver.Main.
  • The FullScreenable interface and SetFullScreen have been added to manage window full screen support.
  • The MoveableWindow interface and MoveWindow have been added to manage manual window positioning.
  • SetLogicHandler can be used to overwrite the use of the oak/event package with custom event handling.
  • All Oak operations relating to scenes can now be found in the scene package, with the exception of Add and AddScene.
  • Oak's previously private scene map has been exported as SceneMap.

Breaking API Changelog:

  • All previous uses of alg/intgeom will be almost certainly invalid now, as almost all types and functions in the package have changed signatures. This also applies for libraries in oak that used intgeom, such as shape.
  • alg.WeightedChoose has been removed.
  • alg.CumWeightedChooseOne has been renamed to alg.WeightedChooseOne.
  • alg.CumWeightedFromMap has been renamed to alg.WeightedMapChoice.
  • audio.Audio.Get<X/Y>() have been renamed to <X/Y>p().
  • audio.SupportsPos has been changed to require Xp() and Yp() in accordance.
  • All previous raycasting functionality has been removed, use collision/ray instead.
  • collision.Space.GetX() and GetY() have been renamed to X() and Y().
  • oak.Config and the structs underlying it have had several changes.
  • Added Commands no longer use the prefix c. They no longer have any prefix, a function bound to foo will be triggered by the command line input of foo. Built in commands can fail to be added if yo...
Read more

Oak 2.0.0 Beta 0

22 Jan 01:47
Compare
Choose a tag to compare
Oak 2.0.0 Beta 0 Pre-release
Pre-release

This is an release candidate for Oak 2.0. We're looking for feedback on, specifically, breaking API changes before making a full release.

Changelist from 1.5 to follow.