LITIengine Changelog

What's new in LITIengine 0.5.1 Beta

Feb 10, 2021
  • This release brings tons of bugfixes and quality-of-life improvements. Feature-wise, the highlight of this version is the addition of a Tweening framework that lets you interpolate values over time, e.g. to let your GuiComponents bounce or your Entities wiggle.
  • As the engine's networking code had been an unmaintained, untested, and even unsafe mess, we have decided to remove the networking package entirely.

New in LITIengine 0.5.0 Beta (Aug 17, 2020)

  • Fixes:
  • Fixed NullPointerException when rendering Shapes
  • Fixed vertical position when rendering Text with Alignment.
  • Fixed NullPointerException when setting opacity on an image.
  • Fixed issue with collision dimension <= 0
  • Zoom changed event is now fired after changing the zoom
  • Fixed issue with "stuttering" PositionLockCamera
  • Fixed EntityEmitters to update their position correctly once the corresponding entity moves.
  • Features/Improvements:
  • Make TileData constructor visibility being non public.
  • Allow comma separated parameters for random methods.
  • Add API that supports generating maps from code
  • Improved GeometricUtilities
  • Extended Game.random() API with support for choosing a random string
  • Extended Environment with the possibility to retrieve entities by a specified Predicate
  • Extended SoundEffect with the possibility to provide sounds by name
  • Trigger entity moved event from the EntityNavigator
  • Extended the TextRenderer with several new method overloads
  • Extended TilesetEntry with support for collision info
  • Changes:
  • Adjusted the handling of the anim controller affine transform
  • Renamed events to suit the naming conventions
  • Fixed inconsistent Entity Hierarchy by removing MobileEntity
  • Make the local ID sequence unique globally (over all Environments)
  • utiLITI Editor:
  • Improved scrollbar granularity
  • Added Spawnpoint pivot fields to the editor
  • Fixed potential exception when removing custom properties
  • Added a Zoom Combobox
  • Fixed capitalization on many UI strings
  • Added support for custom properties for MapArea
  • Clear map list when opening another game project
  • Added right-click shortcut menu to the map list

New in LITIengine 0.4.20 Alpha (Mar 29, 2020)

  • Fixes:
  • d269f4 Fixed importing map nested tile layers
  • Excluded module-info.class from external lib from the LITIengine jar files
  • a153 Fixed bug when loading Resource bundles with Spritesheets missing the image format attribute.
  • be7ae1 Fixed issue with sprite sheets not being reloaded when replacing them at runtime
  • Fixed image string serialization by returning a compatible image for the current GraphicsEnvironment
  • a410 Fixed issue with random point implementation in circles
  • b640d3e Don't use URLs as keys for resources (this had major performance drawbacks)
  • Features / Improvements:
  • Improved the visibility of APIs that are not intended to be used publically
  • Added test coverage to many utility classes
  • b402 Streamlined the ListField constructors.
  • bd6faeb Added explicit listeners for the GamepadManager's events
  • d Added a dedicated ResolutionChangedListener for the GameWindow
  • b3b5037 Add debug option to render the sprite bounds in addition to the Entity bounds
  • cc9187 make shadow offset configurable in the ShadowImageEffect
  • af6f4d Allow custom Creature implementations to override the parents controllers
  • Enhanced TextRenderer API
  • a1ea04c Implemented EntitySpawner support for providing spawn points via callback
  • d4207f8 Make use of Spawnpoint.spawn in the EntitySpawner to support events
  • d8a575 Added pivot support to Spawnpoint to align spawning entities
  • ea0151 Load CustomEmitter resources from ResourceBundles
  • Properly support resolution scaling at runtime
  • Added a unified Random API for the engine:
  • Previously the extension methods were spread around the utility classes. With these changes, all additions that provide pseudo-random values have been unified and aggregated into one APIGame.random() Some prominent examples of API changes:
  • ArrayUtilities.getRandom(...) -> Game.random().choose(...)
  • CollectionUtilities.random(...) -> Game.random().choose(...)
  • MathUtilities.randomSign() -> Game.random().nextSign()
  • MathUtilities.getRandomIndex(...) -> Game.random().getIndex(...)
  • ...
  • Changes:
  • a123e Use java.nio.charset instead of constants strings for charsets
  • eef04d2 Consulted entity AI related namespaces under de.gurkenlabs.litiengine.entities.behavior
  • a78dc4 Unified some event names:
  • ICombatEntity.addHitListener -> ICombatEntity.onHit
  • ICombatEntity.addDeathListener -> ICombatEntity.onDeath
  • utiLITI:
  • Added the possibility to export all sprite sheet information
  • Added additional console feedback for common operations
  • Placed status-bar directly under the map view
  • c32f Fixed potential exception when clearing color controls
  • aa299 Make components and font sizes aware of the configurable UI scale
  • Fixed silent startup exception when last game file was empty
  • ca746f Improved the AssetPanelItem visuals
  • Misc:
  • Added a ton of Javadoc to the public API
  • Added GitHub sponsoring button to the repository
  • Replaced deprecated Gradle configuration elements
  • d749 Updated Gradle wrapper 6.0.1 -> 6.2.2
  • ae8f102 Updated JUnit version 5.4.+ -> 5.6.0
  • ae8f102 Updated Mockito version 2.25.+ -> 3.3.3

