Skip to content

Releases: littlektframework/littlekt

v0.5.3

04 Nov 19:58
1087982
Compare
Choose a tag to compare

Changes

  • Fix NodeList not handling removing children correctly, missing onDestroy calls and not removing every child.

v0.5.2

03 Nov 16:16
788bc17
Compare
Choose a tag to compare

Changes

  • Fix NodeList not adding newly added nodes to the internal sortedNodeList preventing nodes from being rendered.

v0.5.1

03 Nov 13:08
0fb6410
Compare
Choose a tag to compare

v0.5.1

Breaking

  • Update EmptyDrawable to be an immutable singleton object instead of a class. Any attempted changes to this will
    throw an exception.
    • Migration: val drawable = EmptyDrawable() to val drawable = createEmptyDrawable()
      or val drawable = EmptyDrawable

Changes

  • Update ScrollContainer vertical scrollbar to extend the entire height of the container.

  • Update ScrollContainer add new Drawable properties that can be overridden.

  • Update Scrollbar add new Drawable properties that can be overridden.

  • Fix Scrollbar grabber height and position not fully reaching the correct position at the end of the scrollbar.

  • Adds new child tree positioning methods. NodeList updated to use just an array list to handle the indexing as the
    multiple collections were not able to handle the movement changes.

    • sendChildToTop() - sends child to top of parent tree
    • sendChildAtToTop() - sends child at index to top of parent tree
    • sendChildToBottom() - sends child to bottom of parent tree
    • sendChildAtToBottom() - sends child at index to bottom of parent tree
    • addChildAt() - adds new child to parent node at specified index
    • swapChildren() - swap child positions in the parent tree
    • swapChildrenAt() - swap children node positions at indices in the parent tree

v0.5.0

28 Oct 00:37
601d4b1
Compare
Choose a tag to compare

Highlights

  • Add ScrollContainer, VScrollBar, and HScrollBar control nodes for scroll handling
  • Add automatic caching of Control theme values when first grabbing the theme value.
    • For Example: getThemeDrawable() will return a result and then is cached in the drawableCache map. Any
      subsequent calls to getThemeDrawable() will first check in the drawableOverrides and then in
      the drawableCache map and return a result if it exists.
    • When a theme owners theme changes, the theme owners and its child control nodes will all have their caches
      cleared.
  • Add an experimental API for rendering scalable TrueType Fonts (TTF) called VectorFont. A sample VectorFontTest
    exists for usage.
  • Add a GestureProcessor interface with a GestureController input processor to handle gesture detection and
    callbacks. Comes with a GestureProcessorBuilder class for easy callback creation. A helper
    extension Input.gestureController to easily create and add the gesture controller as an input processor to the
    input.
  • Update default theme colors and tweak default UI assets to be slightly more presentable.
  • Add column and row DSL aliases for VBoxContainer and HBoxContainer containers.

Breaking

  • Context.onRender, Context.onPostRender, Context.onPostRunnable, and Context.onResize are now non-suspending. This fixed issues with the
    Android and Web platforms from creating unneeded coroutines every frame. Wrap any suspending calls called within these
    callbacks in a coroutine, KtScope.launch { }, or check if the suspending function can be made non-suspending.

New

  • add: EmptyDrawable to handle drawables that don't need drawn.
  • add: Additional vec3 CanvasLayer.canvasToScreen methods.
  • add: two new size properties to NinePatch: totalWidth & totalHeight.
  • add: new Textures.transparent 1x1 transparent pixel texture slice.
  • add: MutableVec2f.mul(Mat4) implementation.
  • add: Node.moveChild(child, index) method to handle moving a child to different index in the tree.
  • add: SceneGraph now propagates scroll input to control nodes that the mouse is over.
  • add: allowGreater & allowLesser flags to Range node to allow values pass the min & max values.

