Releases: excaliburjs/Excalibur
Releases · excaliburjs/Excalibur
Excalibur v0.16.0
Thanks to @pathurs, @dgparker, and @rougepied for their contributions!
Added
- New typesafe and override safe event lifecycle overriding, all
onEventName
handlers will no longer be dangerous to override (#582)- New lifecycle event
onPreKill
andonPostKill
- New lifecycle event
- SpriteSheets can now produce animations from bespoke sprite coordinates
SpriteSheet.getAnimationByCoords(engine, coords[], speed)
(#918) - Added drag and drop support for Actors (#134)
- New Event
enter
- New Event
leave
- New Event
pointerenter
- New Event
pointerleave
- New Event
pointerdragstart
- New Event
pointerdragend
- New Event
pointerdragmove
- New Event
pointerdragenter
- New Event
pointerdragleave
- New Class
PointerDragEvent
which extendsPointerEvent
- New Class
GlobalCoordinates
that contains Vectors for the world, the page, and the screen. - Added property
ICapturePointerConfig.captureDragEvents
which controls whether to emit drag events to the actor - Added property
PointerEvent.pointer
which equals the original pointer object
- New Event
Deprecated
Sprite.sx
,Sprite.sy
,Sprite.swidth
,Sprite.sheight
has be deprecated in favor ofSprite.x
,Sprite.y
,Sprite.width
,Sprite.height
(#918)
Fixed
- Added missing lifecycle event handlers on Actors, Triggers, Scenes, Engine, and Camera (#582)
- Tile Maps now correctly render negative x-axis coordinates (#904)
- Offscreen culling in HiDPI mode (#949)
- Correct bounds check to check drawWidth/drawHeight for HiDPI
- suppressHiDPIScaling now also suppresses pixel ratio based scaling
- Extract and separate Sprite width/height from drawWidth/drawHeight to prevent context corruption (#951)
Excalibur v0.15.0
Breaking Changes
LockedCamera
replaced withBaseCamera.strategy.lockToActor
SideCamera
replaced withBaseCamera.strategy.lockToActorAxis
Body.wasTouching
replaced with event typeCollisionEnd
Added
- Option bag constructors have been added for commonly-used classes (see Constructors.md) (#410)
Excalibur v0.14.0
Breaking Changes
- Triggers now have a new option bag constructor using the
ITriggerOptions
interface. (#863). update
event replaced withpostupdate
eventCollisionEvent
replaced byPreCollisionEvent
getDrawWidth()
andgetDrawHeight()
replaced with the gettersdrawWidth
anddrawHeight
PointerEvent.x
andPointerEvent.y
replaced withPointerEvent.pos
Added
- Automatic HiDPI screen detection and scaling in excalibur internals to correct blurry bitmap rendering on HiDPI screens. This feature can optionally be suppressed with
IEngineOptions.suppressHiDPIScaling
. - Added new line utility
Line.normal()
andLine.distanceToPoint
(#703) - Added new PolygonArea utility
PolygonArea.getClosestFace(point)
(#703) - Triggers now fire an
EnterTriggerEvent
when an actor enters the trigger, and anExitTriggerEvent
when an actor exits the trigger. (#863) - Actors have a new events
CollisionStart
which when 2 actors first start colliding andCollisionEnd
when 2 actors are no longer colliding. (#863) - New camera strategies implementation for following targets in a scene. Allows for custom strategies to be implemented on top of some prebuilt
LockCameraToActorStrategy
which behaves likeLockedCamera
and can be switched on withCamera.strategy.lockToActor(actor)
.LockCameraToActorAxisStrategy
which behaves likeSideCamera
and can be switched on withCamera.strategy.lockToActorAxis(actor, ex.Axis.X)
ElasticToActorStrategy
which is a new strategy that elastically moves the camera to an actor and can be switched on withCamera.strategy.elasticToActor(actor, cameraElasticity, cameraFriction)
CircleAroundActorStrategy
which is a new strategy that will follow an actor when a certain radius from the camera focus and can be switched on withCamera.strategy.circleAroundActor(actor)
Changed
- Trigger have been rebuilt to provide a better experience. The trigger
action
only fires when an actor enters the designated area instead of every frame of collision. (#863) - Triggers can now draw like other Actors, but are still not visible by default (#863)
Deprecated
Body.wasTouching
has been deprecated in favor of a new event typeCollisionEnd
(#863)SideCamera
andLockedCamera
are deprecated in favor of camera strategies
Fixed
- Fixed odd jumping behavior when polygons collided with the end of an edge (#703)
Excalibur v0.13.0
Thanks to @Nysosis and @Thraka for their contributions!
Breaking Changes
Scene.children
replaced withScene.actors
Added
- New pause/unpause feature for timers to help with more robust pausing (#885)
- New event listening feature to listen to events only
.once(...)
then unsubscribe automatically (#745) - New collision event
postcollision
to indicate if collision resolution occured (#880)
Deprecated
PointerEvent.x
andPointerEvent.y
, in favor ofPointerEvent.pos
(#612)CollisionEvent
has been deprecated in favor of the more clearPreCollisionEvent
(#880)
Fixed
Excalibur v0.12.0
Thanks to @Crizzooo, @htalat, and @vritant24 for their contributions!
Breaking Changes
CollisionType.Elastic
has been removedPromises.wrap
has been replaced withPromise.resolve
Added
- Added new hsl and hex format options in Color.toString(format) using rgb as the default to maintain backwards compatibility (#852)
Changed
Animation.loop
property now to set totrue
by default (#583)- Added backgroundColor to engine options as part of Engine constructor (#846)
Deprecated
ex.Scene.children
is nowex.Scene.actors
(#796)
Excalibur v0.11.0
Thanks to @andrewmbyrd, @Lephil, @mrkmg, and @Crizzooo for contributing in this release!
Breaking Changes
- Renamed Utils.removeItemToArray() to Utils.removeItemFromArray() (#798)
Added
- Added optional volume argument to
Sound.play(volume?: number)
, which will play the Audio file at anywhere from mute (volume
is 0.0) to full volume (volume
is 1.0). (#801) - Added another DisplayMode option:
DisplayMode.Position
. When this is selected as the displayMode type, the user must specify a newposition
option (#781) - Added a static method
distance
to theVector
class (#517) - Added
WheelEvent
event type for thewheel
browser event, Excalibur now supports scroll wheel (#808)
Changed
- Camera zoom over time now returns a promise that resolves on completion (#800)
- Edge builds have more descriptive versions now containing build number and Git commit hash (e.g.
0.10.0-alpha.105#commit
) (#777)
Fixed
Excalibur v0.10.0
Breaking Changes
- Rename
Engine.width
andEngine.height
to beEngine.canvasWidth
andEngine.canvasHeight
(#591) (thanks @rehlert95) - Rename
Engine.getWidth
andEngine.getHeight
to beEngine.getDrawWidth
andEngine.getDrawHeight
(#591) (thanks @rehlert95) - Changed
GameEvent
to be a generic type for TypeScript, allowing strongly typing thetarget
property. (#724) - Removed
Body.useEdgeCollision()
parametercenter
(#724)
Added
- Added
Engine.isPaused
to retrieve the running status of Engine (#750) (thanks @SurajGoel) - Added
Engine.getWorldBounds
to provide a quick way to get the top left corner and bottom right corner of the screen (#729) (thanks @PurityLake) - Added predraw and postdraw events to
Engine
class. These events happen when prior to and after a draw (#744) (thanks @PurityLake) - Added Perlin noise generation helper
ex.PerlinGenerator
for 1d, 2d, and 3d noise, along with drawing utilities (#491) - Added font styles support for normal, italic, and oblique in addition to bold text support (#563)
Changed
- Update project to use TypeScript 2.2.2 (#762)
- Changed
Util.extend
to includeObject.assign
functionality (#763) (thanks @PurityLake)
Fixed
- Update the order of the affine transformations to fix bug when scaling and rotating Actors (#770) (thanks @HSAR for bringing this to our attention)
Thanks as well to @asi7296 for working on strict compiler flags (#724)
Excalibur v0.9.0
Added
- Added
preupdate
,postupdate
,predraw
,postdraw
events to TileMap - Added
ex.Random
with seed support via Mersenne Twister algorithm (#538) - Added extended feature detection and reporting to
ex.Detector
(#707) (thanks @guahanweb)ex.Detector.getBrowserFeatures()
to retrieve the support matrix of the current browserex.Detector.logBrowserFeatures()
to log the support matrix to the console (runs at startup when in Debug mode)
- Added @obsolete decorator to help give greater visibility to deprecated methods (#684)
- Added better support for module loaders and TypeScript importing. See Installation docs for more info. (#606)
- Added new Excalibur example project templates (#706, #733):
- Added
Pointer.lastPagePos
,Pointer.lastScreenPos
andPointer.lastWorldPos
that store the last pointer move coordinates (#509)
Changed
- Changed Util.clamp to use math libraries (#536) (thanks @FerociousQuasar)
- Upgraded to TypeScript 2.1.4 (#726)
Fixed
- Fixed Scene/Actor activation and initialization order, actors were not being initialized before scene activation causing bugs (#661)
- Fixed bug with Excalibur where it would not load if a loader was provided without any resources (#565)
- Fixed bug where an Actor/UIActor/TileMap added during a Timer callback would not initialize before running
draw
loop. (#584) - Fixed bug where on slower systems a Sprite may not be drawn on the first
draw
frame (#748)
Excalibur v0.8.0
Added
ex.Vector.magnitude
alias that callsex.Vector.distance()
to get magnitude of Vector (#663)- Added new
ex.Line
utilities (#662):ex.Line.slope
for the raw slope (m) valueex.Line.intercept
for the Y intercept (b) valueex.Line.findPoint(x?, y?)
to find a point given an X or a Y valueex.Line.hasPoint(x, y, threshold)
to determine if given point lies on the line
- Added
Vector.One
andVector.Half
constants (#649, thanks @FerociousQuasar) - Added
Vector.isValid
to check for null, undefined, Infinity, or NaN vectors method as part of (#665) - Added
ex.Promise.resolve
andex.Promise.reject
static methods (#501) - PhantomJS based testing infrastructure to accurately test browser features such as image diffs on canvas drawing (#521)
- Added some basic debug stat collection to Excalibur (#97):
- Added
ex.Engine.stats
to hold frame statistic information - Added
ex.Engine.debug
to hold debug flags and current frame stats - Added
preframe
andpostframe
events toEngine
as hooks - Added ex.Physics statistics to the Excalibur statistics collection
- Added
- Added new fast body collision detection to Excalibur to prevent fast moving objects from tunneling through other objects (#665)
- Added DynamicTree raycast to query the scene for bounds that intersect a ray
- Added fast BoundingBox raycast test
Changed
- Internal physics names refactored to be more readable and to use names more in line with game engine terminology (explicit broadphase and narrowphase called out)
Deprecated
ex.Promise.wrap
(#501)
Fixed
- Fix
Actor.oldPos
andActor.oldVel
values on update (#666) - Fix
Label.getTextWidth
returns incorrect result (#679) - Fix semi-transparent PNGs appear garbled (#687, thanks @hogart)
- Fix incorrect code coverage metrics, previously our test process was reporting higher than actual code coverage (#521)
- Fix
Actor.getBounds()
andActor.getRelativeBounds()
to return accurate bounding boxes based on the scale and rotation of actors. (#692)
Excalibur v0.7.1
Breaking Changes
- Refactored and modified Sound API (#644)
Sound.setData
now returns a Promise which differs from previous API- Removed internal
FallbackAudio
andSound
classes and replaced with singleSound
class - Added
AudioTagInstance
andWebAudioInstance
internal classes
Added
ex.Promise.join(Promise[])
support (in addition to...promises
support) (#642)- Moved build artifacts to separate excalibur-dist repository (#648)
ex.Events
namespace and typed event handler.on(...)
overloads for default events on core excalibur objects (#639)Engine.timescale
property (default: 1.0) to add time-scaling to the engine for time-based movements (#543)- Two new parameters to
ex.Util.DrawUtil.line
that accept a line thickness and end-cap style (#658)
Fixed
Actor.actions.fade
properly supporting fading between 0 and 1 and vice versa (#640)- Fix issues with audio offset tracking and muting while game is invisible (#644)
Actor.getHeight()
andActor.getWidth()
now take into account parent scaling (#645)Actor.debugDraw
now works properly for child actors (#505, #645)- Sprite culling was double scaling calculations (#646)
- Fix negative zoom sprite culling (#539)
- Fix Actor updates happening more than once per frame, causing multiple pointer events to trigger (#643)
- Fix
Actor.on('pointerup')
capturePointer events opt-in on event handler. The opt-in was triggering correctly for handlers on 'pointerdown' and 'pointermove', but not 'pointerup'.