New in LITIengine 0.4.19 Alpha (Feb 8, 2020)

  • Fixes:
  • bf31e15 Fixed ArgumentNullException that could be thrown if an entity hit event was not related to an Ability.
  • 7c25cb2 Fixed bug that made XmlUtilities.read not work for files within a jar.
  • 69afe69 Don't ignore minimal location updates on entities
  • 680ce0b Fixed issue which caused the Camera hotfix for certain renderscales not to work.
  • ca5cfa2 Fixed null pointer check in TmxMap
  • 59360c4 Fixed issue with the GameWorld.reset overload
  • Features / Improvements:
  • Added and improve the Javadocs of many APIs
  • aeccaa4 Added possibility to remove timed actions.
  • 301 28f1036 Added entity render events for individual entities.
  • adb2bfc Extend the ReflectionUtilities with a few helpful methods
  • 9fde70d Added events for changes on ConfigurationGroups
  • c8ca4b1 Added events for layer rendering on the MapRenderer
  • 70c598a Added onMoved event for IMobileEntity
  • 41679ed Added spawned event for Spawnpoint
  • 87c339d Added updatable count to the GameMetrics
  • a7a7637 Don't modify layer visibility when serializing maps.
  • 297 Re-Added shortcut API for finding tile bounds
  • Changes:
  • 5ddf044 Drop the Game.loop().getUpdateRate() method in favor of Game.loop().getTickRate().
  • 30cd2c1 Improve visibility modifies of the SoundEngine
  • 6d92e25 Rework the default mouse cursor behavior
  • Use the default cursor if no virtual cursor is set and the mouse is not being grabbed by the window.
  • Move the debug cursor handling to the MouseCursor implementation
  • Don't grab the mouse by default.
  • c950d55 Replace some explicitly thrown exceptions by log messages.
  • d715f2f Drop the de.gurkenlabs.litiengine.annotation package.
  • 39f365e Change Entity collections from the Environment to be immutable
  • Revamp of several event methods and listeners:
  • 3747d8c 080afea Streamline rendering events and API
  • 59b4b3d Reworked the ScreenManager events
  • 1c41e83 Reworked the Mouse events
  • 537b5d7 Reworked the Keyboard events
  • 480a259 Reworked the Gamepad and GamepadManager events
  • 111d81d Reworked the Camera events
  • 4204d8a Reworked the Emitter events
  • e438fc8 Reworked the Ability events
  • Marked many listeners as FunctionalInterface
  • utiLITI:
  • 60c0466 Fixed initial error when no game file is loaded.
  • 299 Fixed Reassigning map IDs
  • Misc:
  • Updated SonarQube plugin 2.7 -> 2.8
  • Updated Gradle 5.3.1 -> 6.0.1
  • d4d35a7 Print Gradle warnings in the build log.
  • 7340f5b Prevent duplicated resources in the .jar files.
  • 94b46dc Exclude duplicate files from the jar.

