Skip to content

@steffen-wilke steffen-wilke released this Aug 16, 2020 · 11 commits to master since this release

Finally!

As of today, we end the four year-long LITIENGINE alpha, spanning a total of 17 feature-packed releases. Simultaneously, LITIENGINE hits its first beta release v0.5.0-beta, marking a magnificent milestone for us.

What once started as an overly ambitious hobby project of two naive brothers seeking to create their own video game, is now one of the most successful Java 2D game engines on the market - despite being in early access! Our hearts are filled with joy seeing how popular LITIENGINE has become and we want to thank you from the bottom of our heart.

To celebrate the prosperity of LITIENGINE and as a big thank you to our supporters, we have completely remade the LITIENGINE website from scratch. It is now a well-designed, streamlined experience that guides users to the most important points of interest more naturally. With everything designed to be maximally self-contained, we are also no longer hosting the documentation, JavaDocs, and Download page externally: The LITIENGINE website thus has become a purposeful and holistic hub for everything related to our favourite software.

We are convinced that LITIENGINE's user base and relevance will keep growing and there are some thrilling years ahead of us. If you're not already part of the LITIENGINE family, join our lovely community and explore the exciting features of our new website and LITIENGINE's first beta release.

Visit litiengine.com

Download LITIENGINE v0.5.0-beta

Read the Changelog

Assets 2

@steffen-wilke steffen-wilke released this Mar 29, 2020 · 194 commits to master since this release

Fixes

  • 0d269f4 Fixed importing map nested tile layers
  • #304 Excluded module-info.class from external lib from the LITIengine jar files
  • 204a153 Fixed bug when loading Resource bundles with Spritesheets missing the image format attribute.
  • 4be7ae1 Fixed issue with sprite sheets not being reloaded when replacing them at runtime
  • 1065757 Fixed image string serialization by returning a compatible image for the current GraphicsEnvironment
  • 019a410 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
  • 470b402 Streamlined the ListField constructors.
  • bd6faeb Added explicit listeners for the GamepadManager's events
  • 368669d Added a dedicated ResolutionChangedListener for the GameWindow
  • b3b5037 Add debug option to render the sprite bounds in addition to the Entity bounds
  • 3cc9187 make shadow offset configurable in the ShadowImageEffect
  • 5af6f4d Allow custom Creature implementations to override the parents controllers
  • #322 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
  • 5d8a575 Added pivot support to Spawnpoint to align spawning entities
  • 8ea0151 Load CustomEmitter resources from ResourceBundles
  • 8113566 Properly support resolution scaling at runtime

Added a unified Random API for the engine

4217403 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 API: Game.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

  • 56a123e Use java.nio.charset instead of constants strings for charsets
  • eef04d2 Consulted entity AI related namespaces under de.gurkenlabs.litiengine.entities.behavior
  • 9a78dc4 Unified some event names:
    • ICombatEntity.addHitListener -> ICombatEntity.onHit
    • ICombatEntity.addDeathListener -> ICombatEntity.onDeath

utiLITI

  • #314 #315 Added the possibility to export all sprite sheet information
  • #313 Added additional console feedback for common operations
  • #312 Placed status-bar directly under the map view
  • 319c32f Fixed potential exception when clearing color controls
  • 67aa299 Make components and font sizes aware of the configurable UI scale
  • #320 Fixed silent startup exception when last game file was empty
  • 7ca746f 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
  • 509d749 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

Contributors in this release

@Phlosioneer
@Gamebuster19901
@YannikSchoeberl
@hyler

Also, thanks to all the contributors to the LITIENGINE community in the forum and our discord! All your comments and thoughts help us to shape the engine towards a stable release.

Assets 5

@steffen-wilke steffen-wilke released this Feb 7, 2020 · 295 commits to master since this release

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.

Contributors in this release

@TheRamenChef
@Phlosioneer

Also, thanks to all the contributors to the LITIENGINE community in the forum and our discord! All your comments and thoughts help us to shape the engine towards a stable release.

Assets 5

@nightm4re94 nightm4re94 released this Jan 1, 2020 · 398 commits to master since this release

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.
    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(...)

  • #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.
    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 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

Acknowledgements

Contributors in this release

