LittleKt - An OpenGL game framework written in Kotlin

Overview

LittleKt - A 2D game framework written in Kotlin

License CI

Currently in development.

LittleKt is a Kotlin multiplatform 2D game development framework based on OpenGL that is inspired by libGDX and KorGE. The goal of this project is to allow the freedom and flexibility that libGDX offers with enjoyable idiomatic features coded in Kotlin that KorGE has to offer.

Check out the samples repository.

Check out the wiki for getting started!

Features

  • Freedom and flexibiity: Various useful tools and abstractions but still allow access to the underlying code.
  • Kotlin: 100% written in Kotlin which allows to take advantage of all the great features the language offers.
  • Cross-platform: Thanks to Kotlin - building for multiple platforms is easy.
  • Font: Loaders and renders to make font's easy to use
    • TTF file parser and loader
    • GPU vector font rendering of TTF files on the fly based off of Will Dobbie's article
    • Bitmap fonts
  • High-Level 2D APIs:
    • Orthographic camera and viewports
    • Texture atlases, slicing, and pixmap editing
    • Shader GLSL generation DSL
  • Low-Level OpenGL utilities:
    • Shaders
    • Meshes
    • Textures
    • Framebuffer objects
    • Vertex arrays and vertex buffer objects
  • Tile maps:
    • Full LDtk map loading and rendering
  • Virtual File System:
    • A file system abstraction that allows for easy access for reading and writing files
    • A flexible asynchronous asset provider system
  • Math:
    • Matrix and vector classes
    • Bounding shapes and Bresenham implementations
    • Interpolators
  • Utilities:
    • Helper extensions and quality-of-life util functions to make writing code very enjoyable

With lots more planned and to come. Check out some of the planned features

Cross-platform

Platform Implemented
Desktop (JVM)
Web (WebGL/2)
Android Not started
iOS Not started
Desktop (Native) Not started

Acknowledgements

LittleKt was put together based on bits and pieces of features found across multiple engines/frameworks and languages that were very enjoyable to use and flexible. If a piece a code looks familiar, feel free to open an issue with details, so that we can properly attribute the code.

A big thanks to the folks over on libGDX and KTX, KorGE, and MiniGDX.

The very popular and amazing libGDX which is the main inspiration of this framework as well as the Kotlin framework KTX for the clever and awesome utilites and extensions built on top of libGDX.

Carlos Velasco's (soywiz) awesome Kotlin game engine KorGE which has a bunch of very enjoyable features and awesome ideas that were brought over to be used in LittleKt.

David Wursteisen's excellent multiplatform game framework MiniGDX that allowed LittleKt to get up and running quickly.