Changes

  • fix: SceneGraph sometimes adding handled input to the unhandled input queue.
  • update: Theme.FALLBACK_DRAWABLE is not an EmptyDrawable instead of a white TextureSliceDrawable.
  • update: Control now checks to ensure node is visible before returning successfully in the hit test.
  • update: NinePatchDrawable minWidth and minHeight calculations to use the new NinePatch.totalWidth
    and NinePatch.totalHeight properties.
  • fix: PanelContainer not fitting children nodes to the correct positions.
  • update: default UI asset pngs.
  • update: Label default mouseFilter is now IGNORE.
  • update: Control.setAnchor to be public.
  • fix: Dispatchers coroutines attempting to resume an already cancelled continuation.
  • fix: Android input not properly detecting the correct touch event action when touching with the 2 or more pointers.
  • fix: LWJGL & JS input from not properly outputting the correct Pointer on touchDragged when using any pointer but the left mouse button.
  • fix: FontCache not resetting its current tint when calling clear().
  • fix: Label bottom vertical alignment calculation not being correct.
  • fix: Label horizontal alignment calculations not being correct.
  • fix: Label not taking into account the correct minimum size when using ellipsis.
  • fix: Button horizontal alignment calculations not being correct.
  • fix: Button not taking into account the correct minimum size when using ellipsis.
  • fix: ProgressBar percentage font positioning to be more centered.
  • update: ProgressBar to only measure font when value changes.

v0.4.0

16 Oct 18:34
7f5a7c4
Compare
Choose a tag to compare

Highlights

  • SceneGraph nodes now allow for custom sort options when updating lists. This allows to render nodes based on the
    sort while keeping the update order.
  • SceneGraph: New ySort option added to Node2D to allow y-sorting rendering.
  • SceneGraph will now handle debug rendering as well as Control nodes to render it's bounds when rendering to help
    UI positioning.
  • JVM: Added arm64 dependencies for LWJGL.

Breaking

  • Add ShapeRenderer to SceneGraph and Node render methods. This includes preRender, render, postRender
    and debugRender as well as all the Node rendering signals.

    Migration:

    Before:

    DSL:

    node {
        onRender += { batch, camera ->
            // render logic
        }
    }

    Extending a Node:

    override fun render(batch: Batch, camera: Camera) {
        // render logic
    }

    New:

    DSL:

    node {
        onRender += { batch, camera, shapeRenderer ->
            // render logic
        }
    }

    Extending a Node:

    override fun render(batch: Batch, camera: Camera, shapeRenderer: ShapeRenderer) {
        // render logic
    }

New

  • add: Camera.boundsInFrustum implementation.
  • add: New implementation of AnimationPlayer.start() that will restart the current running animation to the first
    frame. AnimationPlayer.resume() provides the old functionality of AnimationPlayer.start()
  • add: AnimationPlayer.restart() alias for AnimationPlayer.start().
  • add: Experimental annotation that requires opt-in.

Changes

  • fix: add missing contract call for vBoxContainer.
  • fix: JVM - add a isMac check before attempting to set window icon.
  • fix: Texture Packer Plugin - All LWJGL dependencies are now removed from the plugin.
  • update: Refactor AnimationPlayer.start() to AnimationPlayer.resume().
  • update: AnimationPlayer restarts the last frame time back to zero when stopping an animation.
  • update: GpuFont is now marked as Experimental.
  • update Android compile & target versions to 33.
  • update AssetProviderer to use an ArrayList instead of a MutableList to fix iterating through assets to prepare.

v0.3.2

20 Jul 18:22
1e9a71a
Compare
Choose a tag to compare

Bugs

  • fix: Infix function ife from using the incorrect isFuzzyEquals method resulting in incorrect values.

v0.3.1

20 Jul 17:23
38ca30e
Compare
Choose a tag to compare

Changes

  • update: Viewport.camera to be mutable.
  • update: all existing Viewport subtype classes to receive a constructor paramter for a Camera.

v0.3.0

20 Jul 01:21
756d644
Compare
Choose a tag to compare

Highlights