@CalvinMT
@TheRamenChef

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.
LITIengine Github stars powered by https://star-history.t9t.io/#gurkenlabs/litiengine
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

Assets 5

@steffen-wilke steffen-wilke released this Apr 25, 2019 · 664 commits to master since this release

This release comes with a ton of improvements for the utiLITI editor which have been implemented in preparation for LDJAM 44.

Fixes

  • #249 Fixed an issue that caused the terminating callbacks to be executed after the system was already terminated
  • 7ff4062 5e284be 83e7da3 Fixed rendering of StaticShadows
  • 4cba2a4 Fixed an issue with the SpeechBubble implementation

Features / Improvements

  • 91a81fb Improved the delay() of the loop tick by accounting for the delay error that is inevitably caused by the fact that Thread.sleep uses long instead of double values
  • 012b75d Minor version numbers of Tiled map format releases are no longer considered when checking for version support because they are only used for bugfix releases and have no effect on the .tmx format.
  • b1ca5de Implemented possibility to retrieve a layer by name and ID
  • c7af38a Added methods for text and shape rendering with antialiasing

Changes

#243 TMX Overhaul, Part 2

  • All resources except spritesheets are now cached using URLs as keys (they still work with strings)
  • Resources can now be loaded asynchronously
  • Most entities loaded from map objects are now rendered as part of their respective layers
  • Tilesets that use individual images for each tile are now supported
  • Tile types are now supported
  • File custom properties are now supported, though only tentatively
  • Light sources now use an enum for their type
  • Various refinements for several features

Other changes

  • 4fe0e81 Rename collisionboxHeightFactor and collisionboxWidthFactor MapObjectProperties to collisionboxHeight and collisionboxWidth. This might require you to adjust maps created with previous versions of the engine.
  • 4fe0e81 Entities that have a duplicate or invalid ID now get a local map ID
  • 21d2bbc Moved some time related methods from the GameLoop class to the GameTime class (use Game.time()...)
    • 91a81fb Game.loop().getDeltaTime(long tick) has been moved and is now Game.time().since(long tick)
    • 91a81fb Game.loop().execute(...) has been renamed to Game.loop().perform(...) to be consistent with the EntityAction terminology
    • 91a81fb The input loop is no longer a GameLoop and instead "just" a plain UpdateLoop. -> There should only be one GameLoop (that provides enhanced functionality like TimedActions)
  • 4a37838 Renamed the Map class to TmxMap to avoid collisions with java.util.Map
  • d2cb9ba Cleaned up "render entity with layer" feature

utiLITI

Fixes

  • Fixed a potential exception in the asset tree after closing
  • #240 Fixed issue with cached states of imported maps
  • #246 Fixed issue with the cursor that stopped moving when a menu was open
  • #247 Fixed issue that caused the paste command not to be enabled.
  • #253 Fixed custom panel table cell editor issue.
  • 369056e Fixed issue that caused inconsistent move edit mode
  • 4890d15 Fixed an issue that caused the transform controls not to be rendered properly upon undoing a move command.
  • b673262 Fixed broken map snapshot functionality.

a7d981d Improved utiLITI menus

  • #246 Replaced the AWT menu with a Swing menu.
  • Added a close button
  • Added clear history button
  • Disabled menus and entries that are not available
  • Cleared the entity tree upon closing
  • Reorganized some menu items
  • 628c9f6 Add menu that allows moving entities to other layers.
  • ac84517 Added an "edit" menu.
  • 7818047 Added menu item to center the camera on the current focus
  • 7818047 Added shortcuts to all "Add-Entity" commands. (CRTL-1 -CTRL-9)
  • 4890d15 Removed the toolbar
    The buttons on the toolbar are not really required and can be accessed elsewhere in a more convenient way.

Other Changes

  • Some huge internal code refactorings and improvements
  • 4890d15 Reworked the "MOVE" edit-mode which can now be triggered by clicking the mouse button within the bound of a map object instead of having to press CTRL or manually activate it.
  • 628c9f6 Added option to toggle rendering of entity names.
  • b94433a Improved displaying of severe log messages
  • 34582a8 Added possibility to focus the map center with the camera.
  • 628c9f6 The entity's layer is now displayed in the UI
  • 1d9dc34 Implemented "selectAll" and "deselect" commands
  • 4266a76 Implemented possibility to revert all changes on a project
  • f9370bc Update mapobject list when ids are reassigned
  • ad265eb Implemented the possibility to set the RenderType of an entity

