Skip to content

Releases: gurkenlabs/litiengine

"LDJAM 44" Release v0.4.17-alpha

25 Apr 20:18
Compare
Choose a tag to compare

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

"Spring" Release v0.4.16.1-alpha

31 Mar 15:49
a87013f
Compare
Choose a tag to compare

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

"Nukem"-Release v0.4.15-alpha

04 Jan 00:10
Compare
Choose a tag to compare

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

"Bye Santa!" Release v0.4.14-alpha

17 Nov 17:57
2f70c28
Compare
Choose a tag to compare

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

"LDJAM 42" Release v0.4.13-alpha

06 Aug 20:28
Compare
Choose a tag to compare

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.

The "Ramen" Release v0.4.12-alpha

05 Jun 19:21
Compare
Choose a tag to compare

Fixes

  • Fixed an issue that caused the screenlocation of the ScreenManager not to be updated
  • Fixed an issue in the AStarGrid implementation.
  • Fixed an issue that causes AStarNode costs not to be reset after a path finding operation was executed.
  • Fixed a potential ArgumentNullException in the RenderComponent that could occur when switching to other applications
  • Fixed a bug with the RangeAttribute that caused the max modifier not to be applied to the max value.
  • Fixed an issue with SpeechBubbles not being removed from the active list anymore.
  • Fixed an issue that caused the IEntity bounding box not be updated when x/y or location were set.
  • Fixed an issue that caused interrupted Gamepad hotplug threads not to be stopped properly.
  • Fixed an issue with Emitters being rendered while not in the viewport
  • #116 Adjusted tileset loading to work on Unix/Linux computers
  • Fixed an issue with the Sound dataLine being opened while already opened
  • #123 Fixed an issue that caused wavy rendering when clamping to map

Features / Improvements

  • Squeezed out a few more frames by improving the caching mechanisms for sprites.
  • Removed the parallel MapLayer rendering because it produced more overhead than it saved rendering time.
  • Affected entities of Abilities are now always sorted independent of whether multi-target is enabled.
  • Tiles now only evaluate their flipped state once when the constructor is called.
  • Slightly improved the performance of the RenderComponent.
  • Improved the performance of the UpdateLoop and RenderLoop
    • The UpdateLoop is no longer using a stream to iterate all updatables.
  • Added the possiblity to render the AstarGrid and the Path that is found by the algorithm.
  • Improved fallback path finding when the target AStarNode is not walkable
  • The AStarGrid.assignPenalty method is now protected to be able to overwrite it.
  • Extended the IMobileEntity implementation to calculate the velocity for the current tick.
  • Implemented TimeUtilities.nanoToMs method to convert nano seconds to ms.
  • Implemented Gamepad.onReleased event.
  • Make use of Gamepad default deadzones in the GamepadEntityController.
  • Extended the Environment with the possiblity to retrieve an IEntity of a particular type by its id/name .
  • Implemented the possibility to check whether a resource string is present.
  • Implemented the possibility to check whether a speechbubble is currently active for an entity.
  • Implemented methods on the RenderEngine that allow to scale an image via AffineTransform.
  • Extended the IAnimationController with the possibility to provide an AffineTransform.
  • Implemented the possibility to override MapObject loading functionality
    • Previously, a lot of logic was implemented internally within the MapObjectLoaders, so child implementations would have to re-implement some basic stuff on their own.
      With this change, every MapObjectLoader has a createXXX method that can be simply overwritten in case one just wants to adjust the created instance of provide a custom child implementation.
  • Implement the possibility to scale Props to the size of the IEntity.
  • Extended the ICombatEntity with a method that allows to check whether it was hit in a specified time span.
  • Add new Valign and Align values.
  • #74 Implemented the possibility to set the origin Align and Valign for Emitters.
  • Implemented the possibility to provide the CollisionType for raycasts.
  • Clean up Animation implementation to no longer use a Spritesheet that was being unloaded (either removed or updated).
    • Previously the Animation class would still have a reference to the old deprecated Spritesheet.
    • Spritesheets now have a isLoaded() flag that indicates whether they are (still) loaded in the current game instance.
  • Implemented a method that allows to check whether a specific image extension is supported by the engine. (ImageFormat.isSupported).
  • #75 Implemented the possibility to control whether particles fade.
    • Previously this was active for normal particles and it wasn't possible to disable the behavior.
      With this change, it is possible to define whether particles should fade out over the course of their TTL.
      This also works for sprite particles now.
  • Improved the Particle implementation by some collision related options.
    • With this change the particles can support continuousCollision if required. Note that this is very performance crucial and should be only used when absolutely necessary.
  • Extended SoundPlayback with method to check whether it is currently playing.
  • Improved performance for raycast collision checks.
  • #113 Implemented possibility to set a custom gain for a SoundPlayback.
  • The SoundEngine is now using the Input.getLoop() to update the sounds.
    • This was necessary to support adjusting sounds while the main GameLoop is paused.
  • Extended the IEnvironment with the possibility to search IEntiteis by multiple Tags.
  • Extended the IScreenManager with the possibility to get its center point.
  • Extended IMouse with method to set location by two double values.
  • Extended the Emitter implementation with the possiblity to specify a graphics quality that is required at minimum to render an Emitter.
  • #119 The OrthogonalMapRenderer is no longer rendering invisible MapLayers
  • Expose the setBackground(Color) method for the RenderComponent.
  • Custom MapObject properties are now serialized in alphabetical order.
  • The order of a Layer is now saved as custom property instead of an unsupported XML-attribute.
  • Implemented a Tag annotation that can be used to provide default tags for a custom IEntity implementation
  • Registering a MapObjectLoader no longer requires a type
    • The MapObjectType is already provided by the IMapObjectLoader.getMapObjectType method and therefore all MapObjectLoader implementations already have this information which makes it redundant to specify in separately when registering a new MapObjectLoader.
  • Implemented possibility to provide an AffineTransform for the CursorImage

