All Versions
Latest Version
Avg Release Cycle
56 days
Latest Release

Changelog History
Page 1

  • v1.9.14-b2 Changes

    • ⚡️ [UPDATE] Updated to Ashley 1.7.4.
    • ⚡️ [UPDATE] Updated to Kotlin 1.4.32.
    • ⚡️ [UPDATE] Updated to Kotlin Coroutines 1.4.3.
    • ⚡️ [UPDATE] Updated to Gradle 6.8.3.
    • ⚡️ [UPDATE] Updated to Dokka 1.4.30.
    • [MISC] Due to the newly added support for multimodule projects in Dokka, published documentation URLs will change.
    • [FEATURE] (ktx-tiled) Added isEmpty and isNotEmpty extension function for MapLayers and MapObjects collections.
    • [FEATURE] (ktx-tiled) Added forEachLayer extension function for TiledMap to iterate over an exact type of MapLayer instances of a specific map.
    • [FIX] (ktx-vis) visScrollPane and visSplitPane now define the correct types for this in theis init lambdas, ➕ adding support for Scene2D and VisUI DSL.
  • v1.9.14-b1 Changes

    • ⚡️ [UPDATE] Updated to LibGDX 1.9.14.
    • ⚡️ [UPDATE] Updated to Kotlin 1.4.30.
    • ⚡️ [UPDATE] Updated to VisUI 1.4.11.
    • [FEATURE] (ktx-app) clearScreen now accepts additional clearDepth boolean parameter that controls whether the GL_DEPTH_BUFFER_BIT is added to the mask.
    • [FEATURE] (ktx-assets-async) Added AssetStorageSnapshot class that stores a copy of AssetStorage state 👍 for debugging purposes. Supports formatted string output with prettyFormat.
    • [FEATURE] (ktx-assets-async) AssetStorage now includes takeSnapshot and takeSnapshotAsync methods that 👍 allow to copy and inspect the internal state of the storage for debugging purposes.
    • [FEATURE] (ktx-collections) Added getOrPut extension function for LibGDX map collections including ObjectMap, IdentityMap, ArrayMap and IntMap.
  • v1.9.13-b1 Changes

    • ⚡️ [UPDATE] Updated to LibGDX 1.9.13.
    • ⚡️ [UPDATE] Updated to Kotlin 1.4.21-2.
    • ⚡️ [UPDATE] Updated to VisUI 1.4.8.
    • [FEATURE] (ktx-style) Added Skin.register extension method that allows to register widget styles with the DSL.
    • [FEATURE] (ktx-vis) Added flowGroup factory method that allows to construct FlowGroup actors.
    • [CHANGE] (ktx-vis) horizontalFlowGroup and verticalFlowGroup are now deprecated. Use flowGroup instead.
  • v1.9.12-b1 Changes

    • ⚡️ [UPDATE] Updated to LibGDX 1.9.12.
    • ⚡️ [UPDATE] Updated to Kotlin 1.4.20.
    • ⚡️ [UPDATE] Updated to Kotlin Coroutines 1.4.2.
  • v1.9.11-b2 Changes

    • ⚡️ [UPDATE] Updated to Kotlin 1.4.10.
    • ⚡️ [UPDATE] Updated to Kotlin Coroutines 1.4.0.
    • ⚡️ [UPDATE] Updated to Gradle 6.7.
    • ⚡️ [UPDATE] Updated to Dokka 1.4.10-2.
    • [MISC] Groovy Gradle scripts and configuration files migrated to Kotlin.
    • [MISC] The generated sources documentation is vastly improved and moved to a new URL.
    • [FEATURE] (ktx-collections) Added GdxIdentityMap and GdxArrayMap aliases for LibGDX IdentityMap and ArrayMap collections.
    • [FEATURE] (ktx-collections) Added set operator extension method to ArrayMap to support square brackets assignment.
    • [FEATURE] (ktx-graphics) Added optional Camera and projection matrix parameters to ShapeRenderer.use.
    • [FEATURE] (ktx-scene2d) Added image builders for NinePatch, TextureRegion, Texture and Drawable.
  • v1.9.11-b1 Changes

    • ⚡️ [UPDATE] Updated to LibGDX 1.9.11.
    • ⚡️ [UPDATE] Updated to Kotlin Coroutines 1.3.6.
    • ⚡️ [UPDATE] Updated VisUI to 1.4.6.
    • [FEATURE] (ktx-scene2d) Added a generic container factory method that supports adding a custom actor.
  • v1.9.10-b7 Changes

    • [MISC] Added ktlint formatting. Contributors are asked to run format Gradle task before committing files.
    • [CHANGE] (ktx-actors) Deprecated Action.parallelTo and ParallelAction.parallelTo extension methods were removed. Use along instead.
    • [CHANGE] (ktx-actors) Touch event listeners attached with extension methods now extend InputListener rather than ClickListener.
    • [CHANGE] (ktx-actors) onTouchEvent parameters renamed from downListener and upListener to onDown and onUp.
    • [CHANGE] (ktx-actors) Event listeners attached with extension methods now consume the Actor as this. Listeners that used to consume actors as regular parameters now should rely on this instead.
    • [FEATURE] (ktx-actors) KtxApplicationAdapter, KtxGame and KtxScreen now explicitly implement the Disposable interface, matching the dispose method from ApplicationListener and Screen respectively. This allows to leverage existing Disposable utilities.
    • [FEATURE] (ktx-ashley) Added Engine.configureEntity extension method that allows to add components to an existing entity.
    • [FEATURE] (ktx-assets) Added DisposableRegistry and DisposableContainer for management of multiple Disposable instances.
    • [FEATURE] (ktx-graphics) Added support for Color destructuring syntax.
    • [CHANGE] (ktx-scene2d) Deprecated top-level widget factory methods and tooltip utilities were removed.
  • v1.9.10-b6 Changes

    • ⚡️ [UPDATE] Updated to Kotlin 1.3.72.
    • ⚡️ [UPDATE] Updated to Dokka 0.10.1.
    • [CHANGE] Javadocs are no longer generated with Dokka. Since KTX focuses solely on Kotlin support for LibGDX, usability from Java is not a priority. The generated Javadocs are not very helpful, especially for Kotlin development. 📚 Instead, the Javadoc jar published to Maven Central now contains exported Kotlin-compatible Dokka documentation. 🚀 Starting from this release, GitHub releases will no longer contain the Javadoc archives.
    • [FEATURE] (ktx-actors) Added Action.repeat extension method that allows to repeat an action for the given amount of times.
    • [FEATURE] (ktx-ashley) Added Engine.get operator to access a chosen EntitySystem.
    • [FEATURE] (ktx-ashley) Added Engine.getSystem extension method to access a chosen EntitySystem. Throws MissingEntitySystemException in case the system is not added.
    • [FEATURE] (ktx-ashley) Added Entity.addComponent extension method to create a Component for an existing Entity.
    • [FEATURE] (ktx-ashley) Added Entity.plusAssign (+=) operator that allows to add an Component to an Entity.
    • [FEATURE] (ktx-ashley) Added contracts support to EngineEntity.with, Engine.create, Engine.add, Engine.entity ➕ add Entity.addComponent. Now their lambda parameters are ensured to be executed exactly once: ```kotlin // Before: lateinit var value: Int engine.add { value = 42 }

    // Now: val value: Int engine.add { value = 42 }

    - **[FEATURE]** (`ktx-assets`) `Iterable.dispose` and `Array.dispose` extension methods consuming an error handler are now inlined.
    - **[FEATURE]** (`ktx-box2d`) Added contracts support to body, fixture and joint factory methods, as well as `FixtureDef.filter`
    🔧 This ensures that the configuration lambdas are executed exactly once.
    - **[CHANGE]** (`ktx-collections`) `PooledList` was removed due to concurrent iteration safety issues. Use standard library lists instead.
    - **[CHANGE]** (`ktx-collections`) `-` and `+` operators no longer mutate the collections. Instead, they create a new collection instance and add or removed the selected elements.
    To modify an existing collection, use new mutating `+=` and `-=` operators.
    - **[FEATURE]** (`ktx-freetype`) Added contracts support to `AssetManager.loadFreeTypeFont`, `freeTypeFontParameters`
    🔧 and `FreeTypeFontGenerator.generateFont`. This ensures that the font configuration lambdas are executed exactly once.
    - **[FEATURE]** (`ktx-freetype-async`) Added contracts support to `AssetStorage.loadFreeTypeFont`.
    - **[FEATURE]** (`ktx-graphics`) Added contracts support to `Camera.update`, `Batch.use`, `ShaderProgram.use`, `GLFrameBuffer.use` and `ShapeRenderer.use`.
    - **[FEATURE]** (`ktx-inject`) Added contracts support to `Context.register`.
    - **[CHANGE]** (`ktx-log`) Added contracts to logging methods. Logging methods now might need to be imported explicitly.
    - **[FEATURE]** (`ktx-preferences`) Added contracts support to `Preferences.flush`.
    - **[FEATURE]** (`ktx-math`) Added `+=`, `+`, `-=` and `-` operators supporting floats and ints to `Vector2` and `Vector3`.
    - **[CHANGE]** (`ktx-math`) `-`, `!`, `++` and `--` operators no longer mutate vectors and matrices, returning new instances instead.  
    - **[FIX]** (`ktx-math`) Operators documentation regarding mutating of vectors and matrices was updated.
    - **[FEATURE]** (`ktx-scene2d`) `scene2d` object was added. It supports the entire Scene2D DSL and allows to create root-level widgets.
    - **[FEATURE]** (`ktx-scene2d`) `Stage.actors` extension method was added. It allows to define actors with Scene2D DSL and adds all top-level actors to the `Stage`.
    - **[CHANGE]** (`ktx-scene2d`) Root-level `actor` function was deprecated.
    - **[CHANGE]** (`ktx-scene2d`) Root-level widget factory functions were deprecated. Use `scene2d.` prefix or `Stage.actors` to create these widgets.
    👀 Note that the actors can still be created via standard DSL. See the migration guide in README. This includes:
      - `stack`
      - `horizontalGroup`
      - `verticalGroup`
      - `container`
      - `splitPane`
      - `scrollPane`
      - `table`
      - `window`
      - `dialog`
      - `buttonGroup`
      - `tree`
    - **[CHANGE]** (`ktx-scene2d`) `listWidget` and `selectBox` now have a single generic type to improve usability.
    🏗 Their building blocks no longer consume `Cell` and `Node` instances.
    - **[CHANGE]** (`ktx-scene2d`) Internal `KWidget.appendActor` and `KGroup.add` methods were removed.
    - **[FEATURE]** (`ktx-scene2d`) Added contracts support to widget factory methods and `Stage.actors`.
    🔧 This ensures that widget configuration lambdas are executed exactly once.
    - **[FEATURE]** (`ktx-style`) Added contracts support to style factory methods and top-level `skin` functions.
    - **[CHANGE]** (`ktx-vis`) Overhaul of the module.
      - `ktx-vis` now includes and extends the `ktx-scene2d` module. The majority of APIs are now shared.
      - All factory methods for VisUI widgets are now inlined, which can improve the performance of GUI building.
      - Factory methods of some VisUI widgets were renamed to avoid clashes with Scene2D methods and better reflect the wrapped widget class names:
        - `label`: `visLabel`
        - `image`: `visImage`
        - `list`: `visList`, `visListOf`
        - `selectBox`: `visSelectBox`, `visSelectBoxOf`
        - `slider`: `visSlider`
        - `textArea`: `visTextArea`
        - `textField`: `visTextField`
        - `validatableTextField`: `visValidatableTextField`
        - `textButton`: `visTextButton`
        - `imageButton`: `visImageButton`
        - `imageTextButton`: `visImageTextButton`
        - `radioButton`: `visRadioButton`
        - `tree`: `visTree`
        - `table`: `visTable`
        - `scrollPane`: `visScrollPane`
        - `splitPane`: `visSplitPane`
        - `addTooltip`: `visTooltip`
        - `addTextTooltip`: `visTextTooltip`
      - Parental actors including `collapsible`, `dragPane`, `horizontalCollapsible`, `visScrollPane`, `visSplitPane` and
      `multiSplitPane` now do not require passing widgets to their factory methods. Instead, widgets are either automatically
      created or can be defined as nested children with the same DSL.
      - Inlined functions with lambda parameters, such as widget factories with their building block lambdas, now use
      Kotlin contracts to ensure that they are executed exactly once.
      - `DEFAULT_STYLE` constant is removed in favor of `defaultStyle` from `ktx-scene2d`.
      - `styleName` parameters in factory methods were renamed to `style` for consistency with `ktx-scene2d`.
      - `@VisDsl` DSL marker is replaced with `@Scene2dDsl` marker from `ktx-scene2d`.
      - The sources documentation was greatly expanded.
    - **[FEATURE]** (`ktx-vis-style`) Added contracts support to widget style factory methods.
    Known issues:
    - **[BUG]** (`ktx-box2d`) Due to a Kotlin compiler bug, methods with _vararg_ parameters do not support contracts.
    👀 This includes some `polygon`, `chain` and `loop` factory methods. See [this issue](
    They can still be used and work as expected, but the compiler does not ensure that their lambda parameters are executed exactly once.
  • v1.9.10-b5 Changes

    • ⚡️ [UPDATE] Updated to Kotlin 1.3.71.
    • ⚡️ [UPDATE] Updated to Kotlin Coroutines 1.3.5.
    • ⚡️ [UPDATE] Updated to Gradle 5.6.4.
    • [FEATURE] (ktx-app) Added profiling utilities.
      • profile inlined function allows to profile an operation with the LibGDX PerformanceCounter.
      • PerformanceCounter.profile inlined extension method eases usage of PerformanceCounter API.
      • PerformanceCounter.prettyPrint allows to print basic performance data after profiling.
    • [CHANGE] (ktx-app) LetterboxingViewport moved from ktx-app to ktx-graphics.
    • [FEATURE] (ktx-ashley) Added Entity.contains (in operator) that checks if an Entity has a Component.
    • [FEATURE] (ktx-assets-async) Added a new KTX module: coroutines-based asset loading.
      • AssetStorage is a non-blocking coroutines-based alternative to LibGDX AssetManager.
        • get operator obtains an asset from the storage or throws a MissingAssetException.
        • getOrNull obtains an asset from the storage or return null if the asset is unavailable.
        • getAsync obtains a reference to the asset from the storage as Deferred.
        • load suspends a coroutine until an asset is loaded and returns its instance.
        • loadAsync schedules asynchronous loading of an asset.
        • loadSync blocks the thread until selected asset is loaded.
        • unload schedules asynchronous unloading of an asset.
        • add allows to manually add a loaded asset to AssetManager.
        • dispose unloads all assets from the storage.
        • getLoader and setLoader manage AssetLoader instances used to load assets.
        • isLoaded checks if loading of an asset was finished.
        • contains operator checks if the asset was scheduled for loading or added to the storage.
        • progress allows to check asset loading progress.
        • getReferenceCount returns how many times the asset was loaded or referenced by other assets as a dependency.
        • getDependencies returns a list of dependencies of the selected asset.
        • getAssetDescriptor creates an AssetDescriptor with loading data for the selected asset.
        • getIdentifier creates an Identifier uniquely pointing to an asset of selected type and file path.
      • Identifier data class added as an utility to uniquely identify assets by their type and path.
        • Identifier.toAssetDescriptor allows to convert an Identifier to an AssetDescriptor.
      • AssetDescriptor.toIdentifier allows to convert an AssetDescriptor to Identifier used to uniquely identify AssetStorage assets.
      • LoadingProgress is an internal class used by the AssetStorage to track loading progress.
    • [FEATURE] (ktx-async) Added RenderingScope factory function for custom scopes using rendering thread dispatcher.
    • [FEATURE] (ktx-async) newAsyncContext and newSingleThreadAsyncContext now support threadName parameter that allows to set thread name pattern of AsyncExecutor threads.
    • [FIX] (ktx-async) isOnRenderingThread now behaves consistently regardless of launching coroutine context.
    • [FEATURE] (ktx-freetype-async) This KTX module is now restored and updated to the new AssetStorage API. 🚀 There are no public API changes since the last released version.
    • [FEATURE] (ktx-graphics) Added LetterboxingViewport from ktx-app.
    • [FEATURE] (ktx-graphics) Added takeScreenshot utility function that allows to save a screenshot of the application.
    • [FEATURE] (ktx-graphics) Added extension method that allows to center text on an object.
    • [FEATURE] (ktx-graphics) Added Camera utilities.
      • center extension method allows to center the camera's position to screen center or the center of the chosen rectangle.
      • moveTo extension method allows to move the camera immediately at the chosen target position with optional offset.
      • lerpTo extension method allows to move the camera smoothly to the chosen target position with optional offset.
      • update inlined extension method allows to change camera state with automatic Camera.update call.
    • [FEATURE] (ktx-math) Added lerp and interpolate extension functions for Float ranges.
    • [FEATURE] (ktx-preferences) Added a new KTX module: Preferences API extensions.
      • Added set operators for String, Int, Float, Double, Long, Boolean, Pair<String, Any> and Any
      • Added get operator which automatically determines preference type and retrieves them with the correct method.
      • get and set will automatically attempt to (de)serialize non-basic preferences to and from JSON.
      • set(String, Double) is deprecated, since the LibGDX Preferences do not support doubles.
      • Added flush inlined extension method that executes a lambda and automatically calls Preferences.flush.
    • [CHANGE] (ktx-scene2d) Improved typing support for Tree.Node widgets. Since LibGDX 1.9.10, Tree.Node is a generic class, but KTX KNode remained non-generic until now. Type of stored actors must now be specified for KNode variables, but thanks to that actors from KNode instances are now correctly typed and easier to handle. This required minor internal changes - KWidget.storeActor is now generic.
    • [FEATURE] (ktx-vis) Added image (VisImage) factory methods consuming Texture, TextureRegion and NinePatch.
  • v1.9.10-b4 Changes

    January 24, 2020

    🚀 The first release to include a new KTX module with Tiled map editor utilities: ktx-tiled.

    • [FEATURE] (ktx-actors) Added onTouchDown, onTouchUp and onTouchEvent extension methods that allow to attach ClickListener instances to actors.
    • [CHANGE] (ktx-collections) Array.removeAll and retainAll now return a boolean if any elements were removed.
    • [CHANGE] (ktx-collections) Array.transfer is now less strict about typing.
    • [FEATURE] (ktx-math) Added Kotlin ranges extensions that simplify creating ranges and rolling random numbers:
      • Int.amid, Float.amid;
      • +, -, * and / for ranges;
      • ClosedRange<Float>.random, IntRange.random;
      • ClosedRange<Float>.randomGaussian;
      • ClosedRange<Float>.randomTriangular.
    • [FEATURE] (ktx-tiled) Added a new KTX module: Tiled API extensions.
      • Added contains (in) and set ([]) operators support to MapProperties.
      • Added extension methods that simplify properties extraction from MapLayer, MapObject, TiledMap, TiledMapTile and TiledMapTileSet:
      • property
      • propertyOrNull
      • containsProperty
      • Added shape extension field to MapObject.
      • Added extension fields that ease extraction of basic properties from TiledMap and MapObject.