Misc

  • The source code of the LITIengine is now citable for academic use via zenodo:

DOI

Assets 5

@steffen-wilke steffen-wilke released this Mar 31, 2019 · 810 commits to master since this release

Fixes

  • e5da360 Fixed an issue that caused only fields with the same name as the TMX property to be loaded
  • 9137bdf Fixed text rendering realative to the environment
  • #162 Fixed issues with the jaxb dependencies for Java versions >= 9
  • 9e20b20 Fixed an issue with mouse events not being forwarded after the window was resized

Features / Improvements

  • aea8877 Rendering the GameMetrics has been improved and additional information has been added.
  • 9dcd82c Implemented support for TextureAtlas created with the TexturePacker tool
  • #190 Improved error message for Spritesheets.
  • #211 Introduce the concept of Entity Actions
  • #103 Cleaned up event handling of the AnimationController
  • 9d2ab20 Implemented support for web resources
  • #218 Implemented support for SoundResources
  • 8b48d72 The animation controller is now updated when the sprite changes
  • fc6b586 Implemented support for rendering layers with their respective opacity

Changes

  • 68aae15 Overhaul on the Material implementation
  • 5de3620 Internal overhaul of the ScreenManager
    • Extracted the GameWindow specific logic to the respective class (see Game.window())
  • #171 Resources are now being accessed with URI-based filepaths
  • 806309b Some improvements on class names
    • Renamed the static class ImageProcessing to Imaging
    • Renamed the static class SerializationHelper to Codec
    • Moved encoding/decoding of images to the Codec class
  • 17ca6fa Moved the InputLoop to the Game class Input.loop() -> Game.inputLoop()
  • #215 113b28f Overhaul on the GuiComponent framework
  • #228 Adjusted the default resolution to be based on the computer's native resolution
  • #232 Removed the IEntityProvider interface
  • a5e634b Replaced the isObstacle flag by the usage of CollisionType.
  • 2e033ea Removed various "adapter" classes in favor of default methods
  • TMX Map Improvements
    • #150 Implemented support for .tx format for blueprints (tmx templates).
    • #150 74f45c1 Added support for additional MapObject properties
    • #3 The order of image and tile layers will now be serialized in the original order
    • #150 3cd351c Implemented support for GroupLayers
    • #232 Rewrite the map orientations
    • #230 Handle missing version tag more gracefully
  • SoundEngine API Overhaul
    • 03f3c99 The Sound is now always the first argument for all playback methods
    • #236 Reworked the SoundPlayback implementation

utiLITI

  • Various usability and stability improvements
    • 1c0bda4 General rework of the layouting process
    • 83c9176 OpenSans as default font.
    • 2e207c0 Removed custom fonts from the editor
  • #91 e80d4ae Implemented 'Movement' and 'Combat' panel for entities
  • b9cce67 Allow rendering of MapObjects without type
  • #90 Animations are now being previewed in the Spritesheet dialog
  • #166 Enhanced the UndoManager
  • 4bec9b3 Fixed issue where the editor size wasn't properly restored
  • #216 Fixed an issue when the system doesn't support tray icons
  • #235 Fixed an issue with copy/pasing Creatures
  • 5d697f6 Fix potential NullReference when deleting all maps from the editor
  • 20dbcc2 The Entity list is now sorted by mapIDs.

Misc

  • Improved Javadoc and external documentation
  • The max. supported TMX format is now 1.2.2.
  • acbcd49 Removed the "Hello World" example projects from the repository
  • Updated Gradle wrapper to 5.3.1
Assets 5
Mar 31, 2019
Bumb version to v0.4.16-alpha.

@steffen-wilke steffen-wilke released this Jan 4, 2019 · 1036 commits to master since this release

Fixes

  • Fixed the tile flipping implementation
  • #176 Fixed an issue with the Trigger's internal logic
  • Fixed rendering order of the ImageComponent
  • Fixed an issue that caused the game not to terminate all its threads.

