meta.description | meta.keywords |
---|---|
Release notes for the LITIENGINE that include a complete changelog with all fixes, changes, improvements and a list of added and removed features. |
FAQ, questions, LITIENGINE, java, game, gameengine, development, 2D, programming |
Surprise! After a quiet period of not releasing a new engine version since January 2022, we proudly present LITIENGINE 0.6.0. This is a release packed mostly with invisible infrastructure changes and refactorings, but also enhanced documentation, tests, and important bugfixes.
There had been some crucial problems in our build and deploy toolchain, which prevented us from releasing new versions for quite a while, but these problems have been resolved and now we are even releasing nightly snapshot builds for you to test out the latest changes!
You may have noticed the versioning of LITIENGINE has changed too.
Instead of e.g. v0.5.2-beta
, we are now using plain semantic versions for stable releases (starting with this release 0.6.0
) and a modified git describe
variant (e.g. 0.5.2-166-gb2e597fe-SNAPSHOT/
) for snapshot versions.
Since the last release, we have updated to a more recent Java version several times, and recently we have finally moved to the new LTS version Java 21. That means you can now use all the new cutting-edge Java features in your LITIENGINE games!
Of course, we want to thank all our contributors, sponsors, users, and community members for keeping LITIENGINE alive even when we maintainers get lazy. You are the heart of this project!
Here's a quick overview of the changes in this release:
Build Infrastructure:
- Updated project to Java 21
- Restored releasability through GitHub actions
- Introduced nightly snapshot builds
- Switched versioning to Semantic Versions (assisted bySemVerGuru Gradle plugin.)
- Cleaned up Gradle dependency management and updateddependencies
- Rename master branch to main.
- Restored SonarQube analysis
- Cleaned up and refactored Gradle project structure
Improvements:
- Implemented multi-target ForceEffects.
- Implemented StateEvents to register actions when a State isentered/exited.
- Implemented 9-sliced image scaling.
- Added 9-slice scaling option for ImageComponent backgrounds.
- Added shortcut methods to determine a GuiComponent's centerpoint.
- Added color interpolation helper.
- Turned AntiAliasing on for rendering object boxes in utiLITI
- Added image scaling overloads for bilinear and bicubicinterpolation.
- Separated emitter saving in utiLITI from blueprint definition.
Bugfixes:
- Fixed EntityEmitter location jittering.
- Fixed Particle opacity calculation.
- Fixed SoundPlaybacks. (contributed by @Gamebuster19901)
- Fixed Ability impact area calculation.
- Fixed particle spritesheet assignment dropdown in utiLITI.
- Fixed an issue with sticky forces
- Fixed a bug that prevented the utiLITI asset panel fromrefreshing.
- Fixed threading issues in GameTests by introducingGameTestSuite (contributed by @Gamebuster19901)
- Fixed duplicate attribute modification in GuiComponentlocation setters. (contributed by @ecchilds)
API changes:
- Renamed
Effect.canAttackEntity
tocanAffectEntity
.
Removals / Deprecations:
- Removed CompressionUtilities (and tests). There were vulnerabilities in our implementation and the utilities have never actually been used. End users will have a much better experience using libraries such as zip4j.
Documentation and Miscellaneous:
- Updated license.
- Updated contribution guide.
- Added star history to readme.
- Removed individual developers' funding links.
- Added .cff citation file.
- Improved JavaDocs
- Added more projects to LITIENGINE showcase
Just in time for making your new year's resolution of creating amazing games with LITIENGINE, we proudly present our latest update, packed with 250 commits over the last ten months!
Let's talk about the elephant in the room: LITIENGINE is now fully running on Java 17! In the future, we plan to keep the library updated to the latest stable jdk versions for you to utilize all the juicy new features Java has to offer.
To make building ingame UI more pleasant, the Slider
, TextFieldComponent
, and SpeechBubble
components have seen massive updates.
Bugfixes and UX improvements for utiLITI will ensure a more smooth experience when handling the editor.
Apart from that, a lot has changed in our build and deployment pipeline and the repository is now utilizing GitHub actions instead of Travis CI. This goes along with a completely revised directory structure and proper separation of submodules. The way we bundle native libraries has been adapted and the dependency on steamworks4j has been removed. Please also take note of our changed contribution guidelines: it is now required to comply with the Java code style conventions we provide in the repository (see CONTRIBUTING.md).
Finally, a huge THANK YOU is in order: To all our new code contributors, to the community involved in discussing issues, to everyone providing help in our forum and on Discord, and lastly: Thank you to our new Sponsors RajBet, Trust My Paper, CasinoHex Canada, and ej-technologies (in chronological order of sponsorships)!
What are you waiting for? Start the new year the right way: making games with LITIENGINE.
- #373 Fixed
ArrayIndexOutOfBoundsException
(contributed by @Gamebuster19901) - #378 Fixed deadlock in
StatusBar
(contributed by @Gamebuster19901) - #394 Fixed endless recursion for
ResourcesContainer::getAsync(String)
(contributed by @EagleoutIce) - 847c523, 5fffe4f Prevented two
NullPointerExceptions
in SoundSources - 87085d7 Crucially improved robustness and usability of slider GuiComponents
- 1f27427 Removed
final
modifiers from serializable Tmx properties in Triggers - 01da7e0 Ensured animation caching
- 7beda04 Fixed Polygon particle rounding errors.
- #441 Fixed wrong type of EntityController being removed with
clearControllers()
(contributed by @Gamebuster19901)
- #376, #377, #381, #382, #383, #385, #386, #388, #389, #390, #396, #397, #398, #403 Vastly improved test coverage (contributed by @DanielH4, @nwessman, @jluech, @ddreimane, @niels89)
- c42dc23 Added gamepad mapping for DualShock4 controller
- 8469c67 Guess type of connected gamepads from the most probable variants.
- d6449ee, 0cac85a Add TweenType OPACITY and implement opacity Tweening on GuiComponents.
- d930a8b Added EntityNavigator overload for using an uninitialized PathFinder.
- 7047c83 Disable collision just before firing death events.
- f4fa77b Added support for setting int and double array fields via
ReflectionUtilities
- 5e126bf, 5227848, 350c137, 4a24304
TextFieldComponent
improvements:- Made blinking cursor configurable
- Enabled automatic line breaks
- Ensured input termination on mouse clicks outside an active text field
- 1bcdf2a Excluded entities that cannot collide with a Trigger from activating it
- bfc8d2f Added events for GuiComponent rendering
- 0ee92fa, 634ba28, bd81b76 Performance optimizations
- 09bccf3 Made VAlign xml names consistent with enum names
- b3c47f9 Ensured that event registrations are passed through to the current gamepad
- 2e055a2 Set default color for particles on initialization
- 64ea5c8 Reimplemented
SpeechBubble
as a GuiComponent for more configurabiLITI
- Migrated project to Java 17
- Migrated deployment pipeline from Travis to GitHub actions
- Updated Gradle Wrapper from 6.8 -> 7.2
- Established Java code style conventions and enforced them via spotless Gradle plugin.
- Introduced workflow to build nightly snapshots
- bc869ef Defined Google Java code style as a convention for the repository
- #413, #423, #424 Major refactorings to build scripts, project layout, and Sonar scan configuration(contributed by @weisJ)
- c9d2e4e Reduced unit test visibility to
default
due to JUnit 5 migration - df8cf8b Replaced Gradle Natives plugin with a manual approach
- c31fffd Retrieve gamepads by ID instead of index
- 6ce69b5 Removed steamworks4j as a required library
- ae42e12 Included native libraries in the litiengine jar
- #409 UI updates. (contributed by @weisJ)
- 49a299e Changed visibility of GuiComponent.getCurrentAppearance() to public. Made text align, antialiasing, and shadows available as GuiProperties.
- b802ae7, #420 Resource panel improvements. (contributed by @jdeblander)
- 52d100c Fixed creature sprite names in CreaturePanel
- f052c5d Fixed issue that prevented utiLITI from shutting down properly
- #387, #391, #395, #399 Enhanced crash handling and added debug functionality. (contributed by @Gamebuster19901)
- 73d9fa1 Added some basic sanity checks around editing emitters
- a1571c1 Improved
GridRenderer
memory usage - 21e56de Increased available heap space
- d299c54 Set year in the help menu dynamically
- 61aa52c Set panel focus globally to prevent unnecessary UI updates
- a9be599 Fixed a potential NullReference
- ad969f4 Ensured that the game resource file is saved right after creating a new project
- be0132e Ensured that only affected nodes in the entity list get updated when entities change
- 1e7b4ff Skipped unnecessary UI updates and data binding
- f3ce2ca Prevented UndoManager from updating the same object multiple times
- 8306abd Prevented entity list from completely rebuilding upon entity deletion
- @DanielH4 in #376
- @nwessman in #377
- @jluech in #381
- @ddreimane in #383
- @EagleoutIce in #394
- @niels89 in #396
- RajBet (Bronze sponsorship on OpenCollective)
- Trust My Paper (Bronze sponsorship on OpenCollective)
- CasinoHex Canada (Bronze sponsorship on OpenCollective)
- ej-technologies (kindly provided us with a license for their powerful Java profiler
JProfiler
.)
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.
Our Discord server has seen some upgrades and we gladly welcome our first community moderator, Conifer! In order to give back some of your love, we have introduced some special roles for our forum and the Discord server:
- @Supporter : Members that have supported us with donations.
- @Contributor : Members that have contributed to our open source code repositories
- @Early Bird : Members that have been part of our community since the Alpha days of LITIENGINE.
We try to assign these roles to the best of our knowledge, but if we forgot you - please don't hesitate to complain. :)
Apart from that, we've updated the sponsoring tiers in the LITIENGINE Open Collective, allowing you to support our work financially and with full transparency. We have also started a spreadshirt shop where you can buy all kinds of LITIENGINE related swag and promote the cause (feel free to suggest additional motives)!
As always, huge thanks to all contributors and fans! This is an exciting journey for us and we are grateful to share it with you.
- 5bce248 Fixed unsupported Javadoc tags
- ab5529a Fixed keyframe durations for automatically flipped animations in
CreatureAnimationControllers
- 1ca3997 Fixed flickering particle opacity when fading
- 9a5c829 Fixed ImageComponent image scaling
- 0d4cbec Fixed
URLAdapter
initialization inXmlUtilities
- 71aa62d Fixed
ImageLayer
rendering for unbound maps - eddb149 Added a collision box update right after unmarshalling
CollisionEntities
- #355 Fixed diagonal Entity movement speed
- f2bfbbb Fixed Text alignment for
GuiComponents
with text outlines - #365 Fixed threading issue with Swing tests
- 10673e2 Fixed vertical alignment for
GuiComponent
text with outlines - 63fb8cf Fixed issue where
CombatEntityListeners
would not fire hit and death events - #367 Improved precision of rotation angle calculations
- 21a7171 Fixed the first
Animation
frame being skipped - 4512029 Ensured that the first
Animation
in anAnimationController
is used as default - a29e62d Ensured that the
PhysicsEngine
is cleared when the game world is cleared - 94acb5b Fixed threading issue when drawing maps
- 07eec17 Fixed a long-standing shape rendering issue (#275)
- 1296cfa Enabled single-value ParticleParameter initialization
- 2840217 Implemented
SoundSource
entities. Added individual falloff ranges forSFXPlaybacks
- 973d78a Added individual volume modifiers for
SFXPlaybacks
- ec49e60 Added CopyConstructor for
Tiles
- #352 Added Tweening framework
- 3e604fc Enabled automatic font resizing when resizing
GuiComponents
- 9a5c829 Enabled setting rowHeight and columnWidth in
ImageComponentList
externally - c6fb37b Enabled automatically attaching / detaching
IEntityControllers
to the Game loop when adding / removing. - 57d0394 Added reflection helper method to recursively retrieve methods.
- 2a0e41d Added possibility to extend
MapObject
unmarshalling behaviour - b721dc9 Check inheritance by default when retrieving fields via reflection
- c9076fd Enabled getting gamepads by index
- 75a3ff0 Added method overload for modifying
Attribute
values - 5e0fe1d 2e042e7 Added event listeners for
Animation
keyframes - #357 Added Tests for Attribute, RangeAttribute and AttributeModifier
- fc42199 Added optional automatic line breaks to
GuiComponents
- 0f39631 Added Image scaling and alignment defaults to
ImageComponents
- bf8087f Added shortcuts to distinguish left/right mouse click events
- 2afebd4 Added
Material
support for setting values via reflection - a319301 Cache
AnimationController
instance onEntities
- 63fb8cf Added resurrection listener for
CombatEntities
- 853eefd Added time attribute to hit events
- 38d9238 Added fading and anti aliasing for
TextParticles
- bad4b34 Extended environment API to get entities by tag.
- 10298b0 Unified game shutdowns
- 7df8c11 Improved
GameMetrics
java version output
- 9775b9c Set Trigger collision box size implicitly
- 1ca3997 Removed distinction between particle color alpha and opacity
- 3b88928 Made
VolumeControl
public - cdaa903 and others: Enforce capitalization of the LITIENGINE brand.
- c9076fd Renamed gamepad index to id to better reflect its purpose
- #355 Merged the
InputLoop
into theGameLoop
. TheSoundEngine
will now also be updated by theGameLoop
. - 7a5a553 5a5b666 a36cce6 Made
MovementController
velocity and angle available publicly - 0da9f5a fde640a Centered
Ability
impact area - 649ceea Made retrieving flipped
Animations
fromAnimationControllers
available as a static method - 179f192 Pulled
GuiComponent
text anti aliasing out of theAppearance
- c68821f f4a2233 Changed tag serialization behaviour
- 63fb8cf Renamed instances of
removeChangedListener
toremoveListener
- 366ed6b Don't set custom
RenderType
for allParticle
instances. - 33d588b Made
Effect
target evaluations protected - c7c1deb Made
Ability
effects available publicly - #368 Removed the networking package
- c8288e5 Set moved events on
Creatures
to be fired implicitly
- 6ba6af3 269a495 Bumped Darklaf version
- #362 Added "clear" and "scroll to bottom" buttons to console view
- 66b4051 Fixed Mouse Wheel scrolling bug
- b6c5e58 Bumped JUnit version
- 912ecd2 Improved map id rendering
- a87fee9 Removed redundant lighting updates when setting control values
- 4e909ac Changed MapObject refresh behaviour for undoing / redoing operations
- cf79b6e c9146ed Adjusted threading behaviour for arrow key presses
- 10298b0 Made
GridRenderer
more robust when no camera is set. - 54b8163 Improved tag visualizations
- 09d7a0e Fixed issue where the wrong Tree nodes in
EntityList
would be focused - d3dfd67 Improved
GridRenderer
performance - 0905394 Ensured that the grid cache is cleared when deleting and importing maps
- 49708b4 Improved focus renderer
- 34b183f Ensured there is enough space for all components in the spritesheet import panel
- The LITIENGINE Open Collective now lets you support our work financially. A warm welcome to our first sponsors!
- 193bde3 Updated readme banner to be visible in both light and dark GitHub themes.
- 37ca653 Arrived in the year 2021
- 1d6a691 Bumped Gradle wrapper version
- ddc1caf (and others): Removed redundant modifiers from interfaces
- 0af1561 Added Java version to bug report template
This release marks the beginning of a new era for the LITIENGINE. We consider most of the API to be stable and we pretty much settled on the current API design. With the release of our new Website, the documentation and other information about the engine are easier to use and everything can be found in one place.
It's been a long journey but, finally, we're leaving the Alpha status and are looking forward to even more fruitful experiences with the LITIENGINE in the future. A big thank you to all members of this community. Without your feedback and contributions we wouldn't be here today. You're awesome!
- 00178dd Fixed NullPointerException when rendering Shapes
- 00178dd Fixed vertical position when rendering Text with Alignment.
- 2c55195 Fixed NullPointerException when setting opacity on an image.
- 7c46a6f Fixed issue with collision dimension <= 0
- 0deffc4 Zoom changed event is now fired after changing the zoom
- eb1ca1e Fixed issue with "stuttering"
PositionLockCamera
- afe8639 Fixed
EntityEmitters
to update their position correctly once the corresponding entity moves.
- 3455fa6 Make TileData constructor visibility being non public.
- 1c9642a Allow comma separated parameters for random methods.
- #139 Add API that supports generating maps from code
- #332 Improved
GeometricUtilities
- 14eb43c Extended
Game.random()
API with support for choosing a random string - 8d3f564 Extended
Environment
with the possibility to retrieve entities by a specifiedPredicate
- e756f53 Extended
SoundEffect
with the possibility to provide sounds by name - 6da1d94 Trigger entity moved event from the
EntityNavigator
- c09c1ca Extended the
TextRenderer
with several new method overloads - 714dd6e Extended
TilesetEntry
with support for collision info
- 7909f05 Adjusted the handling of the anim controller affine transform
- 30093d7 Renamed events to suit the naming conventions
- #336 Fixed inconsistent Entity Hierarchy by removing
MobileEntity
- bfa2d98 Make the local ID sequence unique globally (over all
Environments
)
- 06b8d0e Improved scrollbar granularity
- 24cd048 Added Spawnpoint pivot fields to the editor
- 3af2988 Fixed potential exception when removing custom properties
- #312 Added a Zoom Combobox
- a5436f3 Fixed capitalization on many UI strings
- b20fbdd Added support for custom properties for
MapArea
- 18a7735 Clear map list when opening another game project
- 160e563 Added right-click shortcut menu to the map list
Added Dark Theme and overhauled Light Theme #340
With this version, we've introduced theming support for the utiLITI editor with the DarkLaf library. The theme can be switch at runtime
With this version, we revamped the Emitter
UI in the utiLITI editor such that changes to the emitter are instantly applied. The different parameters have been categorized and the overall usability has been drastically improved.
In addition, we've also added the possibility to configure particle rotation for even more vivid visual effects.
See the related implementations on GitHub: #346 #298 #345
- Added PR templates
- Added issue templates