Fixes
- f3b0e52 Fixed a possible
StackOverflowException
inImageFormat.isSupported(...)
- 479e484 Fixed mapID assignment for
Blueprints
- 52f80e1 Fixed concurrency issues in
TmxMap
by using thread-safe containers forTilesets
andLayers
- 9ac68d1 Removed redundant call to
Creature.updateAnimationController()
- 6bed9f1 Replaced
RenderingHints.KEY_ANTIALIASING
withRenderingHints.KEY_TEXT_ANTIALIASING
in theTextRenderer
- 5aa2313 Fixed
Trigger
to adopt changing activation conditions while relevantEntities
are in the trigger area - #266 Fixed the way
AnimationRule
s are added toEntityAnimationController
- afc1997 c39d441 Fixed some graphics issues in the
Camera
andEnvironment
- 4cfe6ed Fixed Concurrency issue in
TileLayer
s. - #264 Fixed wrong tileset locations in exported maps.
- fa573c9 Fixed possible
NullPointerException
when aTileset
‘s image wasnull
- 217d41b Fixed
UpdateLoop
interruption behaviour - f152d52 Made sure
Entities
cannot have negative width or height. - #271 Fixed wrong argument in
Spritesheet.setSpriteHeight(...)
- #283 Fixed potential null reference when
CustomProperty
value is undefined. - c53b036 Fixed potential null reference in
DecimalFloatAdapter
. - 4956e23 Fixed potential text outline bug when using certain RenderScales.
- 65317ef Fixed entity debug rendering being cancelled when current animation frame is null.
- 64b1de4 Set default font for all ImageComponents containing text, not only the ones with a background spritesheet.
- #295 Fixed issue with virtual mouse and grabMouse setting.
- 25f60bf Encoded spaces in file paths.
- cfbe31d Prevent potential null reference when trying to scale images that are null.
- #284 Fixed map serialization being distúrbed by handling paths as URL fragments.
- 1d4ad94 Fixed an issue when combining paths with whitespaces.
Features / Improvements
- 8996fd4 Throw
ResourceLoadExceptions
when failing to load resources - 9bc1f2b Added renderWithLayer property to
@EntityInfo
- f93a191 Set default
RenderType
forTileLayer
to GROUND - 6876143 Set default
RenderType
for all Layers to GROUND - de2c7a0 Added util method to extrude rectangles
- eba3d49 Added getter
EntityAnimationController.getAnimationRules()
- 816715a Added method overload for
EntityAnimationController.addAnimationRule(...)
- #224 Added
Appearance
properties for borders - dc550f0 Added
SpeechBubbleListener
- 7674c6c Allow setting
SpeechBubble
text display time - 61dbc65 Allow hiding
Speechbubble
- e067ef1 63d4fb2 ca714b7 f6db03d 077b525 Minor overhaul of the Sound Engine
- 98255f9 Allow an
Entity
to be removed by anEnvironmentEntityListener
it triggers - c188504 Replaced some
CopyOnWriteArrayList
instances with the fasterConcurrentHashMap.newKeySet()
- #265 Added
ImageScaleMode.FIT
to strechImageComponent
images with the correct aspect ratio - 5abf10a c5391ae Improved generic type handling in
EntityAnimationController
- 9c41b51 Overhauled version checking for
TmxMap
s - 102c48b Added Unit tests
- a538528 #268 Implemented more performant Collections for keyboard listeners.
- 3d41a91 Added method overload for
ResourcesContainer.getAsync(...)
- d8236a9 0d55b7a Switched to more specialized function interfaces in some places.
- bcfc753 Made sure the
miscVolume
of aSoundPlayback
is updated automatically. - 511d0b8 Instead of explicitly setting
RenderingHints
in theTextRenderer
, toggle AntiAliasing with a boolean argument. - e2675a1 Removed some unnecessary wildcards in
EntityAnimationController
andAnimationRule
. - 90737bb Added active flag to exclude
IUpdateable
s from the update mechanism, where desired. - 9da3822 Set mouse
Cursor
to be visible by default. - e043ae5 Added multiple collision handling to
PhysicsEngine.getIntersection(...)
- b57df91 Improved logging on the entity action framework.
- a26a993 Added attribute to
CreatureAnimationState
to remember its string representation. CancelledMovementController.handleForces()
if no forces are present. - bfa6d81 0fc383d 6f3f2dd 95bc61d Changed some SonarQube project settings.
- c46632a Improved
Resolution
implementation. - d6c976f 7278da5 Switched to
CollectionUtilities
andArrayUtilities
for random access. Switched toThreadLocalRandom
instead of individual Random objects. Added method overloads to pass random instance as argument. - d452fda Enabled null values in
CustomProperties
declared as enum. - 16f0929 Simplified and improved entity debug rendering.
- eb6924b Added some additional API to allow map generation from code.
- 24df305 Added util method to get a random point within a circle.
- 477eddf Added overload to
MapUtilities.getTile(...)
with map argument. - 10a233f Removed redundant call of
ByteArrayOutputStream.flush()
- c0c001e Added util method to replace colors in an image according to a Map with source and target colors.
- f62e23c Made sure the
GamepadManager
updates the gamepads once it is initialized. - 3128eb0 f124186 Enabled clearing registered event consumers from Input API.
- 63c9b8d Added reflection util method to retrieve values of static fields.
- 47c4ddc Added
Gamepad.isPressed(...)
to check if a button is pressed on a gamepad. - c67bf33 Enhanced
Gamepad.toString()
. - 8e5ed73 Enabled gamepad polling via component name instead of JInput specific identifier.
- 4e5a108 Added possibility to parse a given resource file into a string.
- c4b40a9 Added mouse pressing event.
- 44a765d Added missing setters for some
Ability
properties. - #290 Implemented borderless display mode. There are now three modes:
- WINDOWED = Resizable Window with decoration (otherwise it would not be resizable)
- BORDERLESS = Basically windowed but without decoration and scaled to the entire screen
- FULLSCREEN = Native Fullscreen; locked to the framerate of the Monitor
- 564ea96 Stored a string attribute as lower cased so that it doesn’t always have to be converted.
- ac0b11b Made XML format more compatible to the TMX tiled format.
- 949be86 14175b6 Added overload method to set mouse cursor location with
Align
andValign
parameters instead of absolute offset values. Set default pivot to TOP LEFT - f12df41 Implemented human-like alphanumeric string comparison using the Alphanum algorithm by dave koelle. Switched to alphanum comparison for
IMap
andResource
names ([map1, map2, map10] instead of [map1, map10, map2]). - #259 Made the
CreatureAnimationController
only display the death animation as the last fallback if no other animation is present. - 406adc5 Slightly improved
CombatEntity
events. - 504ccd4 Added
append
anddistinct
util methods toArrayUtilities
. - d14fa49 Added collision event to
CollisionEntity
- 6310fd2 Improved logging for unsupported tmx version.
- 5a13edd Improved exceptions when an XML file is not found.
- 2cab4c6 Reset the logmanager before config to avoid redundant logs.
- cbd947e Improved access modifiers on some internals.
- 368ec92 Improved
AbilityOrigin
enum. - 75d16bb Added custom effect target evaluation.
Changes
3462f03 Changed
Creature.updateAnimationController()
visibility to protectedff59b0a Changed
EntityAnimationController.AnimationRule
visibility to public4252de5 Changed constructor visibility for
MapObjectLoader
implementations to public41b6047 Removed type parameters for
XmlUtilities.save(...)
14c712b Replaced Oracle JDK with OpenJDK.
#279 Separated mouse
Cursor
implementation from the RenderComponent.
BEFORE:Game.window().getRenderComponent().setCursor(Cursors.ADD, 0, 0); Game.window().getRenderComponent().setCursorOffsetX(0); Game.window().getRenderComponent().setCursorOffsetY(0);
AFTER:
Game.window().cursor().set(Cursors.ADD, 0, 0); Game.window().cursor().setOffsetX(0); Game.window().cursor().setOffsetY(0);
14c26df Streamlined
Animation
API.
BEFORE:entity.getAnimationController().getCurrentSprite(); entity.getAnimationController().getCurrentAnimation(); entity.getAnimationController().getAnimations();
AFTER:
entity.animations().getCurrentSprite(); entity.animations().getCurrent(); entity.animations().getAll();
a4ebf58 Don’t limit cursor rendering to when the window is focused.
887d635 Attached camera to RenderLoop instead of GameLoop.
7490c53 Removed sample emitter implementations from the engine.
9e03791 Removed unused overload for
Spritesheets.get(...)
bdbde7d Added
Blueprint
s to game resources.#285 Enabled
TileData
serialization.
Before that,TileData
could only be deserialized.2d340b7 Streamlined
GamepadManager
API.
BEFORE:Input.getGamepad(); Input.getGamepad(gamePadIndex); Input.gamepadManager().onGamepadAdded(pad -> {});
AFTER:
Input.gamepads().current(); Input.gamepads().get(gamePadIndex); Input.gamepads().onGamepadAdded(pad -> {});
5fee6fd Removed background spritesheet argument from
TextFieldComponent
. Enabled commenting string list files using ‘//’ at the beginning of a line.c0c9322 Don’t evaluate collision if a particle should not be moved.
eaa98c7 Set SpriteParticle Dimensions to the sprite dimensions by default.
ad5a0a4 Consolidated the RenderLoop with the GameLoop to circumvent a lot of concurrency issues and to make life easier for LITIengine devs.
d14fa49 Streamlined
logging
API.
A defaultLogger
instance is now added to every game and can be called withGame.log().log(...)
. AddedConsoleHandler
andFileHandler
for logging.cd75d15 Streamlined
Trigger
interactions.695806a Moved file format enums to the resources namespace.
02e7471 Removed empty child implementations of PolyShape.
utiLITI
- #258 Fixed
MapObjectLayer
s being deselected when copy-pasting entities - 3433362 Improved
MapObject
ID rendering - #261 Correctly refresh UI after deleting entities.
- 15f2347 Separated
Entity
snapping from clamping to map. Renamed snapping presets. - 02d6b02 96223f9 5ad81e1 1e9d84b Added dedicated zooming handler.
- 50d511e 7f75cfd Extracted
Entity
transforming logic. Separated rendering tasks into dedicated classes. - 940190b Added Unit test routine to Gradle script.
- 5e4bb3f 8612f69 Added general UI scaling. Added
ConfirmDialog
wrapper. - d4cf6df Moved
UserPreferences
to theEditor
class - 63ff169 Added some localizable strings.
- c4d2115 Fixed a Font scaling issue. Minor fixes and improvements.
- c061d8e Fixed issue that sometimes caused the map list to be blank.
- edd0bfe Removed redundant focus update.
- 25ef97a Declared some overrides correctly.
- 7c9117e Fixed clamping when moving multiple selected
MapObjects
. - 2724acb 1f34a90 Improved resize operation.
- #277 Made snapping grid size configurable by user.
- 14fec87 Removed redundant reload from map when transforming
Entities
. - #262 Fixed the map selection being discarded when changing map properties.
- 50b3978 Fixed positional transformation using keyboard.
- 777ba8a Added private constructors for static handlers.
- 213c1e5 Fixed issue that prevented new maps from being imported.
- fc0d1bf Fixed potential null reference when no map was loaded.
- 879cde1 Improved behaviour when trying to load non-existing projects.
- f15177b Added Ambient Light and static shadow preview to
MapPropertyPanel
and enhanced the panel’s layout. - #292 Enabled Map property manipulation in the
MapPropertyPanel
- 64ec7b7 392bcc5
- Added Alpha spinner to the ColorComponent to make it more reusable.
- Enhanced MapPropertyPanel with the streamlined ColorComponents, a scrollable Editor field for the map description, and omitted non-custom map properties from the table on the lower end.
- Allowed complex components with varying height to be added to a PropertyPanel.
- Fixed Label Alignment in the PropertyPanels
- 5309c6f 5964444
- Switched to concrete
Map
objects instead of just name strings in theMapList
. - #262 Fixed the
MapList
losing its selection when changing map properties. - Added
MapListCellRenderer
for further customizability of the MapList. - Don’t rebind all Maps to the
MapList
when just saving the game file.
- Switched to concrete
- 04223a4 Changed the
AssetPanel
layout type from aGridLayout
to a dynamicWrapLayout
. - b7d464e Display the default value for
CombatEntity
hitpoints in the editor. - 3e22f1c Improved control flow via keyboard.
- 2089445 Replaced usages of deprecated
Event
class. - d95c73a Fixed issue with save state of a map not being tracked.
Misc
- 1e7030b Updated code of conduct link in CONTRIBUTING.md.
- a9706fd Moved “Games made with LITIengine” showcase to docs pages.
- 7477318 Added FUNDING.yml
- 448b630 Whoop whoop.
Code Style
- 95f44c3 Removed some curly brackets to match correct single statement syntax.
- 274e802 Removed redundant if-block
- 8d7ddd7 Fixed variable name shadowing
- 02611a3 Added unused annotation to empty test method.
- b391b16 4730c37 e0ca3a8 5e10e26 9485f97 bbd10e7 Fixed minor style issues.
Acknowledgements
Contributors in this release
Thank you!
2019 has been an eventful year for us, with LITIengine seeing more than 600 commits since January. The number of stars on the LITIengine Github repository has doubled again in 2019! The interest and demand for LITIengine is out there, and we are deeply in your debt for giving us your time and patience.
Thank you all so much for all your contributions, your discussions, your bug reports, your suggestions, and all the support you give us! Cheers to success and health in 2020 and beyond.
Yours truly,
Steffen and Matthias