Features / Improvements

  • Implemented the possibility to register event listeners for the game initialization.
  • Introduced the new GameWindow that is used to access window specific functionality via Game.window()
  • Improved a lot of internal data structures
  • Improved the overall performance of the GameLoop
  • #188 #193 Improved the thread handling or the SoundPlayback
  • #196 Introduced the new GameWorld implementation (accessed via Game.world())
  • #196 Added a reference from the Entity to its Environment
  • Added the Spawnpoint.spawn method
  • Disabled turnOnMove() when applying Forces
  • 72c9a2d Implemented the possiblity to provide a global or map specific gravity force
  • The camera is now centered on the map by default
  • Added a platformer specific movement controller PlatformingMovementController
  • #205 Fixed collision with the boundaries of the map
  • Made it optional to exit the game when an exception occurs: Game.config().client().exitOnError()
  • Enhanced the PhysicsEngine with additional method overloads

Changes

THIS RELEASE CONTAINS A LOT OF CHANGES TO CORE APIS OF THE ENGINE. THESE CHANGES MOSTLY DON'T AFFECT THE FUNCTIONALITY AND ARE MAINLY CAUSED DUE TO RESTRUCTURING OF THE ENGINE. PLEASE SEE THE ATTACHED PULL REQUESTS FOR DETAILLED INFORMATION ON HOW TO MIGRATE YOUR EXISTING GAME TO THE NEW VERSION OF THE ENGINE.

  • #191 Reworked the Resources API
    • Replace the ImageCache
    • Simlify the API (less to type and everything regarding resources in one place)
  • #189 Dropped subfolder for localization files
  • #194 Reworked the TMX implementation
  • #198 Reworked the Game API
  • #202 Introduced the GameWorld API and moved some methods that were previously on the Game class
  • The AccelerationMovementController has been removed and its functionality is now part of the basic MovementController

utiLITI

  • Fixed and handled a few potential exception in the editor

Misc

  • Since we don't expect any major changes to the API in upcoming releases anymore, we've started to document everything via the LITIengine GitBooks Page
  • We've started the new sample game project Gurk Nukem to get you started with the engine
  • Add a ton of Javadoc
  • Add a lot more unit tests
  • Update to Gradle 4.9 -> 5.0
  • Update steamworks4j 1.7.0 -> 1.8.0
  • Update mockito 2.21.0 -> 2.23.4
  • Update junit 5.2.0 -> 5.3.2
Assets 5

@steffen-wilke steffen-wilke released this Nov 17, 2018 · 1265 commits to master since this release

Fixes

  • In general: Fixed a lot of exceptions and made the engine more stable.
  • Fix GeometricUtilities.translateShape() (always returned the old Shape)

Features / Improvements

  • #157 Added new constructor overloads for the ImageComponent
  • #152 Streamlined the RenderingHints for Text
  • Added some convenience methods to improve the API of Environment and IMap
  • Added theEntityDebugRenderedListener that allows to simply attach custom debug rendering for entities
  • Added the NavigationListener that provides the functionality to access some events of the IEntityNavigator
  • Made the EntityNavigator implementation more flexible by allowing to specify the acceptable error
  • Made the Environment.getNextMapId() method actually check for present IDs instead of initializing it when loading the environment.
  • #167 Implemented support for hexagonal maps
  • Improved logging and error messages for Spritesheets
  • #163 Added the possiblity to loop Sounds
  • Allowed Spritesheets (and therefore Tilesets!) with margins and spacing between sprites
  • #150 Implement support for infinite .tmx maps
  • Various improvements to the SoundPlayback implementation

Changes

  • #162 #184 Fixed JAXB dependencies for Java versions other than Oracle JRE 8 (particularly Java 9, 10 or OpenJDK). JAXB is a custom XML implementation in the javax namespace that is not part of the default Java language specification. We now reference external libraries via Gradle instead.
  • Improved the naming of the ICustomPropertyProvider methods
  • #89 Cleaned up the CombatAttributes class
    • Removed non-general combat attributes like shield, attack speed, health-regen, vision, level
    • Removed leveling logic
    • Move velocity from the CombatAttributes to IMobileEntity
    • Move hitPoints from the CombatAttributes to ICombatEntity
  • Rename ArrayUtilities.getCommaSeparatedString to ArrayUtilities.join and add overloads that allow specifying a custom separator.

