Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/SolarLune/ldtkgo
LDtk-Go is a loader for LDtk projects written in Golang.
https://github.com/SolarLune/ldtkgo
Last synced: 8 days ago
JSON representation
LDtk-Go is a loader for LDtk projects written in Golang.
- Host: GitHub
- URL: https://github.com/SolarLune/ldtkgo
- Owner: SolarLune
- License: mit
- Created: 2020-12-08T20:05:54.000Z (almost 4 years ago)
- Default Branch: master
- Last Pushed: 2024-08-21T15:23:15.000Z (3 months ago)
- Last Synced: 2024-08-22T17:36:12.709Z (3 months ago)
- Language: Go
- Size: 105 KB
- Stars: 90
- Watchers: 5
- Forks: 15
- Open Issues: 3
-
Metadata Files:
- Readme: readme.md
- License: license.md
Awesome Lists containing this project
README
# LDtk-Go
LDtk-Go is a loader for [LDtk v0.9.3](https://ldtk.io/) projects written in pure Go.
![Screenshot](https://i.imgur.com/fFDmCCw.png)
Generally, you first load a project using `ldtkgo.Open()` or `ldtkgo.Read()`; afterward, you render the layers out to images, and then draw them onscreen with a rendering or game development framework, like [ebiten](https://hajimehoshi.github.io/ebiten/), [Pixel](https://github.com/faiface/pixel), [raylib-go](https://github.com/gen2brain/raylib-go), or [raylib-go-plus](https://github.com/Lachee/raylib-goplus). An example that uses ebiten for rendering is included.
All of the major elements of LDtk should be supported, including Levels, Layers, Tiles, AutoLayers, IntGrids, Entities, and Properties.
[Pkg.go.dev docs](https://pkg.go.dev/github.com/solarlune/ldtkgo)
## Loading Projects
Using LDtk-Go is simple.
First, you load the LDTK project, either with `ldtkgo.Open()` or `ldtkgo.Read()`. After that, you have access to most of the useful parts of the entire LDTK project. You can then render the map using the included renderer if you're using [Ebitengine](https://ebitengine.org/).
```go
package mainimport (
"embed""github.com/solarlune/ldtkgo"
renderer "github.com/solarlune/ldtkgo/renderer/ebitengine"
)var ldtkProject *ldtkgo.Project
var ebitenRenderer *renderer.Renderer//go:embed *.ldtk *.png
var fileSystem embed.FSfunc main() {
// Load the LDtk Project
ldtkProject, err := ldtkgo.Open("example.ldtk", fileSystem)if err != nil {
panic(err)
}// ldtkProject now contains all data from the file.
// If you'd like to render it, you could use the included renderer that uses Ebitengine:// Choose a level...
level := ldtkProject.Levels[0]// Create a new renderer...
ebitenRenderer = renderer.New(ldtkProject)// ... And render the tiles for the level out to layers, which will be *ebiten.Images. We can then retrieve them to draw in a Draw() loop later.
ebitenRenderer.Render(level)
}```
## Running the Example
`cd` to the example directory, and then call `go run .` to run the example (as it's self-contained within its directory). The console will give instructions for interacting with the example.
## Anything Else?
The core LDtk loader requires the `encoding/json` and `image` package. The Ebiten renderer requires Ebitengine as well, of course.
## To-do
- [ ] Add map clipping / viewports to Ebitengine renderer