Changes

  • Added a new namespace de.gurkenlabs.litiengine.pathfinding that contains all path finding implementations
    • Added a new sub-namespace for the AStar implementation de.gurkenlabs.litiengine.pathfinding.astar
    • Previously this was all located under de.gurkenlabs.litiengine.physics
  • Lowered the DEFAULT_MAX_DISTANCE for sounds to be heared from 250px to 150px.
  • An entity SoundPlayback now evaluates its position by the center of the entity.
  • Remove the Sound.find method and rename the Sound.load method to Sound.get for
    • For sounds, its not necessary to differentiate between the two because actually the load method just reused the find method as default and only loaded something if the sound wasn't already present.
  • Moved the Direction enum to the more general namespace de.gurkenlabs.litiengine.
  • Rename the Particle.getLocation method to Particle.getRenderLocation.
  • Setting the location on a GuiComponent now also updates its children
  • Pulled out all Font related attributes of the Appearance
    • Font information and Text alignment on a GuiComponent, for example, are strongly dependent on each other, making it necessary to have them in one place.
      Introduce a GuiProperty "defaultFont" to facilitate Font setup.

Major overhaul on the AmbientLight and Shadow Rendering

We now basically create an additional dynamically created tile layer and render the individual tiles.
When a light/shadow is added/removed/moved or changed only the affected tiles are updated on the dynamic layer.

Previously an image of the size of the entire map had to be redrawn which resulted in a major performance issue and made actually dynamic lighting almost impossible.

The Game is now processing command line arguments when being initialized

The Game.init(String...args) now optionally takes in command line arguments from the applications main method.
There are two default command line arguments at the moment that are being processed:

  • -release : If set, this argument disables all debugging functionality. This is particularly useful for deployment
  • -nogui: If set, this argument will not spawn a JFrame. This can be usesful for e.g. a gameserver or unit tests

Major refactoring on the whole event management

With the previous implementation, it wasn't possible to remove listeners from the event handling because we only provided a lambda implementation. With this change, large parts of the engine were refactored to provide proper add/remove methods.

Also, this changed reuses EventListener class as base class for all custom engine listeners.
We've provided either adapter implementations or more fine granular listeners that only provide certain callbacks to allow the user of the API to decide what he actually wants to listen to.

There are still some events in the engine that need to be refactored in the future.

#118 Change MapObject position and size from int to float.

Add a custom XmlAdapter that makes sure that the float values are serialized like integers (without decimal digits) when they are technically integers.
This was necessary to keep the format consistent with the tiled map format.

#125 Overhaul of the GameInfo

This change takes care of the inconsistencies of the GameInfo class.
It not only provided information about the game but also the defaultRenderScale and even some unused fields.

We've also extended the GameInfo with more detailed information about the game (e.g. publisher or website) and additionally provided the possibility to add custom properties for even more project specific information.

#129 Overhaul on the EntityCont...

Read more

"Working on the LEPUS" Release v0.4.11-alpha

13 Mar 20:49
Compare
Choose a tag to compare

