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.