Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/LittleB0xes/LDtkBridge
A bridge between LDtk and DragonRuby
https://github.com/LittleB0xes/LDtkBridge
dragonruby game-development gamedev gamedev-library ldtk
Last synced: 3 months ago
JSON representation
A bridge between LDtk and DragonRuby
- Host: GitHub
- URL: https://github.com/LittleB0xes/LDtkBridge
- Owner: LittleB0xes
- License: mit
- Created: 2021-05-23T05:36:05.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2022-06-12T21:36:23.000Z (over 2 years ago)
- Last Synced: 2024-05-10T13:33:14.248Z (6 months ago)
- Topics: dragonruby, game-development, gamedev, gamedev-library, ldtk
- Language: Ruby
- Homepage:
- Size: 96.7 KB
- Stars: 18
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-dragonruby - LDtkBridge - A bridge between LDtk (level editor) and DragonRuby (Libraries, Frameworks and Wrappers)
README
# LDtkBridge
A bridge between LDtk and DragonRuby⚠️ Not all capabilities of LDtk 0.9.3 are supported, this is a work in progress. I add things to it according to my needs.
Migration to 1.1.x is in progressLDtkBridge *seems* to supports several tilesets (normally...)
## Sample app
There is now a sample app. This is very basic and not optimized. The purpose of this app is just to show how to use some LDtkBrige functions.## Usage
### LDtk project init
First you need to init your map```ruby
my_world = LDtk::LDtkBridge.new('path_to_your_file/', 'your_ldtk_file.ldtk')
```### Loading Levels and Layers
#### Levels
If in your LDtk file, your level is named "Level1", this level can be load like this```ruby
my_level = my_world.get_level(:Level1)
```
Levels have some properties :```
name
width
height
x_world
y_world
level_data
```#### Layers
⚠️ ***Important***
> All tile and sprite coordinates use the DragonRuby standard (origin bottom left). LDtkBridge converts up-left origin to bottom-left originYou can now access to each layer of your level with the Level method `get_layer(:name_of_the_layer)`
For a layer named "layer_one" in LDtk, do :
```ruby
my_layer = my_level.get_layer(:layer_one)
```Layers have some properties
```
name
cell_width (width of the layer in tile)
cell_height (height of the layer in tile)
cell_size (size of a tile, in px)
layer_data
```## Case of Tile Layer
For tile layer, `layer_data` is an Array of Tile Hash with fields
```ruby
{
x: # x position on map
y: # y position on map
sx: # source_x on tileset
sy: # source_y on tileset
w: # width of the tile
h: # height of the tile
f: # flip poperty (0 = none, 1 = h_flip, 2 = v_flip, 3 = both)
flip_vertically: # true or false (flip property but adapted for DragonRuby convenience)
flip_horizontally: # true or false (flip property but adapted for DragonRuby convenience)
}
```### Tile Layer Rendering
For rendering, there are several method.- You can use the array `layer_data`
- Tile layer class also have a DragonRuby friendly method to return an array of hash of all the tiles of the layer, directly usable, called `render(scale, translation_on_x, translation_on_y)`. Default value are scale = 1', translation_on_xy = 0
- If you use png export in LDtk, you can use `render_png(scale, translation_on_x, translation_on_y)`. You need to keep the default value for export in LDtk### examples
```ruby
args.outputs.sprites.sprites << @ground_layer.render(4, camera_x, camera_y)# or, if you want to use LDtk's png export
args.outputs.sprites.sprites << @ground_layer.render_png(4, camera_x, camera_y)
```## Case of intGrid Layer
For `intGrid`, layer_data is an Array of Int
You can access to an intGrid value with `my_layer.get_int(x, y)`
## Case of Entities Layer
If your layer is a LDtk Entities type layer you can access to all items of a specific type of entity, like this : `my_layer.get_all(:monster)`
With LDtk, you can add some fields of data to your entities.
`Point` and `Array` are usable with this bridge.
When your layer is an Enities layer, `layer_data` is an Array of entity Hash like this :```ruby
{
:name => :identifier_of_the_entity,
:pos => {x: x_of_you_entity, y: y_of_your_entity}, # Position uses pivot defines in LDtk
:size => {w: width_of entity, h: height_of_entity},
:pivot =>{x: 0_to_1_value, y: 0_to_1_value},:source_rect => {...}, # Tile source data in hash with DR-friendly keys :
# :source_x
# :source_y
# :source_w
# :source_h
# :path:fields => {:field_1 => value, :field_2 => value,...} # Hash of fields
}
```### Fields types
#### Classical Types
For classic fields types (ie. Integer, Float, Boolean, String, Text and FilePath), you get the value with the expected type.
### Tile
...### Point
...### Color
...### Enum
...### EntityRef
...