Fixes

  • Fixed an issue with the movement delta not being calculated properly.
  • Fixed an issue with the SpeechBubble flickering.
  • Fixed an issue with the cache not firing the clear event.

Features / Improvements

  • Provided a static method to evaluate the default sprite name for a custom Creature implementation.
  • Implemented a reflection based logic that allows registering custom Creature implementation without having to implement a custom MapObjectLoader.
  • It is now possible to provide multiple spritePrefixes for a class.
  • Provided a method that gets a random element from a collection.
  • Added missing getter for ground and overlay renderables.
  • Improve toString for Creature and Prop to display the spritePrefix/spritesheetName.
  • The PropMapObjectLoader now also supports to register custom prop implementations.
  • Implemented a mechanism that allows to annotate custom mapobject properties on a custom entity implementation.
    • It is possible to define multiple properties.
    • The property key must now be equal to the memberName.
  • Tilesets that are located in subfolders are now considered.
  • Implemented new methods that help to combine paths, respecting windows and linux path separators.
  • The Trigger implementation now exposes all the customProperties of its MapObject.
  • Implemented the possibility to load a simple list of string from a game resource file.
  • Extended the AnimationInfo annotation by allowing to specify custom death sprite names.
  • Extended the CreatureAnimationController to support custom death animations.
  • Implemented a functionality that flips all sprites of a Spritesheet vertically.
  • Added method that allows getting all map Layers, including overlays, from the OrthogonalMapRenderer.
  • Implemented a debug option that tracks details about the duration of the different rendering steps.