Comments
  • Does not work on Apple M1 arm ?

    Does not work on Apple M1 arm ?

    Hello does this work on M1 apple arm?

    I have this error

    [LWJGL] Platform/architecture mismatch detected for module: org.lwjgl JVM platform: macOS aarch64 17.0.3.1 Java HotSpot(TM) 64-Bit Server VM v17.0.3.1+2-LTS-6 by Oracle Corporation Platforms available on classpath: linux/x64 macos/x64 windows/x64 [LWJGL] Failed to load a library. Possible solutions: a) Add the directory that contains the shared library to -Djava.library.path or -Dorg.lwjgl.librarypath. b) Add the JAR that contains the shared library to the classpath.

    bug gradle 
    opened by herve-ch 5
  • Looking for a JVM only buildscript

    Looking for a JVM only buildscript

    A sample Github template repo would be nice, to make getting started with LittleKt a bit easier :^)

    MiniGDX does this with their template, and (while I haven't used it) seemed very nice.

    I tried to follow the installation instructions, but get the error:

    Plugin [id: 'org.jetbrains.kotlin.multiplatform'] was not found in any of the following sources:
    
    * Try:
    > Run with --stacktrace option to get the stack trace.
    > Run with --info or --debug option to get more log output.
    > Run with --scan to get full insights.
    
    opened by ejektaflex 4
  • Unexpected behavior mouseMoved and touchDragged

    Unexpected behavior mouseMoved and touchDragged

    Following methods from the InputProcessor are delivering the current positional arguments for the pointer device:

    • touchDragged(Float, Float, Pointer)
    • mouseMoved(Float, Float, Pointer)

    However, I think a better way would be to either deliver the delta value between the current and the last call or to provide both the current pointer position and the previous one.

    image In this example, one could do the following:

    inputCache.onMove(_deltaX, _deltaY, Pointer.POINTER1)
    
    opened by TimerErTim 3
  • Question on Gpu Glyph Compiler

    Question on Gpu Glyph Compiler

    I found out your implementation of Gpu Glyph Compiler very interesting. What king of algorithm did you use here? Is it your kind of personal approach?

    opened by dmitrykolesnikovich 3
  • ECS

    ECS

    Hi I love libgdx and I'm currently using libktx with Artemis odb. I'd love to convert my little bullet hell to littlekt to make it multiplatform but I think ECS architecture helps a lot for performance and maintainability in my use case. Would you mind touching on whether an ECS architecture would mesh well with the Godot style scene tree in littlekt? If not is it possible to use littlekt without it? Do you have any suggestions for a mpp kotlin ECS if one exists?

    Thanks for your work excited to learn some more about littlekt and maybe get involved!

    opened by abueide 1
  • Create

    Create "BiggerKt" extension module for expanding on `SceneGraph` and rendering logic

    A new module, that is purely optional, that expand on the SceneGraph logic by providing new nodes such as rendering nodes, animated sprite nodes, physics nodes, and others. This module is it make the SceneGraph that primary use of a game rather than using just the core project with the UI portion as a scene graph.

    This is module would be more of an engine vs framework.

    Possible Nodes:

    • Camera2D - nodes will be based rendered based off the nearest parent camera / scene viewport camera
    • Viewport - A node that acts like a FrameBuffer and any nodes are rendered to it
    • Renderable - A base node for rendering 2D nodes
    • Sprite - A node that extends Renderable and renders static textures
    • AnimatedSprite - A node that handles setting and playing sprite animations
    • LDtkMapLayer - A node that renders a single layer of an LDtk Map
    enhancement scene graph graphics 
    opened by LeHaine 1
  • Add `Timer` Node

    Add `Timer` Node

    Add a new Node that emits a signal after certain amount of time has elapsed.

    • Allows for repeating of timer
    • Allows for one shot
    • Allows to start, stop, and reset a timer
    • Contains a signal that emits when the timer finishes
    • Allows setting the timer length
    enhancement scene graph 
    opened by LeHaine 1
  • A child `Control` node added to a node already in a scene isn't measured

    A child `Control` node added to a node already in a scene isn't measured

    If the scene is already initialized and a new control node is added, that node is not measured resulting it having a width & height of zero.

    Current work around includes setting an anchor tag to a new value and the back to invoke the measuring.

    label {
      text = "test"
      
      onUpdate += {
          if (width == 0 && height == 0) {
              anchorRight = 0f
              anchorRight = 1f 
          }
      }
    }.addTo(myOtherNode)
    
    bug scene graph 
    opened by LeHaine 0
  • Add 3D capabilities

    Add 3D capabilities

    Base Goals:

    • [ ] Directional light, point light, spot light
    • [ ] 3D related mesh building / generating
    • [ ] Extend SceneGraph with 3D related nodes
    • [ ] glTF / glb models loading & handling

    Stretch goals (maybe in the future)

    • [ ] PBR related shaders, lighting, and handling
    • [ ] Instanced drawing
    • [ ] LOD handling
    • [ ] Deferred shading
    • [ ] Screen-space Ambient Occlusion (SSAO)
    enhancement scene graph vfs graphics 
    opened by LeHaine 0
  • Add ability to uncompress GZIP and Zlib

    Add ability to uncompress GZIP and Zlib

    Being able to uncompress a ByteArray or a String with GZIP and ZLib as an extension method, Mainly needed to uncompress data when using Tiled map editor.

    val data = inputData.uncompress(GZIP) // or ZLib
    
    enhancement jvm js android 
    opened by LeHaine 0
  • Integrate ANGLE into LittleKt

    Integrate ANGLE into LittleKt

    Since LittleKt is based on OpenGL and there are no plans to create a Metal renderer, we can look into integrating ANGLE somehow into the project to work with Metal.

    enhancement jvm 
    opened by LeHaine 0
Releases(v0.5.3)
  • v0.5.3(Nov 4, 2022)

  • v0.5.2(Nov 3, 2022)

  • v0.5.1(Nov 3, 2022)

    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
    Source code(tar.gz)
    Source code(zip)
  • v0.5.0(Oct 28, 2022)

    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.
    Source code(tar.gz)
    Source code(zip)
  • v0.4.0(Oct 16, 2022)

    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.
    Source code(tar.gz)
    Source code(zip)
  • v0.3.2(Jul 20, 2022)

  • v0.3.1(Jul 20, 2022)

    Changes

    • update: Viewport.camera to be mutable.
    • update: all existing Viewport subtype classes to receive a constructor paramter for a Camera.
    Source code(tar.gz)
    Source code(zip)
  • v0.3.0(Jul 20, 2022)

    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.
    Source code(tar.gz)
    Source code(zip)
  • v0.2.0(Mar 9, 2022)

    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
    Source code(tar.gz)
    Source code(zip)
  • v0.1.0(Feb 8, 2022)

    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
    Source code(tar.gz)
    Source code(zip)
Owner
LittleKt
A multiplatform 2D game framework written in Kotlin
LittleKt
WordGuess - A portuguese game inspired in the world fever wordle game

WordGuess WordGuess is a portuguese game inspired in the world fever wordle game

Anthoni Ipiranga 6 Jul 28, 2022
an open source algorithmic trading framework written in Kotlin for anyone serious about algo-trading

Roboquant Roboquant is an algorithmic trading platform that is fast and flexible while at the same time strives to be easy to use. It is fully open so

Neural Layer 132 Jan 2, 2023
KotlinDL - High-level Deep Learning Framework written in Kotlin and inspired by Keras

Оригинальный репозиторий https://github.com/JetBrains/KotlinDL KotlinDL: High-le

Temur Yunusov 1 Feb 4, 2022
Api Rest Card Game made in Kotlin with Ktor

ApiRest-CardGame "Card Game API" is a project made in Kotlin with Ktor. The API allows you to manage a simple card game deck (shuffle, take a card, pu

null 0 Dec 4, 2021
Jetpack Compose for Desktop and Web, a modern UI framework for Kotlin that makes building performant and beautiful user interfaces easy and enjoyable.

Jetpack Compose for Desktop and Web, a modern UI framework for Kotlin that makes building performant and beautiful user interfaces easy and enjoyable.

JetBrains 10k Jan 7, 2023
A Modern Kotlin-Ktor RESTful API example. Connects to a PostgreSQL database and uses Exposed framework for database operations.

kotlin-ktor-rest-api A Modern Kotlin-Ktor RESTful API example. Connects to a PostgreSQL database and uses Exposed framework for database operations. F

Selim Atasoy 32 Dec 20, 2022
A simple MVI framework for Kotlin Multiplatform and Android

Orbit Multiplatform Get in touch What is Orbit Orbit is a Redux/MVI-like library - but without the baggage. It's so simple we think of it as MVVM+. Si

null 521 Jan 1, 2023
The Okila server project uses the Spring boot framework and uses the Kotlin language

Okila-Server The Okila server project uses the Spring boot framework and uses the Kotlin language Format Response //The response successfully format

Nankai 1 Oct 25, 2021
A modular framework for building Discord bots in Kotlin using Kordex and Kord

Mik Bot A modular framework for building Discord bots in Kotlin using Kordex and Kord **If you are here for mikmusic, click here and there Deployment

Michael Rittmeister 31 Dec 24, 2022
MaxonBank is a Kotlin + Spring Boot + Axon Framework application that supports opening, depositing to, and withdrawing from accounts.

MaxonBank MaxonBank is a Kotlin + Spring Boot + Axon Framework application that supports opening, depositing to, and withdrawing from accounts. The ap

Max 1 Dec 30, 2021
A pragmatic lightweight dependency injection framework for Kotlin developers.

A pragmatic lightweight dependency injection framework for Kotlin developers. Koin is a DSL, a light container and a pragmatic API

insert-koin.io 11 Dec 14, 2022
A server which delivers the game cache files to an end-user.

RuneTopic Js5 Server A server which delivers the game cache files to an end-user. Setup Guide You can host a js5 server with Docker or with your local

Runetopic 2 Dec 1, 2021
MemoryGame - An Android memory game with customizable options

MemoryGame An Android memory game with customizable options Open source librarie

null 1 Feb 3, 2022
Chain Relations is a small casual existential game about life, human needs and long-term relations.

Chain Relations Chain Relations is a small casual existential game about life, human needs and long-term relations. ChainRelations.360p.mp4 Game objec

Andrzej Novosiolov 4 Dec 2, 2022
Online real-time android quiz game

KQuiz Описание проекта Проект представляет собой мобильное приложение, выполнящее роль платформы для создания, поиска, организации и выполнения онлайн

Konstantin Albatov 1 Sep 1, 2022
A Hello World and Template for the KorGe game engine

Korge Hello World and Template This is a Hello World and Template for the KorGe game engine. Using gradle with kotlin-dsl. You can open this project i

Kiet 0 May 1, 2022
Game server management, orchestration, and scaling platform.

Liftgate Game server management, orchestration, and scaling platform. Project Status This project is a W.I.P. This README will be updated once we ente

null 4 Nov 14, 2022
Math Your Brain is a math game built using Jetpack Compose and Modern MVVM Architecture

Math Your Brain is a math game built using Jetpack Compose and Modern MVVM Architecture. I built this so that programmers learning Jetpack Compose Can use this repository as a learning material for Jetpack Compose.

Somnath Mishra 47 Jan 1, 2023