For the full log see below.

  • New SceneGraph nodes to handle different viewports, frame buffers, and materials (shaders, blend modes,
    depth/stencil modes).
  • New input and unhandled input handling inside a SceneGraph.
  • New lifecycle methods added to Nodes in a SceneGraph: preUpdate(), postUpdate() and fixedUpdate().
  • Major optimizations and clean up of the SceneGraph in general.
  • Camera & Viewport relationship refactoring to make more sense. See full changelog for more info.
  • AnimationPlayer playback clean up and add few additional playback methods
  • New optional AnimationStateMachine within AnimationPlayer.
  • New shape, lines, and path drawing class ShapeRenderer.

Breaking

  • refactor Viewport to contain an internal Camera and remove Viewport from Camera.

    Migration:

    Before:

    val viewport = ExtendViewport(480, 270)
    val camera = OrthographicCamrea().apply {
        this.viewport = viewport
    }

    New:

    val viewport = ExtendViewport(480, 270)
    val camera = viewport.camera
  • remove SceneGraph.viewport: Viewport and SceneGraph.camera and replaced with the ViewportCanvasLayer node.

    Migration:

    Before:

    val viewport: Viewport = graph.viewport
    val camera: Camera = graph.camera

    After:

    val viewport: Viewport = graph.sceneCanvas.viewport
    val camera: Camera = -graph.sceneCanvas.canvasCamera
  • update SceneGraph.initialize() to be suspending.

  • update SceneGraph.Node.initialize() to be suspending.

  • rename Node2D.toWorld functions to toGlobal.

  • update Vec2f.rotate to use Angle instead of a float.

    Migration:

    Before:

      val vec = MutableVec2f()
      val angle: Angle = 45.degrees
      vec.rotate(angle.degrees)

    After:

      val vec = MutableVec2f()
      val angle: Angle = 45.degrees
      vec.rotate(angle)

New

  • add: list of catching keys to prevent default platform functionality from performing on key events
  • add: loadSuspending to AssetProvider to load assets as a suspending function instead loading inside a coroutine
  • add: onDestroy open function and onDestroy signal to Node when destroy() is invoked.
  • add: contracts to SceneGraph DSL to allow usage of assigning objects to val outside of it.
  • add: contract to AssetProvider.prepare() to allow usage of assigning objects to val outside of it.
  • add: CanvasItem node as the base node for 2D transformations in the SceneGraph. Node2D now inherits directly
    from this node.
  • add: CanvasLayer node that creates a separate OrthographicCamera for rendering instead of inheriting the base
    camera from the SceneGraph. For example: When rendering certain nodes at a low resolution using a Viewport to
    render UI at a higher resolution. This contains an instance to a Viewport but isn't used directly to render
    children. A new node called ViewportCanvasLayer can be used to render children nodes with a separate viewport.
  • add: ViewportCanvasLayer to use separate Viewport to render children nodes in a SceneGraph.
  • add: FrameBufferNode which is a CanvasLayer to allow rendering children nodes directly to a FrameBuffer.
    The FrameBuffer texture is then available to be rendered in a separate node.
  • add: FrameBufferContainer control node which can be used to help render a FrameBufferNode.
  • add: zoom, near, and far properties to Camera2D which will be used to set the CanvasLayer.canvasCamera
    properties before rendering.
  • add: scale property to the render method of LDtk and Tiled tile maps.
  • add: tmod and targetFPS properties to SceneGraph to be used as another way to handle frame independent
    movements.
  • add: three new lifecycle calls to a Node: onPreUpdate, onPostUpdate, and onFixedUpdate as well as their
    respective Signal types. The onFixedUpdate comes with a few more properties to handle changing the fixed time step
    and as well as an interpolating ratio.
    • SceneGraph.fixedTimesPerSecond: can be used to set the amount of times onFixedUpdate is call per second
    • SceneGraph.fixedProgressionRatio: is an interpolation ratio that can be used to render nodes that
      use onFixedUpdate for movement / physics.
  • add: input and unhandledInput callbacks to all Node.
    • input: is called whenever there is an InputEvent generated and is propagated up the node tree until a node
      consumes it.
    • unhandledInput: is called when an InputEvent isn't consumed by input or the UI.
  • add: resizable, maximize, and windowPosition configuration parameters to JVM.
  • add: ppu and ppuInv properties to SceneGraph and Node that allow setting the Pixels per Unit which is used
    for rendering.
  • add: Material class and property to CanvasItem that can be used to set and change shaders, blend modes, and
    depth/stencil modes.
  • add: AnimationState optional state machine stack that can be to register animation states that will be played based
    on a predicate.
  • add: CropType options to TexturePacker: NONE, FLUSH_POSITION, and KEEP_POSITION.
  • add: ShapeRenderer class to handle drawing shapes, lines, and paths using a Batch instance and a TextureSlice.