New in LITIengine 0.4.18 Alpha (Jan 16, 2020)

  • Fixes:
  • f3b0e52 Fixed a possible StackOverflowException in ImageFormat.isSupported(...)
  • 479e484 Fixed mapID assignment for Blueprints
  • 52f80e1 Fixed concurrency issues in TmxMap by using thread-safe containers for Tilesets and Layers
  • 9ac68d1 Removed redundant call to Creature.updateAnimationController()
  • 6bed9f1 Replaced RenderingHints.KEY_ANTIALIASING with RenderingHints.KEY_TEXT_ANTIALIASING in the TextRenderer
  • 5aa2313 Fixed Trigger to adopt changing activation conditions while relevant Entities are in the trigger area
  • #266 Fixed the way AnimationRules are added to EntityAnimationController
  • afc1997 c39d441 Fixed some graphics issues in the Camera and Environment
  • 4cfe6ed Fixed Concurrency issue in TileLayers.
  • #264 Fixed wrong tileset locations in exported maps.
  • fa573c9 Fixed possible NullPointerException when a Tileset's image was null
  • 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 for TileLayer 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 an EnvironmentEntityListener it triggers
  • c188504 Replaced some CopyOnWriteArrayList instances with the faster ConcurrentHashMap.newKeySet()
  • #265 Added ImageScaleMode.FIT to strech ImageComponent images with the correct aspect ratio
  • 5abf10a c5391ae Improved generic type handling in EntityAnimationController
  • 9c41b51 Overhauled version checking for TmxMaps
  • 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 a SoundPlayback is updated automatically.
  • 511d0b8 Instead of explicitly setting RenderingHints in the TextRenderer, toggle AntiAliasing with a boolean argument.
  • e2675a1 Removed some unnecessary wildcards in EntityAnimationController and AnimationRule.
  • 90737bb Added active flag to exclude IUpdateables 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. Cancelled MovementController.handleForces() if no forces are present.
  • bfa6d81 0fc383d 6f3f2dd 95bc61d Changed some SonarQube project settings.
  • c46632a Improved Resolution implementation.
  • d6c976f 7278da5 Switched to CollectionUtilities and ArrayUtilities for random access. Switched to ThreadLocalRandom 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 and Valign 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 and Resource 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 and distinct util methods to ArrayUtilities.
  • 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 protected
  • ff59b0a Changed EntityAnimationController.AnimationRule visibility to public
  • 4252de5 Changed constructor visibility for MapObjectLoader implementations to public
  • 41b6047 Removed type parameters for XmlUtilities.save(...)
  • 14c712b Replaced Oracle JDK with OpenJDK.
  • #279 Separated mouse Cursor implementation from the RenderComponent.
  • 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(...)
  • #282 #289 Updated ListField to create 2D list fields
  • bdbde7d Added Blueprints to game resources.
  • #285 Enabled TileData serialization.
  • Before that, TileData could only be deserialized.
  • 2d340b7 Streamlined GamepadManager API.
  • 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 default Logger instance is now added to every game and can be called with Game.log().log(...). Added ConsoleHandler and FileHandler for logging.
  • cd75d15 Streamlined Trigger interactions.
  • a612d69 4d23378 Unified hit events for CombatEntities.
  • 695806a Moved file format enums to the resources namespace.
  • 02e7471 Removed empty child implementations of PolyShape.
  • 816d7ad 1894c98 Streamlined Attribute implementation.
  • utiLITI:
  • #258 Fixed MapObjectLayers 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 the Editor 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 the MapList.
  • #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.
  • 04223a4 Changed the AssetPanel layout type from a GridLayout to a dynamic WrapLayout.
  • 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.