utiLITI

  • Fixed focus loss when pressing CTRL in utiLITI.
  • Added possibility in utiLITI to reassign all MapObject IDs consecutively
  • Made the editor grid configurable (thickness, color, ...)
  • Added Help menu
  • Editor windows will now be centered on screen

Misc

  • Removed the code climate badge.
  • Added a /docs folder that contains the LITIengine Documentation
    • Any help in creating this documentation is very welcome
  • Added Code of Conduct
  • Added Contribution Guidelines

We are also pround to announce that @TheRamenChef is now an official collaborator of this repository (#164).

Assets 5

@steffen-wilke steffen-wilke released this Aug 6, 2018 · 1391 commits to master since this release

Fixes

  • #133 Fixed the DropdownListField rendering multiple times
  • Fixed a bug that was causing duplicate map objects
  • Fixed an issue with width/height <= 0 when scaling images.

Features / Improvements

  • Added a method that automatically adds linebreaks when rendering text
  • Streamline the IEnvironment API by adding lots of overload methods
    • Implemented possibility to get a list of entities from the environment by providing an array of mapIDs.
  • #124 Implemented support for rendering the backgroundcolor of maps
  • Added default values for MapObjectLoader.loadCollisionProperties
  • Added CustomPropertyProvider.hasCustomProperty() method
  • Named the Threads for better debugging
  • Added Exit codes
  • Improved crash report: It will produce a crash.txt with the exact exception that caused the issue
  • #151 Added Support for tile custom properties
  • #87 Introduced an option for antialiased/interpolated rendering
  • Improved the API for adding a custom configuration group.
  • #66 Implemented MapObjectSerializer -> Possibility to export IEntity as IMapObject
  • #105 Implemented possibility to use blueprints on the environment
  • Added basic events for loading/removing entities.
    • This can either be overwritten by custom implementations or one can register an EntityListener.
  • Fixed a ton of typos
  • Added a ton of unit tests
  • Lots and lots of internal improvements

Changes

  • By default, Controller Input is now disabled because it requires native libraries.
  • Controller support for x86 was dropped due to the jinput update
  • #134 The TmxMapLoader is now a static class
  • Changed the implementation for fullscreen from setExtendedState to GraphicsDevice.setFullscreenWindow
  • Made Game.terminate() private -> The application should be closed from code using System.exit(0)
  • #144 Remove the loading of system fonts by the FontLoader
    • The FontLoader is intended to load custom fonts from the game resources. If one wants to use a system font, he can just initialize the Font directly and doesn't have to register the font on the environment.
  • Reorganized namespaces:
    • Introduced new base namespace for all emitter related stuff de.gurkenlabs.litiengine.graphics.emitters
    • Moved some entity implementations from different namespaces to de.gurkenlabs.litiengine.entities.
  • The FontLoader class has been removed. Fonts are now loaded with the static Resources class
  • The game now crashes if an unexpected exception occurs
  • Detect an unsupported Tiled version and fail-fast (currently supported: 1.1.5)
  • Replace the IKeyObserver interface by the AWT KeyListener.
  • Remove a ton of unnecessary interfaces
  • #155 Clean up the RenderEngine by removing static methods
    • Implemented static ImageRenderer
    • Implemented static TextRenderer
    • Implemented static ShapeRenderer

utiLITI

  • #86 Made the editor remember the visibility of the layers
  • #95 Provided additional methods for adding entities
  • #81 Provided a default configuration for the utiliti editor.
  • #100 Implemented a deselect functionality when in multi-select-mode
  • #108 Made light focus offset configurable in the editor
  • #111 Prevent selection of all mapObjectLayers when updating the layer list
  • Added Layer control panel for Adding / Deleting / Recoloring / Duplicating / Lifting / Lowering a MapObjectLayer and one for hiding all non-selected layers.
  • Fixed ID assignment when copying objects in the editor.
  • Fixed issue with lights not to being updated when snapping

Misc

  • Added "Hello World" example projects
  • Updated Gradle to 4.9
  • Updated jinput 2.0.7 to 2.0.9
  • Updated junit to 5.2.+
  • Updated mockito to 2.21.+
  • Updated sonarqube plugin to 2.6.2
  • Updated launch4j to 2.4.4

Shout out to @TheRamenChef for his contribution to this release.

Assets 5
You can’t perform that action at this time.