Changes

  • update: SceneGraph methods resize(), render(), and initialize() as open.
  • update: AnimationPlayer to handle the way animations are queued and played back based on a stack.

Bugs:

  • fix: clearing signals of all existing nodes when destroyed.
  • fix: LDtk auto tile maps now only loop through tiles within the view bounds instead of all the tiles.

v0.2.0

09 Mar 02:46
52a67b8
Compare
Choose a tag to compare

New

  • add: Full Android support.
  • add: MutableTextureAtlas class to combine existing TextureAtlas, Texture, and TextureSlice types into a
    single TextureAtlas.
  • update:vfsFile.readBitmapFont() loader to allow passing in a list of existing TextureSlice, such as from
    a TextureAtlas.
  • update: core now includes tools as an api vs just **implementation. Required for the new MutableTextureAtlas
    class.
  • JVM config: add backgroundColor option for initially setting background color.
  • JS config: add backgroundColor option for initially setting background color.
  • add: Batch interface.
  • update: SpriteBatch to use new interface.
  • update: all references to SpriteBatch with Batch.
  • add: New batch implementation called TextureArraySpriteBatch that uses texture arrays to render multiple textures as
    a single draw call (GL 3+).
  • add: new helper methods for projecting / un-projecting coordinates on a Camera.
  • update: GLVersion to handle parsing version for OpenGL ES.
  • update: Pointer enum to support more than 3 pointers / touches (due to Android support).
  • update: Pointer with an index parameter for determine the actual index of the pointer / touch.
  • update: Input with new vibrate() and cancelVibrate() methods (Android support).
  • update GLSLGenerator to handle ES versions for mobile platforms.
  • BREAKING: remove: getColorHex and getColorInt methods from LDtkIntGridLayer.
  • add: getColor() that returns a new Color instance to LDtkIntGridLayer.
  • add: truncate string to Font, FontCache and GlyphLayout.
  • add: ability to focus Control nodes and cycle through them with keyboard.
  • add: onFocus and onFocusLost methods to Control
  • BREAKING: move most UI enum classes to the specific Node class such as SizeFlag, StretchMode,
    and AnchorLayout
  • update: SceneGraph to trigger ui input events for keyboard
  • update: BaseButton to allow for triggering press signal with keyboard
  • update Button with new focus theme variable drawable
  • add: LineEdit control for editing single lines of text.
  • add: Clipboard support
  • add: showing/hiding soft keyboard for Android
  • BREAKING: rename InputMultiplexer to InputMapController
  • add: new InputMapProcessor interface with onAction callbacks used with InputMapController
  • update: InputMapController to handle Pointer types as a binding
  • update: InputMapController to handle key modifiers in a binding (SHIFT, CTRL, and ALT)
  • update: SceneGraph to use an InputMapController and input actions
  • update: SceneGraph focus key binds to use action bindings
  • add: helper methods to set default UI input action bindings to for SceneGraph
  • add: justTouched and touchJustReleased methods to Input
  • BREAKING: rename onKeyTyped to onCharType.
  • add: new onKeyRepeat method to InputProcessor
  • add: support for KEY_REPEAT event in SceneGraph
  • BREAKING: move StretchMode into TextureRect class.
  • add: TILE stretch mode implementation to TextureRect
  • add: TextureProgress control node
  • update: NinePatch to support setting source rectangle
  • BREAKING: update: NinePatchRect control node to use a TextureSlice vs using a NinePatch directly.
  • BREAKING: update Scene to use scoped lifecycle methods with Context
  • BREAKING: update Scene to no longer inherit from AssetProvider
  • update: Game with vfs and clipboard properties
  • add: a return value to Context callback methods (onRender, onPostRender, onResize, onDispose
    , onPostRunnable) that can be invoked once to remove the callback from being invoked.
  • add: new SizeFlag value of NONE which is the same as creating a SizeFlag(0)
  • add: a new parameter to the resize method of a SceneGraph to allow centering of the camera if true.
  • update: Context callbacks (onRender, onPosRender, onResize, onDispose, and postRunnable) to return
    a RemoveContextCallback lambda that can be invoked to remove itself from being called by the Context.
  • update: the resize() method in a SceneGraph to allow optional centering of camera.
  • update: LDtk version support to 1.0.0 beta3
  • BREAKING: remove readLDtkLevel from VfsLoaders.
  • BREAKING: refactor readLDtkMap to readLDtkMapLoader. This now returns the LDtkMapLoader which then can be
    used to call loadMap() and loadLevel().
  • BREAKING: remove LDtkWorld and LDtkLevel from AssetProvider default loaders
  • add: Passing in optional TextureAtlas when reading an LDtkMapLoader. Requires preloading tileset textures in order
    to benefit from it.
  • add: Tiled map support. Includes, orthographic, isometric, and staggered map rendering support.
  • update: Rect class is now open.
  • add: extrude, bleed and bleedIterations to TexturePacker to prevent atlas bleeding and prevent filtering
    artifacts when RGB values are sampled for transparent pixels.
  • add TexMinFilter and TexMagFilter constructor params to FrameBuffer