Changes

  • Breaking change: Change the file extension for game resource files from .env to .litidata (No automatic backward compatibility).
  • Renamed getEntitiesByType to getByType similar to the getByTag method.
  • Added missing Environment events for unloading and clear action.
  • The currently initializing Environment is now passed to the MapObjectLoaders.
  • Removed Decormob from the engine.
  • Extracted a ton of reflection logic to a separate ReflectionUtilities class.
  • The absolut path for MapImages of Tilesets are now set relative to the tileset
  • Removed rendering/rendered callbacks from the AnimationControllerbecause they caused major performance leaks and didn't work properly.
  • Renamed Entity.getDimensionCenter() to Entity.getCenter()`.
  • Replaced some unnecessary MessageFormats because they're not very fast.
  • Cached the graphicsConfig to improve performance.

utiLITI

  • Fixed snapping behavior when dragging multiple mapobjects.
  • Fixed issue that caused sprite files to be added multiple times upon import.
  • Fixed issue with the selection getting lost when pasting elements.
  • Fixed issue with the selection not being cleared properly.
  • #104 Fixed an issue that caused the map import not to work properly
    • #96 All mapobjects are now snapped in a way that they keep their distance to the other selected objects, i.e. relative to the top-most, left-most x and y coordinates.
  • #96 Implemented the possibility to move all selected map objects with the keyboard.
  • Implemented an import for non-embedded tilesets.
  • Gave selection outlines a pulsating look for better identification during multi-selection.
  • Gamefiles are no longer compressed by default.

"Ready for the LEPUS" Release v0.4.10-alpha

27 Feb 23:34
Compare
Choose a tag to compare

Fixes

  • Fixed a potential null reference exception in the Particle implementation.
  • Fixed an issue with the EntityAnimationController overwriting an animation from the CreatureAnimationController
    • Animation rules now dynamically evaluate the animation name instead of providing a static string.

Features / Improvements

  • Improved performance of the AmbientLight implementation.
  • The MapComponent is now only reloading the mapobject while dragging, in case it has actually been moved.
  • #80 Implement the possibility to add and remove tags to map objects.
    • Rewrote the MapObjectLoaders to properly load the tags to the Entity
    • Extended IEnvironment with the possibility to get strongly typed entities by a tag.
  • Made CustomPropertyProvider implementation thread safe
  • Improved the performance of the GeometricUtilities.shapeIntersects test.
  • Added method to get x and y coordinates directly from the IEntity.
  • Extended IEntity with methods to directly set x and y coordinates.
  • Removed unnecessary crop out of lights from static shadows (it actually never worked that way).
  • Improved the performance of the UpdateLoop by using a concurrent HashSet instead of a CopyOnWriteArrayList.
  • Improved the Environment performance by using a set from a ConcurrentHashMap instead of a CopyOnWriteArrayList.
  • Extended the AnimationController to allow setting the default animation.
  • Add missing setters to ICollisionEntity and ICombatEntity.
  • Improve MapObjectLoaders to reuse a base implementation for setting collision properties.
  • Extended the IImageEffect interface with a priority that determines in which order effects get applied.
  • Refined the entity rendering process to take the actual sprite size into account -> image effects might resize the sprite.
  • Implemented the possibility to remove image effects from an AnimationController.
  • Improved the borderAlpha image effect implementation by actually only returning the border.
  • Provided a helper method in the ArrayUtilities that checks whether an array of Strings contains a specific argument.
  • Added a version to the GameFile XML

Changes

  • Entities are no longer adding themselves to the environment.
  • Removed deprecated IEnvironment.getTriggers method.
  • Relocated the StaticShadow class to the graphics namespace
  • Removed WeatherType from the engine.
  • Extracted the shadow area creation from the StaticShadowLaye to the StaticShadow class.
  • Renamed IMovableEntity to IMobileEntity
  • Replaced the IMobileCombatEntity interface by the Creature class
  • Added a creature collection to the IEnvironment and added a new MapObjectType.
  • Updated the CreatureAnimationController to not use the entity name as sprite prefix.
    • Major refactoring and clean up on the way, the CreatureAnimationController works: It is now possible to define a spritePrefix for a creature which will be used to determine the spritesheets for the animation controller.
    • Implemented the possibility to provide the sprite prefix for creatures as Annotation.
  • Removed the DecorMobAnimationController because it basically just did the same thing as the CreatureAnimationController.
  • Moved configuration and "core" stuff to the engine namespace.
  • Moved state machine implementation to the engine namespace.
  • Moved de.gurkenlabs.util namespace to de.gurkenlabs.litiengine.util
  • Changed the Game.DEBUG flag: For distribution, it is recommended to call Game.allowDebug(false) now, which will disable debugging functionality.

utiLITI

  • Fixed an issue that causes the UndoManager to not work properly with shortcuts.
  • Fixed a few issues that occurred when subsequently loading different game files.
  • Fixed issue with trigger targets/activators being displayed multiple times.
  • Fixed an issue that caused only the first selected sprite sheet to be imported
  • The MapComponent is now only reloading the mapobject while dragging, in case it has actually been moved.
  • Improved editor performance for dragging mapobjects and especially lights.
  • Unsaved maps are now visualized in the list.
  • #80 Implemented auto-completion for the tag input.
    • Added rendering for tags to the editor MapComponent.
    • Improved the new tag UI by hover and focus effects.
  • Improved emitter UI and added the possibility to add emitters from emitter assets.
  • Improved the performance of the PropPanel
  • #82 Wrapped moving of objects with the keyboard by BeginUpdate/EndUpdate
  • Improved the process of updating the maps list.
  • Majorly improved the loading performance for game files
  • Improved the performance of JCheckBoxList by reusing the GUI components.
  • Made the MapComponent reuse environment instances.
  • Added a cache for layer color indicator.
  • #85 Swapping game files now provides a save prompt
  • Added support for adding creatures in the editor
  • Made use of the LabelListCellRenderer for the DecorMobPanel.
  • Once again: improved the icons of the editor.
  • Added an icons class to unify access to icons.

Misc

"Prepare for the LEPUS" Release v0.4.9-alpha

13 Feb 00:02
Compare
Choose a tag to compare

Fixes

  • Fixed issue with the SoundPlayback not being properly closed
  • Fixed the hover sound event of a GuiComponent to not be hooked up every time the component is prepared
  • The ScreenManager is now updating the size when the render component gets resized
  • The PropAnimationController now properly passes in the keyframe durations for a prop
  • Fixed a possible null reference exception in the TextParticle

Features / Improvements

  • Implemented methods that allow getting strongly typed custom properties from ICustomPropertyProvider
    • Provide methods to directly get enum and color values from ICustomPropertyProvider
  • Extended and improved IEnvironment interface
    • Implemented an event for when an entity gets removed from the environment
    • Extended the IEnvironment with methods to easily access props.
    • Entities with RenderType.NONE are now also contained by the environment
    • Extended the environment with getters for emitters.
  • #47 Implemented support for external .tsx tilesets.
  • Provided a default toString for entities
  • Extended IMap to allow retrieving a map object by id.
  • Added a size() method to the ImageCache.
  • The SoundSource implementation is now using a cached thread pool to handle the sound playbacks instead of spawning a new thread for every single sound playback
  • Improved performance of MouseEvent handling: The ScreenManager now saves its location on screen because evaluating this every time is actually fairly resource consuming
  • Improved performance of rendering Particles: No need to create new Point2D instances
  • Extended the mouse to provide direct access to the current tile.
  • Implemented an ImageFormat enum and made the engine independent of .png
  • Extended the ImageCache with a clearAll method.
  • #45 Implemented the possibility to block lights with a collision box.
  • Extended the CustomPropertyProvider to allow specifying default values for retrieving string properties
  • #61 Implemented possibility to rotate and flip prop spritesheetName
  • #49 Replace GameLoop that was used for supporting controller hot-plug by a thread
  • #40 Implemented support to register message actions on an Entity
  • #43 Unified update loop implementations
  • #46 Extended Trigger implementation by an internal cooldown.
  • Introduced a new graphics option to control whether the frames should be reduced when the game window has lost focus
  • Extended the Resources implementation to support args for MessageFormat
  • Extracted static shadow logic from the environment
  • Improved the general process of creating and loading a game project
  • #44 Implemented callbacks for SoundPlayback
  • Implemented the possibility to cancel/pause and resume the SoundPlayback
  • Improved the disposing of the SoundEngine

Changes

  • Refactored the SoundSource implementation to implement Runnable itself instead of having the PlayRunnable implementation
  • The sprites.info SpriteSheet file is no longer the default way to manage sprite resources
  • #33 Refactored MapArea and StaticShadow to inherit from Entity
  • Renamed MapObjectType.LANE to MapObjectType.PATH because this is a more general term for it
  • #55 Removed support for MapObjectType.CUSTOM and replace it by MapObjectType.AREA
  • Major overhaul on the resource management : It is no longer necessary to have a sprites.info file; It is still possible though to import sprites from such a file.
    Spritesheets can now just be imported to the editor and will be serialized in the game file. The spritesheet files are no longer kept in the game file. You need to re-import the file in case, you've been using it
  • MapObjectLoaders now provide a collection of entities instead of just one IEntity object.
  • #54 Moved RenderEngine.getImage to Resources.getImage
  • #18 Removed unnecessary noise from configuration file
  • Cleaned up static shadow implementation
    • It is now possible to set the offset for a static shadow
    • It is now possible to set the color for static shadows on the map
  • Unified MapObjectProperty naming and clean up unused constants
  • Reused JAXB class contexts because they're performance crucial
  • Removed unused and meanwhile deprecated GameDirectories.
  • Removed the concept of IVision from the engine because the implementation is very specific for certain types of games (like rts/moba).
    • Replaced the logic on the RenderEngine by the possibility to provide a render clip for the rendering process
  • Cleaned up IRenderEngine interface
    • All methods that depend on the current camera (render the respective object relative to the viewport) are now provided directly on the IRenderEngine interface instead of being static methods on the RenderEngine class.This way, it is easier to determine which methods take the camera into account internally and which don't.

utiLITI

  • Updated the editor project to gradle
  • Added split panels to allow individual positioning of panels
    • All splitter positions are now saved in the configuration file
  • The editor now only synchronizes maps that were actually modified
  • Replaced System.out calls by logger calls
  • Implemented an entity tree
  • Implemented an entity search box that allows to search by id/name
  • Extended the editor by a console.
  • Extended the editor with a view that displays the assets of a project
  • Extended the editor with a dialog that allows to edit emitters
  • Extended the editor with a dialog to edit a SpriteSheet
  • Reorganized the namespaces of the utiliti editor.
  • Improved the editor by providing a parent component for all modal dialogs
  • Updated editor icons by new modern icons.
  • Added popup menu to the render canvas.
  • #65 Implemented general possibility to select multiple mapobjects
    • Allow multi-selection of MapObjects for positioning / deleting
    • Extended the UndoManager to support reverting/restoring operations with multiple MapObjects
    • Implemented possibility to move multiple objects via drag & drop
    • Implemented possibility to delete multiple objects
    • #70 Implement the possibility to copy/cut & paste multiple objects
  • Implemented the possibility to define and add Blueprints that consist of multiple MapObjects
  • Added marching ants for the focused MapObject
  • Improved usability of transform cursors and updated cursor images
  • Fixed an issue with the default rendering scale
  • Fixed performance for the tile grid (Drawing dashed lines just has a very poor performance in java)
  • Fixed an issue with mouse/keyboard controls being set up every time when the environment was loaded
  • Fixed an issue with the editor closing when using escape on the confirm dialog
  • Fixed an issue with the UndoManager not restoring deleted elements properly.
  • Fixed an issue with the enabled state of the paste command

Misc

  • #36 Added the utiLITI editor to the repository
  • #79 Migrated to JUnit 5.1.+
  • Updated steamworks version to 1.7.0
  • Provided a ton more unit tests (mostly for the environment)
  • Add the utiLITI editor to sonarqube

Naughty Elves Release v0.4.8-alpha

10 Dec 18:40
Compare
Choose a tag to compare

Fixes

  • Fixed static initialization of GuiComponent ICON_FONT.
  • Fixed issue with the Gamepad producing nullreference exceptions.
  • Fixed possible ArgumentNullException if Gamepad support was disabled.
  • Fixed an issue that caused collision not to be checked if no entity was specified.
  • Fixed trigger to properly evaluate the activated entities
  • Fixed size for collisionboxes.
  • Fixed a possible nullreference exception when removing entities from the Environment.
  • Fixed an issue with the size not being set for spawnpoints.
  • Fixed a possible nullreference exception for CustomPropertyProvider.
  • Fixed issue with randomInRange not working for negative numbers for integers.
  • Fixed an issue with the Menu that caused elements to be added twice.
  • Fixed an issue with competing META-INF content
  • Fixed an issue with volume not being applied to looping music.
  • Fixed an issue that caused particles to flicker (BE DAMNED LITI!!!!!)
  • Fixed an issue with entities traveling a long distance in case of a lag.
  • Fixed an issue with enum values not being serialized properly in the configuration
  • Fixed an issue with a gamepad not being properly detected if it was already connected from the beginning.

Features / Improvements

  • Improved the loading of a game file.
  • Reduced cognitive complexity of entity loading
  • Reduced cognitive complexity of the textfied keyboard typed handling.
  • Added equals overwrite for AttributeModifier class.
  • Provide some base unit tests for GuiComponents
  • Removed the isDragged method from the GuiComponent because it was never used and didn't work.
  • Extended the test sfor GuiComponents to ensure default flags.
  • Cleaned up the cognitive complexity of the AStarGrid.getNeighbours method.
  • Extended the ITileset implementation with a method that evaluates if a specified tile is part of the tileset.
  • Extended the environment by a method to retrieve colliders by id.
  • Issue #32 Implemented IMapObjectLoader interface and the default loader implementation for props, collisionboxes, triggers, decormobs, emitters and lightsources, spawnpoints
  • MapObjectLoaders are registered statically because they are designed to be independent from the environment.
  • Improved performance of the physics engine by only collecting all collisionboxes once per update
  • Extended ILayer with the getRenderType method which retrieves the rendertype from the custom properties of the layer.
  • Extended the Environment with an event that notifies consumers when an entity gets added to the Environment.
  • Implemented a general AnimationController that uses naming convention to provide Animations for a movable combat entity.
  • Issue #37 Replace deprecated XML tile layer serialization by data serialization that supports CSV and Base64 (including compression to GZIP/ZLIB).
  • Extended the MovableCombatEntityAnimationController to allow flipping left/right sprites to provide the opposite.
  • Extended ArrayUtilities with a method that gets a random element from a specified array.
  • Added a getter for the environmentBounds.
  • Added steamworks support to the engine
  • Implemented support for RenderType on particle level
  • Extended Props with the possibility to change the sprite during runtime.
  • If there are no static shadows to render, the static shadow image is no longer rendered.

Changes

  • Changed messagehandler provider to abstract because it is designed to be used as base implementation.
  • LightSource no longer keeps a reference to the static environment
  • Changed default updaterate to match the framerate.
  • There's no more static lib folder (see changes under Misc)
  • RenderLoop no longer catches and ignores all exceptions (they will be tracked by the UncaughtExceptionHandler)
  • Cleaned up the input loops to be started upon game start and not on game init.
  • Renamed the collider to CollisionBox for the sake of consistency.
  • Refactored the GameTime implementation: It is now part of the Game itself instead of the GameLoop.
  • The singleton instances of Game.getLoop is no longer passed in the update method
  • ImageCache no longer supports persistent cache. This was actually very unperformant.
  • Ambient light is now only rendered with graphics quality of Medium or more.

Misc

  • Updated build script to distinguish between usual dev build and full build that includes javadocs and jacoco test reports
  • Issue #35 Fixed litiengine dependencies on maven release
  • Update litiengine to use maven repository to get jinput and sound libraries.
  • Updated native jinput runtime dependencies to the latest version.
  • Issue #28 Create a distribution zip file with the gradle build.
  • Update gradle build by making use of the Gradle Natives Plugin in order to retrieve the native references required for jinput.
  • A lot of improvements on the general build script and process