Bugs:

  • fix: remove clearing color buffer in LwjglContext.
  • fix: PathInfo to handle ./.
  • fix: InputQueueProcessor from triggering any subsequent input processors if the input has been handled
  • fix: InputQueueProcessor not correctly resetting internal input events to be reused.
  • fix: Pool from freeing an allocated object when using a callback.
  • fix: TextureSlice using incorrect UV coordinates for a 1x1 slice
  • fix: LWJGL input not resetting the last char when typing
  • fix: TextureRect not actually using the specified width and height for stretching
  • fix: SceneGraph focusing a Control node that wasn't enabled
  • fix: Node not updating children nodes when enable value was changed.
  • fix: Button sometimes not calculating text size resulting in misplaced text
  • fix: Label sometimes not calculating text size resulting in misplaced text
  • fix: GlyphLayoutRun not correctly calculating next glyph advance value.
  • fix: Button text width calculations due to GlyphLayoutRun glyph advance fix
  • fix: LWJGL application defaulting to graphic cards vSync setting when vSync was set to false. It now will
    properly turn off vSync.
  • fix: AnimationPlayer not able to restart a current animation by using stop() and then play() without having to
    swap animations.

Upgrades:

  • Kotlin from 1.6.0 to 1.6.10
  • LWJGL from 3.2.3 to 3.3.0
  • kotlinx-coroutines from 1.6.0-RC to 1.6.0-native-mt
  • kotlinx-serialization from 1.3.1 to 1.3.2

v0.1.0

08 Feb 01:33
012ecaa
Compare
Choose a tag to compare

LittleKt initial release which includes:

  • JVM support
  • JS support
  • A Scene Graph and Node types
  • A UI built on top of the Scene Graph
  • Sprite batching
  • Virtual File System
  • Shading and GLSL Generator
  • LDtk support
  • Atlas support
  • A texture packer for creating atlases
  • Bitmap font support
  • Audio streaming and clips
  • Math module and utilities