diff --git a/.gitignore b/.gitignore index 445277d..042850f 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,5 @@ Thumbs.db .project .cproject builtins -/.editor_settings \ No newline at end of file +/.editor_settings +*.tiled-session diff --git a/README.md b/README.md index fe46cf3..6bbbe47 100644 --- a/README.md +++ b/README.md @@ -9,33 +9,27 @@ # Detiled -**Detiled** - is a Defold library that converts [Tiled](https://www.mapeditor.org/) maps and tilesets into [Decore](https://github.com/Insality/decore) entities. +**Detiled** is a Defold library that converts [Tiled](https://www.mapeditor.org/) maps and tilesets into easy-to-use entities. It supports all Tiled grid types: orthogonal, hexagonal, and isometric. ## Features -- Load tilesets with prefab definitions and component properties -- Convert Tiled maps to Decore entities -- Use class names as prefab IDs, with fallback to image names -- Support for custom properties and components from Tiled +- Load tilesets and parse maps to get map entities +- Use prefab IDs to spawn game entities +- Adjust entity properties from tilesets and maps +- Convert cell indices to world position and vice versa ### Setup Open your `game.project` file and add the following line to the dependencies field under the project section: -**[Decore](https://github.com/Insality/decore)** +**[Detiled](https://github.com/Insality/detiled/archive/refs/tags/3.zip)** ``` -https://github.com/Insality/decore/archive/refs/tags/3.zip +https://github.com/Insality/detiled/archive/refs/tags/3.zip ``` -**[Detiled](https://github.com/Insality/detiled/archive/refs/tags/2.zip)** - -``` -https://github.com/Insality/detiled/archive/refs/tags/2.zip -``` - -After that, select `Project ▸ Fetch Libraries` to update [library dependencies]((https://defold.com/manuals/libraries/#setting-up-library-dependencies)). This happens automatically whenever you open a project so you will only need to do this if the dependencies change without re-opening the project. +After that, select `Project ▸ Fetch Libraries` to update [library dependencies](https://defold.com/manuals/libraries/#setting-up-library-dependencies). This happens automatically whenever you open a project, so you only need to do this if dependencies change without re-opening the project. ### Library Size @@ -49,64 +43,157 @@ After that, select `Project ▸ Fetch Libraries` to update [library dependencies ## Setup -### Workflow -1. Load all tilesets before loading maps: - ```lua - local detiled = require("detiled.detiled") +### Tiled + +Tiled is a map editor for creating 2D games. It is used to create maps and tilesets for your game. +Detiled supports tilesets and exports maps as Lua table entities for Defold, which can be used to spawn game entities. + + +#### Creating Tilesets + +Detiled supports collection-of-images tilesets, because each tile should have an associated prefab. Single-image tilesets are not supported. + +Create a new tileset and add images to it. Usually, you will have a `/tiled` folder with all Tiled files for the project. Place the tileset inside `/tiled/tilesets` and add this folder as a custom resource in `game.project`. + +```init +[project] +custom_resources = /tiled/tilesets +``` + +Each tile in a tileset has a `prefab_id`, which will be available in your Defold project. By default, `prefab_id` is the image name without extension. For example, `player.png` becomes `player`. You can change `prefab_id` in the tileset editor by setting the tile `class`. This way, one image can have multiple `prefab_id` values. + + +#### Creating Maps + +Create a new map and save it in `/tiled/maps` with the `.json` extension. Since Detiled loads JSON files, this keeps the workflow simple. + +To load JSON files, add this folder as a custom resource in `game.project`. + +```init +[project] +custom_resources = /tiled/tilesets,/tiled/maps +``` + +Now you can create tile and object layers and place entities directly on the map. +You can also add shapes (rectangle, point, polygon, polyline, ellipse) directly on the map. Since these entities have no tileset tile associated with them, they have no `prefab_id` by default. You can assign a `prefab_id` by setting a `class` on the map object. + +Each tile from a tileset will be exported as a single entity. + + +#### Custom Properties + +Tiled has good support for custom properties. Open `View -> Custom Types Editor` and add custom classes with the properties you need. +You can add and override custom properties on tiles in tilesets or directly on object instances in maps. In `Custom Types Editor`, use defaults only as editor-time templates, because this default data is not exported to Defold. + - -- Load all used tilesets first before loading maps - detiled.load_tileset("/resources/tilesets/my_tileset.json") - ``` +### Defold -2. Convert Tiled maps to Decore entities: - ```lua - -- Get entity prefab from map - local map = detiled.get_entity_from_map("/resources/maps/my_map.json") +When tilesets and maps are ready, you can spawn entities. - -- Add to Decore world - world:addEntity(decore.create(map)) - ``` +Detiled library provides a simple API to parse maps and tilesets. + +```lua +detiled.load_tileset(tileset_path_or_data) -- required before parsing a map +detiled.parse(map_path_or_data) -- returns layers, map_params +``` -### Prefab ID Resolution -Prefab IDs are determined in this order: -1. `class` field from the tile or object in Tiled -2. `type` field as fallback -3. Image filename (without path/extension) as final fallback +#### Loading Tilesets + +First, load the tileset used by your maps. + +```lua +local detiled = require("detiled.detiled") +detiled.load_tileset("/tiled/tilesets/my_tileset.json") +``` -### Object Types +#### Parsing Maps -- **Tile Objects** - Objects with `gid` (from tileset) use tileset properties -- **Class Objects** - Objects with `class` field spawn as that prefab type -- **Empty Objects** - Objects without `gid` or `class` spawn as basic entities +Then parse a map to get a layers table and `map_params` as the second return value. -### Custom Properties +```lua +local layers, map_params = detiled.parse("/tiled/maps/my_map.json") +``` -To override component properties from Tiled: +`layers` is a table with layer id as key and layer data as value. Layer data contains an `entities` list and layer properties. Iterate over it to create game objects. -1. **Setup Custom Types in Tiled**: - - Go to `View -> Custom Types Editor` - - Add your custom class with the property name matching your component - - Example: Create a `movement` class with `stick` (bool) and `speed` (int) properties -2. **Use in Tilesets or Maps**: - - Add the custom property to tiles in tilesets or directly to object instances in maps - - Properties with `propertytype` matching the property name become components +```lua +---@param entity detiled.entity +---@param layer_data detiled.layer_data +local function spawn_entity(entity, layer_data) + local prefab_id = entity.prefab_id + local transform = entity.transform + + local position = vmath.vector3( + transform.position_x + layer_data.position_x, + transform.position_y + layer_data.position_y, + transform.position_z + layer_data.position_z + ) + local scale = vmath.vector3(transform.scale_x, transform.scale_y, 1) + local rotation = vmath.quat_rotation_z(math.rad(transform.rotation or 0)) + + local factory_url = "/entities#" .. prefab_id + factory.create(factory_url, position, rotation, nil, scale) +end + + +---@param layers detiled.layers +local function spawn_map(layers) + for layer_name, layer_data in pairs(layers) do + local entities = layer_data.entities + local layer_position_x = layer_data.position_x -- Horizontal offset from layer settings + local layer_position_y = layer_data.position_y -- Vertical offset from layer settings + local layer_position_z = layer_data.position_z -- From position_z custom property on layer settings + local is_visible = layer_data.visible + + for _, entity in ipairs(entities) do + spawn_entity(entity, layer_data) + end + end +end +``` -3. **Property Override Hierarchy** (highest priority first): - - Map instance properties - - Tileset properties - - Entity definition properties - - Default Decore component values +If you add custom properties to an entity in a tileset or map, they are available on the parsed entity. -Example: If an entity has `movement = { can_jump = true, speed = 20 }` by default, you can override just the `speed` in Tiled while keeping `can_jump = true`. +```lua +local function spawn_entity(entity, layer_data) + local prefab_id = entity.prefab_id + local my_component = entity.my_component + if my_component then + print(my_component.value) + end + + -- rest of the code +end +``` ### Layer Properties Layers support special properties: -- `position_z` - Sets the Z position for all entities spawned from this layer -- Objects can have their own `position_z` property that gets added to the layer's `position_z` +- `exclude` *(boolean)* - This layer is skipped and not parsed +- `position_z` *(number)* - Base Z for entities spawned from this layer + +Entities support specific properties: +- `position_z` - A position_z for the entity transform +- `width` and `height` - Width and height of the entity, available only when `prefab_id` is missing + + +### Cell to Position and Position to Cell + +Detiled provides a simple API to convert cell indices to world position and vice versa. + +```lua +local layers, map_params = detiled.parse("/tiled/maps/my_map.json") +detiled.cell_to_pos(i, j, map_params) -- returns x, y +detiled.pos_to_cell(x, y, map_params) -- returns i, j +``` + + +### Adjusting Entity Position + +You can set an `anchor` position for an entity in the tileset. This is useful when your Defold game object anchor differs from the sprite center. For example, a tree game object is usually placed on the ground. To adjust its placement, open the tileset, select the tree tile, and open `Tile Collision Editor`. Then add a `Point` object at the desired sprite anchor position. This point is used to calculate the final entity position in Defold. ## Game Example @@ -120,8 +207,10 @@ Look at [Shooting Circles](https://github.com/Insality/shooting_circles) or [Cos ```lua detiled.set_logger(logger_instance) -detiled.load_tileset(tileset_path_or_data) -detiled.get_entity_from_map(map_path_or_data) +detiled.load_tileset(tileset_path_or_data) -- required before parsing a map +detiled.parse(map_path_or_data) -- returns layers, map_params +detiled.cell_to_pos(i, j, map_params) -- returns x, y +detiled.pos_to_cell(x, y, map_params) -- returns i, j ``` ### API Reference @@ -153,6 +242,13 @@ For any issues, questions, or suggestions, please [create an issue](https://gith ### **V2** - Reworked API and documentation +### **V3** + - Unbind from Decore library + - Rename `detiled.get_entity_from_map` to `detiled.parse` + - Add `detiled.cell_to_pos` and `detiled.pos_to_cell` API + - Rework map parse return params, now it's a layers table with entities and properties with map_params as second return value + - Add all grid types support, not only orthogonal. All hexagonal and isometric grids are supported. + ## ❤️ Support project ❤️ diff --git a/api/detiled_api.md b/api/detiled_api.md index 3071aa9..ceee2be 100644 --- a/api/detiled_api.md +++ b/api/detiled_api.md @@ -5,7 +5,9 @@ ## Functions - [set_logger](#set_logger) -- [get_entity_from_map](#get_entity_from_map) +- [parse](#parse) +- [cell_to_pos](#cell_to_pos) +- [pos_to_cell](#pos_to_cell) - [load_tileset](#load_tileset) @@ -21,21 +23,57 @@ Set a logger instance - **Parameters:** - `[logger_instance]` *(table|detiled.logger|nil)*: -### get_entity_from_map +### parse --- ```lua -detiled.get_entity_from_map(map_or_path) +detiled.parse(map_or_path) ``` -Load a tiled map as a Decore entity -You can add this entity with `world:addEntity(entity)` +Get layers and map params from a map. Each layer has entities, properties, layer_id, visible, position (offset). - **Parameters:** - `map_or_path` *(string|detiled.map)*: - **Returns:** - - `` *(entity)*: + - `` *(table)*: + - `` *(detiled.map_params|nil)*: + +### cell_to_pos + +--- +```lua +detiled.cell_to_pos(i, j, map_params) +``` + +Convert cell indices to world position + +- **Parameters:** + - `i` *(number)*: + - `j` *(number)*: + - `map_params` *(detiled.map_params)*: + +- **Returns:** + - `` *(number)*: + - `` *(number)*: + +### pos_to_cell + +--- +```lua +detiled.pos_to_cell(x, y, map_params) +``` + +Convert world position to cell indices + +- **Parameters:** + - `x` *(number)*: + - `y` *(number)*: + - `map_params` *(detiled.map_params)*: + +- **Returns:** + - `` *(number)*: + - `` *(number)*: ### load_tileset @@ -44,10 +82,11 @@ You can add this entity with `world:addEntity(entity)` detiled.load_tileset(tileset_or_path) ``` -Load a tileset +Load a tileset to internal cache, so maps can reference it by name while parsing - **Parameters:** - - `tileset_or_path` *(string|detiled.tileset)*: + - `tileset_or_path` *(string|detiled.tileset)*: Path to tileset JSON file or tileset table - **Returns:** - `` *(detiled.tileset)*: + diff --git a/api/detiled_entity_type.md b/api/detiled_entity_type.md new file mode 100644 index 0000000..06a59bb --- /dev/null +++ b/api/detiled_entity_type.md @@ -0,0 +1,47 @@ +# detiled.entity API + +> at /detiled/internal/detiled_annotations.lua + +## Fields + +- [prefab_id](#prefab_id) +- [image](#image) +- [transform](#transform) +- [tiled_id](#tiled_id) +- [tiled_layer_id](#tiled_layer_id) +- [name](#name) +- [object_type](#object_type) +- [polyline](#polyline) +- [polygon](#polygon) + + + + +## Fields + +- **prefab_id** (_string_) + + +- **image** (_string_) + + +- **transform** (_detiled.entity.transform_) + + +- **tiled_id** (_number_) + + +- **tiled_layer_id** (_string_) + + +- **name** (_string_) + + +- **object_type** (_string_) + + +- **polyline** (_table_) + + +- **polygon** (_table_) + diff --git a/api/detiled_layer_type.md b/api/detiled_layer_type.md new file mode 100644 index 0000000..1ca738e --- /dev/null +++ b/api/detiled_layer_type.md @@ -0,0 +1,39 @@ +# detiled.layer_data API + +> at /detiled/internal/detiled_annotations.lua + +## Fields + +- [entities](#entities) +- [properties](#properties) +- [layer_id](#layer_id) +- [visible](#visible) +- [position_x](#position_x) +- [position_y](#position_y) +- [position_z](#position_z) + + + + +## Fields + +- **entities** (_detiled.entity[]_) + + +- **properties** (_detiled.map.property[]_) + + +- **layer_id** (_string_) + + +- **visible** (_boolean_) + + +- **position_x** (_number_): A layer Horizontal offset from layer settings + + +- **position_y** (_number_): A layer Vertical offset from layer settings + + +- **position_z** (_number_): A position_z custom property value from layer settings + diff --git a/detiled/detiled.lua b/detiled/detiled.lua index afc114a..384a0be 100644 --- a/detiled/detiled.lua +++ b/detiled/detiled.lua @@ -1,6 +1,6 @@ local logger = require("detiled.internal.detiled_logger") local detiled_internal = require("detiled.internal.detiled_internal") -local detiled_decore = require("detiled.internal.detiled_decore") +local detiled_parser = require("detiled.internal.detiled_parser") ---@class detiled local M = {} @@ -13,38 +13,59 @@ function M.set_logger(logger_instance) end ----Load a tiled map as a Decore entity ----You can add this entity with `world:addEntity(entity)` +---Get layers and map params from a map. Each layer has entities, properties, layer_id, visible, position (offset). ---@param map_or_path detiled.map|string ----@return entity -function M.get_entity_from_map(map_or_path) +---@return detiled.layers, detiled.map_params|nil +function M.parse(map_or_path) local map = map_or_path if type(map_or_path) == "string" then + logger:debug("Loading map", map_or_path) map = detiled_internal.load_json(map_or_path) --[[@as detiled.map]] + logger:debug("Map loaded") + if not map then logger:error("Failed to load map", map_or_path) - return {} + return {}, nil end end - ---@cast map detiled.map - local entities = detiled_decore.get_entities(map) - return { - child_instancies = entities, - } + ---@cast map -string + local layers, map_params = detiled_parser.parse(map) + + return layers, map_params +end + + +---Convert cell indices to world position +---@param i number +---@param j number +---@param map_params detiled.map_params +---@return number, number +function M.cell_to_pos(i, j, map_params) + return detiled_parser.cell_to_pos(i, j, map_params) +end + + +---Convert world position to cell indices +---@param x number +---@param y number +---@param map_params detiled.map_params +---@return number, number +function M.pos_to_cell(x, y, map_params) + return detiled_parser.pos_to_cell(x, y, map_params) end ----Load a tileset ----@param tileset_or_path detiled.tileset|string +---Load a tileset to internal cache, so maps can reference it by name while parsing +---@param tileset_or_path detiled.tileset|string Path to tileset JSON file or tileset table ---@return detiled.tileset function M.load_tileset(tileset_or_path) local tileset = tileset_or_path if type(tileset_or_path) == "string" then tileset = detiled_internal.load_json(tileset_or_path) --[[@as detiled.tileset]] end - ---@cast tileset detiled.tileset + ---@cast tileset -string return detiled_internal.load_tileset(tileset) end diff --git a/detiled/detiled_system.lua b/detiled/detiled_system.lua deleted file mode 100644 index 62a52ea..0000000 --- a/detiled/detiled_system.lua +++ /dev/null @@ -1,23 +0,0 @@ -local decore = require("decore.decore") - ----@class entity ----@field name string|nil ----@field tiled_id string|nil ----@field tiled_layer_id string|nil - -decore.register_component("name", "") -decore.register_component("tiled_id", false) -decore.register_component("tiled_layer_id", false) - - ----@class system.detiled: system -local M = {} - - ----@return system.detiled -function M.create() - return decore.system(M, "detiled") -end - - -return M diff --git a/detiled/internal/detiled_annotations.lua b/detiled/internal/detiled_annotations.lua index 043713c..74b40e1 100644 --- a/detiled/internal/detiled_annotations.lua +++ b/detiled/internal/detiled_annotations.lua @@ -1,6 +1,7 @@ ---@class detiled.tileset ---@field class string ---@field columns number +---@field image string|nil ---@field fillmode string ---@field grid detiled.tileset.grid ---@field margin number @@ -14,7 +15,7 @@ ---@field tilewidth number ---@field transformations detiled.tileset.transformations ---@field type string ----@field version string @Example: "1.9" +---@field version string Example: "1.9" ---@class detiled.tileset.grid ---@field height number @@ -77,6 +78,9 @@ ---@field type string ---@field version string ---@field width number +---@field staggeraxis string +---@field staggerindex string +---@field hexsidelength number ---@class detiled.map.layer ---@field data number[] Global tile id @@ -105,19 +109,82 @@ ---@class detiled.map.object ---@field class string +---@field ellipse boolean|nil ---@field gid number ---@field height number ---@field id number ---@field name string ----@field type string? +---@field point boolean|nil +---@field polygon table|nil +---@field polyline table|nil +---@field properties detiled.map.property[] +---@field objectgroup any ---@field rotation number +---@field type string? ---@field visible boolean ---@field width number ----@field properties detiled.map.property[] ----@field objectgroup any ---@field x number ---@field y number ---@class detiled.map.tileset ---@field firstgid number ---@field source string + +---@class detiled.entity.transform +---@field position_x number +---@field position_y number +---@field position_z number +---@field scale_x number +---@field scale_y number +---@field size_x number? +---@field size_y number? +---@field rotation number? + +---@class detiled.entity +---@field prefab_id string|nil +---@field image string|nil +---@field transform detiled.entity.transform +---@field tiled_id number|nil +---@field tiled_layer_id string|nil +---@field name string|nil +---@field object_type string|nil +---@field polyline table|nil +---@field polygon table|nil + +---@alias detiled.layers table + +---@class detiled.layer_data +---@field entities detiled.entity[] +---@field properties detiled.map.property[] +---@field layer_id string +---@field visible boolean +---@field position_x number A layer Horizontal offset from layer settings +---@field position_y number A layer Vertical offset from layer settings +---@field position_z number A position_z custom property value from layer settings + +---@class detiled.map_params.tile +---@field width number +---@field height number +---@field side number|nil + +---@class detiled.map_params.scene +---@field invert_y boolean +---@field tiles_x number +---@field tiles_y number +---@field size_x number +---@field size_y number +---@field hexmap_type string|nil +---@field stagger_index string|nil "odd" or "even" +---@field stagger_axis string|nil "x" or "y", used for staggered orientation + +---@class detiled.map_params +---@field orientation string +---@field tile detiled.map_params.tile +---@field scene detiled.map_params.scene + +---@class detiled.grid +---@field get_map_params_from_tiled fun(tiled_data: detiled.map): detiled.map_params +---@field cell_to_pos fun(i: number, j: number, map_params: detiled.map_params): number, number +---@field pos_to_cell fun(x: number, y: number, map_params: detiled.map_params): number, number +---@field get_tile_pos fun(i: number, j: number, z_layer: number|nil, map_params: detiled.map_params): number, number, number +---@field convert_object_position? fun(x: number, y: number, map_params: detiled.map_params): number, number diff --git a/detiled/internal/detiled_decore.lua b/detiled/internal/detiled_decore.lua deleted file mode 100644 index a792fdb..0000000 --- a/detiled/internal/detiled_decore.lua +++ /dev/null @@ -1,470 +0,0 @@ -local detiled_internal = require("detiled.internal.detiled_internal") -local logger = require("detiled.internal.detiled_logger") -local base64 = require("detiled.internal.base64") - -local M = {} - - ----@param layer detiled.map.layer ----@param map detiled.map ----@return decore.entities_pack_data.instance[] -local function get_entities_from_tile_layer(layer, map) - ---@type decore.entities_pack_data.instance[] - local entities = {} - - local map_height = map.height * map.tileheight - local position_z = detiled_internal.get_property_value(layer.properties, "position_z") or 0 - - local layer_data = layer.data - - if layer.encoding == "base64" then - local decoded_data = base64.decode(layer_data) --[[ @as string ]] - - if layer.compression == "zlib" then - local inflated_data = zlib.inflate(decoded_data) - local tiles = {} - - for i = 1, #inflated_data, 4 do - local b1, b2, b3, b4 = inflated_data:byte(i, i+3) - local gid = b1 + b2*256 + b3*65536 + b4*16777216 - table.insert(tiles, bit.band(gid, 0x1FFFFFFF)) - end - - layer_data = tiles - end - end - - for tile_index = 1, #layer_data do - local tile_gid = layer_data[tile_index] - local tile, tileset = detiled_internal.get_tile_by_gid(map, tile_gid) - if tile and tileset then - -- TODO: This works only for grid based maps, for isometric or hex we need to use another approach - local tile_i = ((tile_index - 1) % map.width) - local tile_j = (math.floor((tile_index - 1) / map.width)) - local pos_x = tile_i * map.tilewidth - local pos_y = tile_j * map.tileheight - - -- Center the tile position (tiles are positioned at their center, not top-left corner) - pos_x = pos_x + map.tilewidth / 2 - pos_y = pos_y + map.tileheight / 2 - - -- Apply the same coordinate transformation as objects - local map_width = map.width * map.tilewidth - pos_y = map_height - pos_y -- Flip Y axis - pos_x = pos_x - map_width / 2 -- Center X relative to map center - pos_y = pos_y - map_height / 2 -- Center Y relative to map center - - local prefab_id = tile.class or tile.type - if not prefab_id or prefab_id == "" then - -- Take from tile.image as a default prefab_id and strip path + extension - local image_path = tile.image - if image_path and image_path ~= "" then - prefab_id = detiled_internal.get_filename(image_path) - end - end - - ---@type decore.entities_pack_data.instance - local entity = {} - entity.prefab_id = prefab_id - entity.components = { - prefab_id = prefab_id, - tiled_layer_id = layer.name, - transform = { - position_x = pos_x, - position_y = pos_y, - position_z = position_z, - } - } - - table.insert(entities, entity) - end - end - - return entities -end - - ----@param layer detiled.map.layer ----@param map detiled.map ----@return decore.entities_pack_data.instance[] -local function get_entities_from_object_layer(layer, map) - ---@type decore.entities_pack_data.instance[] - local entities = {} - - local map_width = map.width * map.tilewidth - local map_height = map.height * map.tileheight - local position_z = detiled_internal.get_property_value(layer.properties, "position_z") or nil - - for object_index = 1, #layer.objects do - local object = layer.objects[object_index] - local rotation = -(object.rotation or 0) - - local object_gid = object.gid - if object_gid then -- If object has a tileset, spawn from tileset - local tile, tileset = detiled_internal.get_tile_by_gid(map, object_gid) - if tile and tileset then - local entity = {} - local position_x, position_y, scale_x, scale_y = M.get_defold_position_from_tiled_object(object, tile, map_width, map_height) - position_x = position_x + (layer.offsetx or 0) - position_y = position_y - (layer.offsety or 0) - - local prefab_id = tile.class or tile.type - - if not prefab_id or prefab_id == "" then - -- Take from tile.image as a default prefab_id and strip path + extension - local image_path = tile.image - if image_path and image_path ~= "" then - prefab_id = detiled_internal.get_filename(image_path) - end - end - - local components = { - name = object.name ~= "" and object.name or nil, - prefab_id = prefab_id, - tiled_id = tostring(object.id), - tiled_layer_id = layer.name, - - transform = { - position_x = position_x, - position_y = position_y, - position_z = position_z, - size_x = scale_x ~= 1 and object.width or nil, - size_y = scale_y ~= 1 and object.height or nil, - scale_x = scale_x ~= 1 and scale_x or nil, - scale_y = scale_y ~= 1 and scale_y or nil, - rotation = rotation, - } - } - - if tile.properties then - local tiled_components = detiled_internal.get_components_property(tile.properties) - if tiled_components then - detiled_internal.apply_components(components, tiled_components) - end - end - - if object.properties then - local tiled_components = detiled_internal.get_components_property(object.properties) - if tiled_components then - -- Unique case - if tiled_components.position_z then - components.transform.position_z = components.transform.position_z + tiled_components.position_z - tiled_components.position_z = nil - end - - detiled_internal.apply_components(components, tiled_components) - end - end - - entity.prefab_id = prefab_id - entity.components = components - - table.insert(entities, entity) - else - logger:warn("Tile is not found in tileset", { - gid = object_gid, - class = object.class, - name = object.name, - id = object.id, - }) - end - elseif object.class and object.class ~= "" then -- If object is map-created-object and has a prefab to spawn instead - local entity = {} - local position_x, position_y, scale_x, scale_y = M.get_defold_position_from_tiled_object(object, nil, map_width, map_height) - --position_y = map_height - position_y - position_x = position_x + (layer.offsetx or 0) - position_y = position_y - (layer.offsety or 0) - position_y = position_y - object.height - - local components = { - name = object.name ~= "" and object.name or nil, - prefab_id = object.class ~= "" and object.class or nil, - tiled_id = tostring(object.id), - tiled_layer_id = layer.name, - - transform = { - position_x = position_x, - position_y = position_y, - position_z = position_z, - size_x = object.width, - size_y = object.height, - scale_x = scale_x ~= 1 and scale_x or nil, - scale_y = scale_y ~= 1 and scale_y or nil, - rotation = rotation, - } - } - - if object.properties then - local tiled_components = detiled_internal.get_components_property(object.properties) - if tiled_components then - -- Unique case - if tiled_components.position_z then - components.transform.position_z = components.transform.position_z + tiled_components.position_z - tiled_components.position_z = nil - end - - detiled_internal.apply_components(components, tiled_components) - end - end - - entity.prefab_id = object.class - entity.components = components - - table.insert(entities, entity) - else -- Empty object from tiled without any prefabs - local position_x, position_y, scale_x, scale_y = M.get_defold_position_from_tiled_object(object, nil, map_width, map_height) - position_x = position_x + (layer.offsetx or 0) - position_y = position_y - (layer.offsety or 0) - position_y = position_y - object.height - - local entity = { - components = { - name = object.name ~= "" and object.name or nil, - prefab_id = object.type ~= "" and object.type or nil, - tiled_id = tostring(object.id), - tiled_layer_id = layer.name, - - transform = { - position_x = position_x, - position_y = position_y, - position_z = position_z, - size_x = object.width, - size_y = object.height, - rotation = rotation, - } - } - } - - if object.properties then - local tiled_components = detiled_internal.get_components_property(object.properties) - if tiled_components then - -- Unique case - if tiled_components.position_z then - entity.components.transform.position_z = (entity.components.transform.position_z or 0) + tiled_components.position_z - tiled_components.position_z = nil - end - - detiled_internal.apply_components(entity.components, tiled_components) - end - end - - entity.prefab_id = entity.components.prefab_id - - table.insert(entities, entity) - end - end - - return entities -end - - ----@param tiled_map detiled.map ----@return decore.entities_pack_data.instance[] -function M.get_entities(tiled_map) - ---@type decore.entities_pack_data.instance[] - local entities = {} - - for layer_index = 1, #tiled_map.layers do - local layer = tiled_map.layers[layer_index] - - if layer.type == "tilelayer" then - local layer_entities = get_entities_from_tile_layer(layer, tiled_map) - for index = 1, #layer_entities do - table.insert(entities, layer_entities[index]) - end - end - - if layer.type == "objectgroup" then - local layer_entities = get_entities_from_object_layer(layer, tiled_map) - for index = 1, #layer_entities do - table.insert(entities, layer_entities[index]) - end - end - end - - return entities -end - - ----@param tiled_map detiled.map ----@param layer_name string -function M.is_layer_excluded(tiled_map, layer_name) - for index = 1, #tiled_map.layers do - local layer = tiled_map.layers[index] - if layer.name == layer_name then - return detiled_internal.get_property_value(layer.properties, "exclude") or false - end - end - - return false -end - - ----@param object detiled.map.object ----@param tile detiled.tileset.tile|nil ----@param map_width number|nil ----@param map_height number|nil ----@return number, number, number, number -function M.get_defold_position_from_tiled_object(object, tile, map_width, map_height) - map_height = map_height or 0 - map_width = map_width or 0 - - -- Get offset from object point in Tiled to Defold assets object - -- Tiled point in left bottom, Defold - in object center - -- And add sprite anchor.x for visual correct posing from tiled (In Tiled we pos the image) - local base_width = tile and tile.imagewidth or object.width - local base_height = tile and tile.imageheight or object.height - local scale_x = 1 - local scale_y = 1 - local anchor_x = 0 - local anchor_y = 0 - - if not base_width or not base_height then - logger:warn("Base width or height is not set", { - base_width = base_width, - base_height = base_height, - object = object, - tile = tile, - }) - return 0, 0, 1, 1 - end - - if base_width > 0 and base_height > 0 then - scale_x = object.width / base_width - scale_y = object.height / base_height - end - - anchor_x = base_width / 2 - anchor_y = base_height / 2 - - do -- Search anchor - -- If object has anchor point, use it instead - if tile and tile.objectgroup then - for index = 1, #tile.objectgroup.objects do - local tile_object = tile.objectgroup.objects[index] - if tile_object.point then - anchor_x = tile_object.x - anchor_y = base_height - tile_object.y - break - end - end - end - end - - -- Rotate offset in case of rotated object - local rotation_rad = math.rad(object.rotation) - local sin = math.sin(rotation_rad) - local cos = math.cos(rotation_rad) - - local rotated_offset_x = anchor_x * cos + anchor_y * sin - local rotated_offset_y = -anchor_x * sin + anchor_y * cos - - rotated_offset_x = rotated_offset_x * scale_x - rotated_offset_y = rotated_offset_y * scale_y - - local position_x = object.x + rotated_offset_x - local position_y = map_height - (object.y - rotated_offset_y) - - -- Transform center from left bottom to center - position_x = position_x - map_width / 2 - position_y = position_y - map_height / 2 - - return position_x, position_y, scale_x, scale_y -end - - - ----@param tiled_map detiled.map ----@return decore.world.instance -function M.create_world_from_tiled_map(tiled_map) - return { entities = M.get_entities(tiled_map) } -end - - ----Split each layer to separate world, return as map of worlds ----@param world_id string ----@param tiled_map detiled.map ----@return table -function M.create_worlds_from_tiled_map(world_id, tiled_map) - local entities = M.get_entities(tiled_map) - local worlds = {} - local world_ids = {} - - for index = 1, #entities do - local entity = entities[index] - local layer_id = entity.components.layer_id - local subworld_id = world_id .. "." .. layer_id - - local world = worlds[subworld_id] or { - entities = {}, - included_worlds = {}, - } - worlds[subworld_id] = world - table.insert(world.entities, entity) - - if not M.is_layer_excluded(tiled_map, layer_id) then - world_ids[subworld_id] = true - end - end - - local main_world = worlds[world_id] or { - entities = {}, - included_worlds = {}, - } - worlds[world_id] = main_world - - for subworld_id in pairs(world_ids) do - table.insert(main_world.included_worlds, { - world_id = subworld_id, - }) - end - - return worlds -end - - ----@param tiled_tileset_path string ----@return table -function M.create_entities_from_tiled_tileset(tiled_tileset_path) - local tileset = M.load_tileset(tiled_tileset_path) - return M.get_decore_entities(tileset) -end - - ----@param tileset_path string ----@return detiled.tileset -function M.load_tileset(tileset_path) - local tileset = detiled_internal.load_json(tileset_path) - if not tileset then - logger:error("Failed to load tileset", tileset_path) - return {} - end - - logger:debug("Loaded tileset", tileset_path) - detiled_internal.load_tileset(tileset) - - return tileset -end - ----@param tiled_tileset detiled.tileset ----@return table entities Key is prefab_id -function M.get_decore_entities(tiled_tileset) - ---@type entity[] - local entities = {} - - local tiles = tiled_tileset.tiles - for index = 1, #tiles do - local tile = tiles[index] - local prefab_id = tile.type - ---@type entity - local entity = detiled_internal.get_components_property(tile.properties) or {} - assert(prefab_id, "The class field in entity in tiled tileset should be set") - entities[prefab_id] = entity - end - - return entities -end - - - -return M diff --git a/detiled/internal/detiled_internal.lua b/detiled/internal/detiled_internal.lua index 06ad754..29b52a1 100644 --- a/detiled/internal/detiled_internal.lua +++ b/detiled/internal/detiled_internal.lua @@ -1,3 +1,5 @@ +local base64 = require("detiled.internal.base64") + local LOADED_TILESETS = {} local M = {} @@ -125,11 +127,27 @@ function M.load_tileset(tileset) end +local GID_FLIP_H = 0x80000000 +local GID_FLIP_V = 0x40000000 +local GID_FLIP_D = 0x20000000 +local GID_MASK = 0x0FFFFFFF + +---Parse Tiled global tile ID into cleared id and flip flags (see https://doc.mapeditor.org/en/stable/reference/global-tile-ids/) +---@param gid number +---@return number cleared_gid, boolean flip_h, boolean flip_v, boolean flip_d +function M.parse_gid_flags(gid) + local flip_h = (bit.band(gid, GID_FLIP_H) ~= 0) + local flip_v = (bit.band(gid, GID_FLIP_V) ~= 0) + local flip_d = (bit.band(gid, GID_FLIP_D) ~= 0) + local cleared = bit.band(gid, GID_MASK) + return cleared, flip_h, flip_v, flip_d +end + + ---@param map detiled.map ---@param tile_global_id number ---@return detiled.tileset.tile|nil, detiled.tileset|nil function M.get_tile_by_gid(map, tile_global_id) - -- TODO: is always tilesets goes in sorted order? for tileset_index = #map.tilesets, 1, -1 do local tileset = map.tilesets[tileset_index] local first_gid = tileset.firstgid @@ -159,10 +177,11 @@ end ---@param properties detiled.map.property[] ---@param property_name string +---@param default_value any|nil ---@return any|nil -function M.get_property_value(properties, property_name) +function M.get_property_value(properties, property_name, default_value) if not properties then - return nil + return default_value end for index = 1, #properties do @@ -172,7 +191,7 @@ function M.get_property_value(properties, property_name) end end - return nil + return default_value end @@ -216,7 +235,7 @@ function M.merge_tables(t1, t2) end ----@param entity entity +---@param entity table ---@param components table function M.apply_components(entity, components) for component_id, component_data in pairs(components) do @@ -230,4 +249,105 @@ function M.apply_components(entity, components) end +---@param entity detiled.entity +---@param tile detiled.tileset.tile|nil +function M.apply_tile_properties_to_entity(entity, tile) + if not tile or not tile.properties then return end + local tiled_components = M.get_components_property(tile.properties) + if tiled_components then + M.apply_components(entity, tiled_components) + end +end + + +---@param entity detiled.entity +---@param object detiled.map.object +function M.apply_object_properties_to_entity(entity, object) + if not object.properties then return end + local tiled_components = M.get_components_property(object.properties) + if not tiled_components then return end + if tiled_components.position_z then + entity.transform.position_z = (entity.transform.position_z or 0) + tiled_components.position_z + tiled_components.position_z = nil + end + M.apply_components(entity, tiled_components) +end + + +---@param tiled_map detiled.map +---@param layer_name string +---@return boolean +function M.is_layer_excluded(tiled_map, layer_name) + for index = 1, #tiled_map.layers do + local layer = tiled_map.layers[index] + if layer.name == layer_name then + return M.get_property_value(layer.properties, "exclude", false) + end + end + return false +end + + +---@param tile detiled.tileset.tile +---@return string|nil +function M.get_prefab_id_from_tile(tile) + local prefab_id = tile.class or tile.type + if not prefab_id or prefab_id == "" then + local image_path = tile.image + if image_path and image_path ~= "" then + prefab_id = M.get_filename(image_path) + end + end + return prefab_id +end + + +---@param tile detiled.tileset.tile +---@param tileset detiled.tileset +---@return string|nil +function M.get_image_name_from_tile(tile, tileset) + local image_path = tile.image or (tileset and tileset["image"]) + if not image_path or image_path == "" then + return nil + end + return M.get_filename(image_path) +end + + +---@param layer detiled.map.layer +---@return number[]|string layer data as array of GIDs or raw data +function M.unpack_tile_layer_data(layer) + local layer_data = layer.data + if layer.encoding == "base64" then + local decoded_data = base64.decode(layer_data) --[[ @as string ]] + if layer.compression == "zlib" then + local inflated_data = zlib.inflate(decoded_data) + local tiles = {} + for i = 1, #inflated_data, 4 do + local b1, b2, b3, b4 = inflated_data:byte(i, i + 3) + local gid = b1 + b2 * 256 + b3 * 65536 + b4 * 16777216 + table.insert(tiles, gid) + end + layer_data = tiles + end + end + return layer_data +end + + +---Rotated and scaled 2D offset (anchor or anchor relative to origin). +---@param ax number +---@param ay number +---@param scale_x number +---@param scale_y number +---@param cos number +---@param sin number +---@return number, number +function M.rotated_anchor_offset(ax, ay, scale_x, scale_y, cos, sin) + local rx = ax * cos + ay * sin + local ry = -ax * sin + ay * cos + return rx * scale_x, ry * scale_y +end + + return M diff --git a/detiled/internal/detiled_logger.lua b/detiled/internal/detiled_logger.lua index 16ba001..748f600 100644 --- a/detiled/internal/detiled_logger.lua +++ b/detiled/internal/detiled_logger.lua @@ -6,32 +6,74 @@ ---@field error fun(_, msg: string, data: any) local M = {} -local NOOP = function() end +local EMPTY = function(_, message, context) end + ---@type detiled.logger local empty_logger = { - trace = NOOP, - debug = NOOP, - info = NOOP, - warn = NOOP, - error = NOOP, + trace = EMPTY, + debug = EMPTY, + info = EMPTY, + warn = EMPTY, + error = EMPTY, } ---@type detiled.logger local default_logger = { - trace = function(_, msg, data) print("TRACE: " .. msg, data) end, - debug = function(_, msg, data) print("DEBUG: " .. msg, data) end, - info = function(_, msg, data) print("INFO: " .. msg, data) end, - warn = function(_, msg, data) print("WARN: " .. msg, data) end, - error = function(_, msg, data) print("ERROR: " .. msg, data) end + trace = function(_, msg, data) print("TRACE: " .. msg, M.table_to_string(data)) end, + debug = function(_, msg, data) print("DEBUG: " .. msg, M.table_to_string(data)) end, + info = function(_, msg, data) print("INFO: " .. msg, M.table_to_string(data)) end, + warn = function(_, msg, data) print("WARN: " .. msg, M.table_to_string(data)) end, + error = function(_, msg, data) print("ERROR: " .. msg, M.table_to_string(data)) end } local METATABLE = { __index = default_logger } ----@param logger detiled.logger|table|nil function M.set_logger(logger) METATABLE.__index = logger or empty_logger end + +---Converts table to one-line string +---@param t table +---@param depth number? +---@param result string|nil Internal parameter +---@return string, boolean result String representation of table, Is max string length reached +function M.table_to_string(t, depth, result) + if type(t) ~= "table" then + return tostring(t) or "", false + end + + depth = depth or 0 + result = result or "{" + + for key, value in pairs(t) do + if #result > 1 then + result = result .. ", " + end + + if type(value) == "table" then + if depth == 0 then + local table_len = 0 + for _ in pairs(value) do + table_len = table_len + 1 + end + result = result .. key .. ": {... #" .. table_len .. "}" + else + local convert_result, is_limit = M.table_to_string(value, depth - 1, "") + result = result .. key .. ": {" .. convert_result + if is_limit then + break + end + end + else + result = result .. key .. ": " .. tostring(value) + end + end + + return result .. "}", false +end + + return setmetatable(M, METATABLE) diff --git a/detiled/internal/detiled_parser.lua b/detiled/internal/detiled_parser.lua new file mode 100644 index 0000000..7ae888d --- /dev/null +++ b/detiled/internal/detiled_parser.lua @@ -0,0 +1,343 @@ +local detiled_internal = require("detiled.internal.detiled_internal") +local logger = require("detiled.internal.detiled_logger") + +local floor = math.floor +local math_rad = math.rad +local math_cos = math.cos +local math_sin = math.sin +local table_insert = table.insert + +local M = {} + +---@type table +local GRID_MODULES = { + ["orthogonal"] = require("detiled.internal.grid.orthogonal"), + ["isometric"] = require("detiled.internal.grid.isometric"), + ["staggered"] = require("detiled.internal.grid.isometric_staggered"), + ["hexagonal"] = require("detiled.internal.grid.hexagonal_staggered"), +} + + +---@param object detiled.map.object +---@return "point"|"ellipse"|"polyline"|"polygon"|"rectangle"|nil +local function get_object_type(object) + if object.point then + return "point" + end + if object.ellipse then + return "ellipse" + end + if object.polyline and #object.polyline > 0 then + return "polyline" + end + if object.polygon and #object.polygon > 0 then + return "polygon" + end + if not object.gid and (object.width and object.width > 0 or object.height and object.height > 0) then + return "rectangle" + end + return nil +end + + +---@param layer detiled.map.layer +---@param prefab_id string|nil +---@param position_x number +---@param position_y number +---@param scale_x number +---@param scale_y number +---@param rotation number +---@param object detiled.map.object|nil +---@param image string|nil +---@return detiled.entity +local function make_entity(layer, prefab_id, position_x, position_y, scale_x, scale_y, rotation, object, image) + local position_z = detiled_internal.get_property_value(layer.properties, "position_z", 0) + ---@type detiled.entity + local entity = { + prefab_id = prefab_id, + image = image, + transform = { + position_x = position_x, + position_y = position_y, + position_z = position_z, + scale_x = scale_x, + scale_y = scale_y, + rotation = rotation ~= 0 and rotation or nil, + }, + } + + if object then + entity.name = object.name ~= "" and object.name or nil + entity.tiled_id = tonumber(object.id) + if not entity.prefab_id then + entity.transform.size_x = object.width + entity.transform.size_y = object.height + end + entity.object_type = get_object_type(object) + if object.polyline then + entity.polyline = object.polyline + end + if object.polygon then + entity.polygon = object.polygon + end + end + + return entity +end + + +---@param layer detiled.map.layer +---@param map detiled.map +---@param grid_module table +---@param map_params detiled.map_params +---@return detiled.entity[] +local function get_entities_from_tile_layer(layer, map, grid_module, map_params) + local entities = {} + + local layer_data = detiled_internal.unpack_tile_layer_data(layer) + + for tile_index = 1, #layer_data do + local tile_gid = layer_data[tile_index] + local cleared_gid, flip_h, flip_v, flip_d = detiled_internal.parse_gid_flags(tile_gid) + local tile, tileset = detiled_internal.get_tile_by_gid(map, cleared_gid) + if tile and tileset then + local tile_i = ((tile_index - 1) % map.width) + local tile_j = (floor((tile_index - 1) / map.width)) + local pos_x, pos_y = grid_module.cell_to_pos(tile_i, tile_j, map_params) + local prefab_id = detiled_internal.get_prefab_id_from_tile(tile) + local image = detiled_internal.get_image_name_from_tile(tile, tileset) + local scale_x = flip_h and -1 or 1 + local scale_y = flip_v and -1 or 1 + local rotation = flip_d and -90 or 0 + local entity = make_entity(layer, prefab_id, pos_x, pos_y, scale_x, scale_y, rotation, nil, image) + detiled_internal.apply_tile_properties_to_entity(entity, tile) + + table_insert(entities, entity) + end + end + + return entities +end + + +---@param layer detiled.map.layer +---@param map detiled.map +---@param grid_module table +---@param map_params detiled.map_params +---@return detiled.entity[] +local function get_entities_from_object_layer(layer, map, grid_module, map_params) + local entities = {} + + local map_width = map_params.scene.size_x + local map_height = map_params.scene.size_y + + for object_index = 1, #layer.objects do + local object = layer.objects[object_index] + local rotation = -(object.rotation or 0) + local object_gid = object.gid + + if object_gid then + local cleared_gid, flip_h, flip_v, flip_d = detiled_internal.parse_gid_flags(object_gid) + local tile, tileset = detiled_internal.get_tile_by_gid(map, cleared_gid) + if not tile or not tileset then + logger:warn("Tile is not found in tileset", { + gid = object_gid, + class = object.class, + name = object.name, + id = object.id, + }) + else + local position_x, position_y, scale_x, scale_y = M.get_defold_position_from_tiled_object(object, tile, map_width, map_height, map_params) + if flip_h then scale_x = -scale_x end + if flip_v then scale_y = -scale_y end + if flip_d then rotation = rotation - 90 end + local prefab_id = detiled_internal.get_prefab_id_from_tile(tile) + local image = detiled_internal.get_image_name_from_tile(tile, tileset) + local entity = make_entity(layer, prefab_id, position_x, position_y, scale_x, scale_y, rotation, object, image) + detiled_internal.apply_tile_properties_to_entity(entity, tile) + detiled_internal.apply_object_properties_to_entity(entity, object) + table_insert(entities, entity) + end + else + local position_x, position_y, scale_x, scale_y = M.get_defold_position_from_tiled_object(object, nil, map_width, map_height, map_params) + position_y = position_y - object.height + + local prefab_id = (object.class and object.class ~= "") and object.class or (object.type ~= "" and object.type or nil) + local use_scale = object.class and object.class ~= "" + local entity_scale_x = use_scale and scale_x or 1 + local entity_scale_y = use_scale and scale_y or 1 + local entity = make_entity(layer, prefab_id, position_x, position_y, entity_scale_x, entity_scale_y, rotation, object, nil) + detiled_internal.apply_object_properties_to_entity(entity, object) + table_insert(entities, entity) + end + end + + return entities +end + + +---@param tiled_map detiled.map +---@return table, detiled.map_params|nil +function M.parse(tiled_map) + local layers = {} + local grid_module = GRID_MODULES[tiled_map.orientation] + local map_params = grid_module and grid_module.get_map_params_from_tiled(tiled_map) or nil + + for layer_index = 1, #tiled_map.layers do + local layer = tiled_map.layers[layer_index] + if not detiled_internal.is_layer_excluded(tiled_map, layer.name) then + + ---@type detiled.layer_data + local layer_data = { + entities = {}, + properties = layer.properties or {}, + layer_id = layer.name, + visible = layer.visible ~= false, + position_x = layer.offsetx or 0, + position_y = layer.offsety or 0, + position_z = detiled_internal.get_property_value(layer.properties, "position_z", 0), + } + + if layer.type == "tilelayer" then + layer_data.entities = get_entities_from_tile_layer(layer, tiled_map, grid_module, map_params) + end + + if layer.type == "objectgroup" then + layer_data.entities = get_entities_from_object_layer(layer, tiled_map, grid_module, map_params) + end + + if #layer_data.entities > 0 or layer.type == "tilelayer" or layer.type == "objectgroup" then + layers[layer.name] = layer_data + end + end + end + + return layers, map_params +end + + +---@param i number +---@param j number +---@param map_params detiled.map_params +---@return number, number +function M.cell_to_pos(i, j, map_params) + local grid = GRID_MODULES[map_params.orientation] + return grid.cell_to_pos(i, j, map_params) +end + + +---@param x number +---@param y number +---@param map_params detiled.map_params +---@return number, number +function M.pos_to_cell(x, y, map_params) + local grid = GRID_MODULES[map_params.orientation] + return grid.pos_to_cell(x, y, map_params) +end + + +---@param object detiled.map.object +---@param tile detiled.tileset.tile|nil +---@param map_width number|nil +---@param map_height number|nil +---@param map_params detiled.map_params|nil +---@return number, number, number, number +function M.get_defold_position_from_tiled_object(object, tile, map_width, map_height, map_params) + map_height = map_height or 0 + map_width = map_width or 0 + + if not tile and (not object.width or object.width == 0 or not object.height or object.height == 0) then + local grid = map_params and GRID_MODULES[map_params.orientation] + if grid and grid.convert_object_position and map_params then + local position_x, position_y = grid.convert_object_position(object.x, object.y, map_params) + return position_x, position_y, 1, 1 + end + local position_y = object.y + if map_params and map_params.scene.invert_y then + position_y = map_height - position_y + end + return object.x, position_y, 1, 1 + end + + -- Offset from object point in Tiled to sprite anchor (default center). Origin (0,0) at map left bottom. + local base_width = tile and tile.imagewidth or object.width + local base_height = tile and tile.imageheight or object.height + local scale_x = 1 + local scale_y = 1 + local anchor_x = 0 + local anchor_y = 0 + + if not base_width or not base_height then + logger:warn("Base width or height is not set", { + base_width = base_width, + base_height = base_height, + object = object, + tile = tile, + }) + return 0, 0, 1, 1 + end + + if base_width > 0 and base_height > 0 then + scale_x = object.width / base_width + scale_y = object.height / base_height + end + + anchor_x = base_width / 2 + anchor_y = base_height / 2 + + -- Find the object point in Tiled to sprite anchor + if tile and tile.objectgroup then + for index = 1, #tile.objectgroup.objects do + local tile_object = tile.objectgroup.objects[index] + if tile_object.point then + anchor_x = tile_object.x + anchor_y = base_height - tile_object.y + break + end + end + end + + local rotation_rad = math_rad(object.rotation) + local cos = math_cos(rotation_rad) + local sin = math_sin(rotation_rad) + + local position_x, position_y + local grid = map_params and GRID_MODULES[map_params.orientation] + + if grid and grid.convert_object_position and map_params then + position_x, position_y = grid.convert_object_position(object.x, object.y, map_params) + anchor_x = anchor_x - base_width / 2 + + local offset_x, offset_y = detiled_internal.rotated_anchor_offset(anchor_x, anchor_y, scale_x, scale_y, cos, sin) + position_x = position_x + offset_x + position_y = position_y + offset_y + else + local offset_x, offset_y = detiled_internal.rotated_anchor_offset(anchor_x, anchor_y, scale_x, scale_y, cos, sin) + position_x = object.x + offset_x + position_y = object.y - offset_y + if map_params and map_params.scene.invert_y then + position_y = map_height - position_y + end + end + + return position_x, position_y, scale_x, scale_y +end + + +---@param tileset_path string +---@return detiled.tileset +function M.load_tileset(tileset_path) + local tileset = detiled_internal.load_json(tileset_path) + if not tileset then + logger:error("Failed to load tileset", tileset_path) + return {} + end + + logger:debug("Loaded tileset", tileset_path) + detiled_internal.load_tileset(tileset) + + return tileset +end + + +return M diff --git a/detiled/internal/grid/hexagonal_flattop.lua b/detiled/internal/grid/hexagonal_flattop.lua new file mode 100644 index 0000000..558a86b --- /dev/null +++ b/detiled/internal/grid/hexagonal_flattop.lua @@ -0,0 +1,112 @@ +---@class detiled.grid.hexagonal_flattop: detiled.grid +local M = {} + + +---@param x number +---@return number +local function round(x) + return math.floor(x + 0.5) +end + + +---@param idx number +---@param stagger_index string +---@return number +local function stagger_offset(idx, stagger_index) + if stagger_index == "even" then + return 0.5 * (1 - bit.band(idx, 1)) + end + return 0.5 * bit.band(idx, 1) +end + + +---@param i number +---@param j number +---@param data detiled.map_params +---@return number, number +function M.cell_to_pos(i, j, data) + local part_size = data.tile.width - data.tile.side + local two_hex_width = data.tile.side * 2 + part_size + local stagger_index = data.scene.stagger_index or "odd" + + local x = two_hex_width / 2 * i + local y = data.tile.height * (j + stagger_offset(i, stagger_index)) + + if data.scene.invert_y then + y = data.scene.size_y - y + end + + x = x + part_size + y = y + (data.scene.invert_y and -data.tile.height/2 or data.tile.height/2) + + return x, y +end + + +---@param x number +---@param y number +---@param map_params detiled.map_params +---@return number, number +function M.pos_to_cell(x, y, map_params) + local data = map_params + local stagger_index = data.scene.stagger_index or "odd" + + local part_size = data.tile.width - data.tile.side + local two_hex_width = data.tile.side * 2 + part_size + + x = x - part_size + y = y - (data.scene.invert_y and -data.tile.height/2 or data.tile.height/2) + + if data.scene.invert_y then + y = data.scene.size_y - y + end + + local i = round(2 * x / two_hex_width) + local j = round(y / data.tile.height - stagger_offset(i, stagger_index)) + + return i, j +end + + +---@param i number +---@param j number +---@param k number +---@param map_params detiled.map_params +---@return number, number +function M.cell_cube_to_pos(i, j, k, map_params) + local offset_i, offset_j = M.cube_to_offset(i, j, k, map_params) + return M.cell_to_pos(offset_i, offset_j, map_params) +end + + +---@param x number +---@param y number +---@param map_params detiled.map_params +---@return number, number, number +function M.pos_to_cell_cube(x, y, map_params) + local offset_i, offset_j = M.pos_to_cell(x, y, map_params) + return M.offset_to_cube(offset_i, offset_j, map_params) +end + + +---@param i number +---@param j number +---@param k number +---@param map_params detiled.map_params +---@return number, number +function M.cube_to_offset(i, j, k, map_params) + return i, k + (i - bit.band(i, 1)) / 2 +end + + +---@param i number +---@param j number +---@param map_params detiled.map_params +---@return number, number, number +function M.offset_to_cube(i, j, map_params) + local z = j - (i - bit.band(i, 1)) / 2 + return i, -i - z, z +end + + +return M diff --git a/detiled/internal/grid/hexagonal_pointytop.lua b/detiled/internal/grid/hexagonal_pointytop.lua new file mode 100644 index 0000000..38b5063 --- /dev/null +++ b/detiled/internal/grid/hexagonal_pointytop.lua @@ -0,0 +1,111 @@ +---@class detiled.grid.hexagonal_pointytop: detiled.grid +local M = {} + +---@param x number +---@return number +local function round(x) + return math.floor(x + 0.5) +end + + +---@param idx number +---@param stagger_index string +---@return number +local function stagger_offset(idx, stagger_index) + if stagger_index == "even" then + return 0.5 * (1 - bit.band(idx, 1)) + end + return 0.5 * bit.band(idx, 1) +end + + +---@param i number +---@param j number +---@param data detiled.map_params +---@return number, number +function M.cell_to_pos(i, j, data) + local part_size = data.tile.height - data.tile.side + local two_hex_height = data.tile.side * 2 + part_size + local stagger_index = data.scene.stagger_index or "odd" + + local x = data.tile.width * (i + stagger_offset(j, stagger_index)) + local y = two_hex_height / 2 * j + + if data.scene.invert_y then + y = data.scene.size_y - y + end + + x = x + data.tile.width/2 + y = y + (data.scene.invert_y and -part_size or part_size) + + return x, y +end + + +---@param x number +---@param y number +---@param map_params detiled.map_params +---@return number, number +function M.pos_to_cell(x, y, map_params) + local data = map_params + local stagger_index = data.scene.stagger_index or "odd" + + local part_size = data.tile.height - data.tile.side + local two_hex_height = data.tile.side * 2 + part_size + + x = x - data.tile.width/2 + y = y - (data.scene.invert_y and -part_size or part_size) + + if data.scene.invert_y then + y = data.scene.size_y - y + end + + local j = round(2 * y / two_hex_height) + local i = round(x / data.tile.width - stagger_offset(j, stagger_index)) + + return i, j +end + + +---@param i number +---@param j number +---@param k number +---@param map_params detiled.map_params +---@return number, number +function M.cell_cube_to_pos(i, j, k, map_params) + local offset_i, offset_j = M.cube_to_offset(i, j, k, map_params) + return M.cell_to_pos(offset_i, offset_j, map_params) +end + + +---@param x number +---@param y number +---@param map_params detiled.map_params +---@return number, number, number +function M.pos_to_cell_cube(x, y, map_params) + local offset_i, offset_j = M.pos_to_cell(x, y, map_params) + return M.offset_to_cube(offset_i, offset_j, map_params) +end + + +---@param i number +---@param j number +---@param k number +---@param map_params detiled.map_params +---@return number, number +function M.cube_to_offset(i, j, k, map_params) + return i + (k - bit.band(k, 1)) / 2, k +end + + +---@param i number +---@param j number +---@param map_params detiled.map_params +---@return number, number, number +function M.offset_to_cube(i, j, map_params) + local x = i - (j - bit.band(j, 1)) / 2 + return x, -x - j, j +end + + +return M diff --git a/detiled/internal/grid/hexagonal_staggered.lua b/detiled/internal/grid/hexagonal_staggered.lua new file mode 100644 index 0000000..39749c3 --- /dev/null +++ b/detiled/internal/grid/hexagonal_staggered.lua @@ -0,0 +1,146 @@ +local hexagonal_pointytop = require("detiled.internal.grid.hexagonal_pointytop") +local hexagonal_flattop = require("detiled.internal.grid.hexagonal_flattop") + +---@class detiled.grid.hexagonal: detiled.grid +local M = {} + +local HEXMAP_TYPE = { + POINTYTOP = "pointytop", + FLATTOP = "flattop", +} + + +---@param data detiled.map_params +---@return number, number +local function get_scene_size_pointytop(data) + local tile_width = data.tile.width + local tile_height = data.tile.height + local tile_side = data.tile.side + local tile_count_x = data.scene.tiles_x + local tile_count_y = data.scene.tiles_y + local tile_angle = tile_height - tile_side + local tile_angle_half = tile_angle / 2 + + local width = (tile_count_x + 0.5) * tile_width + local height = (tile_count_y * tile_side) + ((tile_count_y + 1) * tile_angle_half) + return width, height +end + + +---@param data detiled.map_params +---@return number, number +local function get_scene_size_flattop(data) + local tile_width = data.tile.width + local tile_height = data.tile.height + local tile_side = data.tile.side + local tile_angle = tile_width - tile_side + local tile_angle_half = tile_angle / 2 + + local tile_count_x = data.scene.tiles_x + local tile_count_y = data.scene.tiles_y + + local width = (tile_count_x * tile_side) + ((tile_count_x + 1) * tile_angle_half) + local height = (tile_count_y * tile_height) + tile_height/2 + + return width, height +end + + +---@param map_params detiled.map_params +---@return number, number +local function get_scene_size(map_params) + local data = map_params + + if data.scene.hexmap_type == HEXMAP_TYPE.FLATTOP then + return get_scene_size_flattop(data) + else + return get_scene_size_pointytop(data) + end +end + + +---@param tiled_data detiled.map +---@return detiled.map_params +function M.get_map_params_from_tiled(tiled_data) + local hexmap_type = HEXMAP_TYPE.POINTYTOP + if tiled_data.staggeraxis == "x" then + hexmap_type = HEXMAP_TYPE.FLATTOP + end + + local stagger_index = tiled_data.staggerindex or "odd" + + local map_params = {} + map_params.orientation = "hexagonal" + map_params.tile = { + width = tiled_data.tilewidth - 1, + height = tiled_data.tileheight - 1, + side = tiled_data.hexsidelength or 0, + } + map_params.scene = { + invert_y = true, + tiles_x = tiled_data.width, + tiles_y = tiled_data.height, + size_x = 0, + size_y = 0, + hexmap_type = hexmap_type, + stagger_index = stagger_index, + } + + local size_x, size_y = get_scene_size(map_params) + map_params.scene.size_x = size_x + map_params.scene.size_y = size_y + + return map_params +end + + +---@param i number +---@param j number +---@param map_params detiled.map_params +---@return number, number +function M.cell_to_pos(i, j, map_params) + if map_params.scene.hexmap_type == HEXMAP_TYPE.POINTYTOP then + return hexagonal_pointytop.cell_to_pos(i, j, map_params) + end + if map_params.scene.hexmap_type == HEXMAP_TYPE.FLATTOP then + return hexagonal_flattop.cell_to_pos(i, j, map_params) + end + + return 0, 0 +end + + +---@param x number +---@param y number +---@param map_params detiled.map_params +---@return number, number +function M.pos_to_cell(x, y, map_params) + if map_params.scene.hexmap_type == HEXMAP_TYPE.POINTYTOP then + return hexagonal_pointytop.pos_to_cell(x, y, map_params) + end + if map_params.scene.hexmap_type == HEXMAP_TYPE.FLATTOP then + return hexagonal_flattop.pos_to_cell(x, y, map_params) + end + + return 0, 0 +end + + +---@param i number +---@param j number +---@param z_layer number|nil +---@param map_params detiled.map_params +---@return number, number, number +function M.get_tile_pos(i, j, z_layer, map_params) + z_layer = z_layer or 0 + local x, y = M.cell_to_pos(i, j, map_params) + + local y_value = (y - z_layer * 100000) + y_value = map_params.scene.size_y - y_value + local z_pos = y_value / 100000 + + return x, y, z_pos +end + + +return M diff --git a/detiled/internal/grid/isometric.lua b/detiled/internal/grid/isometric.lua new file mode 100644 index 0000000..0d01652 --- /dev/null +++ b/detiled/internal/grid/isometric.lua @@ -0,0 +1,131 @@ +---@class detiled.grid.isometric: detiled.grid +local M = {} + +---@param map_params detiled.map_params +---@return number, number +local function get_scene_size(map_params) + local data = map_params + local w = data.scene.tiles_x + local h = data.scene.tiles_y + local tw = data.tile.width + local th = data.tile.height + local size_x = (w + h) * (tw / 2) + local size_y = (w + h) * (th / 2) + + return size_x, size_y +end + + +---@param tiled_data detiled.map +---@return detiled.map_params +function M.get_map_params_from_tiled(tiled_data) + local map_params = {} + map_params.orientation = "isometric" + map_params.tile = { + width = tiled_data.tilewidth, + height = tiled_data.tileheight, + } + map_params.scene = { + invert_y = true, + tiles_x = tiled_data.width, + tiles_y = tiled_data.height, + size_x = 0, + size_y = 0, + } + + local size_x, size_y = get_scene_size(map_params) + map_params.scene.size_x = size_x + map_params.scene.size_y = size_y + + return map_params +end + + +---@param i number +---@param j number +---@param map_params detiled.map_params +---@return number, number +function M.cell_to_pos(i, j, map_params) + local data = map_params + local tile_count_y = data.scene.tiles_y + local tile_width = data.tile.width + local tile_height = data.tile.height + + local x = (i - j + tile_count_y) * (tile_width / 2) + 1 + local y = (i + j) * (tile_height / 2) + + if data.scene.invert_y then + y = data.scene.size_y - y + end + + y = y + (data.scene.invert_y and -tile_height / 2 or tile_height / 2) + + return x, y +end + + +---@param x number +---@param y number +---@param map_params detiled.map_params +---@return number, number +function M.pos_to_cell(x, y, map_params) + local data = map_params + local tile_count_y = data.scene.tiles_y + local tile_width = data.tile.width + local tile_height = data.tile.height + + local sum_ij + if data.scene.invert_y then + sum_ij = 2 * (data.scene.size_y - tile_height / 2 - y) / tile_height + else + y = y - tile_height / 2 + sum_ij = 2 * y / tile_height + end + + local diff_ij = 2 * x / tile_width - tile_count_y + local i = (sum_ij + diff_ij) / 2 + local j = (sum_ij - diff_ij) / 2 + + return math.floor(i + 0.5), math.floor(j + 0.5) +end + + +---@param x number +---@param y number +---@param map_params detiled.map_params +---@return number, number +function M.convert_object_position(x, y, map_params) + local tile_count_y = map_params.scene.tiles_y + local tile_width = map_params.tile.width + local tile_height = map_params.tile.height + + local origin_x = (tile_count_y) * (tile_width / 2) + local origin_y = map_params.scene.size_y - (tile_height / 2) + + local offset_x = x - y + local offset_y = (tile_height - x - y)/2 + + local out_x = origin_x + offset_x + local out_y = origin_y + offset_y + return out_x, out_y +end + + +---@param i number +---@param j number +---@param z_layer number|nil +---@param map_params detiled.map_params +---@return number, number, number +function M.get_tile_pos(i, j, z_layer, map_params) + z_layer = z_layer or 0 + local x, y = M.cell_to_pos(i, j, map_params) + + local y_value = (y - z_layer * 100000) + y_value = map_params.scene.size_y - y_value + local z_pos = y_value / 100000 + + return x, y, z_pos +end + + +return M diff --git a/detiled/internal/grid/isometric_staggered.lua b/detiled/internal/grid/isometric_staggered.lua new file mode 100644 index 0000000..3927a66 --- /dev/null +++ b/detiled/internal/grid/isometric_staggered.lua @@ -0,0 +1,148 @@ +---@class detiled.grid.staggered: detiled.grid +local M = {} + +local STAGGER_AXIS = { + X = "x", + Y = "y", +} + + +---@param idx number +---@param stagger_index string +---@return number +local function stagger_offset(idx, stagger_index) + if stagger_index == "even" then + return 0.5 * (1 - bit.band(idx, 1)) + end + return 0.5 * bit.band(idx, 1) +end + + +---@param map_params detiled.map_params +---@return number, number +local function get_scene_size(map_params) + local data = map_params + local tw = data.tile.width + local th = data.tile.height + local nx = data.scene.tiles_x + local ny = data.scene.tiles_y + local axis = data.scene.stagger_axis or STAGGER_AXIS.Y + + if axis == STAGGER_AXIS.X then + local width = nx * (tw / 2) + tw / 2 + local height = ny * th + th / 2 + return width, height + end + + local width = nx * tw + tw / 2 + local height = th + (ny - 1) * (th / 2) + return width, height +end + + +---@param tiled_data detiled.map +---@return detiled.map_params +function M.get_map_params_from_tiled(tiled_data) + local stagger_axis = tiled_data.staggeraxis or "y" + local stagger_index = tiled_data.staggerindex or "odd" + + local map_params = {} + map_params.orientation = "staggered" + map_params.tile = { + width = tiled_data.tilewidth, + height = tiled_data.tileheight, + } + map_params.scene = { + invert_y = true, + tiles_x = tiled_data.width, + tiles_y = tiled_data.height, + size_x = 0, + size_y = 0, + stagger_axis = stagger_axis, + stagger_index = stagger_index, + } + + local size_x, size_y = get_scene_size(map_params) + map_params.scene.size_x = size_x + map_params.scene.size_y = size_y + + return map_params +end + + +---@param i number +---@param j number +---@param map_params detiled.map_params +---@return number, number +function M.cell_to_pos(i, j, map_params) + local data = map_params + local axis = data.scene.stagger_axis or STAGGER_AXIS.Y + local stagger_index = data.scene.stagger_index or "odd" + local x, y + + if axis == STAGGER_AXIS.X then + x = data.tile.width / 2 * i + y = data.tile.height * (j + stagger_offset(i, stagger_index)) + else + x = data.tile.width * (i + stagger_offset(j, stagger_index)) + y = data.tile.height / 2 * j + end + + if data.scene.invert_y then + y = data.scene.size_y - y + end + + x = x + data.tile.width / 2 + y = y + (data.scene.invert_y and -data.tile.height / 2 or data.tile.height / 2) + + return x, y +end + + +---@param x number +---@param y number +---@param map_params detiled.map_params +---@return number, number +function M.pos_to_cell(x, y, map_params) + local data = map_params + local axis = data.scene.stagger_axis or STAGGER_AXIS.Y + local stagger_index = data.scene.stagger_index or "odd" + + x = x - data.tile.width / 2 + y = y - (data.scene.invert_y and -data.tile.height / 2 or data.tile.height / 2) + + if data.scene.invert_y then + y = data.scene.size_y - y + end + + local i, j + if axis == STAGGER_AXIS.X then + i = math.floor(2 * x / data.tile.width + 0.5) + j = math.floor(y / data.tile.height - stagger_offset(i, stagger_index) + 0.5) + else + j = math.floor(2 * y / data.tile.height + 0.5) + i = math.floor(x / data.tile.width - stagger_offset(j, stagger_index) + 0.5) + end + + return i, j +end + + +---@param i number +---@param j number +---@param z_layer number|nil +---@param map_params detiled.map_params +---@return number, number, number +function M.get_tile_pos(i, j, z_layer, map_params) + z_layer = z_layer or 0 + local x, y = M.cell_to_pos(i, j, map_params) + + local y_value = (y - z_layer * 100000) + y_value = map_params.scene.size_y - y_value + local z_pos = y_value / 100000 + + return x, y, z_pos +end + + +return M diff --git a/detiled/internal/grid/orthogonal.lua b/detiled/internal/grid/orthogonal.lua new file mode 100644 index 0000000..ac4e20f --- /dev/null +++ b/detiled/internal/grid/orthogonal.lua @@ -0,0 +1,99 @@ +---@class detiled.grid.orthogonal: detiled.grid +local M = {} + +---@param map_params detiled.map_params +---@return number, number +local function get_scene_size(map_params) + local data = map_params + + local width = data.scene.tiles_x * data.tile.width + local height = data.scene.tiles_y * data.tile.height + return width, height +end + + +---@param tiled_data detiled.map +---@return detiled.map_params +function M.get_map_params_from_tiled(tiled_data) + local map_params = {} + map_params.orientation = "orthogonal" + map_params.tile = { + width = tiled_data.tilewidth, + height = tiled_data.tileheight, + } + map_params.scene = { + invert_y = true, + tiles_x = tiled_data.width, + tiles_y = tiled_data.height, + size_x = 0, + size_y = 0, + } + + local size_x, size_y = get_scene_size(map_params) + map_params.scene.size_x = size_x + map_params.scene.size_y = size_y + + return map_params +end + + +---@param i number +---@param j number +---@param map_params detiled.map_params +---@return number, number +function M.cell_to_pos(i, j, map_params) + local data = map_params + + local x = data.tile.width * i + local y = data.tile.height * j + + if data.scene.invert_y then + y = data.scene.size_y - y + end + + x = x + data.tile.width/2 + y = y + (data.scene.invert_y and -data.tile.height/2 or data.tile.height/2) + + return x, y +end + + +---@param x number +---@param y number +---@param map_params detiled.map_params +---@return number, number +function M.pos_to_cell(x, y, map_params) + local data = map_params + + x = x - data.tile.width / 2 + y = y - (data.scene.invert_y and -data.tile.height/2 or data.tile.height/2) + + if data.scene.invert_y then + y = data.scene.size_y - y + end + + local i = math.floor(x / data.tile.width + 0.5) + local j = math.floor(y / data.tile.height + 0.5) + + return i, j +end + + +---@param i number +---@param j number +---@param z_layer number|nil +---@param map_params detiled.map_params +---@return number, number, number +function M.get_tile_pos(i, j, z_layer, map_params) + z_layer = z_layer or 0 + local x, y = M.cell_to_pos(i, j, map_params) + + local y_value = (y - z_layer * 100000) + y_value = map_params.scene.size_y - y_value + local z_pos = y_value / 100000 + + return x, y, z_pos +end + + +return M diff --git a/editor_scripts/set_bootstrap_collection/set_bootstrap_collection.editor_script b/editor_scripts/set_bootstrap_collection/set_bootstrap_collection.editor_script new file mode 100644 index 0000000..1e7567f --- /dev/null +++ b/editor_scripts/set_bootstrap_collection/set_bootstrap_collection.editor_script @@ -0,0 +1,32 @@ +local M = {} + +local function ends_with(str, ending) + return ending == "" or str:sub(-#ending) == ending +end + + +function M.get_commands() + return { + { + label = "Set as Bootstrap Collection", + locations = { "Assets" }, + query = { selection = { type = "resource", cardinality = "one" } }, + active = function(opts) + return ends_with(editor.get(opts.selection, "path"), ".collection") + end, + run = function(opts) + local file = opts.selection + local collection_path = editor.get(file, "path") + + editor.transact({ + editor.tx.set("/game.project", "bootstrap.main_collection", collection_path) + }) + + print("Successfully updated main_collection to " .. collection_path) + end + } + } +end + + +return M diff --git a/editor_scripts/set_bootstrap_collection/set_bootstrap_collection.version b/editor_scripts/set_bootstrap_collection/set_bootstrap_collection.version new file mode 100644 index 0000000..fd58391 --- /dev/null +++ b/editor_scripts/set_bootstrap_collection/set_bootstrap_collection.version @@ -0,0 +1 @@ +Insality:set_bootstrap_collection@1 \ No newline at end of file diff --git a/example/assets/appmanifest.appmanifest b/example/assets/appmanifest.appmanifest new file mode 100644 index 0000000..bab1337 --- /dev/null +++ b/example/assets/appmanifest.appmanifest @@ -0,0 +1,111 @@ +platforms: + armv7-ios: + context: + excludeLibs: [physics, box2d_defold, script_box2d_defold, gamesys_model, gamesys_rig, rig] + excludeSymbols: [ScriptBox2DExt, ScriptModelExt] + symbols: [] + libs: [physics_3d, gamesys_rig_null, gamesys_model_null, rig_null] + frameworks: [] + linkFlags: [] + arm64-ios: + context: + excludeLibs: [physics, box2d_defold, script_box2d_defold, gamesys_model, gamesys_rig, rig] + excludeSymbols: [ScriptBox2DExt, ScriptModelExt] + symbols: [] + libs: [physics_3d, gamesys_rig_null, gamesys_model_null, rig_null] + frameworks: [] + linkFlags: [] + x86_64-ios: + context: + excludeLibs: [physics, box2d_defold, script_box2d_defold, gamesys_model, gamesys_rig, rig] + excludeSymbols: [ScriptBox2DExt, ScriptModelExt] + symbols: [] + libs: [physics_3d, gamesys_rig_null, gamesys_model_null, rig_null] + frameworks: [] + linkFlags: [] + armv7-android: + context: + excludeLibs: [physics, box2d_defold, script_box2d_defold, gamesys_model, gamesys_rig, rig] + excludeJars: [] + excludeSymbols: [ScriptBox2DExt, ScriptModelExt] + symbols: [] + libs: [physics_3d, gamesys_rig_null, gamesys_model_null, rig_null] + linkFlags: [] + jetifier: true + arm64-android: + context: + excludeLibs: [physics, box2d_defold, script_box2d_defold, gamesys_model, gamesys_rig, rig] + excludeJars: [] + excludeSymbols: [ScriptBox2DExt, ScriptModelExt] + symbols: [] + libs: [physics_3d, gamesys_rig_null, gamesys_model_null, rig_null] + linkFlags: [] + jetifier: true + arm64-osx: + context: + excludeLibs: [physics, box2d_defold, script_box2d_defold, gamesys_model, gamesys_rig, rig, graphics_vulkan, platform_vulkan, MoltenVK] + excludeSymbols: [ScriptBox2DExt, ScriptModelExt, GraphicsAdapterVulkan] + symbols: [GraphicsAdapterOpenGL] + libs: [physics_3d, gamesys_rig_null, gamesys_model_null, rig_null, graphics, platform] + frameworks: [OpenGL] + linkFlags: [] + x86_64-osx: + context: + excludeLibs: [physics, box2d_defold, script_box2d_defold, gamesys_model, gamesys_rig, rig, graphics_vulkan, platform_vulkan, MoltenVK] + excludeSymbols: [ScriptBox2DExt, ScriptModelExt, GraphicsAdapterVulkan] + symbols: [GraphicsAdapterOpenGL] + libs: [physics_3d, gamesys_rig_null, gamesys_model_null, rig_null, graphics, platform] + frameworks: [OpenGL] + linkFlags: [] + x86_64-linux: + context: + excludeLibs: [physics, box2d_defold, script_box2d_defold, gamesys_model, gamesys_rig, rig] + excludeSymbols: [ScriptBox2DExt, ScriptModelExt] + symbols: [] + libs: [physics_3d, gamesys_rig_null, gamesys_model_null, rig_null] + linkFlags: [] + arm64-linux: + context: + excludeLibs: [physics, box2d_defold, script_box2d_defold, gamesys_model, gamesys_rig, rig] + excludeSymbols: [ScriptBox2DExt, ScriptModelExt] + symbols: [] + libs: [physics_3d, gamesys_rig_null, gamesys_model_null, rig_null] + linkFlags: [] + x86-win32: + context: + excludeLibs: [libphysics, libbox2d_defold, libscript_box2d_defold, libgamesys_model, libgamesys_rig, librig] + excludeSymbols: [ScriptBox2DExt, ScriptModelExt] + symbols: [] + libs: [libphysics_3d.lib, libgamesys_rig_null.lib, libgamesys_model_null.lib, librig_null.lib] + linkFlags: [] + x86_64-win32: + context: + excludeLibs: [libphysics, libbox2d_defold, libscript_box2d_defold, libgamesys_model, libgamesys_rig, librig] + excludeSymbols: [ScriptBox2DExt, ScriptModelExt] + symbols: [] + libs: [libphysics_3d.lib, libgamesys_rig_null.lib, libgamesys_model_null.lib, librig_null.lib] + linkFlags: [] + js-web: + context: + excludeLibs: [physics, box2d_defold, script_box2d_defold, gamesys_model, gamesys_rig, rig] + excludeJsLibs: [] + excludeSymbols: [ScriptBox2DExt, ScriptModelExt] + symbols: [] + libs: [physics_3d, gamesys_rig_null, gamesys_model_null, rig_null] + linkFlags: [] + wasm-web: + context: + excludeLibs: [physics, box2d_defold, script_box2d_defold, gamesys_model, gamesys_rig, rig] + excludeJsLibs: [] + excludeSymbols: [ScriptBox2DExt, ScriptModelExt] + symbols: [] + libs: [physics_3d, gamesys_rig_null, gamesys_model_null, rig_null] + linkFlags: [] + wasm_pthread-web: + context: + excludeLibs: [physics, box2d_defold, script_box2d_defold, gamesys_model, gamesys_rig, rig] + excludeJsLibs: [] + excludeSymbols: [ScriptBox2DExt, ScriptModelExt] + symbols: [] + libs: [physics_3d, gamesys_rig_null, gamesys_model_null, rig_null] + linkFlags: [] diff --git a/example/assets/camera_wasd_control.script b/example/assets/camera_wasd_control.script new file mode 100644 index 0000000..82ed48d --- /dev/null +++ b/example/assets/camera_wasd_control.script @@ -0,0 +1,74 @@ +go.property("movement_speed", 400) +go.property("zoom_speed", 2) + +function init(self) + msg.post(".", "acquire_input_focus") + + self.move = vmath.vector3() + self.zoom_delta = 0 + self.pressed = {} + self.move_up = hash("key_w") + self.move_down = hash("key_s") + self.move_left = hash("key_a") + self.move_right = hash("key_d") + self.zoom_out = hash("key_q") + self.zoom_in = hash("key_e") +end + + +function final(self) + msg.post(".", "release_input_focus") +end + + +function update(self, dt) + local p = go.get_position() + p.x = p.x + self.move.x * self.movement_speed * dt + p.y = p.y + self.move.y * self.movement_speed * dt + + go.set_position(p) + + if self.zoom_delta ~= 0 then + local zoom = go.get("#camera", "orthographic_zoom") + zoom = zoom + self.zoom_delta * self.zoom_speed * dt + zoom = math.max(0.1, zoom) + go.set("#camera", "orthographic_zoom", zoom) + end +end + + +function on_input(self, action_id, action) + if action.pressed then + if self.pressed[action_id] then return end + self.pressed[action_id] = true + if action_id == self.move_up then + self.move.y = self.move.y + 1 + elseif action_id == self.move_down then + self.move.y = self.move.y - 1 + elseif action_id == self.move_left then + self.move.x = self.move.x - 1 + elseif action_id == self.move_right then + self.move.x = self.move.x + 1 + elseif action_id == self.zoom_in then + self.zoom_delta = self.zoom_delta + 1 + elseif action_id == self.zoom_out then + self.zoom_delta = self.zoom_delta - 1 + end + elseif action.released then + if not self.pressed[action_id] then return end + self.pressed[action_id] = nil + if action_id == self.move_up then + self.move.y = self.move.y - 1 + elseif action_id == self.move_down then + self.move.y = self.move.y + 1 + elseif action_id == self.move_left then + self.move.x = self.move.x + 1 + elseif action_id == self.move_right then + self.move.x = self.move.x - 1 + elseif action_id == self.zoom_in then + self.zoom_delta = self.zoom_delta - 1 + elseif action_id == self.zoom_out then + self.zoom_delta = self.zoom_delta + 1 + end + end +end diff --git a/example/assets/empty.png b/example/assets/empty.png new file mode 100755 index 0000000..36b4ff1 Binary files /dev/null and b/example/assets/empty.png differ diff --git a/example/assets/grid/entities.go b/example/assets/grid/entities.go new file mode 100644 index 0000000..acdbe8b --- /dev/null +++ b/example/assets/grid/entities.go @@ -0,0 +1,42 @@ +embedded_components { + id: "cactus" + type: "factory" + data: "prototype: \"/example/assets/grid/entities/cactus.go\"\n" + "" +} +embedded_components { + id: "icon_barrel" + type: "factory" + data: "prototype: \"/example/assets/grid/entities/icon_barrel.go\"\n" + "" +} +embedded_components { + id: "icon_chest" + type: "factory" + data: "prototype: \"/example/assets/grid/entities/icon_chest.go\"\n" + "" +} +embedded_components { + id: "icon_key" + type: "factory" + data: "prototype: \"/example/assets/grid/entities/icon_key.go\"\n" + "" +} +embedded_components { + id: "icon_stop" + type: "factory" + data: "prototype: \"/example/assets/grid/entities/icon_stop.go\"\n" + "" +} +embedded_components { + id: "icon_table" + type: "factory" + data: "prototype: \"/example/assets/grid/entities/icon_table.go\"\n" + "" +} +embedded_components { + id: "tree" + type: "factory" + data: "prototype: \"/example/assets/grid/entities/tree.go\"\n" + "" +} diff --git a/example/assets/grid/entities/cactus.go b/example/assets/grid/entities/cactus.go new file mode 100644 index 0000000..1cdc797 --- /dev/null +++ b/example/assets/grid/entities/cactus.go @@ -0,0 +1,11 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"cactus\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/grid/grid_items.atlas\"\n" + "}\n" + "" +} diff --git a/example/assets/grid/entities/icon_barrel.go b/example/assets/grid/entities/icon_barrel.go new file mode 100644 index 0000000..6086d36 --- /dev/null +++ b/example/assets/grid/entities/icon_barrel.go @@ -0,0 +1,11 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"icon_barrel\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/grid/grid_items.atlas\"\n" + "}\n" + "" +} diff --git a/example/assets/grid/entities/icon_chest.go b/example/assets/grid/entities/icon_chest.go new file mode 100644 index 0000000..cd20347 --- /dev/null +++ b/example/assets/grid/entities/icon_chest.go @@ -0,0 +1,11 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"icon_chest\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/grid/grid_items.atlas\"\n" + "}\n" + "" +} diff --git a/example/assets/grid/entities/icon_key.go b/example/assets/grid/entities/icon_key.go new file mode 100644 index 0000000..5d705d6 --- /dev/null +++ b/example/assets/grid/entities/icon_key.go @@ -0,0 +1,11 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"icon_key\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/grid/grid_items.atlas\"\n" + "}\n" + "" +} diff --git a/example/assets/grid/entities/icon_stop.go b/example/assets/grid/entities/icon_stop.go new file mode 100644 index 0000000..5c4dfa4 --- /dev/null +++ b/example/assets/grid/entities/icon_stop.go @@ -0,0 +1,11 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"icon_stop\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/grid/grid_items.atlas\"\n" + "}\n" + "" +} diff --git a/example/assets/grid/entities/icon_table.go b/example/assets/grid/entities/icon_table.go new file mode 100644 index 0000000..44172c9 --- /dev/null +++ b/example/assets/grid/entities/icon_table.go @@ -0,0 +1,11 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"icon_table\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/grid/grid_items.atlas\"\n" + "}\n" + "" +} diff --git a/example/assets/grid/entities/tree.go b/example/assets/grid/entities/tree.go new file mode 100644 index 0000000..db9937f --- /dev/null +++ b/example/assets/grid/entities/tree.go @@ -0,0 +1,11 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tree\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/grid/grid_items.atlas\"\n" + "}\n" + "" +} diff --git a/example/assets/grid/grid_ignore_export.tilesource b/example/assets/grid/grid_ignore_export.tilesource new file mode 100644 index 0000000..9f8cf1a --- /dev/null +++ b/example/assets/grid/grid_ignore_export.tilesource @@ -0,0 +1,4 @@ +image: "/example/assets/empty.png" +tile_width: 1 +tile_height: 1 +extrude_borders: 2 diff --git a/example/assets/grid/grid_items.atlas b/example/assets/grid/grid_items.atlas new file mode 100644 index 0000000..b8e4fd5 --- /dev/null +++ b/example/assets/grid/grid_items.atlas @@ -0,0 +1,22 @@ +images { + image: "/tiled/assets/grid/cactus.png" +} +images { + image: "/tiled/assets/grid/icon_barrel.png" +} +images { + image: "/tiled/assets/grid/icon_chest.png" +} +images { + image: "/tiled/assets/grid/icon_key.png" +} +images { + image: "/tiled/assets/grid/icon_stop.png" +} +images { + image: "/tiled/assets/grid/icon_table.png" +} +images { + image: "/tiled/assets/grid/tree.png" +} +extrude_borders: 2 diff --git a/example/assets/grid/grid_tileset.tilesource b/example/assets/grid/grid_tileset.tilesource new file mode 100644 index 0000000..7f7655b --- /dev/null +++ b/example/assets/grid/grid_tileset.tilesource @@ -0,0 +1,10 @@ +image: "/tiled/assets/grid/tilemap_packed.png" +tile_width: 16 +tile_height: 16 +collision_groups: "default" +animations { + id: "anim" + start_tile: 1 + end_tile: 1 +} +extrude_borders: 2 diff --git a/example/assets/hexgrid/entities.go b/example/assets/hexgrid/entities.go new file mode 100644 index 0000000..30125ca --- /dev/null +++ b/example/assets/hexgrid/entities.go @@ -0,0 +1,18 @@ +embedded_components { + id: "r_tree_round" + type: "factory" + data: "prototype: \"/example/assets/hexgrid/entities/r_tree_round.go\"\n" + "" +} +embedded_components { + id: "r_tree_round_2" + type: "factory" + data: "prototype: \"/example/assets/hexgrid/entities/r_tree_round_2.go\"\n" + "" +} +embedded_components { + id: "tile" + type: "factory" + data: "prototype: \"/example/assets/hexgrid/entities/tile.go\"\n" + "" +} diff --git a/example/assets/hexgrid/entities/r_tree_round.go b/example/assets/hexgrid/entities/r_tree_round.go new file mode 100644 index 0000000..f4df1e8 --- /dev/null +++ b/example/assets/hexgrid/entities/r_tree_round.go @@ -0,0 +1,15 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"r_tree_round\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid/hexgrid_resources.atlas\"\n" + "}\n" + "" + position { + x: 5.5 + y: 88.5 + } +} diff --git a/example/assets/hexgrid/entities/r_tree_round_2.go b/example/assets/hexgrid/entities/r_tree_round_2.go new file mode 100644 index 0000000..c8d5aaa --- /dev/null +++ b/example/assets/hexgrid/entities/r_tree_round_2.go @@ -0,0 +1,15 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"r_tree_round_2\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid/hexgrid_resources.atlas\"\n" + "}\n" + "" + position { + x: -7.0 + y: 107.0 + } +} diff --git a/example/assets/hexgrid/entities/tile.go b/example/assets/hexgrid/entities/tile.go new file mode 100644 index 0000000..8b9807f --- /dev/null +++ b/example/assets/hexgrid/entities/tile.go @@ -0,0 +1,18 @@ +components { + id: "set_sprite" + component: "/example/assets/hexgrid/set_sprite.script" +} +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tile_dirt\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid/hexgrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 22.0 + } +} diff --git a/example/assets/hexgrid/entities/tile_dirt.go b/example/assets/hexgrid/entities/tile_dirt.go new file mode 100644 index 0000000..eb2c2c1 --- /dev/null +++ b/example/assets/hexgrid/entities/tile_dirt.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tile_dirt\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid/hexgrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 22.0 + } +} diff --git a/example/assets/hexgrid/entities/tile_dirt_2.go b/example/assets/hexgrid/entities/tile_dirt_2.go new file mode 100644 index 0000000..e940244 --- /dev/null +++ b/example/assets/hexgrid/entities/tile_dirt_2.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tile_dirt_2\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid/hexgrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 22.0 + } +} diff --git a/example/assets/hexgrid/entities/tile_dirt_3.go b/example/assets/hexgrid/entities/tile_dirt_3.go new file mode 100644 index 0000000..286c8dc --- /dev/null +++ b/example/assets/hexgrid/entities/tile_dirt_3.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tile_dirt_3\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid/hexgrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 22.0 + } +} diff --git a/example/assets/hexgrid/entities/tile_grass.go b/example/assets/hexgrid/entities/tile_grass.go new file mode 100644 index 0000000..08ec421 --- /dev/null +++ b/example/assets/hexgrid/entities/tile_grass.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tile_grass\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid/hexgrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 22.0 + } +} diff --git a/example/assets/hexgrid/entities/tile_grass_2.go b/example/assets/hexgrid/entities/tile_grass_2.go new file mode 100644 index 0000000..0b7596f --- /dev/null +++ b/example/assets/hexgrid/entities/tile_grass_2.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tile_grass_2\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid/hexgrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 22.0 + } +} diff --git a/example/assets/hexgrid/entities/tile_grass_3.go b/example/assets/hexgrid/entities/tile_grass_3.go new file mode 100644 index 0000000..4018bc6 --- /dev/null +++ b/example/assets/hexgrid/entities/tile_grass_3.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tile_grass_3\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid/hexgrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 22.0 + } +} diff --git a/example/assets/hexgrid/entities/tile_sand.go b/example/assets/hexgrid/entities/tile_sand.go new file mode 100644 index 0000000..8ee19bc --- /dev/null +++ b/example/assets/hexgrid/entities/tile_sand.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tile_sand\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid/hexgrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 22.0 + } +} diff --git a/example/assets/hexgrid/entities/tile_sand_2.go b/example/assets/hexgrid/entities/tile_sand_2.go new file mode 100644 index 0000000..3665c9b --- /dev/null +++ b/example/assets/hexgrid/entities/tile_sand_2.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tile_sand_2\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid/hexgrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 22.0 + } +} diff --git a/example/assets/hexgrid/entities/tile_sand_3.go b/example/assets/hexgrid/entities/tile_sand_3.go new file mode 100644 index 0000000..db46c56 --- /dev/null +++ b/example/assets/hexgrid/entities/tile_sand_3.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tile_sand_3\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid/hexgrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 22.0 + } +} diff --git a/example/assets/hexgrid/entities/tile_stone.go b/example/assets/hexgrid/entities/tile_stone.go new file mode 100644 index 0000000..bab9ba8 --- /dev/null +++ b/example/assets/hexgrid/entities/tile_stone.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tile_stone\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid/hexgrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 22.0 + } +} diff --git a/example/assets/hexgrid/entities/tile_stone_2.go b/example/assets/hexgrid/entities/tile_stone_2.go new file mode 100644 index 0000000..907c2cb --- /dev/null +++ b/example/assets/hexgrid/entities/tile_stone_2.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tile_stone_2\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid/hexgrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 22.0 + } +} diff --git a/example/assets/hexgrid/entities/tile_stone_3.go b/example/assets/hexgrid/entities/tile_stone_3.go new file mode 100644 index 0000000..d20c911 --- /dev/null +++ b/example/assets/hexgrid/entities/tile_stone_3.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tile_stone_3\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid/hexgrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 22.0 + } +} diff --git a/example/assets/hexgrid/hexgrid_resources.atlas b/example/assets/hexgrid/hexgrid_resources.atlas new file mode 100644 index 0000000..e47acd1 --- /dev/null +++ b/example/assets/hexgrid/hexgrid_resources.atlas @@ -0,0 +1,7 @@ +images { + image: "/tiled/assets/hexgrid/r_tree_round.png" +} +images { + image: "/tiled/assets/hexgrid/r_tree_round_2.png" +} +extrude_borders: 2 diff --git a/example/assets/hexgrid/hexgrid_tiles.atlas b/example/assets/hexgrid/hexgrid_tiles.atlas new file mode 100644 index 0000000..888d110 --- /dev/null +++ b/example/assets/hexgrid/hexgrid_tiles.atlas @@ -0,0 +1,37 @@ +images { + image: "/tiled/assets/hexgrid/tile_dirt.png" +} +images { + image: "/tiled/assets/hexgrid/tile_dirt_2.png" +} +images { + image: "/tiled/assets/hexgrid/tile_dirt_3.png" +} +images { + image: "/tiled/assets/hexgrid/tile_grass.png" +} +images { + image: "/tiled/assets/hexgrid/tile_grass_2.png" +} +images { + image: "/tiled/assets/hexgrid/tile_grass_3.png" +} +images { + image: "/tiled/assets/hexgrid/tile_sand.png" +} +images { + image: "/tiled/assets/hexgrid/tile_sand_2.png" +} +images { + image: "/tiled/assets/hexgrid/tile_sand_3.png" +} +images { + image: "/tiled/assets/hexgrid/tile_stone.png" +} +images { + image: "/tiled/assets/hexgrid/tile_stone_2.png" +} +images { + image: "/tiled/assets/hexgrid/tile_stone_3.png" +} +extrude_borders: 2 diff --git a/example/assets/hexgrid/set_sprite.script b/example/assets/hexgrid/set_sprite.script new file mode 100644 index 0000000..368e114 --- /dev/null +++ b/example/assets/hexgrid/set_sprite.script @@ -0,0 +1,11 @@ +go.property("sprite_url", hash("sprite")) +go.property("sprite_animation", hash("")) + +local HASH_EMPTY = hash("") + +function init(self) + if self.sprite_url ~= HASH_EMPTY then + local sprite_url = msg.url(nil, nil, self.sprite_url) + sprite.play_flipbook(sprite_url, self.sprite_animation) + end +end diff --git a/example/assets/hexgrid_pointy/entities.go b/example/assets/hexgrid_pointy/entities.go new file mode 100644 index 0000000..81e4fa5 --- /dev/null +++ b/example/assets/hexgrid_pointy/entities.go @@ -0,0 +1,132 @@ +embedded_components { + id: "tileAutumn_full" + type: "factory" + data: "prototype: \"/example/assets/hexgrid_pointy/entities/tileAutumn_full.go\"\n" + "" +} +embedded_components { + id: "tileAutumn" + type: "factory" + data: "prototype: \"/example/assets/hexgrid_pointy/entities/tileAutumn.go\"\n" + "" +} +embedded_components { + id: "tileDirt_full" + type: "factory" + data: "prototype: \"/example/assets/hexgrid_pointy/entities/tileDirt_full.go\"\n" + "" +} +embedded_components { + id: "tileDirt" + type: "factory" + data: "prototype: \"/example/assets/hexgrid_pointy/entities/tileDirt.go\"\n" + "" +} +embedded_components { + id: "tileGrass_full" + type: "factory" + data: "prototype: \"/example/assets/hexgrid_pointy/entities/tileGrass_full.go\"\n" + "" +} +embedded_components { + id: "tileGrass" + type: "factory" + data: "prototype: \"/example/assets/hexgrid_pointy/entities/tileGrass.go\"\n" + "" +} +embedded_components { + id: "tileLava_full" + type: "factory" + data: "prototype: \"/example/assets/hexgrid_pointy/entities/tileLava_full.go\"\n" + "" +} +embedded_components { + id: "tileLava" + type: "factory" + data: "prototype: \"/example/assets/hexgrid_pointy/entities/tileLava.go\"\n" + "" +} +embedded_components { + id: "tileMagic_full" + type: "factory" + data: "prototype: \"/example/assets/hexgrid_pointy/entities/tileMagic_full.go\"\n" + "" +} +embedded_components { + id: "tileMagic" + type: "factory" + data: "prototype: \"/example/assets/hexgrid_pointy/entities/tileMagic.go\"\n" + "" +} +embedded_components { + id: "tileRock_full" + type: "factory" + data: "prototype: \"/example/assets/hexgrid_pointy/entities/tileRock_full.go\"\n" + "" +} +embedded_components { + id: "tileRock" + type: "factory" + data: "prototype: \"/example/assets/hexgrid_pointy/entities/tileRock.go\"\n" + "" +} +embedded_components { + id: "tileSand_full" + type: "factory" + data: "prototype: \"/example/assets/hexgrid_pointy/entities/tileSand_full.go\"\n" + "" +} +embedded_components { + id: "tileSand" + type: "factory" + data: "prototype: \"/example/assets/hexgrid_pointy/entities/tileSand.go\"\n" + "" +} +embedded_components { + id: "tileSnow" + type: "factory" + data: "prototype: \"/example/assets/hexgrid_pointy/entities/tileSnow.go\"\n" + "" +} +embedded_components { + id: "tileStone_full" + type: "factory" + data: "prototype: \"/example/assets/hexgrid_pointy/entities/tileStone_full.go\"\n" + "" +} +embedded_components { + id: "tileStone" + type: "factory" + data: "prototype: \"/example/assets/hexgrid_pointy/entities/tileStone.go\"\n" + "" +} +embedded_components { + id: "tileWater_full" + type: "factory" + data: "prototype: \"/example/assets/hexgrid_pointy/entities/tileWater_full.go\"\n" + "" +} +embedded_components { + id: "tileWater_shadow" + type: "factory" + data: "prototype: \"/example/assets/hexgrid_pointy/entities/tileWater_shadow.go\"\n" + "" +} +embedded_components { + id: "tileWater" + type: "factory" + data: "prototype: \"/example/assets/hexgrid_pointy/entities/tileWater.go\"\n" + "" +} +embedded_components { + id: "r_tree_round" + type: "factory" + data: "prototype: \"/example/assets/hexgrid/entities/r_tree_round.go\"\n" + "" +} +embedded_components { + id: "r_tree_round_2" + type: "factory" + data: "prototype: \"/example/assets/hexgrid/entities/r_tree_round_2.go\"\n" + "" +} diff --git a/example/assets/hexgrid_pointy/entities/tileAutumn.go b/example/assets/hexgrid_pointy/entities/tileAutumn.go new file mode 100644 index 0000000..9d64eea --- /dev/null +++ b/example/assets/hexgrid_pointy/entities/tileAutumn.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tileAutumn\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid_pointy/hexgrid_pointy_tiles.atlas\"\n" + "}\n" + "" + position { + y: 7.0 + } +} diff --git a/example/assets/hexgrid_pointy/entities/tileAutumn_full.go b/example/assets/hexgrid_pointy/entities/tileAutumn_full.go new file mode 100644 index 0000000..51db88f --- /dev/null +++ b/example/assets/hexgrid_pointy/entities/tileAutumn_full.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tileAutumn_full\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid_pointy/hexgrid_pointy_tiles.atlas\"\n" + "}\n" + "" + position { + y: 7.0 + } +} diff --git a/example/assets/hexgrid_pointy/entities/tileDirt.go b/example/assets/hexgrid_pointy/entities/tileDirt.go new file mode 100644 index 0000000..9c2a6d6 --- /dev/null +++ b/example/assets/hexgrid_pointy/entities/tileDirt.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tileDirt\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid_pointy/hexgrid_pointy_tiles.atlas\"\n" + "}\n" + "" + position { + y: 7.0 + } +} diff --git a/example/assets/hexgrid_pointy/entities/tileDirt_full.go b/example/assets/hexgrid_pointy/entities/tileDirt_full.go new file mode 100644 index 0000000..fd53949 --- /dev/null +++ b/example/assets/hexgrid_pointy/entities/tileDirt_full.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tileDirt_full\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid_pointy/hexgrid_pointy_tiles.atlas\"\n" + "}\n" + "" + position { + y: 7.0 + } +} diff --git a/example/assets/hexgrid_pointy/entities/tileGrass.go b/example/assets/hexgrid_pointy/entities/tileGrass.go new file mode 100644 index 0000000..00fb9b5 --- /dev/null +++ b/example/assets/hexgrid_pointy/entities/tileGrass.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tileGrass\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid_pointy/hexgrid_pointy_tiles.atlas\"\n" + "}\n" + "" + position { + y: 7.0 + } +} diff --git a/example/assets/hexgrid_pointy/entities/tileGrass_full.go b/example/assets/hexgrid_pointy/entities/tileGrass_full.go new file mode 100644 index 0000000..6a20f8c --- /dev/null +++ b/example/assets/hexgrid_pointy/entities/tileGrass_full.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tileGrass_full\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid_pointy/hexgrid_pointy_tiles.atlas\"\n" + "}\n" + "" + position { + y: 7.0 + } +} diff --git a/example/assets/hexgrid_pointy/entities/tileLava.go b/example/assets/hexgrid_pointy/entities/tileLava.go new file mode 100644 index 0000000..d91b334 --- /dev/null +++ b/example/assets/hexgrid_pointy/entities/tileLava.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tileLava\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid_pointy/hexgrid_pointy_tiles.atlas\"\n" + "}\n" + "" + position { + y: 7.0 + } +} diff --git a/example/assets/hexgrid_pointy/entities/tileLava_full.go b/example/assets/hexgrid_pointy/entities/tileLava_full.go new file mode 100644 index 0000000..0c8b58a --- /dev/null +++ b/example/assets/hexgrid_pointy/entities/tileLava_full.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tileLava_full\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid_pointy/hexgrid_pointy_tiles.atlas\"\n" + "}\n" + "" + position { + y: 7.0 + } +} diff --git a/example/assets/hexgrid_pointy/entities/tileMagic.go b/example/assets/hexgrid_pointy/entities/tileMagic.go new file mode 100644 index 0000000..ffb9165 --- /dev/null +++ b/example/assets/hexgrid_pointy/entities/tileMagic.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tileMagic\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid_pointy/hexgrid_pointy_tiles.atlas\"\n" + "}\n" + "" + position { + y: 7.0 + } +} diff --git a/example/assets/hexgrid_pointy/entities/tileMagic_full.go b/example/assets/hexgrid_pointy/entities/tileMagic_full.go new file mode 100644 index 0000000..86263e0 --- /dev/null +++ b/example/assets/hexgrid_pointy/entities/tileMagic_full.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tileMagic_full\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid_pointy/hexgrid_pointy_tiles.atlas\"\n" + "}\n" + "" + position { + y: 7.0 + } +} diff --git a/example/assets/hexgrid_pointy/entities/tileRock.go b/example/assets/hexgrid_pointy/entities/tileRock.go new file mode 100644 index 0000000..13e7d37 --- /dev/null +++ b/example/assets/hexgrid_pointy/entities/tileRock.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tileRock\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid_pointy/hexgrid_pointy_tiles.atlas\"\n" + "}\n" + "" + position { + y: 7.0 + } +} diff --git a/example/assets/hexgrid_pointy/entities/tileRock_full.go b/example/assets/hexgrid_pointy/entities/tileRock_full.go new file mode 100644 index 0000000..232000d --- /dev/null +++ b/example/assets/hexgrid_pointy/entities/tileRock_full.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tileRock_full\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid_pointy/hexgrid_pointy_tiles.atlas\"\n" + "}\n" + "" + position { + y: 7.0 + } +} diff --git a/example/assets/hexgrid_pointy/entities/tileSand.go b/example/assets/hexgrid_pointy/entities/tileSand.go new file mode 100644 index 0000000..9e1bf83 --- /dev/null +++ b/example/assets/hexgrid_pointy/entities/tileSand.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tileSand\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid_pointy/hexgrid_pointy_tiles.atlas\"\n" + "}\n" + "" + position { + y: 7.0 + } +} diff --git a/example/assets/hexgrid_pointy/entities/tileSand_full.go b/example/assets/hexgrid_pointy/entities/tileSand_full.go new file mode 100644 index 0000000..147580d --- /dev/null +++ b/example/assets/hexgrid_pointy/entities/tileSand_full.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tileSand_full\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid_pointy/hexgrid_pointy_tiles.atlas\"\n" + "}\n" + "" + position { + y: 7.0 + } +} diff --git a/example/assets/hexgrid_pointy/entities/tileSnow.go b/example/assets/hexgrid_pointy/entities/tileSnow.go new file mode 100644 index 0000000..fff9b91 --- /dev/null +++ b/example/assets/hexgrid_pointy/entities/tileSnow.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tileSnow\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid_pointy/hexgrid_pointy_tiles.atlas\"\n" + "}\n" + "" + position { + y: 7.0 + } +} diff --git a/example/assets/hexgrid_pointy/entities/tileStone.go b/example/assets/hexgrid_pointy/entities/tileStone.go new file mode 100644 index 0000000..790fd46 --- /dev/null +++ b/example/assets/hexgrid_pointy/entities/tileStone.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tileStone\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid_pointy/hexgrid_pointy_tiles.atlas\"\n" + "}\n" + "" + position { + y: 7.0 + } +} diff --git a/example/assets/hexgrid_pointy/entities/tileStone_full.go b/example/assets/hexgrid_pointy/entities/tileStone_full.go new file mode 100644 index 0000000..46d8d38 --- /dev/null +++ b/example/assets/hexgrid_pointy/entities/tileStone_full.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tileStone_full\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid_pointy/hexgrid_pointy_tiles.atlas\"\n" + "}\n" + "" + position { + y: 7.0 + } +} diff --git a/example/assets/hexgrid_pointy/entities/tileWater.go b/example/assets/hexgrid_pointy/entities/tileWater.go new file mode 100644 index 0000000..bbb68fb --- /dev/null +++ b/example/assets/hexgrid_pointy/entities/tileWater.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tileWater\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid_pointy/hexgrid_pointy_tiles.atlas\"\n" + "}\n" + "" + position { + y: 7.0 + } +} diff --git a/example/assets/hexgrid_pointy/entities/tileWater_full.go b/example/assets/hexgrid_pointy/entities/tileWater_full.go new file mode 100644 index 0000000..acb4b1b --- /dev/null +++ b/example/assets/hexgrid_pointy/entities/tileWater_full.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tileWater_full\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid_pointy/hexgrid_pointy_tiles.atlas\"\n" + "}\n" + "" + position { + y: 7.0 + } +} diff --git a/example/assets/hexgrid_pointy/entities/tileWater_shadow.go b/example/assets/hexgrid_pointy/entities/tileWater_shadow.go new file mode 100644 index 0000000..ab3d89c --- /dev/null +++ b/example/assets/hexgrid_pointy/entities/tileWater_shadow.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tileWater_shadow\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/hexgrid_pointy/hexgrid_pointy_tiles.atlas\"\n" + "}\n" + "" + position { + y: 7.0 + } +} diff --git a/example/assets/hexgrid_pointy/hexgrid_pointy_tiles.atlas b/example/assets/hexgrid_pointy/hexgrid_pointy_tiles.atlas new file mode 100644 index 0000000..43901d6 --- /dev/null +++ b/example/assets/hexgrid_pointy/hexgrid_pointy_tiles.atlas @@ -0,0 +1,61 @@ +images { + image: "/tiled/assets/hexgrid_pointy/tileAutumn_full.png" +} +images { + image: "/tiled/assets/hexgrid_pointy/tileAutumn.png" +} +images { + image: "/tiled/assets/hexgrid_pointy/tileDirt_full.png" +} +images { + image: "/tiled/assets/hexgrid_pointy/tileDirt.png" +} +images { + image: "/tiled/assets/hexgrid_pointy/tileGrass_full.png" +} +images { + image: "/tiled/assets/hexgrid_pointy/tileGrass.png" +} +images { + image: "/tiled/assets/hexgrid_pointy/tileLava_full.png" +} +images { + image: "/tiled/assets/hexgrid_pointy/tileLava.png" +} +images { + image: "/tiled/assets/hexgrid_pointy/tileMagic_full.png" +} +images { + image: "/tiled/assets/hexgrid_pointy/tileMagic.png" +} +images { + image: "/tiled/assets/hexgrid_pointy/tileRock_full.png" +} +images { + image: "/tiled/assets/hexgrid_pointy/tileRock.png" +} +images { + image: "/tiled/assets/hexgrid_pointy/tileSand_full.png" +} +images { + image: "/tiled/assets/hexgrid_pointy/tileSand.png" +} +images { + image: "/tiled/assets/hexgrid_pointy/tileSnow.png" +} +images { + image: "/tiled/assets/hexgrid_pointy/tileStone_full.png" +} +images { + image: "/tiled/assets/hexgrid_pointy/tileStone.png" +} +images { + image: "/tiled/assets/hexgrid_pointy/tileWater_full.png" +} +images { + image: "/tiled/assets/hexgrid_pointy/tileWater_shadow.png" +} +images { + image: "/tiled/assets/hexgrid_pointy/tileWater.png" +} +extrude_borders: 2 diff --git a/example/assets/isogrid/entities.go b/example/assets/isogrid/entities.go new file mode 100644 index 0000000..2c4431f --- /dev/null +++ b/example/assets/isogrid/entities.go @@ -0,0 +1,540 @@ +embedded_components { + id: "beach" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/beach.go\"\n" + "" +} +embedded_components { + id: "beachCornerES" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/beachCornerES.go\"\n" + "" +} +embedded_components { + id: "beachCornerNE" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/beachCornerNE.go\"\n" + "" +} +embedded_components { + id: "beachCornerNW" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/beachCornerNW.go\"\n" + "" +} +embedded_components { + id: "beachCornerSW" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/beachCornerSW.go\"\n" + "" +} +embedded_components { + id: "beachE" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/beachE.go\"\n" + "" +} +embedded_components { + id: "beachES" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/beachES.go\"\n" + "" +} +embedded_components { + id: "beachN" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/beachN.go\"\n" + "" +} +embedded_components { + id: "beachNE" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/beachNE.go\"\n" + "" +} +embedded_components { + id: "beachNW" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/beachNW.go\"\n" + "" +} +embedded_components { + id: "beachS" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/beachS.go\"\n" + "" +} +embedded_components { + id: "beachSW" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/beachSW.go\"\n" + "" +} +embedded_components { + id: "beachW" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/beachW.go\"\n" + "" +} +embedded_components { + id: "bridgeEW" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/bridgeEW.go\"\n" + "" +} +embedded_components { + id: "bridgeNS" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/bridgeNS.go\"\n" + "" +} +embedded_components { + id: "crossroad" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/crossroad.go\"\n" + "" +} +embedded_components { + id: "crossroadESW" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/crossroadESW.go\"\n" + "" +} +embedded_components { + id: "crossroadNES" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/crossroadNES.go\"\n" + "" +} +embedded_components { + id: "crossroadNEW" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/crossroadNEW.go\"\n" + "" +} +embedded_components { + id: "crossroadNSW" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/crossroadNSW.go\"\n" + "" +} +embedded_components { + id: "dirt" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/dirt.go\"\n" + "" +} +embedded_components { + id: "dirtDouble" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/dirtDouble.go\"\n" + "" +} +embedded_components { + id: "endE" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/endE.go\"\n" + "" +} +embedded_components { + id: "endN" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/endN.go\"\n" + "" +} +embedded_components { + id: "endS" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/endS.go\"\n" + "" +} +embedded_components { + id: "endW" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/endW.go\"\n" + "" +} +embedded_components { + id: "exitE" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/exitE.go\"\n" + "" +} +embedded_components { + id: "exitN" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/exitN.go\"\n" + "" +} +embedded_components { + id: "exitS" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/exitS.go\"\n" + "" +} +embedded_components { + id: "exitW" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/exitW.go\"\n" + "" +} +embedded_components { + id: "grass" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/grass.go\"\n" + "" +} +embedded_components { + id: "grassWhole" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/grassWhole.go\"\n" + "" +} +embedded_components { + id: "hillE" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/hillE.go\"\n" + "" +} +embedded_components { + id: "hillES" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/hillES.go\"\n" + "" +} +embedded_components { + id: "hillN" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/hillN.go\"\n" + "" +} +embedded_components { + id: "hillNE" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/hillNE.go\"\n" + "" +} +embedded_components { + id: "hillNW" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/hillNW.go\"\n" + "" +} +embedded_components { + id: "hillS" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/hillS.go\"\n" + "" +} +embedded_components { + id: "hillSW" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/hillSW.go\"\n" + "" +} +embedded_components { + id: "hillW" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/hillW.go\"\n" + "" +} +embedded_components { + id: "lotE" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/lotE.go\"\n" + "" +} +embedded_components { + id: "lotES" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/lotES.go\"\n" + "" +} +embedded_components { + id: "lotN" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/lotN.go\"\n" + "" +} +embedded_components { + id: "lotNE" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/lotNE.go\"\n" + "" +} +embedded_components { + id: "lotNW" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/lotNW.go\"\n" + "" +} +embedded_components { + id: "lotS" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/lotS.go\"\n" + "" +} +embedded_components { + id: "lotSW" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/lotSW.go\"\n" + "" +} +embedded_components { + id: "lotW" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/lotW.go\"\n" + "" +} +embedded_components { + id: "riverBankedES" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/riverBankedES.go\"\n" + "" +} +embedded_components { + id: "riverBankedEW" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/riverBankedEW.go\"\n" + "" +} +embedded_components { + id: "riverBankedNE" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/riverBankedNE.go\"\n" + "" +} +embedded_components { + id: "riverBankedNS" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/riverBankedNS.go\"\n" + "" +} +embedded_components { + id: "riverBankedNW" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/riverBankedNW.go\"\n" + "" +} +embedded_components { + id: "riverBankedSW" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/riverBankedSW.go\"\n" + "" +} +embedded_components { + id: "riverES" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/riverES.go\"\n" + "" +} +embedded_components { + id: "riverEW" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/riverEW.go\"\n" + "" +} +embedded_components { + id: "riverNE" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/riverNE.go\"\n" + "" +} +embedded_components { + id: "riverNS" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/riverNS.go\"\n" + "" +} +embedded_components { + id: "riverNW" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/riverNW.go\"\n" + "" +} +embedded_components { + id: "riverSW" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/riverSW.go\"\n" + "" +} +embedded_components { + id: "road" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/road.go\"\n" + "" +} +embedded_components { + id: "roadES" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/roadES.go\"\n" + "" +} +embedded_components { + id: "roadEW" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/roadEW.go\"\n" + "" +} +embedded_components { + id: "roadHill2E" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/roadHill2E.go\"\n" + "" +} +embedded_components { + id: "roadHill2N" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/roadHill2N.go\"\n" + "" +} +embedded_components { + id: "roadHill2S" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/roadHill2S.go\"\n" + "" +} +embedded_components { + id: "roadHill2W" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/roadHill2W.go\"\n" + "" +} +embedded_components { + id: "roadHillE" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/roadHillE.go\"\n" + "" +} +embedded_components { + id: "roadHillN" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/roadHillN.go\"\n" + "" +} +embedded_components { + id: "roadHillS" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/roadHillS.go\"\n" + "" +} +embedded_components { + id: "roadHillW" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/roadHillW.go\"\n" + "" +} +embedded_components { + id: "roadNE" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/roadNE.go\"\n" + "" +} +embedded_components { + id: "roadNS" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/roadNS.go\"\n" + "" +} +embedded_components { + id: "roadNW" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/roadNW.go\"\n" + "" +} +embedded_components { + id: "roadSW" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/roadSW.go\"\n" + "" +} +embedded_components { + id: "water" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/water.go\"\n" + "" +} +embedded_components { + id: "waterCornerES" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/waterCornerES.go\"\n" + "" +} +embedded_components { + id: "waterCornerNE" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/waterCornerNE.go\"\n" + "" +} +embedded_components { + id: "waterCornerNW" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/waterCornerNW.go\"\n" + "" +} +embedded_components { + id: "waterCornerSW" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/waterCornerSW.go\"\n" + "" +} +embedded_components { + id: "waterE" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/waterE.go\"\n" + "" +} +embedded_components { + id: "waterES" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/waterES.go\"\n" + "" +} +embedded_components { + id: "waterN" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/waterN.go\"\n" + "" +} +embedded_components { + id: "waterNE" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/waterNE.go\"\n" + "" +} +embedded_components { + id: "waterNW" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/waterNW.go\"\n" + "" +} +embedded_components { + id: "waterS" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/waterS.go\"\n" + "" +} +embedded_components { + id: "waterSW" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/waterSW.go\"\n" + "" +} +embedded_components { + id: "waterW" + type: "factory" + data: "prototype: \"/example/assets/isogrid/entities/waterW.go\"\n" + "" +} +embedded_components { + id: "r_tree_round" + type: "factory" + data: "prototype: \"/example/assets/hexgrid/entities/r_tree_round.go\"\n" + "" +} +embedded_components { + id: "r_tree_round_2" + type: "factory" + data: "prototype: \"/example/assets/hexgrid/entities/r_tree_round_2.go\"\n" + "" +} diff --git a/example/assets/isogrid/entities/beach.go b/example/assets/isogrid/entities/beach.go new file mode 100644 index 0000000..3de4eba --- /dev/null +++ b/example/assets/isogrid/entities/beach.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"beach\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/beachCornerES.go b/example/assets/isogrid/entities/beachCornerES.go new file mode 100644 index 0000000..64293a6 --- /dev/null +++ b/example/assets/isogrid/entities/beachCornerES.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"beachCornerES\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 4.0 + } +} diff --git a/example/assets/isogrid/entities/beachCornerNE.go b/example/assets/isogrid/entities/beachCornerNE.go new file mode 100644 index 0000000..91ba459 --- /dev/null +++ b/example/assets/isogrid/entities/beachCornerNE.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"beachCornerNE\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/beachCornerNW.go b/example/assets/isogrid/entities/beachCornerNW.go new file mode 100644 index 0000000..8dbb952 --- /dev/null +++ b/example/assets/isogrid/entities/beachCornerNW.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"beachCornerNW\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 4.0 + } +} diff --git a/example/assets/isogrid/entities/beachCornerSW.go b/example/assets/isogrid/entities/beachCornerSW.go new file mode 100644 index 0000000..205337a --- /dev/null +++ b/example/assets/isogrid/entities/beachCornerSW.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"beachCornerSW\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 4.0 + } +} diff --git a/example/assets/isogrid/entities/beachE.go b/example/assets/isogrid/entities/beachE.go new file mode 100644 index 0000000..be679e1 --- /dev/null +++ b/example/assets/isogrid/entities/beachE.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"beachE\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/beachES.go b/example/assets/isogrid/entities/beachES.go new file mode 100644 index 0000000..a3835b3 --- /dev/null +++ b/example/assets/isogrid/entities/beachES.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"beachES\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/beachN.go b/example/assets/isogrid/entities/beachN.go new file mode 100644 index 0000000..ece1593 --- /dev/null +++ b/example/assets/isogrid/entities/beachN.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"beachN\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/beachNE.go b/example/assets/isogrid/entities/beachNE.go new file mode 100644 index 0000000..46affd2 --- /dev/null +++ b/example/assets/isogrid/entities/beachNE.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"beachNE\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 4.0 + } +} diff --git a/example/assets/isogrid/entities/beachNW.go b/example/assets/isogrid/entities/beachNW.go new file mode 100644 index 0000000..ee0bda1 --- /dev/null +++ b/example/assets/isogrid/entities/beachNW.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"beachNW\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/beachS.go b/example/assets/isogrid/entities/beachS.go new file mode 100644 index 0000000..1c5fc0b --- /dev/null +++ b/example/assets/isogrid/entities/beachS.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"beachS\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 4.0 + } +} diff --git a/example/assets/isogrid/entities/beachSW.go b/example/assets/isogrid/entities/beachSW.go new file mode 100644 index 0000000..b408914 --- /dev/null +++ b/example/assets/isogrid/entities/beachSW.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"beachSW\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/beachW.go b/example/assets/isogrid/entities/beachW.go new file mode 100644 index 0000000..6988f15 --- /dev/null +++ b/example/assets/isogrid/entities/beachW.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"beachW\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 4.0 + } +} diff --git a/example/assets/isogrid/entities/bridgeEW.go b/example/assets/isogrid/entities/bridgeEW.go new file mode 100644 index 0000000..f192ed5 --- /dev/null +++ b/example/assets/isogrid/entities/bridgeEW.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"bridgeEW\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 6.0 + } +} diff --git a/example/assets/isogrid/entities/bridgeNS.go b/example/assets/isogrid/entities/bridgeNS.go new file mode 100644 index 0000000..d93afbe --- /dev/null +++ b/example/assets/isogrid/entities/bridgeNS.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"bridgeNS\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 6.0 + } +} diff --git a/example/assets/isogrid/entities/crossroad.go b/example/assets/isogrid/entities/crossroad.go new file mode 100644 index 0000000..b050fb8 --- /dev/null +++ b/example/assets/isogrid/entities/crossroad.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"crossroad\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/crossroadESW.go b/example/assets/isogrid/entities/crossroadESW.go new file mode 100644 index 0000000..d603bad --- /dev/null +++ b/example/assets/isogrid/entities/crossroadESW.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"crossroadESW\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/crossroadNES.go b/example/assets/isogrid/entities/crossroadNES.go new file mode 100644 index 0000000..514c084 --- /dev/null +++ b/example/assets/isogrid/entities/crossroadNES.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"crossroadNES\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/crossroadNEW.go b/example/assets/isogrid/entities/crossroadNEW.go new file mode 100644 index 0000000..818a331 --- /dev/null +++ b/example/assets/isogrid/entities/crossroadNEW.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"crossroadNEW\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/crossroadNSW.go b/example/assets/isogrid/entities/crossroadNSW.go new file mode 100644 index 0000000..4a7c5d6 --- /dev/null +++ b/example/assets/isogrid/entities/crossroadNSW.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"crossroadNSW\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/dirt.go b/example/assets/isogrid/entities/dirt.go new file mode 100644 index 0000000..bbddc25 --- /dev/null +++ b/example/assets/isogrid/entities/dirt.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"dirt\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 4.0 + } +} diff --git a/example/assets/isogrid/entities/dirtDouble.go b/example/assets/isogrid/entities/dirtDouble.go new file mode 100644 index 0000000..e8ab2fe --- /dev/null +++ b/example/assets/isogrid/entities/dirtDouble.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"dirtDouble\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/endE.go b/example/assets/isogrid/entities/endE.go new file mode 100644 index 0000000..41d63d8 --- /dev/null +++ b/example/assets/isogrid/entities/endE.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"endE\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/endN.go b/example/assets/isogrid/entities/endN.go new file mode 100644 index 0000000..f4ebff6 --- /dev/null +++ b/example/assets/isogrid/entities/endN.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"endN\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/endS.go b/example/assets/isogrid/entities/endS.go new file mode 100644 index 0000000..69ffb0a --- /dev/null +++ b/example/assets/isogrid/entities/endS.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"endS\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/endW.go b/example/assets/isogrid/entities/endW.go new file mode 100644 index 0000000..833fb57 --- /dev/null +++ b/example/assets/isogrid/entities/endW.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"endW\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/exitE.go b/example/assets/isogrid/entities/exitE.go new file mode 100644 index 0000000..c83f609 --- /dev/null +++ b/example/assets/isogrid/entities/exitE.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"exitE\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/exitN.go b/example/assets/isogrid/entities/exitN.go new file mode 100644 index 0000000..fa525f1 --- /dev/null +++ b/example/assets/isogrid/entities/exitN.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"exitN\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/exitS.go b/example/assets/isogrid/entities/exitS.go new file mode 100644 index 0000000..0673a08 --- /dev/null +++ b/example/assets/isogrid/entities/exitS.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"exitS\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/exitW.go b/example/assets/isogrid/entities/exitW.go new file mode 100644 index 0000000..b120875 --- /dev/null +++ b/example/assets/isogrid/entities/exitW.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"exitW\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/grass.go b/example/assets/isogrid/entities/grass.go new file mode 100644 index 0000000..9ab9366 --- /dev/null +++ b/example/assets/isogrid/entities/grass.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"grass\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/grassWhole.go b/example/assets/isogrid/entities/grassWhole.go new file mode 100644 index 0000000..a099776 --- /dev/null +++ b/example/assets/isogrid/entities/grassWhole.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"grassWhole\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/hillE.go b/example/assets/isogrid/entities/hillE.go new file mode 100644 index 0000000..2efce04 --- /dev/null +++ b/example/assets/isogrid/entities/hillE.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"hillE\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/hillES.go b/example/assets/isogrid/entities/hillES.go new file mode 100644 index 0000000..3096571 --- /dev/null +++ b/example/assets/isogrid/entities/hillES.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"hillES\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/hillN.go b/example/assets/isogrid/entities/hillN.go new file mode 100644 index 0000000..248ffa9 --- /dev/null +++ b/example/assets/isogrid/entities/hillN.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"hillN\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/hillNE.go b/example/assets/isogrid/entities/hillNE.go new file mode 100644 index 0000000..2d4c1bb --- /dev/null +++ b/example/assets/isogrid/entities/hillNE.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"hillNE\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/hillNW.go b/example/assets/isogrid/entities/hillNW.go new file mode 100644 index 0000000..8f310aa --- /dev/null +++ b/example/assets/isogrid/entities/hillNW.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"hillNW\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/hillS.go b/example/assets/isogrid/entities/hillS.go new file mode 100644 index 0000000..82e949f --- /dev/null +++ b/example/assets/isogrid/entities/hillS.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"hillS\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 16.0 + } +} diff --git a/example/assets/isogrid/entities/hillSW.go b/example/assets/isogrid/entities/hillSW.go new file mode 100644 index 0000000..72b4a9c --- /dev/null +++ b/example/assets/isogrid/entities/hillSW.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"hillSW\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 16.0 + } +} diff --git a/example/assets/isogrid/entities/hillW.go b/example/assets/isogrid/entities/hillW.go new file mode 100644 index 0000000..a3386a1 --- /dev/null +++ b/example/assets/isogrid/entities/hillW.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"hillW\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 16.0 + } +} diff --git a/example/assets/isogrid/entities/lotE.go b/example/assets/isogrid/entities/lotE.go new file mode 100644 index 0000000..dc5673e --- /dev/null +++ b/example/assets/isogrid/entities/lotE.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"lotE\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/lotES.go b/example/assets/isogrid/entities/lotES.go new file mode 100644 index 0000000..f524403 --- /dev/null +++ b/example/assets/isogrid/entities/lotES.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"lotES\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/lotN.go b/example/assets/isogrid/entities/lotN.go new file mode 100644 index 0000000..957c8e9 --- /dev/null +++ b/example/assets/isogrid/entities/lotN.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"lotN\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/lotNE.go b/example/assets/isogrid/entities/lotNE.go new file mode 100644 index 0000000..29e1d63 --- /dev/null +++ b/example/assets/isogrid/entities/lotNE.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"lotNE\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/lotNW.go b/example/assets/isogrid/entities/lotNW.go new file mode 100644 index 0000000..911a882 --- /dev/null +++ b/example/assets/isogrid/entities/lotNW.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"lotNW\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/lotS.go b/example/assets/isogrid/entities/lotS.go new file mode 100644 index 0000000..c7bb856 --- /dev/null +++ b/example/assets/isogrid/entities/lotS.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"lotS\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/lotSW.go b/example/assets/isogrid/entities/lotSW.go new file mode 100644 index 0000000..bba0aa9 --- /dev/null +++ b/example/assets/isogrid/entities/lotSW.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"lotSW\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/lotW.go b/example/assets/isogrid/entities/lotW.go new file mode 100644 index 0000000..f466400 --- /dev/null +++ b/example/assets/isogrid/entities/lotW.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"lotW\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/riverBankedES.go b/example/assets/isogrid/entities/riverBankedES.go new file mode 100644 index 0000000..8102418 --- /dev/null +++ b/example/assets/isogrid/entities/riverBankedES.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"riverBankedES\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/riverBankedEW.go b/example/assets/isogrid/entities/riverBankedEW.go new file mode 100644 index 0000000..557fcf9 --- /dev/null +++ b/example/assets/isogrid/entities/riverBankedEW.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"riverBankedEW\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/riverBankedNE.go b/example/assets/isogrid/entities/riverBankedNE.go new file mode 100644 index 0000000..f56735d --- /dev/null +++ b/example/assets/isogrid/entities/riverBankedNE.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"riverBankedNE\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/riverBankedNS.go b/example/assets/isogrid/entities/riverBankedNS.go new file mode 100644 index 0000000..8267c40 --- /dev/null +++ b/example/assets/isogrid/entities/riverBankedNS.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"riverBankedNS\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/riverBankedNW.go b/example/assets/isogrid/entities/riverBankedNW.go new file mode 100644 index 0000000..f6dc0a6 --- /dev/null +++ b/example/assets/isogrid/entities/riverBankedNW.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"riverBankedNW\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/riverBankedSW.go b/example/assets/isogrid/entities/riverBankedSW.go new file mode 100644 index 0000000..d310880 --- /dev/null +++ b/example/assets/isogrid/entities/riverBankedSW.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"riverBankedSW\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/riverES.go b/example/assets/isogrid/entities/riverES.go new file mode 100644 index 0000000..777f7d5 --- /dev/null +++ b/example/assets/isogrid/entities/riverES.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"riverES\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/riverEW.go b/example/assets/isogrid/entities/riverEW.go new file mode 100644 index 0000000..4b0f76c --- /dev/null +++ b/example/assets/isogrid/entities/riverEW.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"riverEW\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/riverNE.go b/example/assets/isogrid/entities/riverNE.go new file mode 100644 index 0000000..539f968 --- /dev/null +++ b/example/assets/isogrid/entities/riverNE.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"riverNE\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/riverNS.go b/example/assets/isogrid/entities/riverNS.go new file mode 100644 index 0000000..4208acc --- /dev/null +++ b/example/assets/isogrid/entities/riverNS.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"riverNS\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/riverNW.go b/example/assets/isogrid/entities/riverNW.go new file mode 100644 index 0000000..dfb737b --- /dev/null +++ b/example/assets/isogrid/entities/riverNW.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"riverNW\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/riverSW.go b/example/assets/isogrid/entities/riverSW.go new file mode 100644 index 0000000..933aacb --- /dev/null +++ b/example/assets/isogrid/entities/riverSW.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"riverSW\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/road.go b/example/assets/isogrid/entities/road.go new file mode 100644 index 0000000..c01e704 --- /dev/null +++ b/example/assets/isogrid/entities/road.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"road\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/roadES.go b/example/assets/isogrid/entities/roadES.go new file mode 100644 index 0000000..03f18b9 --- /dev/null +++ b/example/assets/isogrid/entities/roadES.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"roadES\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/roadEW.go b/example/assets/isogrid/entities/roadEW.go new file mode 100644 index 0000000..8bbe8dc --- /dev/null +++ b/example/assets/isogrid/entities/roadEW.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"roadEW\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/roadHill2E.go b/example/assets/isogrid/entities/roadHill2E.go new file mode 100644 index 0000000..61153c3 --- /dev/null +++ b/example/assets/isogrid/entities/roadHill2E.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"roadHill2E\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/roadHill2N.go b/example/assets/isogrid/entities/roadHill2N.go new file mode 100644 index 0000000..2ddabe2 --- /dev/null +++ b/example/assets/isogrid/entities/roadHill2N.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"roadHill2N\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/roadHill2S.go b/example/assets/isogrid/entities/roadHill2S.go new file mode 100644 index 0000000..45af691 --- /dev/null +++ b/example/assets/isogrid/entities/roadHill2S.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"roadHill2S\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 14.0 + } +} diff --git a/example/assets/isogrid/entities/roadHill2W.go b/example/assets/isogrid/entities/roadHill2W.go new file mode 100644 index 0000000..59b5806 --- /dev/null +++ b/example/assets/isogrid/entities/roadHill2W.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"roadHill2W\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 14.0 + } +} diff --git a/example/assets/isogrid/entities/roadHillE.go b/example/assets/isogrid/entities/roadHillE.go new file mode 100644 index 0000000..f69892c --- /dev/null +++ b/example/assets/isogrid/entities/roadHillE.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"roadHillE\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/roadHillN.go b/example/assets/isogrid/entities/roadHillN.go new file mode 100644 index 0000000..772394c --- /dev/null +++ b/example/assets/isogrid/entities/roadHillN.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"roadHillN\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/roadHillS.go b/example/assets/isogrid/entities/roadHillS.go new file mode 100644 index 0000000..af3d97e --- /dev/null +++ b/example/assets/isogrid/entities/roadHillS.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"roadHillS\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 16.0 + } +} diff --git a/example/assets/isogrid/entities/roadHillW.go b/example/assets/isogrid/entities/roadHillW.go new file mode 100644 index 0000000..10110ab --- /dev/null +++ b/example/assets/isogrid/entities/roadHillW.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"roadHillW\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 16.0 + } +} diff --git a/example/assets/isogrid/entities/roadNE.go b/example/assets/isogrid/entities/roadNE.go new file mode 100644 index 0000000..379e1d7 --- /dev/null +++ b/example/assets/isogrid/entities/roadNE.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"roadNE\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/roadNS.go b/example/assets/isogrid/entities/roadNS.go new file mode 100644 index 0000000..91582ce --- /dev/null +++ b/example/assets/isogrid/entities/roadNS.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"roadNS\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/roadNW.go b/example/assets/isogrid/entities/roadNW.go new file mode 100644 index 0000000..2f0b32b --- /dev/null +++ b/example/assets/isogrid/entities/roadNW.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"roadNW\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/roadSW.go b/example/assets/isogrid/entities/roadSW.go new file mode 100644 index 0000000..9aefe75 --- /dev/null +++ b/example/assets/isogrid/entities/roadSW.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"roadSW\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/water.go b/example/assets/isogrid/entities/water.go new file mode 100644 index 0000000..fc5114e --- /dev/null +++ b/example/assets/isogrid/entities/water.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"water\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 4.0 + } +} diff --git a/example/assets/isogrid/entities/waterCornerES.go b/example/assets/isogrid/entities/waterCornerES.go new file mode 100644 index 0000000..35e41e6 --- /dev/null +++ b/example/assets/isogrid/entities/waterCornerES.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"waterCornerES\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 4.0 + } +} diff --git a/example/assets/isogrid/entities/waterCornerNE.go b/example/assets/isogrid/entities/waterCornerNE.go new file mode 100644 index 0000000..2175d3e --- /dev/null +++ b/example/assets/isogrid/entities/waterCornerNE.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"waterCornerNE\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/waterCornerNW.go b/example/assets/isogrid/entities/waterCornerNW.go new file mode 100644 index 0000000..e05066a --- /dev/null +++ b/example/assets/isogrid/entities/waterCornerNW.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"waterCornerNW\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 4.0 + } +} diff --git a/example/assets/isogrid/entities/waterCornerSW.go b/example/assets/isogrid/entities/waterCornerSW.go new file mode 100644 index 0000000..71da067 --- /dev/null +++ b/example/assets/isogrid/entities/waterCornerSW.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"waterCornerSW\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 4.0 + } +} diff --git a/example/assets/isogrid/entities/waterE.go b/example/assets/isogrid/entities/waterE.go new file mode 100644 index 0000000..890c2b1 --- /dev/null +++ b/example/assets/isogrid/entities/waterE.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"waterE\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/waterES.go b/example/assets/isogrid/entities/waterES.go new file mode 100644 index 0000000..54c2cc5 --- /dev/null +++ b/example/assets/isogrid/entities/waterES.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"waterES\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/waterN.go b/example/assets/isogrid/entities/waterN.go new file mode 100644 index 0000000..7eed559 --- /dev/null +++ b/example/assets/isogrid/entities/waterN.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"waterN\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/waterNE.go b/example/assets/isogrid/entities/waterNE.go new file mode 100644 index 0000000..d2d6bb5 --- /dev/null +++ b/example/assets/isogrid/entities/waterNE.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"waterNE\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/waterNW.go b/example/assets/isogrid/entities/waterNW.go new file mode 100644 index 0000000..271baf6 --- /dev/null +++ b/example/assets/isogrid/entities/waterNW.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"waterNW\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 8.0 + } +} diff --git a/example/assets/isogrid/entities/waterS.go b/example/assets/isogrid/entities/waterS.go new file mode 100644 index 0000000..1b71af0 --- /dev/null +++ b/example/assets/isogrid/entities/waterS.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"waterS\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 4.0 + } +} diff --git a/example/assets/isogrid/entities/waterSW.go b/example/assets/isogrid/entities/waterSW.go new file mode 100644 index 0000000..70a70fa --- /dev/null +++ b/example/assets/isogrid/entities/waterSW.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"waterSW\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 4.0 + } +} diff --git a/example/assets/isogrid/entities/waterW.go b/example/assets/isogrid/entities/waterW.go new file mode 100644 index 0000000..8ca5e9c --- /dev/null +++ b/example/assets/isogrid/entities/waterW.go @@ -0,0 +1,14 @@ +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"waterW\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/assets/isogrid/isogrid_tiles.atlas\"\n" + "}\n" + "" + position { + y: 4.0 + } +} diff --git a/example/assets/isogrid/isogrid_tiles.atlas b/example/assets/isogrid/isogrid_tiles.atlas new file mode 100644 index 0000000..b7799aa --- /dev/null +++ b/example/assets/isogrid/isogrid_tiles.atlas @@ -0,0 +1,265 @@ +images { + image: "/tiled/assets/isogrid/beachNE.png" +} +images { + image: "/tiled/assets/isogrid/beachNW.png" +} +images { + image: "/tiled/assets/isogrid/beachS.png" +} +images { + image: "/tiled/assets/isogrid/beachSW.png" +} +images { + image: "/tiled/assets/isogrid/beachW.png" +} +images { + image: "/tiled/assets/isogrid/bridgeEW.png" +} +images { + image: "/tiled/assets/isogrid/bridgeNS.png" +} +images { + image: "/tiled/assets/isogrid/crossroad.png" +} +images { + image: "/tiled/assets/isogrid/crossroadESW.png" +} +images { + image: "/tiled/assets/isogrid/crossroadNES.png" +} +images { + image: "/tiled/assets/isogrid/crossroadNEW.png" +} +images { + image: "/tiled/assets/isogrid/crossroadNSW.png" +} +images { + image: "/tiled/assets/isogrid/dirt.png" +} +images { + image: "/tiled/assets/isogrid/dirtDouble.png" +} +images { + image: "/tiled/assets/isogrid/endE.png" +} +images { + image: "/tiled/assets/isogrid/endN.png" +} +images { + image: "/tiled/assets/isogrid/endS.png" +} +images { + image: "/tiled/assets/isogrid/endW.png" +} +images { + image: "/tiled/assets/isogrid/exitE.png" +} +images { + image: "/tiled/assets/isogrid/exitN.png" +} +images { + image: "/tiled/assets/isogrid/exitS.png" +} +images { + image: "/tiled/assets/isogrid/exitW.png" +} +images { + image: "/tiled/assets/isogrid/grass.png" +} +images { + image: "/tiled/assets/isogrid/grassWhole.png" +} +images { + image: "/tiled/assets/isogrid/hillE.png" +} +images { + image: "/tiled/assets/isogrid/hillES.png" +} +images { + image: "/tiled/assets/isogrid/hillN.png" +} +images { + image: "/tiled/assets/isogrid/hillNE.png" +} +images { + image: "/tiled/assets/isogrid/hillNW.png" +} +images { + image: "/tiled/assets/isogrid/hillS.png" +} +images { + image: "/tiled/assets/isogrid/hillSW.png" +} +images { + image: "/tiled/assets/isogrid/hillW.png" +} +images { + image: "/tiled/assets/isogrid/lotE.png" +} +images { + image: "/tiled/assets/isogrid/lotES.png" +} +images { + image: "/tiled/assets/isogrid/lotN.png" +} +images { + image: "/tiled/assets/isogrid/lotNE.png" +} +images { + image: "/tiled/assets/isogrid/lotNW.png" +} +images { + image: "/tiled/assets/isogrid/lotS.png" +} +images { + image: "/tiled/assets/isogrid/lotSW.png" +} +images { + image: "/tiled/assets/isogrid/lotW.png" +} +images { + image: "/tiled/assets/isogrid/riverBankedES.png" +} +images { + image: "/tiled/assets/isogrid/riverBankedEW.png" +} +images { + image: "/tiled/assets/isogrid/riverBankedNE.png" +} +images { + image: "/tiled/assets/isogrid/riverBankedNS.png" +} +images { + image: "/tiled/assets/isogrid/riverBankedNW.png" +} +images { + image: "/tiled/assets/isogrid/riverBankedSW.png" +} +images { + image: "/tiled/assets/isogrid/riverES.png" +} +images { + image: "/tiled/assets/isogrid/riverEW.png" +} +images { + image: "/tiled/assets/isogrid/riverNE.png" +} +images { + image: "/tiled/assets/isogrid/riverNS.png" +} +images { + image: "/tiled/assets/isogrid/riverNW.png" +} +images { + image: "/tiled/assets/isogrid/riverSW.png" +} +images { + image: "/tiled/assets/isogrid/road.png" +} +images { + image: "/tiled/assets/isogrid/roadES.png" +} +images { + image: "/tiled/assets/isogrid/roadEW.png" +} +images { + image: "/tiled/assets/isogrid/roadHill2E.png" +} +images { + image: "/tiled/assets/isogrid/roadHill2N.png" +} +images { + image: "/tiled/assets/isogrid/roadHill2S.png" +} +images { + image: "/tiled/assets/isogrid/roadHill2W.png" +} +images { + image: "/tiled/assets/isogrid/roadHillE.png" +} +images { + image: "/tiled/assets/isogrid/roadHillN.png" +} +images { + image: "/tiled/assets/isogrid/roadHillS.png" +} +images { + image: "/tiled/assets/isogrid/roadHillW.png" +} +images { + image: "/tiled/assets/isogrid/roadNE.png" +} +images { + image: "/tiled/assets/isogrid/roadNS.png" +} +images { + image: "/tiled/assets/isogrid/roadNW.png" +} +images { + image: "/tiled/assets/isogrid/roadSW.png" +} +images { + image: "/tiled/assets/isogrid/water.png" +} +images { + image: "/tiled/assets/isogrid/waterCornerES.png" +} +images { + image: "/tiled/assets/isogrid/waterCornerNE.png" +} +images { + image: "/tiled/assets/isogrid/waterCornerNW.png" +} +images { + image: "/tiled/assets/isogrid/waterCornerSW.png" +} +images { + image: "/tiled/assets/isogrid/waterE.png" +} +images { + image: "/tiled/assets/isogrid/waterES.png" +} +images { + image: "/tiled/assets/isogrid/waterN.png" +} +images { + image: "/tiled/assets/isogrid/waterNE.png" +} +images { + image: "/tiled/assets/isogrid/waterNW.png" +} +images { + image: "/tiled/assets/isogrid/waterS.png" +} +images { + image: "/tiled/assets/isogrid/waterSW.png" +} +images { + image: "/tiled/assets/isogrid/waterW.png" +} +images { + image: "/tiled/assets/isogrid/beach.png" +} +images { + image: "/tiled/assets/isogrid/beachCornerES.png" +} +images { + image: "/tiled/assets/isogrid/beachCornerNE.png" +} +images { + image: "/tiled/assets/isogrid/beachCornerNW.png" +} +images { + image: "/tiled/assets/isogrid/beachCornerSW.png" +} +images { + image: "/tiled/assets/isogrid/beachE.png" +} +images { + image: "/tiled/assets/isogrid/beachES.png" +} +images { + image: "/tiled/assets/isogrid/beachN.png" +} +extrude_borders: 2 diff --git a/example/example.collection b/example/example.collection new file mode 100644 index 0000000..f8240b8 --- /dev/null +++ b/example/example.collection @@ -0,0 +1,46 @@ +name: "example" +scale_along_z: 0 +embedded_instances { + id: "go" + data: "components {\n" + " id: \"example\"\n" + " component: \"/example/example.gui\"\n" + "}\n" + "embedded_components {\n" + " id: \"grid\"\n" + " type: \"collectionproxy\"\n" + " data: \"collection: \\\"/example/example_grid/example_grid.collection\\\"\\n" + "\"\n" + "}\n" + "embedded_components {\n" + " id: \"hex\"\n" + " type: \"collectionproxy\"\n" + " data: \"collection: \\\"/example/example_hexgrid/example_hexgrid.collection\\\"\\n" + "\"\n" + "}\n" + "embedded_components {\n" + " id: \"iso_staggered\"\n" + " type: \"collectionproxy\"\n" + " data: \"collection: \\\"/example/example_isogrid_staggered/example_isogrid_staggered.collection\\\"\\n" + "\"\n" + "}\n" + "embedded_components {\n" + " id: \"iso\"\n" + " type: \"collectionproxy\"\n" + " data: \"collection: \\\"/example/example_isogrid/example_isogrid.collection\\\"\\n" + "\"\n" + "}\n" + "embedded_components {\n" + " id: \"hex_pointy\"\n" + " type: \"collectionproxy\"\n" + " data: \"collection: \\\"/example/example_hexgrid_pointy/example_hexgrid_pointy.collection\\\"\\n" + "\"\n" + "}\n" + "embedded_components {\n" + " id: \"grid_game_objects\"\n" + " type: \"collectionproxy\"\n" + " data: \"collection: \\\"/example/example_grid_game_objects/example_grid_game_objects.collection\\\"\\n" + "\"\n" + "}\n" + "" +} diff --git a/example/example.gui b/example/example.gui new file mode 100644 index 0000000..1e26f64 --- /dev/null +++ b/example/example.gui @@ -0,0 +1,632 @@ +script: "/example/example.gui_script" +nodes { + position { + x: 840.0 + y: 640.0 + } + scale { + x: 0.6 + y: 0.6 + } + type: TYPE_TEMPLATE + id: "properties_panel" + inherit_alpha: true + template: "/widget/properties_panel/properties_panel.gui" +} +nodes { + type: TYPE_BOX + id: "properties_panel/root" + parent: "properties_panel" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/header" + parent: "properties_panel/root" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "properties_panel/text_header" + parent: "properties_panel/header" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/icon_drag" + parent: "properties_panel/header" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/icon_refresh" + parent: "properties_panel/header" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/icon_back" + parent: "properties_panel/header" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/content" + parent: "properties_panel/root" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/scroll_view" + parent: "properties_panel/content" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/scroll_content" + parent: "properties_panel/scroll_view" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/properties" + parent: "properties_panel/content" + template_node_child: true +} +nodes { + type: TYPE_TEMPLATE + id: "properties_panel/property_slider" + parent: "properties_panel/properties" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_slider/root" + parent: "properties_panel/property_slider" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "properties_panel/property_slider/text_name" + parent: "properties_panel/property_slider/root" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_slider/E_Anchor" + parent: "properties_panel/property_slider/root" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_slider/slider" + parent: "properties_panel/property_slider/E_Anchor" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_slider/slider_back" + parent: "properties_panel/property_slider/slider" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_slider/slider_pin" + parent: "properties_panel/property_slider/slider" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_slider/button" + parent: "properties_panel/property_slider/E_Anchor" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_slider/selected" + parent: "properties_panel/property_slider/button" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "properties_panel/property_slider/text_value" + parent: "properties_panel/property_slider/button" + template_node_child: true +} +nodes { + type: TYPE_TEMPLATE + id: "properties_panel/property_checkbox" + parent: "properties_panel/properties" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_checkbox/root" + parent: "properties_panel/property_checkbox" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "properties_panel/property_checkbox/text_name" + parent: "properties_panel/property_checkbox/root" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_checkbox/E_Anchor" + parent: "properties_panel/property_checkbox/root" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_checkbox/button" + parent: "properties_panel/property_checkbox/E_Anchor" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_checkbox/icon" + parent: "properties_panel/property_checkbox/button" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_checkbox/selected" + parent: "properties_panel/property_checkbox/button" + template_node_child: true +} +nodes { + type: TYPE_TEMPLATE + id: "properties_panel/property_button" + parent: "properties_panel/properties" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_button/root" + parent: "properties_panel/property_button" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "properties_panel/property_button/text_name" + parent: "properties_panel/property_button/root" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_button/E_Anchor" + parent: "properties_panel/property_button/root" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_button/button" + parent: "properties_panel/property_button/E_Anchor" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_button/selected" + parent: "properties_panel/property_button/button" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "properties_panel/property_button/text_button" + parent: "properties_panel/property_button/button" + template_node_child: true +} +nodes { + type: TYPE_TEMPLATE + id: "properties_panel/property_input" + parent: "properties_panel/properties" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_input/root" + parent: "properties_panel/property_input" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "properties_panel/property_input/text_name" + parent: "properties_panel/property_input/root" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_input/E_Anchor" + parent: "properties_panel/property_input/root" + template_node_child: true +} +nodes { + type: TYPE_TEMPLATE + id: "properties_panel/property_input/rich_input" + parent: "properties_panel/property_input/E_Anchor" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_input/rich_input/root" + parent: "properties_panel/property_input/rich_input" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_input/rich_input/button" + parent: "properties_panel/property_input/rich_input/root" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "properties_panel/property_input/rich_input/placeholder_text" + parent: "properties_panel/property_input/rich_input/root" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "properties_panel/property_input/rich_input/input_text" + parent: "properties_panel/property_input/rich_input/root" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_input/rich_input/cursor_node" + parent: "properties_panel/property_input/rich_input/root" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "properties_panel/property_input/rich_input/cursor_text" + parent: "properties_panel/property_input/rich_input/cursor_node" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_input/selected" + parent: "properties_panel/property_input/E_Anchor" + template_node_child: true +} +nodes { + type: TYPE_TEMPLATE + id: "properties_panel/property_text" + parent: "properties_panel/properties" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_text/root" + parent: "properties_panel/property_text" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "properties_panel/property_text/text_name" + parent: "properties_panel/property_text/root" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "properties_panel/property_text/text_right" + parent: "properties_panel/property_text/root" + template_node_child: true +} +nodes { + type: TYPE_TEMPLATE + id: "properties_panel/property_left_right_selector" + parent: "properties_panel/properties" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_left_right_selector/root" + parent: "properties_panel/property_left_right_selector" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "properties_panel/property_left_right_selector/text_name" + parent: "properties_panel/property_left_right_selector/root" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_left_right_selector/E_Anchor" + parent: "properties_panel/property_left_right_selector/root" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_left_right_selector/button_left" + parent: "properties_panel/property_left_right_selector/E_Anchor" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_left_right_selector/icon_left" + parent: "properties_panel/property_left_right_selector/button_left" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_left_right_selector/button_right" + parent: "properties_panel/property_left_right_selector/E_Anchor" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_left_right_selector/icon_right" + parent: "properties_panel/property_left_right_selector/button_right" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_left_right_selector/selected" + parent: "properties_panel/property_left_right_selector/E_Anchor" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "properties_panel/property_left_right_selector/text_value" + parent: "properties_panel/property_left_right_selector/E_Anchor" + template_node_child: true +} +nodes { + type: TYPE_TEMPLATE + id: "properties_panel/property_vector3" + parent: "properties_panel/properties" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_vector3/root" + parent: "properties_panel/property_vector3" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "properties_panel/property_vector3/text_name" + parent: "properties_panel/property_vector3/root" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_vector3/E_Anchor" + parent: "properties_panel/property_vector3/root" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_vector3/field_x" + parent: "properties_panel/property_vector3/E_Anchor" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "properties_panel/property_vector3/text_x" + parent: "properties_panel/property_vector3/field_x" + template_node_child: true +} +nodes { + type: TYPE_TEMPLATE + id: "properties_panel/property_vector3/rich_input_x" + parent: "properties_panel/property_vector3/field_x" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_vector3/rich_input_x/root" + parent: "properties_panel/property_vector3/rich_input_x" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_vector3/rich_input_x/button" + parent: "properties_panel/property_vector3/rich_input_x/root" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "properties_panel/property_vector3/rich_input_x/placeholder_text" + parent: "properties_panel/property_vector3/rich_input_x/root" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "properties_panel/property_vector3/rich_input_x/input_text" + parent: "properties_panel/property_vector3/rich_input_x/root" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_vector3/rich_input_x/cursor_node" + parent: "properties_panel/property_vector3/rich_input_x/root" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "properties_panel/property_vector3/rich_input_x/cursor_text" + parent: "properties_panel/property_vector3/rich_input_x/cursor_node" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_vector3/selected_x" + parent: "properties_panel/property_vector3/field_x" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_vector3/field_y" + parent: "properties_panel/property_vector3/E_Anchor" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "properties_panel/property_vector3/text_y" + parent: "properties_panel/property_vector3/field_y" + template_node_child: true +} +nodes { + type: TYPE_TEMPLATE + id: "properties_panel/property_vector3/rich_input_y" + parent: "properties_panel/property_vector3/field_y" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_vector3/rich_input_y/root" + parent: "properties_panel/property_vector3/rich_input_y" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_vector3/rich_input_y/button" + parent: "properties_panel/property_vector3/rich_input_y/root" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "properties_panel/property_vector3/rich_input_y/placeholder_text" + parent: "properties_panel/property_vector3/rich_input_y/root" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "properties_panel/property_vector3/rich_input_y/input_text" + parent: "properties_panel/property_vector3/rich_input_y/root" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_vector3/rich_input_y/cursor_node" + parent: "properties_panel/property_vector3/rich_input_y/root" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "properties_panel/property_vector3/rich_input_y/cursor_text" + parent: "properties_panel/property_vector3/rich_input_y/cursor_node" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_vector3/selected_y" + parent: "properties_panel/property_vector3/field_y" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_vector3/field_z" + parent: "properties_panel/property_vector3/E_Anchor" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "properties_panel/property_vector3/text_z" + parent: "properties_panel/property_vector3/field_z" + template_node_child: true +} +nodes { + type: TYPE_TEMPLATE + id: "properties_panel/property_vector3/rich_input_z" + parent: "properties_panel/property_vector3/field_z" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_vector3/rich_input_z/root" + parent: "properties_panel/property_vector3/rich_input_z" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_vector3/rich_input_z/button" + parent: "properties_panel/property_vector3/rich_input_z/root" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "properties_panel/property_vector3/rich_input_z/placeholder_text" + parent: "properties_panel/property_vector3/rich_input_z/root" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "properties_panel/property_vector3/rich_input_z/input_text" + parent: "properties_panel/property_vector3/rich_input_z/root" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_vector3/rich_input_z/cursor_node" + parent: "properties_panel/property_vector3/rich_input_z/root" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "properties_panel/property_vector3/rich_input_z/cursor_text" + parent: "properties_panel/property_vector3/rich_input_z/cursor_node" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_vector3/selected_z" + parent: "properties_panel/property_vector3/field_z" + template_node_child: true +} +nodes { + type: TYPE_TEMPLATE + id: "properties_panel/property_button_small" + parent: "properties_panel/properties" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_button_small/root" + parent: "properties_panel/property_button_small" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "properties_panel/property_button_small/text_name" + parent: "properties_panel/property_button_small/root" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_button_small/E_Anchor" + parent: "properties_panel/property_button_small/root" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_button_small/button" + parent: "properties_panel/property_button_small/E_Anchor" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "properties_panel/property_button_small/selected" + parent: "properties_panel/property_button_small/button" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "properties_panel/property_button_small/text_button" + parent: "properties_panel/property_button_small/button" + template_node_child: true +} +layers { + name: "druid" +} +layers { + name: "druid_text_regular" +} +layers { + name: "druid_text_bold" +} +material: "/builtins/materials/gui.material" +adjust_reference: ADJUST_REFERENCE_PARENT diff --git a/example/example.gui_script b/example/example.gui_script new file mode 100644 index 0000000..80f8ad5 --- /dev/null +++ b/example/example.gui_script @@ -0,0 +1,62 @@ +local druid = require("druid.druid") +local properties_panel = require("widget.properties_panel.properties_panel") + +local function update_example(self, example_name) + local example_url = "#" .. example_name + msg.post(example_url, "disable") + msg.post(example_url, "final") + msg.post(example_url, "unload") +end + + +local function load_example(self, example_name) + if self._example_name then + update_example(self, self._example_name) + end + + self._example_name = example_name + msg.post("#" .. example_name, "load") +end + +function init(self) + self.druid = druid.new(self) + self.properties_panel = self.druid:new_widget(properties_panel, "properties_panel") + self.properties_panel:add_left_right_selector(function(selector) + selector:set_array_type({ + "grid", + "grid_game_objects", + "hex", + "hex_pointy", + "iso", + "iso_staggered", + }, true) + selector:set_value("grid") + selector:set_text("Example") + selector.on_change_value:subscribe(function(value) + load_example(self, value) + end) + end) + + load_example(self, "grid") +end + +function final(self) + self.druid:final() +end + +function update(self, dt) + self.druid:update(dt) +end + +function on_message(self, message_id, message, sender) + self.druid:on_message(message_id, message, sender) + + if message_id == hash("proxy_loaded") then + msg.post(sender, "init") + msg.post(sender, "enable") + end +end + +function on_input(self, action_id, action) + return self.druid:on_input(action_id, action) +end diff --git a/example/example_grid/example_grid.collection b/example/example_grid/example_grid.collection new file mode 100644 index 0000000..b0c56b5 --- /dev/null +++ b/example/example_grid/example_grid.collection @@ -0,0 +1,86 @@ +name: "example_grid" +instances { + id: "entities" + prototype: "/example/assets/grid/entities.go" +} +collection_instances { + id: "grid" + collection: "/tiled/export/grid.collection" + position { + z: -0.1 + } +} +scale_along_z: 0 +embedded_instances { + id: "go" + data: "components {\n" + " id: \"example_grid\"\n" + " component: \"/example/example_grid/example_grid.script\"\n" + "}\n" + "" +} +embedded_instances { + id: "camera" + data: "components {\n" + " id: \"camera_wasd_control\"\n" + " component: \"/example/assets/camera_wasd_control.script\"\n" + " properties {\n" + " id: \"movement_speed\"\n" + " value: \"250.0\"\n" + " type: PROPERTY_TYPE_NUMBER\n" + " }\n" + " properties {\n" + " id: \"zoom_speed\"\n" + " value: \"2.0\"\n" + " type: PROPERTY_TYPE_NUMBER\n" + " }\n" + "}\n" + "embedded_components {\n" + " id: \"camera\"\n" + " type: \"camera\"\n" + " data: \"aspect_ratio: 1.0\\n" + "fov: 0.7854\\n" + "near_z: -100.0\\n" + "far_z: 1000.0\\n" + "orthographic_projection: 1\\n" + "orthographic_zoom: 2.0\\n" + "\"\n" + "}\n" + "" + position { + x: 240.0 + y: 160.0 + z: -10.0 + } +} +embedded_instances { + id: "background" + data: "embedded_components {\n" + " id: \"sprite\"\n" + " type: \"sprite\"\n" + " data: \"default_animation: \\\"pixel\\\"\\n" + "material: \\\"/builtins/materials/sprite.material\\\"\\n" + "slice9 {\\n" + " x: 2.0\\n" + " y: 2.0\\n" + " z: 2.0\\n" + " w: 2.0\\n" + "}\\n" + "size {\\n" + " x: 480.0\\n" + " y: 320.0\\n" + "}\\n" + "size_mode: SIZE_MODE_MANUAL\\n" + "textures {\\n" + " sampler: \\\"texture_sampler\\\"\\n" + " texture: \\\"/druid/druid.atlas\\\"\\n" + "}\\n" + "\"\n" + " position {\n" + " x: 240.0\n" + " y: 160.0\n" + " z: -1.0\n" + " }\n" + "}\n" + "" +} diff --git a/example/example_grid/example_grid.script b/example/example_grid/example_grid.script new file mode 100644 index 0000000..842aa49 --- /dev/null +++ b/example/example_grid/example_grid.script @@ -0,0 +1,46 @@ +local detiled = require("detiled.detiled") + + +local function spawn_entity(entity, layer_data) + local transform = entity.transform + local position = vmath.vector3(transform.position_x, transform.position_y, transform.position_z) + if layer_data then + position.x = position.x + layer_data.position_x + position.y = position.y + layer_data.position_y + position.z = position.z + layer_data.position_z + end + local factory_url = "/entities#" .. entity.prefab_id + local scale = vmath.vector3(transform.scale_x, transform.scale_y, 1) + factory.create(factory_url, position, nil, nil, scale) +end + + +local function spawn_map(layers) + for _, layer_data in pairs(layers) do + for _, entity in ipairs(layer_data.entities) do + spawn_entity(entity, layer_data) + end + end +end + + +function init(self) + detiled.load_tileset("/tiled/tilesets/grid_items.json") + detiled.load_tileset("/tiled/tilesets/grid_tileset.json") + + local layers, map_params = detiled.parse("/tiled/maps/grid.json") + spawn_map(layers) + self.map_params = map_params + + msg.post(".", "acquire_input_focus") +end + + +function on_input(self, action_id, action) + if action_id == hash("touch") and action.pressed then + local world_pos = camera.screen_xy_to_world(action.screen_x, action.screen_y) + local cell_i, cell_j = detiled.pos_to_cell(world_pos.x, world_pos.y, self.map_params) + local position_x, position_y = detiled.cell_to_pos(cell_i, cell_j, self.map_params) + print("touch cell", cell_i, cell_j, "pos", position_x, position_y) + end +end diff --git a/example/example_grid_game_objects/assets/entities.go b/example/example_grid_game_objects/assets/entities.go new file mode 100644 index 0000000..c2bb279 --- /dev/null +++ b/example/example_grid_game_objects/assets/entities.go @@ -0,0 +1,48 @@ +embedded_components { + id: "cactus" + type: "factory" + data: "prototype: \"/example/assets/grid/entities/cactus.go\"\n" + "" +} +embedded_components { + id: "icon_barrel" + type: "factory" + data: "prototype: \"/example/assets/grid/entities/icon_barrel.go\"\n" + "" +} +embedded_components { + id: "icon_chest" + type: "factory" + data: "prototype: \"/example/assets/grid/entities/icon_chest.go\"\n" + "" +} +embedded_components { + id: "icon_key" + type: "factory" + data: "prototype: \"/example/assets/grid/entities/icon_key.go\"\n" + "" +} +embedded_components { + id: "icon_stop" + type: "factory" + data: "prototype: \"/example/assets/grid/entities/icon_stop.go\"\n" + "" +} +embedded_components { + id: "icon_table" + type: "factory" + data: "prototype: \"/example/assets/grid/entities/icon_table.go\"\n" + "" +} +embedded_components { + id: "tree" + type: "factory" + data: "prototype: \"/example/assets/grid/entities/tree.go\"\n" + "" +} +embedded_components { + id: "tile" + type: "factory" + data: "prototype: \"/example/example_grid_game_objects/assets/objects/tile.go\"\n" + "" +} diff --git a/example/example_grid_game_objects/assets/grid_game_objects.atlas b/example/example_grid_game_objects/assets/grid_game_objects.atlas new file mode 100644 index 0000000..d045124 --- /dev/null +++ b/example/example_grid_game_objects/assets/grid_game_objects.atlas @@ -0,0 +1,703 @@ +images { + image: "/tiled/assets/grid_game_objects/tile_0000.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0001.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0002.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0003.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0004.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0005.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0006.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0007.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0008.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0009.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0010.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0011.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0012.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0013.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0014.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0015.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0016.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0017.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0018.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0019.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0020.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0021.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0022.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0023.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0024.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0025.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0026.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0027.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0028.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0029.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0030.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0031.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0032.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0033.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0034.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0035.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0036.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0037.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0038.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0039.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0040.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0041.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0042.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0043.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0044.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0045.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0046.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0047.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0048.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0049.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0050.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0051.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0052.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0053.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0054.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0055.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0056.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0057.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0058.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0059.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0060.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0061.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0062.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0063.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0064.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0065.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0066.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0067.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0068.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0069.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0070.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0071.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0072.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0073.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0074.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0075.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0076.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0077.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0078.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0079.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0080.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0081.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0082.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0083.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0084.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0085.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0086.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0087.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0088.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0089.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0090.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0091.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0092.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0093.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0094.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0095.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0096.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0097.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0098.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0099.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0100.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0101.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0102.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0103.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0104.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0105.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0106.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0107.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0108.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0109.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0110.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0111.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0112.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0113.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0114.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0115.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0116.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0117.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0118.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0119.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0120.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0121.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0122.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0123.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0124.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0125.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0126.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0127.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0128.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0129.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0130.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0131.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0132.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0133.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0134.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0135.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0136.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0137.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0138.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0139.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0140.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0141.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0142.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0143.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0144.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0145.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0146.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0147.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0148.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0149.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0150.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0151.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0152.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0153.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0154.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0155.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0156.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0157.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0158.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0159.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0160.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0161.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0162.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0163.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0164.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0165.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0166.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0167.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0168.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0169.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0170.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0171.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0172.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0173.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0174.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0175.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0176.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0177.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0178.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0179.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0180.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0181.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0182.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0183.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0184.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0185.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0186.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0187.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0188.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0189.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0190.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0191.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0192.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0193.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0194.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0195.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0196.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0197.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0198.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0199.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0200.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0201.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0202.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0203.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0204.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0205.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0206.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0207.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0208.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0209.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0210.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0211.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0212.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0213.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0214.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0215.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0216.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0217.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0218.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0219.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0220.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0221.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0222.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0223.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0224.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0225.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0226.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0227.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0228.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0229.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0230.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0231.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0232.png" +} +images { + image: "/tiled/assets/grid_game_objects/tile_0233.png" +} +extrude_borders: 2 diff --git a/example/example_grid_game_objects/assets/objects/tile.go b/example/example_grid_game_objects/assets/objects/tile.go new file mode 100644 index 0000000..97e688c --- /dev/null +++ b/example/example_grid_game_objects/assets/objects/tile.go @@ -0,0 +1,15 @@ +components { + id: "set_sprite" + component: "/example/assets/hexgrid/set_sprite.script" +} +embedded_components { + id: "sprite" + type: "sprite" + data: "default_animation: \"tile_0000\"\n" + "material: \"/builtins/materials/sprite.material\"\n" + "textures {\n" + " sampler: \"texture_sampler\"\n" + " texture: \"/example/example_grid_game_objects/assets/grid_game_objects.atlas\"\n" + "}\n" + "" +} diff --git a/example/example_grid_game_objects/example_grid_game_objects.collection b/example/example_grid_game_objects/example_grid_game_objects.collection new file mode 100644 index 0000000..eb270ca --- /dev/null +++ b/example/example_grid_game_objects/example_grid_game_objects.collection @@ -0,0 +1,82 @@ +name: "example_grid_game_objects" +instances { + id: "entities" + prototype: "/example/example_grid_game_objects/assets/entities.go" +} +scale_along_z: 0 +embedded_instances { + id: "go" + data: "components {\n" + " id: \"example_grid_game_objects\"\n" + " component: \"/example/example_grid_game_objects/example_grid_game_objects.script\"\n" + "}\n" + "" +} +embedded_instances { + id: "camera" + data: "components {\n" + " id: \"camera_wasd_control\"\n" + " component: \"/example/assets/camera_wasd_control.script\"\n" + " properties {\n" + " id: \"movement_speed\"\n" + " value: \"100.0\"\n" + " type: PROPERTY_TYPE_NUMBER\n" + " }\n" + " properties {\n" + " id: \"zoom_speed\"\n" + " value: \"2.0\"\n" + " type: PROPERTY_TYPE_NUMBER\n" + " }\n" + "}\n" + "embedded_components {\n" + " id: \"camera\"\n" + " type: \"camera\"\n" + " data: \"aspect_ratio: 1.0\\n" + "fov: 0.7854\\n" + "near_z: -100.0\\n" + "far_z: 1000.0\\n" + "orthographic_projection: 1\\n" + "orthographic_zoom: 2.0\\n" + "\"\n" + "}\n" + "" + position { + x: 240.0 + y: 160.0 + z: -10.0 + } +} +embedded_instances { + id: "background" + data: "embedded_components {\n" + " id: \"sprite\"\n" + " type: \"sprite\"\n" + " data: \"default_animation: \\\"pixel\\\"\\n" + "material: \\\"/builtins/materials/sprite.material\\\"\\n" + "slice9 {\\n" + " x: 2.0\\n" + " y: 2.0\\n" + " z: 2.0\\n" + " w: 2.0\\n" + "}\\n" + "size {\\n" + " x: 480.0\\n" + " y: 320.0\\n" + "}\\n" + "size_mode: SIZE_MODE_MANUAL\\n" + "textures {\\n" + " sampler: \\\"texture_sampler\\\"\\n" + " texture: \\\"/druid/druid.atlas\\\"\\n" + "}\\n" + "\"\n" + " position {\n" + " x: 240.0\n" + " y: 160.0\n" + " z: -1.0\n" + " }\n" + "}\n" + "" + position { + z: -2.0 + } +} diff --git a/example/example_grid_game_objects/example_grid_game_objects.script b/example/example_grid_game_objects/example_grid_game_objects.script new file mode 100644 index 0000000..f41f394 --- /dev/null +++ b/example/example_grid_game_objects/example_grid_game_objects.script @@ -0,0 +1,46 @@ +local detiled = require("detiled.detiled") + + +local function spawn_entity(entity, layer_data) + local transform = entity.transform + local position = vmath.vector3(transform.position_x, transform.position_y, transform.position_z) + position.x = position.x + layer_data.position_x + position.y = position.y + layer_data.position_y + position.z = position.z + layer_data.position_z + local factory_url = "/entities#" .. entity.prefab_id + local scale = vmath.vector3(transform.scale_x, transform.scale_y, 1) + factory.create(factory_url, position, nil, { + sprite_animation = hash(entity.image) + }, scale) +end + + +local function spawn_map(layers) + for _, layer_data in pairs(layers) do + for _, entity in ipairs(layer_data.entities) do + spawn_entity(entity, layer_data) + end + end +end + + +function init(self) + detiled.load_tileset("/tiled/tilesets/grid_items.json") + detiled.load_tileset("/tiled/tilesets/grid_game_objects.json") + + local layers, map_params = detiled.parse("/tiled/maps/grid_game_objects.json") + spawn_map(layers) + self.map_params = map_params + + msg.post(".", "acquire_input_focus") +end + + +function on_input(self, action_id, action) + if action_id == hash("touch") and action.pressed then + local world_pos = camera.screen_xy_to_world(action.screen_x, action.screen_y) + local cell_i, cell_j = detiled.pos_to_cell(world_pos.x, world_pos.y, self.map_params) + local position_x, position_y = detiled.cell_to_pos(cell_i, cell_j, self.map_params) + print("touch cell", cell_i, cell_j, "pos", position_x, position_y) + end +end diff --git a/example/example_hexgrid/example_hexgrid.collection b/example/example_hexgrid/example_hexgrid.collection new file mode 100644 index 0000000..cdde138 --- /dev/null +++ b/example/example_hexgrid/example_hexgrid.collection @@ -0,0 +1,78 @@ +name: "example_hexgrid" +instances { + id: "entities" + prototype: "/example/assets/hexgrid/entities.go" +} +scale_along_z: 0 +embedded_instances { + id: "go" + data: "components {\n" + " id: \"example_hexgrid\"\n" + " component: \"/example/example_hexgrid/example_hexgrid.script\"\n" + "}\n" + "" +} +embedded_instances { + id: "camera" + data: "components {\n" + " id: \"camera_wasd_control\"\n" + " component: \"/example/assets/camera_wasd_control.script\"\n" + " properties {\n" + " id: \"movement_speed\"\n" + " value: \"1000.0\"\n" + " type: PROPERTY_TYPE_NUMBER\n" + " }\n" + " properties {\n" + " id: \"zoom_speed\"\n" + " value: \"2.0\"\n" + " type: PROPERTY_TYPE_NUMBER\n" + " }\n" + "}\n" + "embedded_components {\n" + " id: \"camera\"\n" + " type: \"camera\"\n" + " data: \"aspect_ratio: 1.0\\n" + "fov: 0.7854\\n" + "near_z: -100.0\\n" + "far_z: 1000.0\\n" + "orthographic_projection: 1\\n" + "\"\n" + "}\n" + "" + position { + x: 480.0 + y: 320.0 + z: -10.0 + } +} +embedded_instances { + id: "background" + data: "embedded_components {\n" + " id: \"sprite\"\n" + " type: \"sprite\"\n" + " data: \"default_animation: \\\"pixel\\\"\\n" + "material: \\\"/builtins/materials/sprite.material\\\"\\n" + "slice9 {\\n" + " x: 2.0\\n" + " y: 2.0\\n" + " z: 2.0\\n" + " w: 2.0\\n" + "}\\n" + "size {\\n" + " x: 4338.0\\n" + " y: 2952.0\\n" + "}\\n" + "size_mode: SIZE_MODE_MANUAL\\n" + "textures {\\n" + " sampler: \\\"texture_sampler\\\"\\n" + " texture: \\\"/druid/druid.atlas\\\"\\n" + "}\\n" + "\"\n" + " position {\n" + " x: 2169.0\n" + " y: 1476.0\n" + " z: -4.0\n" + " }\n" + "}\n" + "" +} diff --git a/example/example_hexgrid/example_hexgrid.script b/example/example_hexgrid/example_hexgrid.script new file mode 100644 index 0000000..318c965 --- /dev/null +++ b/example/example_hexgrid/example_hexgrid.script @@ -0,0 +1,51 @@ +local detiled = require("detiled.detiled") + +local function get_z_position(x, y) + return -y / 10000 + x / 100000 +end + +local function spawn_entity(entity, layer_data) + local transform = entity.transform + local position = vmath.vector3(transform.position_x, transform.position_y, transform.position_z) + if layer_data then + position.x = position.x + layer_data.position_x + position.y = position.y + layer_data.position_y + position.z = position.z + layer_data.position_z + end + position.z = position.z + get_z_position(position.x, position.y) + local factory_url = "/entities#" .. entity.prefab_id + local scale = vmath.vector3(transform.scale_x, transform.scale_y, 1) + factory.create(factory_url, position, nil, { sprite_animation = hash(entity.image) }, scale) +end + + +local function spawn_map(layers) + for _, layer_data in pairs(layers) do + for _, entity in ipairs(layer_data.entities) do + if entity.prefab_id then + spawn_entity(entity, layer_data) + end + end + end +end + + +function init(self) + detiled.load_tileset("/tiled/tilesets/hexgrid_tiles.json") + detiled.load_tileset("/tiled/tilesets/hexgrid_objects.json") + local layers, map_params = detiled.parse("/tiled/maps/hexgrid.json") + spawn_map(layers) + self.map_params = map_params + + msg.post(".", "acquire_input_focus") +end + + +function on_input(self, action_id, action) + if action_id == hash("touch") and action.pressed then + local world_pos = camera.screen_xy_to_world(action.screen_x, action.screen_y) + local cell_i, cell_j = detiled.pos_to_cell(world_pos.x, world_pos.y, self.map_params) + local position_x, position_y = detiled.cell_to_pos(cell_i, cell_j, self.map_params) + print("touch cell", cell_i, cell_j, "pos", position_x, position_y) + end +end diff --git a/example/example_hexgrid_pointy/example_hexgrid_pointy.collection b/example/example_hexgrid_pointy/example_hexgrid_pointy.collection new file mode 100644 index 0000000..e695a28 --- /dev/null +++ b/example/example_hexgrid_pointy/example_hexgrid_pointy.collection @@ -0,0 +1,78 @@ +name: "example_hexgrid_pointy" +instances { + id: "entities" + prototype: "/example/assets/hexgrid_pointy/entities.go" +} +scale_along_z: 0 +embedded_instances { + id: "go" + data: "components {\n" + " id: \"example_hexgrid_pointy\"\n" + " component: \"/example/example_hexgrid_pointy/example_hexgrid_pointy.script\"\n" + "}\n" + "" +} +embedded_instances { + id: "camera" + data: "components {\n" + " id: \"camera_wasd_control\"\n" + " component: \"/example/assets/camera_wasd_control.script\"\n" + " properties {\n" + " id: \"movement_speed\"\n" + " value: \"1000.0\"\n" + " type: PROPERTY_TYPE_NUMBER\n" + " }\n" + " properties {\n" + " id: \"zoom_speed\"\n" + " value: \"2.0\"\n" + " type: PROPERTY_TYPE_NUMBER\n" + " }\n" + "}\n" + "embedded_components {\n" + " id: \"camera\"\n" + " type: \"camera\"\n" + " data: \"aspect_ratio: 1.0\\n" + "fov: 0.7854\\n" + "near_z: -100.0\\n" + "far_z: 1000.0\\n" + "orthographic_projection: 1\\n" + "\"\n" + "}\n" + "" + position { + x: 480.0 + y: 320.0 + z: -10.0 + } +} +embedded_instances { + id: "background" + data: "embedded_components {\n" + " id: \"sprite\"\n" + " type: \"sprite\"\n" + " data: \"default_animation: \\\"pixel\\\"\\n" + "material: \\\"/builtins/materials/sprite.material\\\"\\n" + "slice9 {\\n" + " x: 2.0\\n" + " y: 2.0\\n" + " z: 2.0\\n" + " w: 2.0\\n" + "}\\n" + "size {\\n" + " x: 1952.0\\n" + " y: 1033.0\\n" + "}\\n" + "size_mode: SIZE_MODE_MANUAL\\n" + "textures {\\n" + " sampler: \\\"texture_sampler\\\"\\n" + " texture: \\\"/druid/druid.atlas\\\"\\n" + "}\\n" + "\"\n" + " position {\n" + " x: 976.0\n" + " y: 516.5\n" + " z: -4.0\n" + " }\n" + "}\n" + "" +} diff --git a/example/example_hexgrid_pointy/example_hexgrid_pointy.script b/example/example_hexgrid_pointy/example_hexgrid_pointy.script new file mode 100644 index 0000000..b1ade91 --- /dev/null +++ b/example/example_hexgrid_pointy/example_hexgrid_pointy.script @@ -0,0 +1,51 @@ +local detiled = require("detiled.detiled") + +local function get_z_position(x, y) + return -y / 10000 + x / 100000 +end + +local function spawn_entity(entity, layer_data) + local transform = entity.transform + local position = vmath.vector3(transform.position_x, transform.position_y, transform.position_z) + if layer_data then + position.x = position.x + layer_data.position_x + position.y = position.y + layer_data.position_y + position.z = position.z + layer_data.position_z + end + position.z = position.z + get_z_position(position.x, position.y) + local factory_url = "/entities#" .. entity.prefab_id + local rot = vmath.quat_rotation_z(math.rad(transform.rotation or 0)) + local scale = vmath.vector3(transform.scale_x, transform.scale_y, 1) + factory.create(factory_url, position, rot, nil, scale) +end + + +local function spawn_map(layers) + for _, layer_data in pairs(layers) do + for _, entity in ipairs(layer_data.entities) do + spawn_entity(entity, layer_data) + end + end +end + + +function init(self) + detiled.load_tileset("/tiled/tilesets/hexgrid_tiles.json") + detiled.load_tileset("/tiled/tilesets/hexgrid_objects.json") + detiled.load_tileset("/tiled/tilesets/hexgrid_pointy.json") + local layers, map_params = detiled.parse("/tiled/maps/hexgrid_pointy.json") + spawn_map(layers) + self.map_params = map_params + + msg.post(".", "acquire_input_focus") +end + + +function on_input(self, action_id, action) + if action_id == hash("touch") and action.pressed then + local world_pos = camera.screen_xy_to_world(action.screen_x, action.screen_y) + local cell_i, cell_j = detiled.pos_to_cell(world_pos.x, world_pos.y, self.map_params) + local position_x, position_y = detiled.cell_to_pos(cell_i, cell_j, self.map_params) + print("touch cell", cell_i, cell_j, "pos", position_x, position_y) + end +end diff --git a/example/example_isogrid/example_isogrid.collection b/example/example_isogrid/example_isogrid.collection new file mode 100644 index 0000000..edf2e08 --- /dev/null +++ b/example/example_isogrid/example_isogrid.collection @@ -0,0 +1,78 @@ +name: "example_isogrid" +instances { + id: "entities" + prototype: "/example/assets/isogrid/entities.go" +} +scale_along_z: 0 +embedded_instances { + id: "go" + data: "components {\n" + " id: \"example_isogrid\"\n" + " component: \"/example/example_isogrid/example_isogrid.script\"\n" + "}\n" + "" +} +embedded_instances { + id: "background" + data: "embedded_components {\n" + " id: \"sprite\"\n" + " type: \"sprite\"\n" + " data: \"default_animation: \\\"pixel\\\"\\n" + "material: \\\"/builtins/materials/sprite.material\\\"\\n" + "slice9 {\\n" + " x: 2.0\\n" + " y: 2.0\\n" + " z: 2.0\\n" + " w: 2.0\\n" + "}\\n" + "size {\\n" + " x: 2450.0\\n" + " y: 1225.0\\n" + "}\\n" + "size_mode: SIZE_MODE_MANUAL\\n" + "textures {\\n" + " sampler: \\\"texture_sampler\\\"\\n" + " texture: \\\"/druid/druid.atlas\\\"\\n" + "}\\n" + "\"\n" + " position {\n" + " x: 1225.0\n" + " y: 612.5\n" + " z: -1.0\n" + " }\n" + "}\n" + "" +} +embedded_instances { + id: "camera" + data: "components {\n" + " id: \"camera_wasd_control\"\n" + " component: \"/example/assets/camera_wasd_control.script\"\n" + " properties {\n" + " id: \"movement_speed\"\n" + " value: \"600.0\"\n" + " type: PROPERTY_TYPE_NUMBER\n" + " }\n" + " properties {\n" + " id: \"zoom_speed\"\n" + " value: \"2.0\"\n" + " type: PROPERTY_TYPE_NUMBER\n" + " }\n" + "}\n" + "embedded_components {\n" + " id: \"camera\"\n" + " type: \"camera\"\n" + " data: \"aspect_ratio: 1.0\\n" + "fov: 0.7854\\n" + "near_z: -100.0\\n" + "far_z: 1000.0\\n" + "orthographic_projection: 1\\n" + "\"\n" + "}\n" + "" + position { + x: 981.0 + y: 1116.0 + z: -10.0 + } +} diff --git a/example/example_isogrid/example_isogrid.script b/example/example_isogrid/example_isogrid.script new file mode 100644 index 0000000..6f35d55 --- /dev/null +++ b/example/example_isogrid/example_isogrid.script @@ -0,0 +1,56 @@ +local detiled = require("detiled.detiled") + + +local function get_z_position(x, y) + return -y / 10000 + x / 100000 +end + + +local function spawn_entity(entity, layer_data) + if not entity.prefab_id then + return + end + + local transform = entity.transform + local position = vmath.vector3(transform.position_x, transform.position_y, transform.position_z) + if layer_data then + position.x = position.x + layer_data.position_x + position.y = position.y + layer_data.position_y + position.z = position.z + layer_data.position_z + end + position.z = position.z + get_z_position(position.x, position.y) + local factory_url = "/entities#" .. entity.prefab_id + local rot = vmath.quat_rotation_z(math.rad(transform.rotation or 0)) + local scale = vmath.vector3(transform.scale_x, transform.scale_y, 1) + factory.create(factory_url, position, rot, nil, scale) +end + + +local function spawn_map(layers) + for _, layer_data in pairs(layers) do + for _, entity in ipairs(layer_data.entities) do + spawn_entity(entity, layer_data) + end + end +end + + +function init(self) + detiled.load_tileset("/tiled/tilesets/hexgrid_objects.json") + detiled.load_tileset("/tiled/tilesets/isogrid_tileset.json") + local layers, map_params = detiled.parse("/tiled/maps/isogrid.json") + spawn_map(layers) + self.map_params = map_params + + msg.post(".", "acquire_input_focus") +end + + +function on_input(self, action_id, action) + if action_id == hash("touch") and action.pressed then + local world_pos = camera.screen_xy_to_world(action.screen_x, action.screen_y) + local cell_i, cell_j = detiled.pos_to_cell(world_pos.x, world_pos.y, self.map_params) + local position_x, position_y = detiled.cell_to_pos(cell_i, cell_j, self.map_params) + print("touch cell", cell_i, cell_j, "pos", position_x, position_y) + end +end diff --git a/example/example_isogrid_staggered/example_isogrid_staggered.collection b/example/example_isogrid_staggered/example_isogrid_staggered.collection new file mode 100644 index 0000000..22fa2c4 --- /dev/null +++ b/example/example_isogrid_staggered/example_isogrid_staggered.collection @@ -0,0 +1,78 @@ +name: "example_isogrid_staggered" +instances { + id: "entities" + prototype: "/example/assets/isogrid/entities.go" +} +scale_along_z: 0 +embedded_instances { + id: "go" + data: "components {\n" + " id: \"example_isogrid_staggered\"\n" + " component: \"/example/example_isogrid_staggered/example_isogrid_staggered.script\"\n" + "}\n" + "" +} +embedded_instances { + id: "background" + data: "embedded_components {\n" + " id: \"sprite\"\n" + " type: \"sprite\"\n" + " data: \"default_animation: \\\"pixel\\\"\\n" + "material: \\\"/builtins/materials/sprite.material\\\"\\n" + "slice9 {\\n" + " x: 2.0\\n" + " y: 2.0\\n" + " z: 2.0\\n" + " w: 2.0\\n" + "}\\n" + "size {\\n" + " x: 2928.0\\n" + " y: 504.0\\n" + "}\\n" + "size_mode: SIZE_MODE_MANUAL\\n" + "textures {\\n" + " sampler: \\\"texture_sampler\\\"\\n" + " texture: \\\"/druid/druid.atlas\\\"\\n" + "}\\n" + "\"\n" + " position {\n" + " x: 1464.0\n" + " y: 252.0\n" + " z: -1.0\n" + " }\n" + "}\n" + "" +} +embedded_instances { + id: "camera" + data: "components {\n" + " id: \"camera_wasd_control\"\n" + " component: \"/example/assets/camera_wasd_control.script\"\n" + " properties {\n" + " id: \"movement_speed\"\n" + " value: \"600.0\"\n" + " type: PROPERTY_TYPE_NUMBER\n" + " }\n" + " properties {\n" + " id: \"zoom_speed\"\n" + " value: \"2.0\"\n" + " type: PROPERTY_TYPE_NUMBER\n" + " }\n" + "}\n" + "embedded_components {\n" + " id: \"camera\"\n" + " type: \"camera\"\n" + " data: \"aspect_ratio: 1.0\\n" + "fov: 0.7854\\n" + "near_z: -100.0\\n" + "far_z: 1000.0\\n" + "orthographic_projection: 1\\n" + "\"\n" + "}\n" + "" + position { + x: 480.0 + y: 320.0 + z: -10.0 + } +} diff --git a/example/example_isogrid_staggered/example_isogrid_staggered.script b/example/example_isogrid_staggered/example_isogrid_staggered.script new file mode 100644 index 0000000..e24475f --- /dev/null +++ b/example/example_isogrid_staggered/example_isogrid_staggered.script @@ -0,0 +1,52 @@ +local detiled = require("detiled.detiled") + + +local function get_z_position(x, y) + return -y / 10000 + x / 100000 +end + + +local function spawn_entity(entity, layer_data) + local transform = entity.transform + local position = vmath.vector3(transform.position_x, transform.position_y, transform.position_z) + if layer_data then + position.x = position.x + layer_data.position_x + position.y = position.y + layer_data.position_y + position.z = position.z + layer_data.position_z + end + position.z = position.z + get_z_position(position.x, position.y) + local factory_url = "/entities#" .. entity.prefab_id + local rot = vmath.quat_rotation_z(math.rad(transform.rotation or 0)) + local scale = vmath.vector3(transform.scale_x, transform.scale_y, 1) + factory.create(factory_url, position, rot, nil, scale) +end + + +local function spawn_map(layers) + for _, layer_data in pairs(layers) do + for _, entity in ipairs(layer_data.entities) do + spawn_entity(entity, layer_data) + end + end +end + + +function init(self) + detiled.load_tileset("/tiled/tilesets/hexgrid_objects.json") + detiled.load_tileset("/tiled/tilesets/isogrid_tileset.json") + local layers, map_params = detiled.parse("/tiled/maps/isogrid_staggered.json") + spawn_map(layers) + self.map_params = map_params + + msg.post(".", "acquire_input_focus") +end + + +function on_input(self, action_id, action) + if action_id == hash("touch") and action.pressed then + local world_pos = camera.screen_xy_to_world(action.screen_x, action.screen_y) + local cell_i, cell_j = detiled.pos_to_cell(world_pos.x, world_pos.y, self.map_params) + local position_x, position_y = detiled.cell_to_pos(cell_i, cell_j, self.map_params) + print("touch cell", cell_i, cell_j, "pos", position_x, position_y) + end +end diff --git a/game.project b/game.project index 4e1833a..11a2d41 100644 --- a/game.project +++ b/game.project @@ -1,5 +1,5 @@ [bootstrap] -main_collection = /test/test.collectionc +main_collection = /example/example.collectionc [script] shared_state = 1 @@ -13,12 +13,26 @@ input_method = HiddenInputField [project] title = Detiled -version = 2 -custom_resources = /resources -dependencies#0 = https://github.com/Insality/decore/archive/refs/tags/2.zip -dependencies#1 = https://github.com/britzl/deftest/archive/master.zip -dependencies#2 = https://github.com/Insality/defold-event/archive/refs/tags/13.zip +version = 3 +custom_resources = /tiled/maps,/tiled/tilesets +dependencies#0 = https://github.com/britzl/deftest/archive/refs/tags/2.8.0.zip +dependencies#1 = https://github.com/Insality/defold-event/archive/refs/tags/14.zip +dependencies#2 = https://github.com/Insality/asset-store/archive/refs/tags/2.zip +dependencies#3 = https://github.com/Insality/druid/archive/refs/tags/1.2.0.zip [library] include_dirs = detiled +[input] +game_binding = /builtins/input/all.input_bindingc + +[graphics] +default_texture_min_filter = nearest +default_texture_mag_filter = nearest + +[sprite] +max_count = 1024 + +[native_extension] +app_manifest = /example/assets/appmanifest.appmanifest + diff --git a/input/game.input_binding b/input/game.input_binding deleted file mode 100644 index 8ed1d4e..0000000 --- a/input/game.input_binding +++ /dev/null @@ -1,4 +0,0 @@ -mouse_trigger { - input: MOUSE_BUTTON_1 - action: "touch" -} diff --git a/media/logo.png b/media/logo.png index 6ccbcb4..c381a03 100644 Binary files a/media/logo.png and b/media/logo.png differ diff --git a/media/logo_hero.png b/media/logo_hero.png index c781fe4..8d131f9 100644 Binary files a/media/logo_hero.png and b/media/logo_hero.png differ diff --git a/media/logo_thumb.png b/media/logo_thumb.png index c8696a3..81040fa 100644 Binary files a/media/logo_thumb.png and b/media/logo_thumb.png differ diff --git a/resources/components.json b/resources/components.json deleted file mode 100644 index 8fc42ec..0000000 --- a/resources/components.json +++ /dev/null @@ -1,156 +0,0 @@ -{ - "pack_id": "core", - - "components": { - "id": "", - "prefab_id": false, - "pack_id": false, - "name": false, - "tiled_id": false, - "layer_id": false, - "hidden": false, - - "transform": { - "position_x": 0, - "position_y": 0, - "position_z": 0, - "size_x": 1, - "size_y": 1, - "size_z": 1, - "scale_x": 1, - "scale_y": 1, - "scale_z": 1, - "rotation": 0 - }, - - "game_object": { - "factory_url": "", - "is_slice9": false - }, - - "color": { - "hex_color": "", - "sprite_url": "" - }, - - "level_loader_command": { - "world_id": null, - "pack_id": null, - "offset_x": 0, - "offset_y": 0 - }, - - "debug": { - "is_profiler_active": null - }, - - "on_spawn_command": { - "command": false - }, - - "input": {}, - - "on_key_released": { - "key_to_add_component_json": null, - "key_to_add_component": null - }, - - "window_event": { - "is_focus_gained": false, - "is_focus_lost": false, - "is_resized": false - }, - - "camera": { - "camera_url": "" - }, - - "health": { - "health": 0 - }, - - "gui_main": {}, - "health_circle_visual": {}, - "cursor": {}, - - "damage_number": { - "damage": 1 - }, - - "panthera": { - "animation_path": "" - }, - - "movement": { - "velocity_x": 0, - "velocity_y": 0, - "friction": 0 - }, - - "movement_controller": { - "speed": 1, - "movement_x": 0, - "movement_y": 0 - }, - - "remove_with_delay": { - "delay": 0 - }, - - "explosion": {}, - - "make_explosion_on_spawn": { - "power": 0, - "distance": 0, - "position_x": 0, - "position_y": 0 - }, - - "physics": { - "velocity_x": 0, - "velocity_y": 0 - }, - - "collision": {}, - - "on_collision_remove": false, - - "on_collision_damage": { - "damage": 0 - }, - - "on_collision_explosion": { - "power": 0, - "distance": 0 - }, - - "play_fx_on_remove": { - "fx_url": "" - }, - - "acceleration": { - "value": 0 - }, - - "shooter_controller": { - "bullet_prefab_id": "", - "is_auto_shoot": false, - "spread_angle": 0, - "damage": 0, - "bullet_speed": 2000, - "fire_rate": 0, - "fire_rate_timer": 0, - "burst_count": 5, - "burst_count_current": 0, - "burst_rate": 1, - "bullets_per_shoot": 1 - }, - - "on_target_count_command": { - "amount": 0, - "command": false - }, - - "target": false - } -} diff --git a/resources/entities.json b/resources/entities.json deleted file mode 100644 index 0abd37d..0000000 --- a/resources/entities.json +++ /dev/null @@ -1,236 +0,0 @@ -{ - "pack_id": "core", - "entities": { - "debug": { - "debug": {}, - "on_key_released": { - "key_to_command": { - "key_p": { "debug_command": { "toggle_profiler": true } }, - "key_r": { "debug_command": { "restart": true } } - } - } - }, - - "gui_main": { - "game_object": { - "factory_url": "/spawner/spawner#gui_main" - }, - "gui_main": {} - }, - - "damage_number": { - "transform": {}, - "game_object": { - "factory_url": "/spawner/spawner#damage_number" - }, - "damage_number": { - "amount": 1 - } - }, - - "bullet_sniper": { - "transform": { - "scale_x": 1.25, - "scale_y": 1.25 - }, - "color": { - "hex_color": "95C8E2", - "sprite_url": "/root#sprite" - }, - "game_object": { - "factory_url": "/spawner/spawner#bullet" - }, - "on_collision_explosion": { - "power": 50000, - "damage": 30, - "distance": 128 - }, - "on_collision_damage": { - "damage": 30 - }, - "play_fx_on_remove": { - "fx_url": "explosion" - }, - "on_collision_remove": true, - "physics": {}, - "collision": {}, - "remove_with_delay": { - "delay": 0.5 - } - }, - - "bullet_arcade": { - "transform": { - }, - "color": { - "hex_color": "95C8E2", - "sprite_url": "/root#sprite" - }, - "game_object": { - "factory_url": "/spawner/spawner#bullet" - }, - "on_collision_damage": { - "damage": 50 - }, - "physics": {}, - "collision": {}, - "remove_with_delay": { - "delay": 3 - } - }, - - "bullet_pistol": { - "transform": {}, - "color": { - "hex_color": "95C8E2", - "sprite_url": "/root#sprite" - }, - "game_object": { - "factory_url": "/spawner/spawner#bullet" - }, - "on_collision_damage": { - "damage": 50 - }, - "on_collision_remove": true, - "physics": {}, - "collision": {}, - "remove_with_delay": { - "delay": 0.7 - } - }, - - "bullet_shotgun": { - "transform": {}, - "color": { - "hex_color": "95C8E2", - "sprite_url": "/root#sprite" - }, - "game_object": { - "factory_url": "/spawner/spawner#bullet_shotgun" - }, - "on_collision_damage": { - "damage": 40 - }, - "on_collision_remove": true, - "physics": {}, - "collision": {}, - "remove_with_delay": { - "delay": 0.7 - } - }, - - "bullet_rocket": { - "transform": { - }, - "color": { - "hex_color": "CA8BD0", - "sprite_url": "/root#sprite" - }, - "game_object": { - "factory_url": "/spawner/spawner#rocket" - }, - "on_collision_damage": { - "damage": 50 - }, - "on_collision_explosion": { - "power": 80000, - "damage": 50, - "distance": 350 - }, - "acceleration": { - "value": 500 - }, - "on_collision_remove": true, - "physics": {}, - "collision": {}, - "remove_with_delay": { - "delay": 2 - }, - "play_fx_on_remove": { - "fx_url": "explosion_rocket" - } - }, - - "bullet_rocket_small": { - "transform": { - "scale_x": 0.5, - "scale_y": 0.5 - }, - "color": { - "hex_color": "CA8BD0", - "sprite_url": "/root#sprite" - }, - "game_object": { - "factory_url": "/spawner/spawner#rocket" - }, - "on_collision_damage": { - "damage": 20 - }, - "on_collision_explosion": { - "power": 30000, - "damage": 50, - "distance": 128 - }, - "acceleration": { - "value": 600 - }, - "on_collision_remove": true, - "physics": {}, - "collision": {}, - "remove_with_delay": { - "delay": 2 - }, - "play_fx_on_remove": { - "fx_url": "explosion_rocket" - } - }, - - "bullet_pistol_explosion": { - "transform": {}, - "color": { - "hex_color": "95C8E2", - "sprite_url": "/root#sprite" - }, - "game_object": { - "factory_url": "/spawner/spawner#bullet" - }, - "on_collision_damage": { - "damage": 10 - }, - "on_collision_explosion": { - "power": 15000, - "damage": 30, - "distance": 256 - }, - "on_collision_remove": true, - "physics": {}, - "collision": {}, - "remove_with_delay": { - "delay": 0.7 - }, - "play_fx_on_remove": { - "fx_url": "explosion" - } - }, - - "explosion": { - "transform": {}, - "game_object": { - "factory_url": "/spawner/spawner#explosion" - }, - "remove_with_delay": { - "delay": 0.1 - } - }, - - "explosion_enemy": { - "transform": {}, - "game_object": { - "factory_url": "/spawner/spawner#explosion_enemy" - }, - "remove_with_delay": { - "delay": 0.1 - } - } - } -} diff --git a/resources/maps/game.json b/resources/maps/game.json deleted file mode 100644 index 28ee12b..0000000 --- a/resources/maps/game.json +++ /dev/null @@ -1,13173 +0,0 @@ -{ "compressionlevel":-1, - "height":18, - "infinite":false, - "layers":[ - { - "draworder":"topdown", - "id":4, - "name":"background", - "objects":[ - { - "class":"", - "gid":5, - "height":1080, - "id":41, - "name":"", - "rotation":0, - "visible":true, - "width":1080, - "x":0, - "y":1080 - }, - { - "class":"", - "gid":6, - "height":363.5, - "id":42, - "name":"", - "rotation":0, - "visible":true, - "width":1454, - "x":-221, - "y":10 - }, - { - "class":"", - "gid":6, - "height":363.5, - "id":43, - "name":"", - "rotation":0, - "visible":true, - "width":1454, - "x":-205, - "y":1425 - }, - { - "class":"", - "gid":6, - "height":363.5, - "id":44, - "name":"", - "rotation":90, - "visible":true, - "width":1454, - "x":-350, - "y":-86 - }, - { - "class":"", - "gid":6, - "height":363.5, - "id":45, - "name":"", - "rotation":90, - "visible":true, - "width":1454, - "x":1070, - "y":-86 - }], - "opacity":1, - "properties":[ - { - "name":"position_z", - "type":"float", - "value":-10 - }], - "type":"objectgroup", - "visible":true, - "x":0, - "y":0 - }, - { - "draworder":"topdown", - "id":9, - "name":"level1", - "objects":[ - { - "class":"", - "gid":1, - "height":64, - "id":182, - "name":"", - "properties":[ - { - "name":"shooter_controller", - "propertytype":"shooter_controller", - "type":"class", - "value": - { - "bullet_prefab_id":"bullet_pistol", - "bullet_speed":3000, - "burst_count":6, - "burst_rate":0.4, - "damage":40, - "fire_rate":0.15, - "is_auto_shoot":true, - "spread":32, - "spread_angle":5 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":147, - "y":589 - }, - { - "class":"", - "gid":3, - "height":64, - "id":189, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":40 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":828, - "y":419 - }, - { - "class":"", - "gid":3, - "height":64, - "id":195, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":40 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":915, - "y":584 - }, - { - "class":"", - "gid":3, - "height":64, - "id":201, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":40 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":849, - "y":798 - }, - { - "class":"", - "gid":3, - "height":64, - "id":210, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":40 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":479, - "y":968 - }, - { - "class":"", - "gid":3, - "height":64, - "id":216, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":40 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":678, - "y":903 - }, - { - "class":"", - "gid":3, - "height":64, - "id":229, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":40 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":698, - "y":271 - }, - { - "class":"", - "gid":3, - "height":64, - "id":230, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":40 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":488, - "y":198 - }, - { - "class":"", - "gid":10, - "height":200, - "id":231, - "name":"", - "rotation":0, - "visible":true, - "width":200, - "x":796, - "y":-381 - }, - { - "class":"", - "gid":11, - "height":140, - "id":268, - "name":"", - "rotation":270, - "visible":true, - "width":1080, - "x":419, - "y":1080 - }], - "opacity":1, - "properties":[ - { - "name":"exclude", - "type":"bool", - "value":true - }], - "type":"objectgroup", - "visible":true, - "x":0, - "y":0 - }, - { - "draworder":"topdown", - "id":10, - "name":"level2", - "objects":[ - { - "class":"", - "gid":1, - "height":64, - "id":236, - "name":"", - "properties":[ - { - "name":"shooter_controller", - "propertytype":"shooter_controller", - "type":"class", - "value": - { - "bullet_prefab_id":"bullet_pistol_explosion", - "bullet_speed":3000, - "burst_count":2, - "burst_rate":0.4, - "damage":40, - "fire_rate":0.15, - "is_auto_shoot":true, - "spread":32, - "spread_angle":15 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":134, - "y":589 - }, - { - "class":"", - "gid":3, - "height":64, - "id":237, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":60 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":828, - "y":419 - }, - { - "class":"", - "gid":3, - "height":64, - "id":238, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":60 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":915, - "y":584 - }, - { - "class":"", - "gid":3, - "height":64, - "id":239, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":60 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":847, - "y":805 - }, - { - "class":"", - "gid":3, - "height":64, - "id":240, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":60 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":479, - "y":1013 - }, - { - "class":"", - "gid":3, - "height":64, - "id":241, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":60 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":717, - "y":936 - }, - { - "class":"", - "gid":3, - "height":64, - "id":242, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":60 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":698, - "y":271 - }, - { - "class":"", - "gid":3, - "height":64, - "id":243, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":60 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":488, - "y":198 - }, - { - "class":"", - "gid":10, - "height":200, - "id":244, - "name":"", - "properties":[ - { - "name":"on_spawn_command", - "propertytype":"on_spawn_command", - "type":"class", - "value": - { - "command":"{\"gui_main_command\": {\"text\": \"Explosion\"}}" - } - }], - "rotation":0, - "visible":true, - "width":200, - "x":796, - "y":-381 - }, - { - "class":"", - "gid":3, - "height":64, - "id":245, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":60 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":888, - "y":338 - }, - { - "class":"", - "gid":3, - "height":64, - "id":246, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":60 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":975, - "y":503 - }, - { - "class":"", - "gid":3, - "height":64, - "id":247, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":60 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":907, - "y":724 - }, - { - "class":"", - "gid":3, - "height":64, - "id":248, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":60 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":539, - "y":932 - }, - { - "class":"", - "gid":3, - "height":64, - "id":249, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":60 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":777, - "y":855 - }, - { - "class":"", - "gid":3, - "height":64, - "id":250, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":60 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":758, - "y":190 - }, - { - "class":"", - "gid":3, - "height":64, - "id":251, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":60 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":548, - "y":117 - }, - { - "class":"", - "gid":3, - "height":64, - "id":252, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":60 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":917, - "y":435 - }, - { - "class":"", - "gid":3, - "height":64, - "id":253, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":60 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":1004, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":254, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":60 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":936, - "y":821 - }, - { - "class":"", - "gid":3, - "height":64, - "id":255, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":60 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":568, - "y":1029 - }, - { - "class":"", - "gid":3, - "height":64, - "id":256, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":60 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":806, - "y":952 - }, - { - "class":"", - "gid":3, - "height":64, - "id":257, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":60 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":787, - "y":287 - }, - { - "class":"", - "gid":3, - "height":64, - "id":258, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":60 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":577, - "y":214 - }, - { - "class":"", - "gid":11, - "height":140, - "id":267, - "name":"", - "rotation":270, - "visible":true, - "width":1080, - "x":420, - "y":1080 - }], - "opacity":1, - "properties":[ - { - "name":"exclude", - "type":"bool", - "value":true - }], - "type":"objectgroup", - "visible":false, - "x":0, - "y":0 - }, - { - "draworder":"topdown", - "id":11, - "name":"level3", - "objects":[ - { - "class":"", - "gid":1, - "height":64, - "id":269, - "name":"", - "properties":[ - { - "name":"shooter_controller", - "propertytype":"shooter_controller", - "type":"class", - "value": - { - "bullet_prefab_id":"bullet_pistol_explosion", - "bullet_speed":4000, - "burst_count":4, - "burst_rate":0.8, - "damage":40, - "fire_rate":0.2, - "is_auto_shoot":true, - "spread":32, - "spread_angle":20 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":134, - "y":589 - }, - { - "class":"", - "gid":3, - "height":64, - "id":270, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":828, - "y":419 - }, - { - "class":"", - "gid":3, - "height":64, - "id":271, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":915, - "y":584 - }, - { - "class":"", - "gid":3, - "height":64, - "id":272, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":847, - "y":805 - }, - { - "class":"", - "gid":3, - "height":64, - "id":273, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":479, - "y":1013 - }, - { - "class":"", - "gid":3, - "height":64, - "id":274, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":717, - "y":936 - }, - { - "class":"", - "gid":3, - "height":64, - "id":275, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":698, - "y":271 - }, - { - "class":"", - "gid":3, - "height":64, - "id":276, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":488, - "y":198 - }, - { - "class":"", - "gid":10, - "height":200, - "id":277, - "name":"", - "properties":[ - { - "name":"on_spawn_command", - "propertytype":"on_spawn_command", - "type":"class", - "value": - { - "command":"{\"gui_main_command\": {\"text\": \"More\"}}" - } - }], - "rotation":0, - "visible":true, - "width":200, - "x":796, - "y":-381 - }, - { - "class":"", - "gid":3, - "height":64, - "id":278, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":888, - "y":338 - }, - { - "class":"", - "gid":3, - "height":64, - "id":279, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":975, - "y":503 - }, - { - "class":"", - "gid":3, - "height":64, - "id":280, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":907, - "y":724 - }, - { - "class":"", - "gid":3, - "height":64, - "id":281, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":539, - "y":932 - }, - { - "class":"", - "gid":3, - "height":64, - "id":282, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":777, - "y":855 - }, - { - "class":"", - "gid":3, - "height":64, - "id":283, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":758, - "y":190 - }, - { - "class":"", - "gid":3, - "height":64, - "id":284, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":548, - "y":117 - }, - { - "class":"", - "gid":3, - "height":64, - "id":285, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":917, - "y":435 - }, - { - "class":"", - "gid":3, - "height":64, - "id":286, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":1004, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":287, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":936, - "y":821 - }, - { - "class":"", - "gid":3, - "height":64, - "id":288, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":568, - "y":1029 - }, - { - "class":"", - "gid":3, - "height":64, - "id":289, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":806, - "y":952 - }, - { - "class":"", - "gid":3, - "height":64, - "id":290, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":787, - "y":287 - }, - { - "class":"", - "gid":3, - "height":64, - "id":291, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":577, - "y":214 - }, - { - "class":"", - "gid":11, - "height":140, - "id":292, - "name":"", - "rotation":270, - "visible":true, - "width":1080, - "x":420, - "y":1080 - }, - { - "class":"", - "gid":3, - "height":64, - "id":293, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":591, - "y":437 - }, - { - "class":"", - "gid":3, - "height":64, - "id":294, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":678, - "y":602 - }, - { - "class":"", - "gid":3, - "height":64, - "id":295, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":610, - "y":823 - }, - { - "class":"", - "gid":3, - "height":64, - "id":296, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":651, - "y":356 - }, - { - "class":"", - "gid":3, - "height":64, - "id":297, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":738, - "y":521 - }, - { - "class":"", - "gid":3, - "height":64, - "id":298, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":670, - "y":742 - }, - { - "class":"", - "gid":3, - "height":64, - "id":299, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":680, - "y":453 - }, - { - "class":"", - "gid":3, - "height":64, - "id":300, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":767, - "y":618 - }, - - { - "class":"", - "gid":3, - "height":64, - "id":301, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":699, - "y":839 - }, - { - "class":"", - "gid":3, - "height":64, - "id":302, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":467, - "y":621 - }, - { - "class":"", - "gid":3, - "height":64, - "id":303, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":527, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":304, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":556, - "y":637 - }, - { - "class":"", - "gid":3, - "height":64, - "id":305, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":438, - "y":377 - }, - { - "class":"", - "gid":3, - "height":64, - "id":306, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":498, - "y":296 - }, - { - "class":"", - "gid":3, - "height":64, - "id":307, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":527, - "y":393 - }, - { - "class":"", - "gid":3, - "height":64, - "id":308, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":427, - "y":809 - }, - { - "class":"", - "gid":3, - "height":64, - "id":309, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":487, - "y":728 - }, - { - "class":"", - "gid":3, - "height":64, - "id":310, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":516, - "y":825 - }], - "opacity":1, - "properties":[ - { - "name":"exclude", - "type":"bool", - "value":true - }], - "type":"objectgroup", - "visible":false, - "x":0, - "y":0 - }, - { - "draworder":"topdown", - "id":12, - "name":"level4", - "objects":[ - { - "class":"", - "gid":1, - "height":64, - "id":311, - "name":"", - "properties":[ - { - "name":"shooter_controller", - "propertytype":"shooter_controller", - "type":"class", - "value": - { - "bullet_prefab_id":"bullet_pistol_explosion", - "bullet_speed":3000, - "burst_count":10, - "burst_rate":0.4, - "damage":40, - "fire_rate":0.1, - "is_auto_shoot":true, - "spread":32, - "spread_angle":25 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":134, - "y":589 - }, - { - "class":"", - "gid":3, - "height":315, - "id":315, - "name":"", - "properties":[ - { - "name":"game_object", - "propertytype":"game_object", - "type":"class", - "value": - { - "factory_url":"\/spawner\/spawner#enemy_big" - } - }, - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":1000 - } - }], - "rotation":0, - "visible":true, - "width":315, - "x":594, - "y":716 - }, - { - "class":"", - "gid":10, - "height":200, - "id":319, - "name":"", - "properties":[ - { - "name":"on_spawn_command", - "propertytype":"on_spawn_command", - "type":"class", - "value": - { - "command":"{\"gui_main_command\": {\"text\": \"Boss\"}}" - } - }], - "rotation":0, - "visible":true, - "width":200, - "x":796, - "y":-381 - }, - { - "class":"", - "gid":11, - "height":140, - "id":334, - "name":"", - "rotation":270, - "visible":true, - "width":1080, - "x":420, - "y":1080 - }], - "opacity":1, - "properties":[ - { - "name":"exclude", - "type":"bool", - "value":true - }], - "type":"objectgroup", - "visible":false, - "x":0, - "y":0 - }, - { - "draworder":"topdown", - "id":8, - "name":"level5", - "objects":[ - { - "class":"", - "gid":1, - "height":64, - "id":146, - "name":"", - "properties":[ - { - "name":"shooter_controller", - "propertytype":"shooter_controller", - "type":"class", - "value": - { - "bullet_prefab_id":"bullet_arcade", - "bullet_speed":1500, - "burst_count":3, - "burst_rate":0.5, - "damage":100, - "fire_rate":0.3, - "is_auto_shoot":true, - "spread":32, - "spread_angle":0 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":518, - "y":966 - }, - { - "class":"", - "gid":9, - "height":64, - "id":153, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":200 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":420, - "y":540 - }, - { - "class":"", - "gid":9, - "height":64, - "id":154, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":200 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":540, - "y":420 - }, - { - "class":"", - "gid":9, - "height":64, - "id":155, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":200 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":480, - "y":600 - }, - { - "class":"", - "gid":9, - "height":64, - "id":156, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":200 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":660, - "y":420 - }, - { - "class":"", - "gid":9, - "height":64, - "id":157, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":200 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":540, - "y":540 - }, - { - "class":"", - "gid":9, - "height":64, - "id":158, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":200 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":360, - "y":480 - }, - { - "class":"", - "gid":9, - "height":64, - "id":159, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":200 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":480, - "y":480 - }, - { - "class":"", - "gid":9, - "height":64, - "id":160, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":200 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":600, - "y":480 - }, - { - "class":"", - "gid":9, - "height":64, - "id":161, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":200 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":300, - "y":420 - }, - { - "class":"", - "gid":9, - "height":64, - "id":162, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":200 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":420, - "y":420 - }, - { - "class":"", - "gid":9, - "height":64, - "id":163, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":200 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":480, - "y":360 - }, - { - "class":"", - "gid":9, - "height":64, - "id":164, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":200 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":600, - "y":360 - }, - { - "class":"", - "gid":9, - "height":64, - "id":165, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":200 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":240, - "y":360 - }, - { - "class":"", - "gid":9, - "height":64, - "id":166, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":200 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":360, - "y":360 - }, - { - "class":"", - "gid":9, - "height":64, - "id":167, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":200 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":720, - "y":360 - }, - { - "class":"", - "gid":9, - "height":64, - "id":168, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":200 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":420, - "y":300 - }, - { - "class":"", - "gid":9, - "height":64, - "id":169, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":200 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":540, - "y":300 - }, - { - "class":"", - "gid":9, - "height":64, - "id":170, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":200 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":180, - "y":300 - }, - { - "class":"", - "gid":9, - "height":64, - "id":171, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":200 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":300, - "y":300 - }, - { - "class":"", - "gid":9, - "height":64, - "id":172, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":200 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":660, - "y":300 - }, - { - "class":"", - "gid":9, - "height":64, - "id":173, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":200 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":360, - "y":240 - }, - { - "class":"", - "gid":9, - "height":64, - "id":174, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":200 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":480, - "y":240 - }, - { - "class":"", - "gid":9, - "height":64, - "id":175, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":200 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":120, - "y":240 - }, - { - "class":"", - "gid":9, - "height":64, - "id":176, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":200 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":240, - "y":240 - }, - { - "class":"", - "gid":9, - "height":64, - "id":177, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":200 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":600, - "y":240 - }, - { - "class":"", - "gid":9, - "height":64, - "id":178, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":200 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":840, - "y":240 - }, - { - "class":"", - "gid":9, - "height":64, - "id":179, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":200 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":780, - "y":300 - }, - { - "class":"", - "gid":9, - "height":64, - "id":180, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":200 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":720, - "y":240 - }, - { - "class":"", - "gid":10, - "height":200, - "id":234, - "name":"", - "properties":[ - { - "name":"on_spawn_command", - "propertytype":"on_spawn_command", - "type":"class", - "value": - { - "command":"{\"gui_main_command\": {\"text\": \"Arcanoid?\"}}" - } - }], - "rotation":0, - "visible":true, - "width":200, - "x":510, - "y":-441 - }, - { - "class":"", - "gid":11, - "height":140, - "id":353, - "name":"", - "rotation":0, - "visible":true, - "width":1080, - "x":-2, - "y":881 - }], - "opacity":1, - "properties":[ - { - "name":"exclude", - "type":"bool", - "value":true - }], - "type":"objectgroup", - "visible":false, - "x":0, - "y":0 - }, - { - "draworder":"topdown", - "id":13, - "name":"level6", - "objects":[ - { - "class":"", - "gid":1, - "height":64, - "id":354, - "name":"", - "properties":[ - { - "name":"shooter_controller", - "propertytype":"shooter_controller", - "type":"class", - "value": - { - "bullet_prefab_id":"bullet_sniper", - "bullet_speed":2500, - "burst_count":6, - "burst_rate":0.4, - "damage":100, - "fire_rate":0.15, - "is_auto_shoot":true, - "spread":32, - "spread_angle":0 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":518, - "y":966 - }, - { - "class":"", - "gid":9, - "height":64, - "id":355, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":420, - "y":540 - }, - { - "class":"", - "gid":9, - "height":64, - "id":356, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":540, - "y":420 - }, - { - "class":"", - "gid":9, - "height":64, - "id":357, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":480, - "y":600 - }, - { - "class":"", - "gid":9, - "height":64, - "id":358, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":660, - "y":420 - }, - { - "class":"", - "gid":9, - "height":64, - "id":359, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":540, - "y":540 - }, - { - "class":"", - "gid":9, - "height":64, - "id":360, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":360, - "y":480 - }, - { - "class":"", - "gid":9, - "height":64, - "id":361, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":480, - "y":480 - }, - { - "class":"", - "gid":9, - "height":64, - "id":362, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":600, - "y":480 - }, - { - "class":"", - "gid":9, - "height":64, - "id":363, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":300, - "y":420 - }, - { - "class":"", - "gid":9, - "height":64, - "id":364, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":420, - "y":420 - }, - { - "class":"", - "gid":9, - "height":64, - "id":365, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":480, - "y":360 - }, - { - "class":"", - "gid":9, - "height":64, - "id":366, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":600, - "y":360 - }, - { - "class":"", - "gid":9, - "height":64, - "id":367, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":240, - "y":360 - }, - { - "class":"", - "gid":9, - "height":64, - "id":368, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":360, - "y":360 - }, - { - "class":"", - "gid":9, - "height":64, - "id":369, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":720, - "y":360 - }, - { - "class":"", - "gid":9, - "height":64, - "id":370, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":420, - "y":300 - }, - { - "class":"", - "gid":9, - "height":64, - "id":371, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":540, - "y":300 - }, - { - "class":"", - "gid":9, - "height":64, - "id":372, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":180, - "y":300 - }, - { - "class":"", - "gid":9, - "height":64, - "id":373, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":300, - "y":300 - }, - { - "class":"", - "gid":9, - "height":64, - "id":374, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":660, - "y":300 - }, - { - "class":"", - "gid":9, - "height":64, - "id":375, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":360, - "y":240 - }, - { - "class":"", - "gid":9, - "height":64, - "id":376, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":480, - "y":240 - }, - { - "class":"", - "gid":9, - "height":64, - "id":377, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":120, - "y":240 - }, - { - "class":"", - "gid":9, - "height":64, - "id":378, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":240, - "y":240 - }, - { - "class":"", - "gid":9, - "height":64, - "id":379, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":600, - "y":240 - }, - { - "class":"", - "gid":9, - "height":64, - "id":380, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":840, - "y":240 - }, - { - "class":"", - "gid":9, - "height":64, - "id":381, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":780, - "y":300 - }, - { - "class":"", - "gid":9, - "height":64, - "id":382, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":128, - "x":720, - "y":240 - }, - { - "class":"", - "gid":10, - "height":200, - "id":383, - "name":"", - "properties":[ - { - "name":"on_spawn_command", - "propertytype":"on_spawn_command", - "type":"class", - "value": - { - "command":"{\"gui_main_command\": {\"text\": \"+ Explosion\"}}" - } - }], - "rotation":0, - "visible":true, - "width":200, - "x":510, - "y":-441 - }, - { - "class":"", - "gid":11, - "height":140, - "id":384, - "name":"", - "rotation":0, - "visible":true, - "width":1080, - "x":-2, - "y":881 - }], - "opacity":1, - "properties":[ - { - "name":"exclude", - "type":"bool", - "value":true - }], - "type":"objectgroup", - "visible":false, - "x":0, - "y":0 - }, - { - "draworder":"topdown", - "id":14, - "name":"level7", - "objects":[ - { - "class":"", - "gid":1, - "height":64, - "id":385, - "name":"", - "properties":[ - { - "name":"shooter_controller", - "propertytype":"shooter_controller", - "type":"class", - "value": - { - "bullet_prefab_id":"bullet_sniper", - "bullet_speed":4000, - "burst_count":20, - "burst_rate":0.4, - "damage":100, - "fire_rate":0.08, - "is_auto_shoot":true, - "spread":32, - "spread_angle":20 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":518, - "y":966 - }, - { - "class":"", - "gid":10, - "height":200, - "id":414, - "name":"", - "properties":[ - { - "name":"on_spawn_command", - "propertytype":"on_spawn_command", - "type":"class", - "value": - { - "command":"{\"gui_main_command\": {\"text\": \"Bad Day\"}}" - } - }], - "rotation":0, - "visible":true, - "width":200, - "x":510, - "y":-441 - }, - { - "class":"", - "gid":11, - "height":140, - "id":415, - "name":"", - "rotation":0, - "visible":true, - "width":1080, - "x":-2, - "y":881 - }, - { - "class":"", - "gid":3, - "height":64, - "id":417, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":120, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":419, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":240, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":420, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":180, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":421, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":422, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":423, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":424, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":425, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":426, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":427, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":428, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":429, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":780, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":430, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":840, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":431, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":900, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":433, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":120, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":434, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":240, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":435, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":180, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":436, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":437, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":438, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":439, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":440, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":441, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":442, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":443, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":444, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":780, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":445, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":840, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":446, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":900, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":447, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":120, - "y":300 - }, - - { - "class":"", - "gid":3, - "height":64, - "id":448, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":240, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":449, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":180, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":450, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":451, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":452, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":453, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":454, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":455, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":456, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":457, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":458, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":780, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":459, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":840, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":460, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":900, - "y":300 - }], - "opacity":1, - "properties":[ - { - "name":"exclude", - "type":"bool", - "value":true - }], - "type":"objectgroup", - "visible":false, - "x":0, - "y":0 - }, - { - "draworder":"topdown", - "id":15, - "name":"level8", - "objects":[ - { - "class":"", - "gid":1, - "height":64, - "id":461, - "name":"", - "properties":[ - { - "name":"shooter_controller", - "propertytype":"shooter_controller", - "type":"class", - "value": - { - "bullet_prefab_id":"bullet_sniper", - "bullet_speed":5000, - "burst_count":40, - "burst_rate":0.4, - "damage":100, - "fire_rate":0.04, - "is_auto_shoot":true, - "spread":32, - "spread_angle":25 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":518, - "y":966 - }, - { - "class":"", - "gid":10, - "height":200, - "id":462, - "name":"", - "properties":[ - { - "name":"on_spawn_command", - "propertytype":"on_spawn_command", - "type":"class", - "value": - { - "command":"{\"gui_main_command\": {\"text\": \"Can More?\"}}" - } - }], - "rotation":0, - "visible":true, - "width":200, - "x":510, - "y":-441 - }, - { - "class":"", - "gid":11, - "height":140, - "id":463, - "name":"", - "rotation":0, - "visible":true, - "width":1080, - "x":-2, - "y":881 - }, - { - "class":"", - "gid":3, - "height":64, - "id":464, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":120, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":465, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":240, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":466, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":180, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":467, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":468, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":469, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":470, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":471, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":472, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":473, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":474, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":475, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":780, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":476, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":840, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":477, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":900, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":478, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":120, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":479, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":240, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":480, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":180, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":481, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":482, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":483, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":484, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":485, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":486, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":487, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":488, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":489, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":780, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":490, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":840, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":491, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":900, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":492, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":120, - "y":300 - }, - - { - "class":"", - "gid":3, - "height":64, - "id":493, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":240, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":494, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":180, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":495, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":496, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":497, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":498, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":499, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":500, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":501, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":502, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":503, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":780, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":504, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":840, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":505, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":900, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":506, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":120, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":507, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":240, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":508, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":180, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":509, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":510, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":511, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":512, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":513, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":514, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":515, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":516, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":517, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":780, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":518, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":840, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":519, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":900, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":520, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":120, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":521, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":240, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":522, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":180, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":523, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":524, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":420 - }, - - { - "class":"", - "gid":3, - "height":64, - "id":525, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":526, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":527, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":528, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":529, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":530, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":531, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":780, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":532, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":840, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":533, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":900, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":534, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":120, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":535, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":240, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":536, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":180, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":537, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":538, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":539, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":540, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":541, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":542, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":543, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":544, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":545, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":780, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":546, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":840, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":547, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":900, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":548, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":120, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":549, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":240, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":550, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":180, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":551, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":552, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":553, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":554, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":555, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":556, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":540 - }, - - { - "class":"", - "gid":3, - "height":64, - "id":557, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":558, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":559, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":780, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":560, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":840, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":561, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":900, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":562, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":120, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":563, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":240, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":564, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":180, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":565, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":566, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":567, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":568, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":569, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":570, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":571, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":572, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":573, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":780, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":574, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":840, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":575, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":900, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":576, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":120, - "y":660 - }, - { - "class":"", - "gid":3, - "height":64, - "id":577, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":240, - "y":660 - }, - { - "class":"", - "gid":3, - "height":64, - "id":578, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":180, - "y":660 - }, - { - "class":"", - "gid":3, - "height":64, - "id":579, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":660 - }, - { - "class":"", - "gid":3, - "height":64, - "id":580, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":660 - }, - { - "class":"", - "gid":3, - "height":64, - "id":581, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":660 - }, - { - "class":"", - "gid":3, - "height":64, - "id":582, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":660 - }, - { - "class":"", - "gid":3, - "height":64, - "id":583, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":660 - }, - { - "class":"", - "gid":3, - "height":64, - "id":584, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":660 - }, - { - "class":"", - "gid":3, - "height":64, - "id":585, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":660 - }, - { - "class":"", - "gid":3, - "height":64, - "id":586, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":660 - }, - { - "class":"", - "gid":3, - "height":64, - "id":587, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":780, - "y":660 - }, - { - "class":"", - "gid":3, - "height":64, - "id":588, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":840, - "y":660 - }, - - { - "class":"", - "gid":3, - "height":64, - "id":589, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":900, - "y":660 - }, - { - "class":"", - "gid":3, - "height":64, - "id":590, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":60, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":591, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":60, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":592, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":60, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":593, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":60, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":594, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":60, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":595, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":60, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":596, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":60, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":597, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":60, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":598, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":60, - "y":660 - }, - { - "class":"", - "gid":3, - "height":64, - "id":599, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":960, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":600, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":960, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":601, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":960, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":602, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":960, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":603, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":960, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":604, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":960, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":605, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":960, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":606, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":960, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":607, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":960, - "y":660 - }], - "opacity":1, - "properties":[ - { - "name":"exclude", - "type":"bool", - "value":true - }], - "type":"objectgroup", - "visible":false, - "x":0, - "y":0 - }, - { - "draworder":"topdown", - "id":16, - "name":"level9", - "objects":[ - { - "class":"", - "gid":1, - "height":64, - "id":608, - "name":"", - "properties":[ - { - "name":"shooter_controller", - "propertytype":"shooter_controller", - "type":"class", - "value": - { - "bullet_prefab_id":"bullet_rocket", - "bullet_speed":500, - "burst_count":1, - "burst_rate":0.7, - "damage":100, - "fire_rate":0.7, - "is_auto_shoot":true, - "spread":32, - "spread_angle":10 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":518, - "y":966 - }, - { - "class":"", - "gid":10, - "height":200, - "id":609, - "name":"", - "properties":[ - { - "name":"on_spawn_command", - "propertytype":"on_spawn_command", - "type":"class", - "value": - { - "command":"{\"gui_main_command\": {\"text\": \"Rocket\"}}" - } - }], - "rotation":0, - "visible":true, - "width":200, - "x":510, - "y":-441 - }, - { - "class":"", - "gid":11, - "height":140, - "id":610, - "name":"", - "rotation":0, - "visible":true, - "width":1080, - "x":-2, - "y":881 - }, - { - "class":"", - "gid":3, - "height":64, - "id":611, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":120, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":612, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":240, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":613, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":180, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":614, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":615, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":616, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":617, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":618, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":619, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":620, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":621, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":622, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":780, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":623, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":840, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":624, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":900, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":625, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":120, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":626, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":240, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":627, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":180, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":628, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":629, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":630, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":631, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":632, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":633, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":634, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":635, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":636, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":780, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":637, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":840, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":638, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":900, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":639, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":120, - "y":300 - }, - - { - "class":"", - "gid":3, - "height":64, - "id":640, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":240, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":641, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":180, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":642, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":643, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":644, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":645, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":646, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":647, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":648, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":649, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":650, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":780, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":651, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":840, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":652, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":900, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":737, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":60, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":738, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":60, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":739, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":60, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":746, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":960, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":747, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":960, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":748, - "name":"", - "rotation":0, - "visible":true, - "width":64, - "x":960, - "y":300 - }], - "opacity":1, - "properties":[ - { - "name":"exclude", - "type":"bool", - "value":true - }], - "type":"objectgroup", - "visible":false, - "x":0, - "y":0 - }, - { - "draworder":"topdown", - "id":17, - "name":"level10", - "objects":[ - { - "class":"", - "gid":1, - "height":64, - "id":755, - "name":"", - "properties":[ - { - "name":"shooter_controller", - "propertytype":"shooter_controller", - "type":"class", - "value": - { - "bullet_prefab_id":"bullet_rocket", - "bullet_speed":500, - "burst_count":1, - "burst_rate":0.1, - "damage":100, - "fire_rate":0.1, - "is_auto_shoot":true, - "spread":32, - "spread_angle":10 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":520, - "y":600 - }, - { - "class":"", - "gid":10, - "height":200, - "id":756, - "name":"", - "properties":[ - { - "name":"on_spawn_command", - "propertytype":"on_spawn_command", - "type":"class", - "value": - { - "command":"{\"gui_main_command\": {\"text\": \"No Chances\"}}" - } - }], - "rotation":0, - "visible":true, - "width":200, - "x":510, - "y":-441 - }, - { - "class":"", - "gid":3, - "height":64, - "id":758, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":120, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":759, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":240, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":760, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":180, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":761, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":762, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":763, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":764, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":765, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":766, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":767, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":768, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":769, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":780, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":770, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":840, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":771, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":900, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":772, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":120, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":773, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":240, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":774, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":180, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":775, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":776, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":777, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":778, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":779, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":780, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":781, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":782, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":783, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":780, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":784, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":840, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":785, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":900, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":786, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":120, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":787, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":240, - "y":300 - }, - - { - "class":"", - "gid":3, - "height":64, - "id":788, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":180, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":789, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":790, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":791, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":792, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":793, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":794, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":795, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":796, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":797, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":780, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":798, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":840, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":799, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":900, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":800, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":60, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":801, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":60, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":802, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":60, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":803, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":960, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":804, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":960, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":805, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":960, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":806, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":120, - "y":900 - }, - { - "class":"", - "gid":3, - "height":64, - "id":807, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":240, - "y":900 - }, - { - "class":"", - "gid":3, - "height":64, - "id":808, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":180, - "y":900 - }, - { - "class":"", - "gid":3, - "height":64, - "id":809, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":900 - }, - { - "class":"", - "gid":3, - "height":64, - "id":810, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":900 - }, - { - "class":"", - "gid":3, - "height":64, - "id":811, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":900 - }, - { - "class":"", - "gid":3, - "height":64, - "id":812, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":900 - }, - { - "class":"", - "gid":3, - "height":64, - "id":813, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":900 - }, - { - "class":"", - "gid":3, - "height":64, - "id":814, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":900 - }, - { - "class":"", - "gid":3, - "height":64, - "id":815, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":900 - }, - { - "class":"", - "gid":3, - "height":64, - "id":816, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":900 - }, - { - "class":"", - "gid":3, - "height":64, - "id":817, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":780, - "y":900 - }, - { - "class":"", - "gid":3, - "height":64, - "id":818, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":840, - "y":900 - }, - { - "class":"", - "gid":3, - "height":64, - "id":819, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":900, - "y":900 - }, - - { - "class":"", - "gid":3, - "height":64, - "id":820, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":120, - "y":960 - }, - { - "class":"", - "gid":3, - "height":64, - "id":821, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":240, - "y":960 - }, - { - "class":"", - "gid":3, - "height":64, - "id":822, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":180, - "y":960 - }, - { - "class":"", - "gid":3, - "height":64, - "id":823, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":960 - }, - { - "class":"", - "gid":3, - "height":64, - "id":824, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":960 - }, - { - "class":"", - "gid":3, - "height":64, - "id":825, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":960 - }, - { - "class":"", - "gid":3, - "height":64, - "id":826, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":960 - }, - { - "class":"", - "gid":3, - "height":64, - "id":827, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":960 - }, - { - "class":"", - "gid":3, - "height":64, - "id":828, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":960 - }, - { - "class":"", - "gid":3, - "height":64, - "id":829, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":960 - }, - { - "class":"", - "gid":3, - "height":64, - "id":830, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":960 - }, - { - "class":"", - "gid":3, - "height":64, - "id":831, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":780, - "y":960 - }, - { - "class":"", - "gid":3, - "height":64, - "id":832, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":840, - "y":960 - }, - { - "class":"", - "gid":3, - "height":64, - "id":833, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":900, - "y":960 - }, - { - "class":"", - "gid":3, - "height":64, - "id":834, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":120, - "y":1020 - }, - { - "class":"", - "gid":3, - "height":64, - "id":835, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":240, - "y":1020 - }, - { - "class":"", - "gid":3, - "height":64, - "id":836, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":180, - "y":1020 - }, - { - "class":"", - "gid":3, - "height":64, - "id":837, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":1020 - }, - { - "class":"", - "gid":3, - "height":64, - "id":838, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":1020 - }, - { - "class":"", - "gid":3, - "height":64, - "id":839, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":1020 - }, - { - "class":"", - "gid":3, - "height":64, - "id":840, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":1020 - }, - { - "class":"", - "gid":3, - "height":64, - "id":841, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":1020 - }, - { - "class":"", - "gid":3, - "height":64, - "id":842, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":1020 - }, - { - "class":"", - "gid":3, - "height":64, - "id":843, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":1020 - }, - { - "class":"", - "gid":3, - "height":64, - "id":844, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":1020 - }, - { - "class":"", - "gid":3, - "height":64, - "id":845, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":780, - "y":1020 - }, - { - "class":"", - "gid":3, - "height":64, - "id":846, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":840, - "y":1020 - }, - { - "class":"", - "gid":3, - "height":64, - "id":847, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":900, - "y":1020 - }, - { - "class":"", - "gid":3, - "height":64, - "id":848, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":60, - "y":900 - }, - { - "class":"", - "gid":3, - "height":64, - "id":849, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":60, - "y":960 - }, - { - "class":"", - "gid":3, - "height":64, - "id":850, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":60, - "y":1020 - }, - { - "class":"", - "gid":3, - "height":64, - "id":851, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":960, - "y":900 - }, - - { - "class":"", - "gid":3, - "height":64, - "id":852, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":960, - "y":960 - }, - { - "class":"", - "gid":3, - "height":64, - "id":853, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":960, - "y":1020 - }, - { - "class":"", - "gid":3, - "height":64, - "id":854, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":120, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":855, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":180, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":856, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":120, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":857, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":180, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":858, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":120, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":859, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":180, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":860, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":60, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":861, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":60, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":862, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":60, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":863, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":120, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":864, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":180, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":865, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":120, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":866, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":180, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":867, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":120, - "y":660 - }, - { - "class":"", - "gid":3, - "height":64, - "id":868, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":180, - "y":660 - }, - { - "class":"", - "gid":3, - "height":64, - "id":869, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":60, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":870, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":60, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":871, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":60, - "y":660 - }, - { - "class":"", - "gid":3, - "height":64, - "id":872, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":120, - "y":720 - }, - { - "class":"", - "gid":3, - "height":64, - "id":873, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":180, - "y":720 - }, - { - "class":"", - "gid":3, - "height":64, - "id":874, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":120, - "y":780 - }, - { - "class":"", - "gid":3, - "height":64, - "id":875, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":180, - "y":780 - }, - { - "class":"", - "gid":3, - "height":64, - "id":876, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":120, - "y":840 - }, - { - "class":"", - "gid":3, - "height":64, - "id":877, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":180, - "y":840 - }, - { - "class":"", - "gid":3, - "height":64, - "id":878, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":60, - "y":720 - }, - { - "class":"", - "gid":3, - "height":64, - "id":879, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":60, - "y":780 - }, - { - "class":"", - "gid":3, - "height":64, - "id":880, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":60, - "y":840 - }, - { - "class":"", - "gid":3, - "height":64, - "id":881, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":900, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":882, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":960, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":883, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":900, - "y":600 - }, - - { - "class":"", - "gid":3, - "height":64, - "id":884, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":960, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":885, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":900, - "y":660 - }, - { - "class":"", - "gid":3, - "height":64, - "id":886, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":960, - "y":660 - }, - { - "class":"", - "gid":3, - "height":64, - "id":887, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":840, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":888, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":840, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":889, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":840, - "y":660 - }, - { - "class":"", - "gid":3, - "height":64, - "id":890, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":900, - "y":720 - }, - { - "class":"", - "gid":3, - "height":64, - "id":891, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":960, - "y":720 - }, - { - "class":"", - "gid":3, - "height":64, - "id":892, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":900, - "y":780 - }, - { - "class":"", - "gid":3, - "height":64, - "id":893, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":960, - "y":780 - }, - { - "class":"", - "gid":3, - "height":64, - "id":894, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":900, - "y":840 - }, - { - "class":"", - "gid":3, - "height":64, - "id":895, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":960, - "y":840 - }, - { - "class":"", - "gid":3, - "height":64, - "id":896, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":840, - "y":720 - }, - { - "class":"", - "gid":3, - "height":64, - "id":897, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":840, - "y":780 - }, - { - "class":"", - "gid":3, - "height":64, - "id":898, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":840, - "y":840 - }, - { - "class":"", - "gid":3, - "height":64, - "id":899, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":900, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":900, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":960, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":901, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":900, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":902, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":960, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":903, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":900, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":904, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":960, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":905, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":840, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":906, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":840, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":907, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":80 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":840, - "y":480 - }], - "opacity":1, - "properties":[ - { - "name":"exclude", - "type":"bool", - "value":true - }], - "type":"objectgroup", - "visible":false, - "x":0, - "y":0 - }, - { - "draworder":"topdown", - "id":18, - "name":"level11", - "objects":[ - { - "class":"", - "gid":1, - "height":64, - "id":908, - "name":"", - "properties":[ - { - "name":"shooter_controller", - "propertytype":"shooter_controller", - "type":"class", - "value": - { - "bullet_prefab_id":"bullet_sniper", - "bullet_speed":4000, - "burst_count":1, - "burst_rate":0.2, - "damage":100, - "fire_rate":0.2, - "is_auto_shoot":true, - "spread":32, - "spread_angle":15 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":63, - "y":544 - }, - { - "class":"", - "gid":10, - "height":200, - "id":909, - "name":"", - "properties":[ - { - "name":"on_spawn_command", - "propertytype":"on_spawn_command", - "type":"class", - "value": - { - "command":"{\"gui_main_command\": {\"text\": \"Ambush\"}}" - } - }], - "rotation":0, - "visible":true, - "width":200, - "x":510, - "y":-441 - }, - { - "class":"", - "gid":3, - "height":315, - "id":1060, - "name":"", - "properties":[ - { - "name":"game_object", - "propertytype":"game_object", - "type":"class", - "value": - { - "factory_url":"\/spawner\/spawner#enemy_big" - } - }, - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":4000 - } - }], - "rotation":0, - "visible":true, - "width":315, - "x":376, - "y":680 - }, - { - "class":"", - "gid":11, - "height":140, - "id":1061, - "name":"", - "rotation":0, - "visible":true, - "width":1080, - "x":-4, - "y":931 - }, - { - "class":"", - "gid":11, - "height":140, - "id":1062, - "name":"", - "rotation":0, - "visible":true, - "width":1080, - "x":-4, - "y":250 - }, - { - "class":"", - "gid":11, - "height":140, - "id":1063, - "name":"", - "rotation":90, - "visible":true, - "width":1080, - "x":128, - "y":-2 - }, - { - "class":"", - "gid":11, - "height":140, - "id":1064, - "name":"", - "rotation":90, - "visible":true, - "width":1080, - "x":821, - "y":2 - }, - { - "class":"", - "gid":1, - "height":64, - "id":1065, - "name":"", - "properties":[ - { - "name":"shooter_controller", - "propertytype":"shooter_controller", - "type":"class", - "value": - { - "bullet_prefab_id":"bullet_sniper", - "bullet_speed":4000, - "burst_count":1, - "burst_rate":0.15, - "damage":100, - "fire_rate":0.2, - "is_auto_shoot":true, - "spread":32, - "spread_angle":15 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":499, - "y":110 - }, - { - "class":"", - "gid":1, - "height":64, - "id":1066, - "name":"", - "properties":[ - { - "name":"shooter_controller", - "propertytype":"shooter_controller", - "type":"class", - "value": - { - "bullet_prefab_id":"bullet_sniper", - "bullet_speed":4000, - "burst_count":1, - "burst_rate":0.25, - "damage":100, - "fire_rate":0.2, - "is_auto_shoot":true, - "spread":32, - "spread_angle":15 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":966, - "y":546 - }, - { - "class":"", - "gid":1, - "height":64, - "id":1067, - "name":"", - "properties":[ - { - "name":"shooter_controller", - "propertytype":"shooter_controller", - "type":"class", - "value": - { - "bullet_prefab_id":"bullet_sniper", - "bullet_speed":4000, - "burst_count":1, - "burst_rate":0.1, - "damage":100, - "fire_rate":0.2, - "is_auto_shoot":true, - "spread":32, - "spread_angle":15 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":506, - "y":1017 - }], - "opacity":1, - "properties":[ - { - "name":"exclude", - "type":"bool", - "value":true - }], - "type":"objectgroup", - "visible":false, - "x":0, - "y":0 - }, - { - "draworder":"topdown", - "id":19, - "name":"level12", - "objects":[ - { - "class":"", - "gid":1, - "height":64, - "id":1068, - "name":"", - "properties":[ - { - "name":"shooter_controller", - "propertytype":"shooter_controller", - "type":"class", - "value": - { - "bullet_prefab_id":"bullet_rocket_small", - "bullet_speed":100, - "burst_count":1, - "burst_rate":0.25, - "damage":100, - "fire_rate":0.25, - "is_auto_shoot":true, - "spread":32, - "spread_angle":15 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":63, - "y":544 - }, - { - "class":"", - "gid":10, - "height":200, - "id":1069, - "name":"", - "properties":[ - { - "name":"on_spawn_command", - "propertytype":"on_spawn_command", - "type":"class", - "value": - { - "command":"{\"gui_main_command\": {\"text\": \"Mini Rockets\"}}" - } - }], - "rotation":0, - "visible":true, - "width":200, - "x":510, - "y":-441 - }, - { - "class":"", - "gid":3, - "height":315, - "id":1070, - "name":"", - "properties":[ - { - "name":"game_object", - "propertytype":"game_object", - "type":"class", - "value": - { - "factory_url":"\/spawner\/spawner#enemy_big" - } - }, - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":1000 - } - }], - "rotation":0, - "visible":true, - "width":315, - "x":376, - "y":680 - }, - { - "class":"", - "gid":11, - "height":140, - "id":1071, - "name":"", - "rotation":0, - "visible":true, - "width":1080, - "x":-4, - "y":931 - }, - { - "class":"", - "gid":11, - "height":140, - "id":1072, - "name":"", - "rotation":0, - "visible":true, - "width":1080, - "x":-4, - "y":250 - }, - { - "class":"", - "gid":11, - "height":140, - "id":1073, - "name":"", - "rotation":90, - "visible":true, - "width":1080, - "x":128, - "y":-2 - }, - { - "class":"", - "gid":11, - "height":140, - "id":1074, - "name":"", - "rotation":90, - "visible":true, - "width":1080, - "x":821, - "y":2 - }, - { - "class":"", - "gid":1, - "height":64, - "id":1076, - "name":"", - "properties":[ - { - "name":"shooter_controller", - "propertytype":"shooter_controller", - "type":"class", - "value": - { - "bullet_prefab_id":"bullet_rocket_small", - "bullet_speed":100, - "burst_count":1, - "burst_rate":0.25, - "damage":100, - "fire_rate":0.25, - "is_auto_shoot":true, - "spread":32, - "spread_angle":15 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":966, - "y":546 - }], - "opacity":1, - "properties":[ - { - "name":"exclude", - "type":"bool", - "value":true - }], - "type":"objectgroup", - "visible":false, - "x":0, - "y":0 - }, - { - "draworder":"topdown", - "id":20, - "name":"level13", - "objects":[ - { - "class":"", - "gid":1, - "height":64, - "id":1078, - "name":"", - "properties":[ - { - "name":"shooter_controller", - "propertytype":"shooter_controller", - "type":"class", - "value": - { - "bullet_prefab_id":"bullet_shotgun", - "bullet_speed":3000, - "bullets_per_shoot":12, - "burst_count":1, - "burst_rate":0.4, - "damage":100, - "fire_rate":0.1, - "is_auto_shoot":true, - "spread":32, - "spread_angle":45 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":192, - "y":951 - }, - { - "class":"", - "gid":10, - "height":200, - "id":1079, - "name":"", - "properties":[ - { - "name":"on_spawn_command", - "propertytype":"on_spawn_command", - "type":"class", - "value": - { - "command":"{\"gui_main_command\": {\"text\": \"Shotgun\"}}" - } - }], - "rotation":0, - "visible":true, - "width":200, - "x":510, - "y":-441 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1080, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1086, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1087, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1088, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1093, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1094, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1095, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1096, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1101, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1102, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1103, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1104, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1105, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1106, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1107, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1108, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1109, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1110, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1111, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1112, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1113, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1114, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1115, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1116, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1117, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1118, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1119, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1120, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1121, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1122, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":480 - }, - - { - "class":"", - "gid":3, - "height":64, - "id":1123, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1124, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1125, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1126, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1127, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1128, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1129, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1130, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1131, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1132, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1133, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1134, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1135, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1136, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1137, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1138, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1139, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1140, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1141, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1142, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1143, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1144, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1145, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1146, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1147, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1148, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1149, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1150, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1151, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1152, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1153, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1154, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":240 - }, - - { - "class":"", - "gid":3, - "height":64, - "id":1155, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1156, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":180 - }], - "opacity":1, - "properties":[ - { - "name":"exclude", - "type":"bool", - "value":true - }], - "type":"objectgroup", - "visible":false, - "x":0, - "y":0 - }, - { - "draworder":"topdown", - "id":21, - "name":"level14", - "objects":[ - { - "class":"", - "gid":1, - "height":64, - "id":1157, - "name":"", - "properties":[ - { - "name":"shooter_controller", - "propertytype":"shooter_controller", - "type":"class", - "value": - { - "bullet_prefab_id":"bullet_sniper", - "bullet_speed":3500, - "bullets_per_shoot":8, - "burst_count":1, - "burst_rate":0.4, - "damage":100, - "fire_rate":0.1, - "is_auto_shoot":true, - "spread":32, - "spread_angle":45 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":819, - "y":944 - }, - { - "class":"", - "gid":10, - "height":200, - "id":1158, - "name":"", - "properties":[ - { - "name":"on_spawn_command", - "propertytype":"on_spawn_command", - "type":"class", - "value": - { - "command":"{\"gui_main_command\": {\"text\": \"Hellgun\"}}" - } - }], - "rotation":0, - "visible":true, - "width":200, - "x":510, - "y":-441 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1159, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1160, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1161, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1162, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1163, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1164, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1165, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1166, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1167, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1168, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1169, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1170, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1171, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1172, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":600 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1173, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1174, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":540 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1175, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1176, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1177, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1178, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1179, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1180, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1181, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1182, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1183, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1184, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1185, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1186, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1187, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":480 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1188, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":480 - }, - - { - "class":"", - "gid":3, - "height":64, - "id":1189, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1190, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":420 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1191, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1192, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1193, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1194, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1195, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1196, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1197, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1198, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1199, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1200, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1201, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1202, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1203, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1204, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":360 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1205, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1206, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":300 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1207, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1208, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1209, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":300, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1210, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":360, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1211, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1212, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1213, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":420, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1214, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":480, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1215, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1216, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1217, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":660, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1218, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":720, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1219, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":240 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1220, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":240 - }, - - { - "class":"", - "gid":3, - "height":64, - "id":1221, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":540, - "y":180 - }, - { - "class":"", - "gid":3, - "height":64, - "id":1222, - "name":"", - "properties":[ - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":100 - } - }], - "rotation":0, - "visible":true, - "width":64, - "x":600, - "y":180 - }], - "opacity":1, - "properties":[ - { - "name":"exclude", - "type":"bool", - "value":true - }], - "type":"objectgroup", - "visible":false, - "x":0, - "y":0 - }, - { - "draworder":"topdown", - "id":5, - "name":"system", - "objects":[ - { - "class":"", - "height":1080, - "id":48, - "name":"camera", - "properties":[ - { - "name":"camera", - "propertytype":"camera", - "type":"class", - "value": - { - "camera_url":"\/offset#camera" - } - }], - "rotation":0, - "visible":true, - "width":1920, - "x":-440, - "y":0 - }, - { - "class":"debug", - "height":0, - "id":83, - "name":"debug", - "point":true, - "rotation":0, - "visible":true, - "width":0, - "x":3, - "y":1081 - }, - { - "class":"gui_main", - "height":0, - "id":84, - "name":"gui_main", - "point":true, - "rotation":0, - "visible":true, - "width":0, - "x":21, - "y":1096 - }], - "opacity":1, - "type":"objectgroup", - "visible":false, - "x":0, - "y":0 - }], - "nextlayerid":22, - "nextobjectid":1223, - "orientation":"orthogonal", - "renderorder":"right-down", - "tiledversion":"2022.09.22", - "tileheight":60, - "tilesets":[ - { - "firstgid":1, - "source":"..\/..\/tiled\/tilesets\/shooting_circle.tsx" - }], - "tilewidth":60, - "type":"map", - "version":"1.9", - "width":32 -} \ No newline at end of file diff --git a/resources/maps_list.json b/resources/maps_list.json deleted file mode 100644 index 15d5e6a..0000000 --- a/resources/maps_list.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "tiled": { - "game": "/resources/maps/game.json" - } -} diff --git a/resources/tilesets/shooting_circle.json b/resources/tilesets/shooting_circle.json deleted file mode 100644 index 5b6ccdd..0000000 --- a/resources/tilesets/shooting_circle.json +++ /dev/null @@ -1,352 +0,0 @@ -{ "class":"shooting_circle", - "columns":0, - "grid": - { - "height":1, - "orientation":"orthogonal", - "width":1 - }, - "margin":0, - "name":"shooting_circle", - "spacing":0, - "tilecount":9, - "tiledversion":"2022.09.22", - "tileheight":200, - "tiles":[ - { - "class":"player", - "id":0, - "image":"..\/..\/tiled\/images\/ui_circle_64.png", - "imageheight":64, - "imagewidth":64, - "properties":[ - { - "name":"color", - "propertytype":"color", - "type":"class", - "value": - { - "hex_color":"95C8E2", - "sprite_url":"\/root#sprite" - } - }, - { - "name":"game_object", - "propertytype":"game_object", - "type":"class", - "value": - { - "factory_url":"\/spawner\/spawner#player" - } - }, - { - "name":"movement_controller", - "propertytype":"movement_controller", - "type":"class", - "value": - { - "speed":4000 - } - }, - { - "name":"physics", - "propertytype":"physics", - "type":"class", - "value": - { - - } - }, - { - "name":"shooter_controller", - "propertytype":"shooter_controller", - "type":"class", - "value": - { - "bullet_prefab_id":"bullet_pistol", - "bullet_speed":3000, - "burst_count":8, - "burst_rate":0.5, - "damage":1, - "fire_rate":0.05, - "is_auto_shoot":true, - "spread":32, - "spread_angle":14 - } - }] - }, - { - "class":"enemy", - "id":2, - "image":"..\/..\/tiled\/images\/enemy.png", - "imageheight":64, - "imagewidth":64, - "properties":[ - { - "name":"color", - "propertytype":"color", - "type":"class", - "value": - { - "hex_color":"612C2C", - "sprite_url":"\/root#sprite" - } - }, - { - "name":"game_object", - "propertytype":"game_object", - "type":"class", - "value": - { - "factory_url":"\/spawner\/spawner#enemy" - } - }, - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":20 - } - }, - { - "name":"health_circle_visual", - "propertytype":"health_circle_visual", - "type":"class", - "value": - { - - } - }, - { - "name":"panthera", - "propertytype":"panthera", - "type":"class", - "value": - { - "animation_path":"\/resources\/animations\/health_visual_circle.json" - } - }, - { - "name":"physics", - "propertytype":"physics", - "type":"class", - "value": - { - - } - }, - { - "name":"play_fx_on_remove", - "propertytype":"play_fx_on_remove", - "type":"class", - "value": - { - "fx_url":"explosion_enemy" - } - }, - { - "name":"target", - "type":"bool", - "value":true - }] - }, - { - "class":"arena_background", - "id":4, - "image":"..\/..\/tiled\/images\/arena_background.png", - "imageheight":200, - "imagewidth":200, - "properties":[ - { - "name":"game_object", - "propertytype":"game_object", - "type":"class", - "value": - { - "factory_url":"\/spawner\/spawner#background", - "is_slice9":true - } - }] - }, - { - "class":"wall", - "id":5, - "image":"..\/..\/tiled\/images\/wall.png", - "imageheight":50, - "imagewidth":200, - "properties":[ - { - "name":"game_object", - "propertytype":"game_object", - "type":"class", - "value": - { - "factory_url":"\/spawner\/spawner#wall", - "is_slice9":false - } - }] - }, - { - "class":"pit", - "id":6, - "image":"..\/..\/tiled\/images\/pit.png", - "imageheight":16, - "imagewidth":16, - "properties":[ - { - "name":"color", - "propertytype":"color", - "type":"class", - "value": - { - "hex_color":"612C2C", - "sprite_url":"\/root#sprite" - } - }, - { - "name":"game_object", - "propertytype":"game_object", - "type":"class", - "value": - { - "factory_url":"\/spawner\/spawner#pit", - "is_slice9":true - } - }] - }, - { - "class":"wall_pit", - "id":7, - "image":"..\/..\/tiled\/images\/wall.png", - "imageheight":50, - "imagewidth":200, - "properties":[ - { - "name":"game_object", - "propertytype":"game_object", - "type":"class", - "value": - { - "factory_url":"\/spawner\/spawner#wall_pit", - "is_slice9":false - } - }] - }, - { - "class":"enemy_rectangle", - "id":8, - "image":"..\/..\/tiled\/images\/enemy_rectangle.png", - "imageheight":64, - "imagewidth":128, - "properties":[ - { - "name":"color", - "propertytype":"color", - "type":"class", - "value": - { - "hex_color":"612C2C", - "sprite_url":"\/root#sprite" - } - }, - { - "name":"game_object", - "propertytype":"game_object", - "type":"class", - "value": - { - "factory_url":"\/spawner\/spawner#enemy_rectangle" - } - }, - { - "name":"health", - "propertytype":"health", - "type":"class", - "value": - { - "health":400 - } - }, - { - "name":"health_circle_visual", - "propertytype":"health_circle_visual", - "type":"class", - "value": - { - - } - }, - { - "name":"panthera", - "propertytype":"panthera", - "type":"class", - "value": - { - "animation_path":"\/resources\/animations\/health_visual_rectangle.json" - } - }, - { - "name":"physics", - "propertytype":"physics", - "type":"class", - "value": - { - - } - }, - { - "name":"target", - "type":"bool", - "value":true - }] - }, - { - "class":"level_controller", - "id":9, - "image":"..\/..\/tiled\/images\/arena_background.png", - "imageheight":200, - "imagewidth":200, - "properties":[ - { - "name":"on_spawn_command", - "propertytype":"on_spawn_command", - "type":"class", - "value": - { - "command":"{\"gui_main_command\": {\"text\": \"Shoot\"}}" - } - }, - { - "name":"on_target_count_command", - "propertytype":"on_target_count_command", - "type":"class", - "value": - { - "command":"{\"gui_main_command\": {\"level_complete\": true}}" - } - }] - }, - { - "class":"pit", - "id":10, - "image":"..\/..\/tiled\/images\/wall_pit.png", - "imageheight":140, - "imagewidth":1080, - "properties":[ - { - "name":"game_object", - "propertytype":"game_object", - "type":"class", - "value": - { - "factory_url":"\/spawner\/spawner#pit", - "is_slice9":false - } - }] - }], - "tilewidth":1080, - "type":"tileset", - "version":"1.9" -} \ No newline at end of file diff --git a/resources/tilesets_list.json b/resources/tilesets_list.json deleted file mode 100644 index 605ef26..0000000 --- a/resources/tilesets_list.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "tilesets": [ - "/resources/tilesets/shooting_circle.json" - ] -} diff --git a/test/test.script b/test/test.script index c6acf17..c94c4dc 100644 --- a/test/test.script +++ b/test/test.script @@ -1,8 +1,7 @@ local deftest = require("deftest.deftest") function init(self) - deftest.add(require("test.test_detiled")) - + -- deftest.add(require("test.test_detiled")) local is_report = (sys.get_config("test.report") == "1") deftest.run({ coverage = { enabled = is_report } }) end diff --git a/test/test_detiled.lua b/test/test_detiled.lua index bda58de..919f8c4 100644 --- a/test/test_detiled.lua +++ b/test/test_detiled.lua @@ -1,5 +1,3 @@ -local decore = require("decore.decore") - return function() describe("Detiled", function() ---@type detiled @@ -11,9 +9,9 @@ return function() it("Should init correclty", function() detiled.load_tileset("/resources/tilesets/shooting_circle.json") - local entity = detiled.get_entity_from_map("/resources/maps/game.json") - assert(entity) - assert(entity.child_instancies) + local layers, map_params = detiled.parse("/resources/maps/game.json") + assert(layers) + assert(map_params) end) end) end diff --git a/tiled/assets/grid/cactus.png b/tiled/assets/grid/cactus.png new file mode 100644 index 0000000..1ad34f0 Binary files /dev/null and b/tiled/assets/grid/cactus.png differ diff --git a/tiled/assets/grid/icon_barrel.png b/tiled/assets/grid/icon_barrel.png new file mode 100644 index 0000000..dfd9a41 Binary files /dev/null and b/tiled/assets/grid/icon_barrel.png differ diff --git a/tiled/assets/grid/icon_chest.png b/tiled/assets/grid/icon_chest.png new file mode 100644 index 0000000..ecd5a35 Binary files /dev/null and b/tiled/assets/grid/icon_chest.png differ diff --git a/tiled/assets/grid/icon_key.png b/tiled/assets/grid/icon_key.png new file mode 100644 index 0000000..97986df Binary files /dev/null and b/tiled/assets/grid/icon_key.png differ diff --git a/tiled/assets/grid/icon_stop.png b/tiled/assets/grid/icon_stop.png new file mode 100644 index 0000000..0344112 Binary files /dev/null and b/tiled/assets/grid/icon_stop.png differ diff --git a/tiled/assets/grid/icon_table.png b/tiled/assets/grid/icon_table.png new file mode 100644 index 0000000..47b0ba3 Binary files /dev/null and b/tiled/assets/grid/icon_table.png differ diff --git a/tiled/assets/grid/tilemap_packed.png b/tiled/assets/grid/tilemap_packed.png new file mode 100644 index 0000000..7740ae5 Binary files /dev/null and b/tiled/assets/grid/tilemap_packed.png differ diff --git a/tiled/assets/grid/tree.png b/tiled/assets/grid/tree.png new file mode 100644 index 0000000..321bfd1 Binary files /dev/null and b/tiled/assets/grid/tree.png differ diff --git a/tiled/assets/grid_game_objects/tile_0000.png b/tiled/assets/grid_game_objects/tile_0000.png new file mode 100644 index 0000000..c70060d Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0000.png differ diff --git a/tiled/assets/grid_game_objects/tile_0001.png b/tiled/assets/grid_game_objects/tile_0001.png new file mode 100644 index 0000000..8b23f3b Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0001.png differ diff --git a/tiled/assets/grid_game_objects/tile_0002.png b/tiled/assets/grid_game_objects/tile_0002.png new file mode 100644 index 0000000..9ca917d Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0002.png differ diff --git a/tiled/assets/grid_game_objects/tile_0003.png b/tiled/assets/grid_game_objects/tile_0003.png new file mode 100644 index 0000000..2452e84 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0003.png differ diff --git a/tiled/assets/grid_game_objects/tile_0004.png b/tiled/assets/grid_game_objects/tile_0004.png new file mode 100644 index 0000000..c560b77 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0004.png differ diff --git a/tiled/assets/grid_game_objects/tile_0005.png b/tiled/assets/grid_game_objects/tile_0005.png new file mode 100644 index 0000000..08118c7 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0005.png differ diff --git a/tiled/assets/grid_game_objects/tile_0006.png b/tiled/assets/grid_game_objects/tile_0006.png new file mode 100644 index 0000000..244bb4a Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0006.png differ diff --git a/tiled/assets/grid_game_objects/tile_0007.png b/tiled/assets/grid_game_objects/tile_0007.png new file mode 100644 index 0000000..0d05005 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0007.png differ diff --git a/tiled/assets/grid_game_objects/tile_0008.png b/tiled/assets/grid_game_objects/tile_0008.png new file mode 100644 index 0000000..1886dc1 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0008.png differ diff --git a/tiled/assets/grid_game_objects/tile_0009.png b/tiled/assets/grid_game_objects/tile_0009.png new file mode 100644 index 0000000..cac425d Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0009.png differ diff --git a/tiled/assets/grid_game_objects/tile_0010.png b/tiled/assets/grid_game_objects/tile_0010.png new file mode 100644 index 0000000..7c93da4 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0010.png differ diff --git a/tiled/assets/grid_game_objects/tile_0011.png b/tiled/assets/grid_game_objects/tile_0011.png new file mode 100644 index 0000000..bb6a894 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0011.png differ diff --git a/tiled/assets/grid_game_objects/tile_0012.png b/tiled/assets/grid_game_objects/tile_0012.png new file mode 100644 index 0000000..77b8ad3 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0012.png differ diff --git a/tiled/assets/grid_game_objects/tile_0013.png b/tiled/assets/grid_game_objects/tile_0013.png new file mode 100644 index 0000000..b32f15e Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0013.png differ diff --git a/tiled/assets/grid_game_objects/tile_0014.png b/tiled/assets/grid_game_objects/tile_0014.png new file mode 100644 index 0000000..8e86c60 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0014.png differ diff --git a/tiled/assets/grid_game_objects/tile_0015.png b/tiled/assets/grid_game_objects/tile_0015.png new file mode 100644 index 0000000..6848c9a Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0015.png differ diff --git a/tiled/assets/grid_game_objects/tile_0016.png b/tiled/assets/grid_game_objects/tile_0016.png new file mode 100644 index 0000000..4aa2234 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0016.png differ diff --git a/tiled/assets/grid_game_objects/tile_0017.png b/tiled/assets/grid_game_objects/tile_0017.png new file mode 100644 index 0000000..6d8c8f8 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0017.png differ diff --git a/tiled/assets/grid_game_objects/tile_0018.png b/tiled/assets/grid_game_objects/tile_0018.png new file mode 100644 index 0000000..aa98bef Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0018.png differ diff --git a/tiled/assets/grid_game_objects/tile_0019.png b/tiled/assets/grid_game_objects/tile_0019.png new file mode 100644 index 0000000..6b8a554 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0019.png differ diff --git a/tiled/assets/grid_game_objects/tile_0020.png b/tiled/assets/grid_game_objects/tile_0020.png new file mode 100644 index 0000000..fa3a419 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0020.png differ diff --git a/tiled/assets/grid_game_objects/tile_0021.png b/tiled/assets/grid_game_objects/tile_0021.png new file mode 100644 index 0000000..4d46da4 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0021.png differ diff --git a/tiled/assets/grid_game_objects/tile_0022.png b/tiled/assets/grid_game_objects/tile_0022.png new file mode 100644 index 0000000..c71083d Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0022.png differ diff --git a/tiled/assets/grid_game_objects/tile_0023.png b/tiled/assets/grid_game_objects/tile_0023.png new file mode 100644 index 0000000..14a6a7b Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0023.png differ diff --git a/tiled/assets/grid_game_objects/tile_0024.png b/tiled/assets/grid_game_objects/tile_0024.png new file mode 100644 index 0000000..a1b9f84 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0024.png differ diff --git a/tiled/assets/grid_game_objects/tile_0025.png b/tiled/assets/grid_game_objects/tile_0025.png new file mode 100644 index 0000000..047c45d Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0025.png differ diff --git a/tiled/assets/grid_game_objects/tile_0026.png b/tiled/assets/grid_game_objects/tile_0026.png new file mode 100644 index 0000000..1ad5306 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0026.png differ diff --git a/tiled/assets/grid_game_objects/tile_0027.png b/tiled/assets/grid_game_objects/tile_0027.png new file mode 100644 index 0000000..a22cf54 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0027.png differ diff --git a/tiled/assets/grid_game_objects/tile_0028.png b/tiled/assets/grid_game_objects/tile_0028.png new file mode 100644 index 0000000..56a8d9d Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0028.png differ diff --git a/tiled/assets/grid_game_objects/tile_0029.png b/tiled/assets/grid_game_objects/tile_0029.png new file mode 100644 index 0000000..9355b43 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0029.png differ diff --git a/tiled/assets/grid_game_objects/tile_0030.png b/tiled/assets/grid_game_objects/tile_0030.png new file mode 100644 index 0000000..b3fc305 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0030.png differ diff --git a/tiled/assets/grid_game_objects/tile_0031.png b/tiled/assets/grid_game_objects/tile_0031.png new file mode 100644 index 0000000..ae49f40 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0031.png differ diff --git a/tiled/assets/grid_game_objects/tile_0032.png b/tiled/assets/grid_game_objects/tile_0032.png new file mode 100644 index 0000000..56556e1 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0032.png differ diff --git a/tiled/assets/grid_game_objects/tile_0033.png b/tiled/assets/grid_game_objects/tile_0033.png new file mode 100644 index 0000000..56a8d9d Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0033.png differ diff --git a/tiled/assets/grid_game_objects/tile_0034.png b/tiled/assets/grid_game_objects/tile_0034.png new file mode 100644 index 0000000..9355b43 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0034.png differ diff --git a/tiled/assets/grid_game_objects/tile_0035.png b/tiled/assets/grid_game_objects/tile_0035.png new file mode 100644 index 0000000..b3fc305 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0035.png differ diff --git a/tiled/assets/grid_game_objects/tile_0036.png b/tiled/assets/grid_game_objects/tile_0036.png new file mode 100644 index 0000000..75d41aa Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0036.png differ diff --git a/tiled/assets/grid_game_objects/tile_0037.png b/tiled/assets/grid_game_objects/tile_0037.png new file mode 100644 index 0000000..b328794 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0037.png differ diff --git a/tiled/assets/grid_game_objects/tile_0038.png b/tiled/assets/grid_game_objects/tile_0038.png new file mode 100644 index 0000000..f70af53 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0038.png differ diff --git a/tiled/assets/grid_game_objects/tile_0039.png b/tiled/assets/grid_game_objects/tile_0039.png new file mode 100644 index 0000000..9a77af3 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0039.png differ diff --git a/tiled/assets/grid_game_objects/tile_0040.png b/tiled/assets/grid_game_objects/tile_0040.png new file mode 100644 index 0000000..1de9c08 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0040.png differ diff --git a/tiled/assets/grid_game_objects/tile_0041.png b/tiled/assets/grid_game_objects/tile_0041.png new file mode 100644 index 0000000..b720ac9 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0041.png differ diff --git a/tiled/assets/grid_game_objects/tile_0042.png b/tiled/assets/grid_game_objects/tile_0042.png new file mode 100644 index 0000000..1255eea Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0042.png differ diff --git a/tiled/assets/grid_game_objects/tile_0043.png b/tiled/assets/grid_game_objects/tile_0043.png new file mode 100644 index 0000000..b96d366 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0043.png differ diff --git a/tiled/assets/grid_game_objects/tile_0044.png b/tiled/assets/grid_game_objects/tile_0044.png new file mode 100644 index 0000000..b03539e Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0044.png differ diff --git a/tiled/assets/grid_game_objects/tile_0045.png b/tiled/assets/grid_game_objects/tile_0045.png new file mode 100644 index 0000000..584f1cd Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0045.png differ diff --git a/tiled/assets/grid_game_objects/tile_0046.png b/tiled/assets/grid_game_objects/tile_0046.png new file mode 100644 index 0000000..8ad0b6f Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0046.png differ diff --git a/tiled/assets/grid_game_objects/tile_0047.png b/tiled/assets/grid_game_objects/tile_0047.png new file mode 100644 index 0000000..98608af Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0047.png differ diff --git a/tiled/assets/grid_game_objects/tile_0048.png b/tiled/assets/grid_game_objects/tile_0048.png new file mode 100644 index 0000000..faa3550 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0048.png differ diff --git a/tiled/assets/grid_game_objects/tile_0049.png b/tiled/assets/grid_game_objects/tile_0049.png new file mode 100644 index 0000000..0344112 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0049.png differ diff --git a/tiled/assets/grid_game_objects/tile_0050.png b/tiled/assets/grid_game_objects/tile_0050.png new file mode 100644 index 0000000..47b0ba3 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0050.png differ diff --git a/tiled/assets/grid_game_objects/tile_0051.png b/tiled/assets/grid_game_objects/tile_0051.png new file mode 100644 index 0000000..57e6fb9 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0051.png differ diff --git a/tiled/assets/grid_game_objects/tile_0052.png b/tiled/assets/grid_game_objects/tile_0052.png new file mode 100644 index 0000000..a142c65 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0052.png differ diff --git a/tiled/assets/grid_game_objects/tile_0053.png b/tiled/assets/grid_game_objects/tile_0053.png new file mode 100644 index 0000000..25e1994 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0053.png differ diff --git a/tiled/assets/grid_game_objects/tile_0054.png b/tiled/assets/grid_game_objects/tile_0054.png new file mode 100644 index 0000000..7760da9 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0054.png differ diff --git a/tiled/assets/grid_game_objects/tile_0055.png b/tiled/assets/grid_game_objects/tile_0055.png new file mode 100644 index 0000000..dd4e95b Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0055.png differ diff --git a/tiled/assets/grid_game_objects/tile_0056.png b/tiled/assets/grid_game_objects/tile_0056.png new file mode 100644 index 0000000..62256e8 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0056.png differ diff --git a/tiled/assets/grid_game_objects/tile_0057.png b/tiled/assets/grid_game_objects/tile_0057.png new file mode 100644 index 0000000..9ec6067 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0057.png differ diff --git a/tiled/assets/grid_game_objects/tile_0058.png b/tiled/assets/grid_game_objects/tile_0058.png new file mode 100644 index 0000000..618fdfa Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0058.png differ diff --git a/tiled/assets/grid_game_objects/tile_0059.png b/tiled/assets/grid_game_objects/tile_0059.png new file mode 100644 index 0000000..7258e24 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0059.png differ diff --git a/tiled/assets/grid_game_objects/tile_0060.png b/tiled/assets/grid_game_objects/tile_0060.png new file mode 100644 index 0000000..e98bc7f Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0060.png differ diff --git a/tiled/assets/grid_game_objects/tile_0061.png b/tiled/assets/grid_game_objects/tile_0061.png new file mode 100644 index 0000000..4918b91 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0061.png differ diff --git a/tiled/assets/grid_game_objects/tile_0062.png b/tiled/assets/grid_game_objects/tile_0062.png new file mode 100644 index 0000000..321bfd1 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0062.png differ diff --git a/tiled/assets/grid_game_objects/tile_0063.png b/tiled/assets/grid_game_objects/tile_0063.png new file mode 100644 index 0000000..1ad34f0 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0063.png differ diff --git a/tiled/assets/grid_game_objects/tile_0064.png b/tiled/assets/grid_game_objects/tile_0064.png new file mode 100644 index 0000000..faee865 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0064.png differ diff --git a/tiled/assets/grid_game_objects/tile_0065.png b/tiled/assets/grid_game_objects/tile_0065.png new file mode 100644 index 0000000..b4160ea Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0065.png differ diff --git a/tiled/assets/grid_game_objects/tile_0066.png b/tiled/assets/grid_game_objects/tile_0066.png new file mode 100644 index 0000000..7aded89 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0066.png differ diff --git a/tiled/assets/grid_game_objects/tile_0067.png b/tiled/assets/grid_game_objects/tile_0067.png new file mode 100644 index 0000000..af9a5dc Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0067.png differ diff --git a/tiled/assets/grid_game_objects/tile_0068.png b/tiled/assets/grid_game_objects/tile_0068.png new file mode 100644 index 0000000..0e9e91c Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0068.png differ diff --git a/tiled/assets/grid_game_objects/tile_0069.png b/tiled/assets/grid_game_objects/tile_0069.png new file mode 100644 index 0000000..fc4baca Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0069.png differ diff --git a/tiled/assets/grid_game_objects/tile_0070.png b/tiled/assets/grid_game_objects/tile_0070.png new file mode 100644 index 0000000..c0bd596 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0070.png differ diff --git a/tiled/assets/grid_game_objects/tile_0071.png b/tiled/assets/grid_game_objects/tile_0071.png new file mode 100644 index 0000000..5f9489f Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0071.png differ diff --git a/tiled/assets/grid_game_objects/tile_0072.png b/tiled/assets/grid_game_objects/tile_0072.png new file mode 100644 index 0000000..f1ac8ed Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0072.png differ diff --git a/tiled/assets/grid_game_objects/tile_0073.png b/tiled/assets/grid_game_objects/tile_0073.png new file mode 100644 index 0000000..a90a68b Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0073.png differ diff --git a/tiled/assets/grid_game_objects/tile_0074.png b/tiled/assets/grid_game_objects/tile_0074.png new file mode 100644 index 0000000..cf9fe0a Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0074.png differ diff --git a/tiled/assets/grid_game_objects/tile_0075.png b/tiled/assets/grid_game_objects/tile_0075.png new file mode 100644 index 0000000..fc71803 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0075.png differ diff --git a/tiled/assets/grid_game_objects/tile_0076.png b/tiled/assets/grid_game_objects/tile_0076.png new file mode 100644 index 0000000..09bbe03 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0076.png differ diff --git a/tiled/assets/grid_game_objects/tile_0077.png b/tiled/assets/grid_game_objects/tile_0077.png new file mode 100644 index 0000000..fa87971 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0077.png differ diff --git a/tiled/assets/grid_game_objects/tile_0078.png b/tiled/assets/grid_game_objects/tile_0078.png new file mode 100644 index 0000000..bc6aff6 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0078.png differ diff --git a/tiled/assets/grid_game_objects/tile_0079.png b/tiled/assets/grid_game_objects/tile_0079.png new file mode 100644 index 0000000..ea77f2f Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0079.png differ diff --git a/tiled/assets/grid_game_objects/tile_0080.png b/tiled/assets/grid_game_objects/tile_0080.png new file mode 100644 index 0000000..7d7d9b3 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0080.png differ diff --git a/tiled/assets/grid_game_objects/tile_0081.png b/tiled/assets/grid_game_objects/tile_0081.png new file mode 100644 index 0000000..b542293 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0081.png differ diff --git a/tiled/assets/grid_game_objects/tile_0082.png b/tiled/assets/grid_game_objects/tile_0082.png new file mode 100644 index 0000000..83d22af Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0082.png differ diff --git a/tiled/assets/grid_game_objects/tile_0083.png b/tiled/assets/grid_game_objects/tile_0083.png new file mode 100644 index 0000000..ccef1a5 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0083.png differ diff --git a/tiled/assets/grid_game_objects/tile_0084.png b/tiled/assets/grid_game_objects/tile_0084.png new file mode 100644 index 0000000..d618958 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0084.png differ diff --git a/tiled/assets/grid_game_objects/tile_0085.png b/tiled/assets/grid_game_objects/tile_0085.png new file mode 100644 index 0000000..fc657a4 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0085.png differ diff --git a/tiled/assets/grid_game_objects/tile_0086.png b/tiled/assets/grid_game_objects/tile_0086.png new file mode 100644 index 0000000..ce21d90 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0086.png differ diff --git a/tiled/assets/grid_game_objects/tile_0087.png b/tiled/assets/grid_game_objects/tile_0087.png new file mode 100644 index 0000000..9d50a7a Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0087.png differ diff --git a/tiled/assets/grid_game_objects/tile_0088.png b/tiled/assets/grid_game_objects/tile_0088.png new file mode 100644 index 0000000..00e7a44 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0088.png differ diff --git a/tiled/assets/grid_game_objects/tile_0089.png b/tiled/assets/grid_game_objects/tile_0089.png new file mode 100644 index 0000000..7b64a4f Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0089.png differ diff --git a/tiled/assets/grid_game_objects/tile_0090.png b/tiled/assets/grid_game_objects/tile_0090.png new file mode 100644 index 0000000..2b9fa2d Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0090.png differ diff --git a/tiled/assets/grid_game_objects/tile_0091.png b/tiled/assets/grid_game_objects/tile_0091.png new file mode 100644 index 0000000..3f9f843 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0091.png differ diff --git a/tiled/assets/grid_game_objects/tile_0092.png b/tiled/assets/grid_game_objects/tile_0092.png new file mode 100644 index 0000000..b016776 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0092.png differ diff --git a/tiled/assets/grid_game_objects/tile_0093.png b/tiled/assets/grid_game_objects/tile_0093.png new file mode 100644 index 0000000..dd1dd94 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0093.png differ diff --git a/tiled/assets/grid_game_objects/tile_0094.png b/tiled/assets/grid_game_objects/tile_0094.png new file mode 100644 index 0000000..0be28e3 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0094.png differ diff --git a/tiled/assets/grid_game_objects/tile_0095.png b/tiled/assets/grid_game_objects/tile_0095.png new file mode 100644 index 0000000..e27ae99 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0095.png differ diff --git a/tiled/assets/grid_game_objects/tile_0096.png b/tiled/assets/grid_game_objects/tile_0096.png new file mode 100644 index 0000000..94181c2 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0096.png differ diff --git a/tiled/assets/grid_game_objects/tile_0097.png b/tiled/assets/grid_game_objects/tile_0097.png new file mode 100644 index 0000000..4cb9a88 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0097.png differ diff --git a/tiled/assets/grid_game_objects/tile_0098.png b/tiled/assets/grid_game_objects/tile_0098.png new file mode 100644 index 0000000..5af45ff Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0098.png differ diff --git a/tiled/assets/grid_game_objects/tile_0099.png b/tiled/assets/grid_game_objects/tile_0099.png new file mode 100644 index 0000000..0789292 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0099.png differ diff --git a/tiled/assets/grid_game_objects/tile_0100.png b/tiled/assets/grid_game_objects/tile_0100.png new file mode 100644 index 0000000..78fcfa5 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0100.png differ diff --git a/tiled/assets/grid_game_objects/tile_0101.png b/tiled/assets/grid_game_objects/tile_0101.png new file mode 100644 index 0000000..940db3f Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0101.png differ diff --git a/tiled/assets/grid_game_objects/tile_0102.png b/tiled/assets/grid_game_objects/tile_0102.png new file mode 100644 index 0000000..6296418 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0102.png differ diff --git a/tiled/assets/grid_game_objects/tile_0103.png b/tiled/assets/grid_game_objects/tile_0103.png new file mode 100644 index 0000000..a29e8db Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0103.png differ diff --git a/tiled/assets/grid_game_objects/tile_0104.png b/tiled/assets/grid_game_objects/tile_0104.png new file mode 100644 index 0000000..ae830a5 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0104.png differ diff --git a/tiled/assets/grid_game_objects/tile_0105.png b/tiled/assets/grid_game_objects/tile_0105.png new file mode 100644 index 0000000..72981a3 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0105.png differ diff --git a/tiled/assets/grid_game_objects/tile_0106.png b/tiled/assets/grid_game_objects/tile_0106.png new file mode 100644 index 0000000..092a63c Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0106.png differ diff --git a/tiled/assets/grid_game_objects/tile_0107.png b/tiled/assets/grid_game_objects/tile_0107.png new file mode 100644 index 0000000..60a8e2e Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0107.png differ diff --git a/tiled/assets/grid_game_objects/tile_0108.png b/tiled/assets/grid_game_objects/tile_0108.png new file mode 100644 index 0000000..163ccf9 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0108.png differ diff --git a/tiled/assets/grid_game_objects/tile_0109.png b/tiled/assets/grid_game_objects/tile_0109.png new file mode 100644 index 0000000..2851d30 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0109.png differ diff --git a/tiled/assets/grid_game_objects/tile_0110.png b/tiled/assets/grid_game_objects/tile_0110.png new file mode 100644 index 0000000..c95ffb6 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0110.png differ diff --git a/tiled/assets/grid_game_objects/tile_0111.png b/tiled/assets/grid_game_objects/tile_0111.png new file mode 100644 index 0000000..f001860 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0111.png differ diff --git a/tiled/assets/grid_game_objects/tile_0112.png b/tiled/assets/grid_game_objects/tile_0112.png new file mode 100644 index 0000000..785b0a0 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0112.png differ diff --git a/tiled/assets/grid_game_objects/tile_0113.png b/tiled/assets/grid_game_objects/tile_0113.png new file mode 100644 index 0000000..efcadab Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0113.png differ diff --git a/tiled/assets/grid_game_objects/tile_0114.png b/tiled/assets/grid_game_objects/tile_0114.png new file mode 100644 index 0000000..ee789dd Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0114.png differ diff --git a/tiled/assets/grid_game_objects/tile_0115.png b/tiled/assets/grid_game_objects/tile_0115.png new file mode 100644 index 0000000..8cf4167 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0115.png differ diff --git a/tiled/assets/grid_game_objects/tile_0116.png b/tiled/assets/grid_game_objects/tile_0116.png new file mode 100644 index 0000000..618ea75 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0116.png differ diff --git a/tiled/assets/grid_game_objects/tile_0117.png b/tiled/assets/grid_game_objects/tile_0117.png new file mode 100644 index 0000000..1c6135c Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0117.png differ diff --git a/tiled/assets/grid_game_objects/tile_0118.png b/tiled/assets/grid_game_objects/tile_0118.png new file mode 100644 index 0000000..ded08d3 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0118.png differ diff --git a/tiled/assets/grid_game_objects/tile_0119.png b/tiled/assets/grid_game_objects/tile_0119.png new file mode 100644 index 0000000..9355b43 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0119.png differ diff --git a/tiled/assets/grid_game_objects/tile_0120.png b/tiled/assets/grid_game_objects/tile_0120.png new file mode 100644 index 0000000..e7bfe20 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0120.png differ diff --git a/tiled/assets/grid_game_objects/tile_0121.png b/tiled/assets/grid_game_objects/tile_0121.png new file mode 100644 index 0000000..7e3187d Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0121.png differ diff --git a/tiled/assets/grid_game_objects/tile_0122.png b/tiled/assets/grid_game_objects/tile_0122.png new file mode 100644 index 0000000..16df4ea Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0122.png differ diff --git a/tiled/assets/grid_game_objects/tile_0123.png b/tiled/assets/grid_game_objects/tile_0123.png new file mode 100644 index 0000000..00791db Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0123.png differ diff --git a/tiled/assets/grid_game_objects/tile_0124.png b/tiled/assets/grid_game_objects/tile_0124.png new file mode 100644 index 0000000..1f266bd Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0124.png differ diff --git a/tiled/assets/grid_game_objects/tile_0125.png b/tiled/assets/grid_game_objects/tile_0125.png new file mode 100644 index 0000000..00791db Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0125.png differ diff --git a/tiled/assets/grid_game_objects/tile_0126.png b/tiled/assets/grid_game_objects/tile_0126.png new file mode 100644 index 0000000..a8c079a Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0126.png differ diff --git a/tiled/assets/grid_game_objects/tile_0127.png b/tiled/assets/grid_game_objects/tile_0127.png new file mode 100644 index 0000000..48df7c3 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0127.png differ diff --git a/tiled/assets/grid_game_objects/tile_0128.png b/tiled/assets/grid_game_objects/tile_0128.png new file mode 100644 index 0000000..7f584da Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0128.png differ diff --git a/tiled/assets/grid_game_objects/tile_0129.png b/tiled/assets/grid_game_objects/tile_0129.png new file mode 100644 index 0000000..81651ed Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0129.png differ diff --git a/tiled/assets/grid_game_objects/tile_0130.png b/tiled/assets/grid_game_objects/tile_0130.png new file mode 100644 index 0000000..c6334c3 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0130.png differ diff --git a/tiled/assets/grid_game_objects/tile_0131.png b/tiled/assets/grid_game_objects/tile_0131.png new file mode 100644 index 0000000..7b390f5 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0131.png differ diff --git a/tiled/assets/grid_game_objects/tile_0132.png b/tiled/assets/grid_game_objects/tile_0132.png new file mode 100644 index 0000000..634ffc0 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0132.png differ diff --git a/tiled/assets/grid_game_objects/tile_0133.png b/tiled/assets/grid_game_objects/tile_0133.png new file mode 100644 index 0000000..f9a7007 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0133.png differ diff --git a/tiled/assets/grid_game_objects/tile_0134.png b/tiled/assets/grid_game_objects/tile_0134.png new file mode 100644 index 0000000..4eda5b0 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0134.png differ diff --git a/tiled/assets/grid_game_objects/tile_0135.png b/tiled/assets/grid_game_objects/tile_0135.png new file mode 100644 index 0000000..edbcf90 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0135.png differ diff --git a/tiled/assets/grid_game_objects/tile_0136.png b/tiled/assets/grid_game_objects/tile_0136.png new file mode 100644 index 0000000..6a20b0c Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0136.png differ diff --git a/tiled/assets/grid_game_objects/tile_0137.png b/tiled/assets/grid_game_objects/tile_0137.png new file mode 100644 index 0000000..3dbe4b6 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0137.png differ diff --git a/tiled/assets/grid_game_objects/tile_0138.png b/tiled/assets/grid_game_objects/tile_0138.png new file mode 100644 index 0000000..f7c5434 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0138.png differ diff --git a/tiled/assets/grid_game_objects/tile_0139.png b/tiled/assets/grid_game_objects/tile_0139.png new file mode 100644 index 0000000..3dbceb9 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0139.png differ diff --git a/tiled/assets/grid_game_objects/tile_0140.png b/tiled/assets/grid_game_objects/tile_0140.png new file mode 100644 index 0000000..b7b968b Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0140.png differ diff --git a/tiled/assets/grid_game_objects/tile_0141.png b/tiled/assets/grid_game_objects/tile_0141.png new file mode 100644 index 0000000..26355ab Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0141.png differ diff --git a/tiled/assets/grid_game_objects/tile_0142.png b/tiled/assets/grid_game_objects/tile_0142.png new file mode 100644 index 0000000..9025fba Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0142.png differ diff --git a/tiled/assets/grid_game_objects/tile_0143.png b/tiled/assets/grid_game_objects/tile_0143.png new file mode 100644 index 0000000..0e37bb0 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0143.png differ diff --git a/tiled/assets/grid_game_objects/tile_0144.png b/tiled/assets/grid_game_objects/tile_0144.png new file mode 100644 index 0000000..26f1650 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0144.png differ diff --git a/tiled/assets/grid_game_objects/tile_0145.png b/tiled/assets/grid_game_objects/tile_0145.png new file mode 100644 index 0000000..5ffc5c5 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0145.png differ diff --git a/tiled/assets/grid_game_objects/tile_0146.png b/tiled/assets/grid_game_objects/tile_0146.png new file mode 100644 index 0000000..1991161 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0146.png differ diff --git a/tiled/assets/grid_game_objects/tile_0147.png b/tiled/assets/grid_game_objects/tile_0147.png new file mode 100644 index 0000000..34b460d Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0147.png differ diff --git a/tiled/assets/grid_game_objects/tile_0148.png b/tiled/assets/grid_game_objects/tile_0148.png new file mode 100644 index 0000000..76011bb Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0148.png differ diff --git a/tiled/assets/grid_game_objects/tile_0149.png b/tiled/assets/grid_game_objects/tile_0149.png new file mode 100644 index 0000000..ecdba4c Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0149.png differ diff --git a/tiled/assets/grid_game_objects/tile_0150.png b/tiled/assets/grid_game_objects/tile_0150.png new file mode 100644 index 0000000..59892ea Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0150.png differ diff --git a/tiled/assets/grid_game_objects/tile_0151.png b/tiled/assets/grid_game_objects/tile_0151.png new file mode 100644 index 0000000..b07ae71 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0151.png differ diff --git a/tiled/assets/grid_game_objects/tile_0152.png b/tiled/assets/grid_game_objects/tile_0152.png new file mode 100644 index 0000000..9c00970 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0152.png differ diff --git a/tiled/assets/grid_game_objects/tile_0153.png b/tiled/assets/grid_game_objects/tile_0153.png new file mode 100644 index 0000000..2a0a036 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0153.png differ diff --git a/tiled/assets/grid_game_objects/tile_0154.png b/tiled/assets/grid_game_objects/tile_0154.png new file mode 100644 index 0000000..7b00732 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0154.png differ diff --git a/tiled/assets/grid_game_objects/tile_0155.png b/tiled/assets/grid_game_objects/tile_0155.png new file mode 100644 index 0000000..9b6800b Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0155.png differ diff --git a/tiled/assets/grid_game_objects/tile_0156.png b/tiled/assets/grid_game_objects/tile_0156.png new file mode 100644 index 0000000..3a0f0ec Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0156.png differ diff --git a/tiled/assets/grid_game_objects/tile_0157.png b/tiled/assets/grid_game_objects/tile_0157.png new file mode 100644 index 0000000..68082ea Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0157.png differ diff --git a/tiled/assets/grid_game_objects/tile_0158.png b/tiled/assets/grid_game_objects/tile_0158.png new file mode 100644 index 0000000..7b69954 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0158.png differ diff --git a/tiled/assets/grid_game_objects/tile_0159.png b/tiled/assets/grid_game_objects/tile_0159.png new file mode 100644 index 0000000..fda0083 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0159.png differ diff --git a/tiled/assets/grid_game_objects/tile_0160.png b/tiled/assets/grid_game_objects/tile_0160.png new file mode 100644 index 0000000..b298f5b Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0160.png differ diff --git a/tiled/assets/grid_game_objects/tile_0161.png b/tiled/assets/grid_game_objects/tile_0161.png new file mode 100644 index 0000000..4088d0a Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0161.png differ diff --git a/tiled/assets/grid_game_objects/tile_0162.png b/tiled/assets/grid_game_objects/tile_0162.png new file mode 100644 index 0000000..43fffec Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0162.png differ diff --git a/tiled/assets/grid_game_objects/tile_0163.png b/tiled/assets/grid_game_objects/tile_0163.png new file mode 100644 index 0000000..6b48d1b Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0163.png differ diff --git a/tiled/assets/grid_game_objects/tile_0164.png b/tiled/assets/grid_game_objects/tile_0164.png new file mode 100644 index 0000000..417faf6 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0164.png differ diff --git a/tiled/assets/grid_game_objects/tile_0165.png b/tiled/assets/grid_game_objects/tile_0165.png new file mode 100644 index 0000000..5e1e9ef Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0165.png differ diff --git a/tiled/assets/grid_game_objects/tile_0166.png b/tiled/assets/grid_game_objects/tile_0166.png new file mode 100644 index 0000000..5c62c1c Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0166.png differ diff --git a/tiled/assets/grid_game_objects/tile_0167.png b/tiled/assets/grid_game_objects/tile_0167.png new file mode 100644 index 0000000..3e0e929 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0167.png differ diff --git a/tiled/assets/grid_game_objects/tile_0168.png b/tiled/assets/grid_game_objects/tile_0168.png new file mode 100644 index 0000000..99600e1 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0168.png differ diff --git a/tiled/assets/grid_game_objects/tile_0169.png b/tiled/assets/grid_game_objects/tile_0169.png new file mode 100644 index 0000000..16be070 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0169.png differ diff --git a/tiled/assets/grid_game_objects/tile_0170.png b/tiled/assets/grid_game_objects/tile_0170.png new file mode 100644 index 0000000..b58e606 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0170.png differ diff --git a/tiled/assets/grid_game_objects/tile_0171.png b/tiled/assets/grid_game_objects/tile_0171.png new file mode 100644 index 0000000..06cc019 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0171.png differ diff --git a/tiled/assets/grid_game_objects/tile_0172.png b/tiled/assets/grid_game_objects/tile_0172.png new file mode 100644 index 0000000..aabbaf0 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0172.png differ diff --git a/tiled/assets/grid_game_objects/tile_0173.png b/tiled/assets/grid_game_objects/tile_0173.png new file mode 100644 index 0000000..a3b5ae0 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0173.png differ diff --git a/tiled/assets/grid_game_objects/tile_0174.png b/tiled/assets/grid_game_objects/tile_0174.png new file mode 100644 index 0000000..fd8bc97 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0174.png differ diff --git a/tiled/assets/grid_game_objects/tile_0175.png b/tiled/assets/grid_game_objects/tile_0175.png new file mode 100644 index 0000000..707bca1 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0175.png differ diff --git a/tiled/assets/grid_game_objects/tile_0176.png b/tiled/assets/grid_game_objects/tile_0176.png new file mode 100644 index 0000000..062d274 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0176.png differ diff --git a/tiled/assets/grid_game_objects/tile_0177.png b/tiled/assets/grid_game_objects/tile_0177.png new file mode 100644 index 0000000..3c4a741 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0177.png differ diff --git a/tiled/assets/grid_game_objects/tile_0178.png b/tiled/assets/grid_game_objects/tile_0178.png new file mode 100644 index 0000000..2540e2d Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0178.png differ diff --git a/tiled/assets/grid_game_objects/tile_0179.png b/tiled/assets/grid_game_objects/tile_0179.png new file mode 100644 index 0000000..4fd5985 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0179.png differ diff --git a/tiled/assets/grid_game_objects/tile_0180.png b/tiled/assets/grid_game_objects/tile_0180.png new file mode 100644 index 0000000..e38e171 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0180.png differ diff --git a/tiled/assets/grid_game_objects/tile_0181.png b/tiled/assets/grid_game_objects/tile_0181.png new file mode 100644 index 0000000..79eb5de Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0181.png differ diff --git a/tiled/assets/grid_game_objects/tile_0182.png b/tiled/assets/grid_game_objects/tile_0182.png new file mode 100644 index 0000000..4deacd4 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0182.png differ diff --git a/tiled/assets/grid_game_objects/tile_0183.png b/tiled/assets/grid_game_objects/tile_0183.png new file mode 100644 index 0000000..e38e171 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0183.png differ diff --git a/tiled/assets/grid_game_objects/tile_0184.png b/tiled/assets/grid_game_objects/tile_0184.png new file mode 100644 index 0000000..e47f830 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0184.png differ diff --git a/tiled/assets/grid_game_objects/tile_0185.png b/tiled/assets/grid_game_objects/tile_0185.png new file mode 100644 index 0000000..cb33de0 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0185.png differ diff --git a/tiled/assets/grid_game_objects/tile_0186.png b/tiled/assets/grid_game_objects/tile_0186.png new file mode 100644 index 0000000..7add676 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0186.png differ diff --git a/tiled/assets/grid_game_objects/tile_0187.png b/tiled/assets/grid_game_objects/tile_0187.png new file mode 100644 index 0000000..2d01e4b Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0187.png differ diff --git a/tiled/assets/grid_game_objects/tile_0188.png b/tiled/assets/grid_game_objects/tile_0188.png new file mode 100644 index 0000000..e254daf Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0188.png differ diff --git a/tiled/assets/grid_game_objects/tile_0189.png b/tiled/assets/grid_game_objects/tile_0189.png new file mode 100644 index 0000000..c85423f Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0189.png differ diff --git a/tiled/assets/grid_game_objects/tile_0190.png b/tiled/assets/grid_game_objects/tile_0190.png new file mode 100644 index 0000000..4347e34 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0190.png differ diff --git a/tiled/assets/grid_game_objects/tile_0191.png b/tiled/assets/grid_game_objects/tile_0191.png new file mode 100644 index 0000000..a6a2b9e Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0191.png differ diff --git a/tiled/assets/grid_game_objects/tile_0192.png b/tiled/assets/grid_game_objects/tile_0192.png new file mode 100644 index 0000000..7987777 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0192.png differ diff --git a/tiled/assets/grid_game_objects/tile_0193.png b/tiled/assets/grid_game_objects/tile_0193.png new file mode 100644 index 0000000..d200c15 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0193.png differ diff --git a/tiled/assets/grid_game_objects/tile_0194.png b/tiled/assets/grid_game_objects/tile_0194.png new file mode 100644 index 0000000..c4a5e89 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0194.png differ diff --git a/tiled/assets/grid_game_objects/tile_0195.png b/tiled/assets/grid_game_objects/tile_0195.png new file mode 100644 index 0000000..aa30517 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0195.png differ diff --git a/tiled/assets/grid_game_objects/tile_0196.png b/tiled/assets/grid_game_objects/tile_0196.png new file mode 100644 index 0000000..a5c9d03 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0196.png differ diff --git a/tiled/assets/grid_game_objects/tile_0197.png b/tiled/assets/grid_game_objects/tile_0197.png new file mode 100644 index 0000000..aa30517 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0197.png differ diff --git a/tiled/assets/grid_game_objects/tile_0198.png b/tiled/assets/grid_game_objects/tile_0198.png new file mode 100644 index 0000000..5711ed3 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0198.png differ diff --git a/tiled/assets/grid_game_objects/tile_0199.png b/tiled/assets/grid_game_objects/tile_0199.png new file mode 100644 index 0000000..ba89196 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0199.png differ diff --git a/tiled/assets/grid_game_objects/tile_0200.png b/tiled/assets/grid_game_objects/tile_0200.png new file mode 100644 index 0000000..422535e Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0200.png differ diff --git a/tiled/assets/grid_game_objects/tile_0201.png b/tiled/assets/grid_game_objects/tile_0201.png new file mode 100644 index 0000000..97986df Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0201.png differ diff --git a/tiled/assets/grid_game_objects/tile_0202.png b/tiled/assets/grid_game_objects/tile_0202.png new file mode 100644 index 0000000..dfd9a41 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0202.png differ diff --git a/tiled/assets/grid_game_objects/tile_0203.png b/tiled/assets/grid_game_objects/tile_0203.png new file mode 100644 index 0000000..d68aac2 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0203.png differ diff --git a/tiled/assets/grid_game_objects/tile_0204.png b/tiled/assets/grid_game_objects/tile_0204.png new file mode 100644 index 0000000..7204f72 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0204.png differ diff --git a/tiled/assets/grid_game_objects/tile_0205.png b/tiled/assets/grid_game_objects/tile_0205.png new file mode 100644 index 0000000..91267e6 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0205.png differ diff --git a/tiled/assets/grid_game_objects/tile_0206.png b/tiled/assets/grid_game_objects/tile_0206.png new file mode 100644 index 0000000..28795ce Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0206.png differ diff --git a/tiled/assets/grid_game_objects/tile_0207.png b/tiled/assets/grid_game_objects/tile_0207.png new file mode 100644 index 0000000..f50a516 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0207.png differ diff --git a/tiled/assets/grid_game_objects/tile_0208.png b/tiled/assets/grid_game_objects/tile_0208.png new file mode 100644 index 0000000..807080b Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0208.png differ diff --git a/tiled/assets/grid_game_objects/tile_0209.png b/tiled/assets/grid_game_objects/tile_0209.png new file mode 100644 index 0000000..7004eac Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0209.png differ diff --git a/tiled/assets/grid_game_objects/tile_0210.png b/tiled/assets/grid_game_objects/tile_0210.png new file mode 100644 index 0000000..54a32ad Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0210.png differ diff --git a/tiled/assets/grid_game_objects/tile_0211.png b/tiled/assets/grid_game_objects/tile_0211.png new file mode 100644 index 0000000..ac5a67d Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0211.png differ diff --git a/tiled/assets/grid_game_objects/tile_0212.png b/tiled/assets/grid_game_objects/tile_0212.png new file mode 100644 index 0000000..9b93ff3 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0212.png differ diff --git a/tiled/assets/grid_game_objects/tile_0213.png b/tiled/assets/grid_game_objects/tile_0213.png new file mode 100644 index 0000000..c23c2d5 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0213.png differ diff --git a/tiled/assets/grid_game_objects/tile_0214.png b/tiled/assets/grid_game_objects/tile_0214.png new file mode 100644 index 0000000..2abdcbf Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0214.png differ diff --git a/tiled/assets/grid_game_objects/tile_0215.png b/tiled/assets/grid_game_objects/tile_0215.png new file mode 100644 index 0000000..9816274 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0215.png differ diff --git a/tiled/assets/grid_game_objects/tile_0216.png b/tiled/assets/grid_game_objects/tile_0216.png new file mode 100644 index 0000000..ecd5a35 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0216.png differ diff --git a/tiled/assets/grid_game_objects/tile_0217.png b/tiled/assets/grid_game_objects/tile_0217.png new file mode 100644 index 0000000..2b90ad4 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0217.png differ diff --git a/tiled/assets/grid_game_objects/tile_0218.png b/tiled/assets/grid_game_objects/tile_0218.png new file mode 100644 index 0000000..f2c4a56 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0218.png differ diff --git a/tiled/assets/grid_game_objects/tile_0219.png b/tiled/assets/grid_game_objects/tile_0219.png new file mode 100644 index 0000000..40fe5b2 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0219.png differ diff --git a/tiled/assets/grid_game_objects/tile_0220.png b/tiled/assets/grid_game_objects/tile_0220.png new file mode 100644 index 0000000..2b8d733 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0220.png differ diff --git a/tiled/assets/grid_game_objects/tile_0221.png b/tiled/assets/grid_game_objects/tile_0221.png new file mode 100644 index 0000000..990d1db Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0221.png differ diff --git a/tiled/assets/grid_game_objects/tile_0222.png b/tiled/assets/grid_game_objects/tile_0222.png new file mode 100644 index 0000000..ff9a612 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0222.png differ diff --git a/tiled/assets/grid_game_objects/tile_0223.png b/tiled/assets/grid_game_objects/tile_0223.png new file mode 100644 index 0000000..da4e019 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0223.png differ diff --git a/tiled/assets/grid_game_objects/tile_0224.png b/tiled/assets/grid_game_objects/tile_0224.png new file mode 100644 index 0000000..67e0cab Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0224.png differ diff --git a/tiled/assets/grid_game_objects/tile_0225.png b/tiled/assets/grid_game_objects/tile_0225.png new file mode 100644 index 0000000..6d4976e Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0225.png differ diff --git a/tiled/assets/grid_game_objects/tile_0226.png b/tiled/assets/grid_game_objects/tile_0226.png new file mode 100644 index 0000000..c8da18a Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0226.png differ diff --git a/tiled/assets/grid_game_objects/tile_0227.png b/tiled/assets/grid_game_objects/tile_0227.png new file mode 100644 index 0000000..3582434 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0227.png differ diff --git a/tiled/assets/grid_game_objects/tile_0228.png b/tiled/assets/grid_game_objects/tile_0228.png new file mode 100644 index 0000000..e011485 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0228.png differ diff --git a/tiled/assets/grid_game_objects/tile_0229.png b/tiled/assets/grid_game_objects/tile_0229.png new file mode 100644 index 0000000..663bef2 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0229.png differ diff --git a/tiled/assets/grid_game_objects/tile_0230.png b/tiled/assets/grid_game_objects/tile_0230.png new file mode 100644 index 0000000..b5763c1 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0230.png differ diff --git a/tiled/assets/grid_game_objects/tile_0231.png b/tiled/assets/grid_game_objects/tile_0231.png new file mode 100644 index 0000000..4c55985 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0231.png differ diff --git a/tiled/assets/grid_game_objects/tile_0232.png b/tiled/assets/grid_game_objects/tile_0232.png new file mode 100644 index 0000000..3905d29 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0232.png differ diff --git a/tiled/assets/grid_game_objects/tile_0233.png b/tiled/assets/grid_game_objects/tile_0233.png new file mode 100644 index 0000000..f4f98f7 Binary files /dev/null and b/tiled/assets/grid_game_objects/tile_0233.png differ diff --git a/tiled/assets/hexgrid/r_tree_round.png b/tiled/assets/hexgrid/r_tree_round.png new file mode 100644 index 0000000..85bc743 Binary files /dev/null and b/tiled/assets/hexgrid/r_tree_round.png differ diff --git a/tiled/assets/hexgrid/r_tree_round_2.png b/tiled/assets/hexgrid/r_tree_round_2.png new file mode 100644 index 0000000..f02aefd Binary files /dev/null and b/tiled/assets/hexgrid/r_tree_round_2.png differ diff --git a/tiled/assets/hexgrid/tile_dirt.png b/tiled/assets/hexgrid/tile_dirt.png new file mode 100644 index 0000000..99e69bf Binary files /dev/null and b/tiled/assets/hexgrid/tile_dirt.png differ diff --git a/tiled/assets/hexgrid/tile_dirt_2.png b/tiled/assets/hexgrid/tile_dirt_2.png new file mode 100644 index 0000000..16d136d Binary files /dev/null and b/tiled/assets/hexgrid/tile_dirt_2.png differ diff --git a/tiled/assets/hexgrid/tile_dirt_3.png b/tiled/assets/hexgrid/tile_dirt_3.png new file mode 100644 index 0000000..ba06c8f Binary files /dev/null and b/tiled/assets/hexgrid/tile_dirt_3.png differ diff --git a/tiled/assets/hexgrid/tile_grass.png b/tiled/assets/hexgrid/tile_grass.png new file mode 100644 index 0000000..a58afbb Binary files /dev/null and b/tiled/assets/hexgrid/tile_grass.png differ diff --git a/tiled/assets/hexgrid/tile_grass_2.png b/tiled/assets/hexgrid/tile_grass_2.png new file mode 100644 index 0000000..235b42f Binary files /dev/null and b/tiled/assets/hexgrid/tile_grass_2.png differ diff --git a/tiled/assets/hexgrid/tile_grass_3.png b/tiled/assets/hexgrid/tile_grass_3.png new file mode 100644 index 0000000..5a7c76c Binary files /dev/null and b/tiled/assets/hexgrid/tile_grass_3.png differ diff --git a/tiled/assets/hexgrid/tile_sand.png b/tiled/assets/hexgrid/tile_sand.png new file mode 100644 index 0000000..82da166 Binary files /dev/null and b/tiled/assets/hexgrid/tile_sand.png differ diff --git a/tiled/assets/hexgrid/tile_sand_2.png b/tiled/assets/hexgrid/tile_sand_2.png new file mode 100644 index 0000000..56b68ca Binary files /dev/null and b/tiled/assets/hexgrid/tile_sand_2.png differ diff --git a/tiled/assets/hexgrid/tile_sand_3.png b/tiled/assets/hexgrid/tile_sand_3.png new file mode 100644 index 0000000..c042efb Binary files /dev/null and b/tiled/assets/hexgrid/tile_sand_3.png differ diff --git a/tiled/assets/hexgrid/tile_stone.png b/tiled/assets/hexgrid/tile_stone.png new file mode 100644 index 0000000..bc372b6 Binary files /dev/null and b/tiled/assets/hexgrid/tile_stone.png differ diff --git a/tiled/assets/hexgrid/tile_stone_2.png b/tiled/assets/hexgrid/tile_stone_2.png new file mode 100644 index 0000000..6f0599b Binary files /dev/null and b/tiled/assets/hexgrid/tile_stone_2.png differ diff --git a/tiled/assets/hexgrid/tile_stone_3.png b/tiled/assets/hexgrid/tile_stone_3.png new file mode 100644 index 0000000..e573470 Binary files /dev/null and b/tiled/assets/hexgrid/tile_stone_3.png differ diff --git a/tiled/assets/hexgrid_pointy/tileAutumn.png b/tiled/assets/hexgrid_pointy/tileAutumn.png new file mode 100644 index 0000000..943a277 Binary files /dev/null and b/tiled/assets/hexgrid_pointy/tileAutumn.png differ diff --git a/tiled/assets/hexgrid_pointy/tileAutumn_full.png b/tiled/assets/hexgrid_pointy/tileAutumn_full.png new file mode 100644 index 0000000..10e2ba6 Binary files /dev/null and b/tiled/assets/hexgrid_pointy/tileAutumn_full.png differ diff --git a/tiled/assets/hexgrid_pointy/tileDirt.png b/tiled/assets/hexgrid_pointy/tileDirt.png new file mode 100644 index 0000000..19842d9 Binary files /dev/null and b/tiled/assets/hexgrid_pointy/tileDirt.png differ diff --git a/tiled/assets/hexgrid_pointy/tileDirt_full.png b/tiled/assets/hexgrid_pointy/tileDirt_full.png new file mode 100644 index 0000000..e0f26b7 Binary files /dev/null and b/tiled/assets/hexgrid_pointy/tileDirt_full.png differ diff --git a/tiled/assets/hexgrid_pointy/tileGrass.png b/tiled/assets/hexgrid_pointy/tileGrass.png new file mode 100644 index 0000000..d4702aa Binary files /dev/null and b/tiled/assets/hexgrid_pointy/tileGrass.png differ diff --git a/tiled/assets/hexgrid_pointy/tileGrass_full.png b/tiled/assets/hexgrid_pointy/tileGrass_full.png new file mode 100644 index 0000000..28b288a Binary files /dev/null and b/tiled/assets/hexgrid_pointy/tileGrass_full.png differ diff --git a/tiled/assets/hexgrid_pointy/tileLava.png b/tiled/assets/hexgrid_pointy/tileLava.png new file mode 100644 index 0000000..8abe43d Binary files /dev/null and b/tiled/assets/hexgrid_pointy/tileLava.png differ diff --git a/tiled/assets/hexgrid_pointy/tileLava_full.png b/tiled/assets/hexgrid_pointy/tileLava_full.png new file mode 100644 index 0000000..6ca2359 Binary files /dev/null and b/tiled/assets/hexgrid_pointy/tileLava_full.png differ diff --git a/tiled/assets/hexgrid_pointy/tileMagic.png b/tiled/assets/hexgrid_pointy/tileMagic.png new file mode 100644 index 0000000..951e378 Binary files /dev/null and b/tiled/assets/hexgrid_pointy/tileMagic.png differ diff --git a/tiled/assets/hexgrid_pointy/tileMagic_full.png b/tiled/assets/hexgrid_pointy/tileMagic_full.png new file mode 100644 index 0000000..270fa73 Binary files /dev/null and b/tiled/assets/hexgrid_pointy/tileMagic_full.png differ diff --git a/tiled/assets/hexgrid_pointy/tileRock.png b/tiled/assets/hexgrid_pointy/tileRock.png new file mode 100644 index 0000000..aec1243 Binary files /dev/null and b/tiled/assets/hexgrid_pointy/tileRock.png differ diff --git a/tiled/assets/hexgrid_pointy/tileRock_full.png b/tiled/assets/hexgrid_pointy/tileRock_full.png new file mode 100644 index 0000000..7d117a8 Binary files /dev/null and b/tiled/assets/hexgrid_pointy/tileRock_full.png differ diff --git a/tiled/assets/hexgrid_pointy/tileSand.png b/tiled/assets/hexgrid_pointy/tileSand.png new file mode 100644 index 0000000..f65698e Binary files /dev/null and b/tiled/assets/hexgrid_pointy/tileSand.png differ diff --git a/tiled/assets/hexgrid_pointy/tileSand_full.png b/tiled/assets/hexgrid_pointy/tileSand_full.png new file mode 100644 index 0000000..fa979bc Binary files /dev/null and b/tiled/assets/hexgrid_pointy/tileSand_full.png differ diff --git a/tiled/assets/hexgrid_pointy/tileSnow.png b/tiled/assets/hexgrid_pointy/tileSnow.png new file mode 100644 index 0000000..dcde3cd Binary files /dev/null and b/tiled/assets/hexgrid_pointy/tileSnow.png differ diff --git a/tiled/assets/hexgrid_pointy/tileStone.png b/tiled/assets/hexgrid_pointy/tileStone.png new file mode 100644 index 0000000..87667c1 Binary files /dev/null and b/tiled/assets/hexgrid_pointy/tileStone.png differ diff --git a/tiled/assets/hexgrid_pointy/tileStone_full.png b/tiled/assets/hexgrid_pointy/tileStone_full.png new file mode 100644 index 0000000..a6b928a Binary files /dev/null and b/tiled/assets/hexgrid_pointy/tileStone_full.png differ diff --git a/tiled/assets/hexgrid_pointy/tileWater.png b/tiled/assets/hexgrid_pointy/tileWater.png new file mode 100644 index 0000000..ecdcece Binary files /dev/null and b/tiled/assets/hexgrid_pointy/tileWater.png differ diff --git a/tiled/assets/hexgrid_pointy/tileWater_full.png b/tiled/assets/hexgrid_pointy/tileWater_full.png new file mode 100644 index 0000000..5f74dbb Binary files /dev/null and b/tiled/assets/hexgrid_pointy/tileWater_full.png differ diff --git a/tiled/assets/hexgrid_pointy/tileWater_shadow.png b/tiled/assets/hexgrid_pointy/tileWater_shadow.png new file mode 100644 index 0000000..4a79e86 Binary files /dev/null and b/tiled/assets/hexgrid_pointy/tileWater_shadow.png differ diff --git a/tiled/assets/isogrid/beach.png b/tiled/assets/isogrid/beach.png new file mode 100644 index 0000000..c31e1ea Binary files /dev/null and b/tiled/assets/isogrid/beach.png differ diff --git a/tiled/assets/isogrid/beachCornerES.png b/tiled/assets/isogrid/beachCornerES.png new file mode 100644 index 0000000..d5fc4c0 Binary files /dev/null and b/tiled/assets/isogrid/beachCornerES.png differ diff --git a/tiled/assets/isogrid/beachCornerNE.png b/tiled/assets/isogrid/beachCornerNE.png new file mode 100644 index 0000000..ef171c0 Binary files /dev/null and b/tiled/assets/isogrid/beachCornerNE.png differ diff --git a/tiled/assets/isogrid/beachCornerNW.png b/tiled/assets/isogrid/beachCornerNW.png new file mode 100644 index 0000000..59d4f34 Binary files /dev/null and b/tiled/assets/isogrid/beachCornerNW.png differ diff --git a/tiled/assets/isogrid/beachCornerSW.png b/tiled/assets/isogrid/beachCornerSW.png new file mode 100644 index 0000000..db867cd Binary files /dev/null and b/tiled/assets/isogrid/beachCornerSW.png differ diff --git a/tiled/assets/isogrid/beachE.png b/tiled/assets/isogrid/beachE.png new file mode 100644 index 0000000..687e967 Binary files /dev/null and b/tiled/assets/isogrid/beachE.png differ diff --git a/tiled/assets/isogrid/beachES.png b/tiled/assets/isogrid/beachES.png new file mode 100644 index 0000000..3ca57c0 Binary files /dev/null and b/tiled/assets/isogrid/beachES.png differ diff --git a/tiled/assets/isogrid/beachN.png b/tiled/assets/isogrid/beachN.png new file mode 100644 index 0000000..708a3ba Binary files /dev/null and b/tiled/assets/isogrid/beachN.png differ diff --git a/tiled/assets/isogrid/beachNE.png b/tiled/assets/isogrid/beachNE.png new file mode 100644 index 0000000..aae191a Binary files /dev/null and b/tiled/assets/isogrid/beachNE.png differ diff --git a/tiled/assets/isogrid/beachNW.png b/tiled/assets/isogrid/beachNW.png new file mode 100644 index 0000000..dda3e67 Binary files /dev/null and b/tiled/assets/isogrid/beachNW.png differ diff --git a/tiled/assets/isogrid/beachS.png b/tiled/assets/isogrid/beachS.png new file mode 100644 index 0000000..9e8f3b5 Binary files /dev/null and b/tiled/assets/isogrid/beachS.png differ diff --git a/tiled/assets/isogrid/beachSW.png b/tiled/assets/isogrid/beachSW.png new file mode 100644 index 0000000..dd0a23f Binary files /dev/null and b/tiled/assets/isogrid/beachSW.png differ diff --git a/tiled/assets/isogrid/beachW.png b/tiled/assets/isogrid/beachW.png new file mode 100644 index 0000000..18c836c Binary files /dev/null and b/tiled/assets/isogrid/beachW.png differ diff --git a/tiled/assets/isogrid/bridgeEW.png b/tiled/assets/isogrid/bridgeEW.png new file mode 100644 index 0000000..59c0f44 Binary files /dev/null and b/tiled/assets/isogrid/bridgeEW.png differ diff --git a/tiled/assets/isogrid/bridgeNS.png b/tiled/assets/isogrid/bridgeNS.png new file mode 100644 index 0000000..5aabefa Binary files /dev/null and b/tiled/assets/isogrid/bridgeNS.png differ diff --git a/tiled/assets/isogrid/crossroad.png b/tiled/assets/isogrid/crossroad.png new file mode 100644 index 0000000..7245855 Binary files /dev/null and b/tiled/assets/isogrid/crossroad.png differ diff --git a/tiled/assets/isogrid/crossroadESW.png b/tiled/assets/isogrid/crossroadESW.png new file mode 100644 index 0000000..bc52900 Binary files /dev/null and b/tiled/assets/isogrid/crossroadESW.png differ diff --git a/tiled/assets/isogrid/crossroadNES.png b/tiled/assets/isogrid/crossroadNES.png new file mode 100644 index 0000000..997a415 Binary files /dev/null and b/tiled/assets/isogrid/crossroadNES.png differ diff --git a/tiled/assets/isogrid/crossroadNEW.png b/tiled/assets/isogrid/crossroadNEW.png new file mode 100644 index 0000000..6b2b494 Binary files /dev/null and b/tiled/assets/isogrid/crossroadNEW.png differ diff --git a/tiled/assets/isogrid/crossroadNSW.png b/tiled/assets/isogrid/crossroadNSW.png new file mode 100644 index 0000000..d41abce Binary files /dev/null and b/tiled/assets/isogrid/crossroadNSW.png differ diff --git a/tiled/assets/isogrid/dirt.png b/tiled/assets/isogrid/dirt.png new file mode 100644 index 0000000..0290c5c Binary files /dev/null and b/tiled/assets/isogrid/dirt.png differ diff --git a/tiled/assets/isogrid/dirtDouble.png b/tiled/assets/isogrid/dirtDouble.png new file mode 100644 index 0000000..66d09eb Binary files /dev/null and b/tiled/assets/isogrid/dirtDouble.png differ diff --git a/tiled/assets/isogrid/endE.png b/tiled/assets/isogrid/endE.png new file mode 100644 index 0000000..6854edb Binary files /dev/null and b/tiled/assets/isogrid/endE.png differ diff --git a/tiled/assets/isogrid/endN.png b/tiled/assets/isogrid/endN.png new file mode 100644 index 0000000..312959e Binary files /dev/null and b/tiled/assets/isogrid/endN.png differ diff --git a/tiled/assets/isogrid/endS.png b/tiled/assets/isogrid/endS.png new file mode 100644 index 0000000..aa0f831 Binary files /dev/null and b/tiled/assets/isogrid/endS.png differ diff --git a/tiled/assets/isogrid/endW.png b/tiled/assets/isogrid/endW.png new file mode 100644 index 0000000..bffd469 Binary files /dev/null and b/tiled/assets/isogrid/endW.png differ diff --git a/tiled/assets/isogrid/exitE.png b/tiled/assets/isogrid/exitE.png new file mode 100644 index 0000000..5b3053d Binary files /dev/null and b/tiled/assets/isogrid/exitE.png differ diff --git a/tiled/assets/isogrid/exitN.png b/tiled/assets/isogrid/exitN.png new file mode 100644 index 0000000..f1c8f48 Binary files /dev/null and b/tiled/assets/isogrid/exitN.png differ diff --git a/tiled/assets/isogrid/exitS.png b/tiled/assets/isogrid/exitS.png new file mode 100644 index 0000000..6676593 Binary files /dev/null and b/tiled/assets/isogrid/exitS.png differ diff --git a/tiled/assets/isogrid/exitW.png b/tiled/assets/isogrid/exitW.png new file mode 100644 index 0000000..3107c3a Binary files /dev/null and b/tiled/assets/isogrid/exitW.png differ diff --git a/tiled/assets/isogrid/grass.png b/tiled/assets/isogrid/grass.png new file mode 100644 index 0000000..41c34d1 Binary files /dev/null and b/tiled/assets/isogrid/grass.png differ diff --git a/tiled/assets/isogrid/grassWhole.png b/tiled/assets/isogrid/grassWhole.png new file mode 100644 index 0000000..eca8190 Binary files /dev/null and b/tiled/assets/isogrid/grassWhole.png differ diff --git a/tiled/assets/isogrid/hillE.png b/tiled/assets/isogrid/hillE.png new file mode 100644 index 0000000..649bb31 Binary files /dev/null and b/tiled/assets/isogrid/hillE.png differ diff --git a/tiled/assets/isogrid/hillES.png b/tiled/assets/isogrid/hillES.png new file mode 100644 index 0000000..8ce631c Binary files /dev/null and b/tiled/assets/isogrid/hillES.png differ diff --git a/tiled/assets/isogrid/hillN.png b/tiled/assets/isogrid/hillN.png new file mode 100644 index 0000000..72cdb99 Binary files /dev/null and b/tiled/assets/isogrid/hillN.png differ diff --git a/tiled/assets/isogrid/hillNE.png b/tiled/assets/isogrid/hillNE.png new file mode 100644 index 0000000..b5bf6be Binary files /dev/null and b/tiled/assets/isogrid/hillNE.png differ diff --git a/tiled/assets/isogrid/hillNW.png b/tiled/assets/isogrid/hillNW.png new file mode 100644 index 0000000..1958ae6 Binary files /dev/null and b/tiled/assets/isogrid/hillNW.png differ diff --git a/tiled/assets/isogrid/hillS.png b/tiled/assets/isogrid/hillS.png new file mode 100644 index 0000000..99e8e4a Binary files /dev/null and b/tiled/assets/isogrid/hillS.png differ diff --git a/tiled/assets/isogrid/hillSW.png b/tiled/assets/isogrid/hillSW.png new file mode 100644 index 0000000..32acf02 Binary files /dev/null and b/tiled/assets/isogrid/hillSW.png differ diff --git a/tiled/assets/isogrid/hillW.png b/tiled/assets/isogrid/hillW.png new file mode 100644 index 0000000..8ec1d2a Binary files /dev/null and b/tiled/assets/isogrid/hillW.png differ diff --git a/tiled/assets/isogrid/lotE.png b/tiled/assets/isogrid/lotE.png new file mode 100644 index 0000000..6c14d94 Binary files /dev/null and b/tiled/assets/isogrid/lotE.png differ diff --git a/tiled/assets/isogrid/lotES.png b/tiled/assets/isogrid/lotES.png new file mode 100644 index 0000000..417a700 Binary files /dev/null and b/tiled/assets/isogrid/lotES.png differ diff --git a/tiled/assets/isogrid/lotN.png b/tiled/assets/isogrid/lotN.png new file mode 100644 index 0000000..cfd21c6 Binary files /dev/null and b/tiled/assets/isogrid/lotN.png differ diff --git a/tiled/assets/isogrid/lotNE.png b/tiled/assets/isogrid/lotNE.png new file mode 100644 index 0000000..c21ae13 Binary files /dev/null and b/tiled/assets/isogrid/lotNE.png differ diff --git a/tiled/assets/isogrid/lotNW.png b/tiled/assets/isogrid/lotNW.png new file mode 100644 index 0000000..e6fd111 Binary files /dev/null and b/tiled/assets/isogrid/lotNW.png differ diff --git a/tiled/assets/isogrid/lotS.png b/tiled/assets/isogrid/lotS.png new file mode 100644 index 0000000..6c01a66 Binary files /dev/null and b/tiled/assets/isogrid/lotS.png differ diff --git a/tiled/assets/isogrid/lotSW.png b/tiled/assets/isogrid/lotSW.png new file mode 100644 index 0000000..6a8f314 Binary files /dev/null and b/tiled/assets/isogrid/lotSW.png differ diff --git a/tiled/assets/isogrid/lotW.png b/tiled/assets/isogrid/lotW.png new file mode 100644 index 0000000..8744f0d Binary files /dev/null and b/tiled/assets/isogrid/lotW.png differ diff --git a/tiled/assets/isogrid/riverBankedES.png b/tiled/assets/isogrid/riverBankedES.png new file mode 100644 index 0000000..57a98e4 Binary files /dev/null and b/tiled/assets/isogrid/riverBankedES.png differ diff --git a/tiled/assets/isogrid/riverBankedEW.png b/tiled/assets/isogrid/riverBankedEW.png new file mode 100644 index 0000000..6edfccc Binary files /dev/null and b/tiled/assets/isogrid/riverBankedEW.png differ diff --git a/tiled/assets/isogrid/riverBankedNE.png b/tiled/assets/isogrid/riverBankedNE.png new file mode 100644 index 0000000..d1e42c0 Binary files /dev/null and b/tiled/assets/isogrid/riverBankedNE.png differ diff --git a/tiled/assets/isogrid/riverBankedNS.png b/tiled/assets/isogrid/riverBankedNS.png new file mode 100644 index 0000000..1121147 Binary files /dev/null and b/tiled/assets/isogrid/riverBankedNS.png differ diff --git a/tiled/assets/isogrid/riverBankedNW.png b/tiled/assets/isogrid/riverBankedNW.png new file mode 100644 index 0000000..a44e305 Binary files /dev/null and b/tiled/assets/isogrid/riverBankedNW.png differ diff --git a/tiled/assets/isogrid/riverBankedSW.png b/tiled/assets/isogrid/riverBankedSW.png new file mode 100644 index 0000000..e0dd263 Binary files /dev/null and b/tiled/assets/isogrid/riverBankedSW.png differ diff --git a/tiled/assets/isogrid/riverES.png b/tiled/assets/isogrid/riverES.png new file mode 100644 index 0000000..ce66497 Binary files /dev/null and b/tiled/assets/isogrid/riverES.png differ diff --git a/tiled/assets/isogrid/riverEW.png b/tiled/assets/isogrid/riverEW.png new file mode 100644 index 0000000..7e29200 Binary files /dev/null and b/tiled/assets/isogrid/riverEW.png differ diff --git a/tiled/assets/isogrid/riverNE.png b/tiled/assets/isogrid/riverNE.png new file mode 100644 index 0000000..957aa44 Binary files /dev/null and b/tiled/assets/isogrid/riverNE.png differ diff --git a/tiled/assets/isogrid/riverNS.png b/tiled/assets/isogrid/riverNS.png new file mode 100644 index 0000000..f970bbf Binary files /dev/null and b/tiled/assets/isogrid/riverNS.png differ diff --git a/tiled/assets/isogrid/riverNW.png b/tiled/assets/isogrid/riverNW.png new file mode 100644 index 0000000..30b26ab Binary files /dev/null and b/tiled/assets/isogrid/riverNW.png differ diff --git a/tiled/assets/isogrid/riverSW.png b/tiled/assets/isogrid/riverSW.png new file mode 100644 index 0000000..e7ebeb6 Binary files /dev/null and b/tiled/assets/isogrid/riverSW.png differ diff --git a/tiled/assets/isogrid/road.png b/tiled/assets/isogrid/road.png new file mode 100644 index 0000000..e6666ab Binary files /dev/null and b/tiled/assets/isogrid/road.png differ diff --git a/tiled/assets/isogrid/roadES.png b/tiled/assets/isogrid/roadES.png new file mode 100644 index 0000000..598e624 Binary files /dev/null and b/tiled/assets/isogrid/roadES.png differ diff --git a/tiled/assets/isogrid/roadEW.png b/tiled/assets/isogrid/roadEW.png new file mode 100644 index 0000000..9ec9351 Binary files /dev/null and b/tiled/assets/isogrid/roadEW.png differ diff --git a/tiled/assets/isogrid/roadHill2E.png b/tiled/assets/isogrid/roadHill2E.png new file mode 100644 index 0000000..c2ff4cb Binary files /dev/null and b/tiled/assets/isogrid/roadHill2E.png differ diff --git a/tiled/assets/isogrid/roadHill2N.png b/tiled/assets/isogrid/roadHill2N.png new file mode 100644 index 0000000..78b171e Binary files /dev/null and b/tiled/assets/isogrid/roadHill2N.png differ diff --git a/tiled/assets/isogrid/roadHill2S.png b/tiled/assets/isogrid/roadHill2S.png new file mode 100644 index 0000000..ca34126 Binary files /dev/null and b/tiled/assets/isogrid/roadHill2S.png differ diff --git a/tiled/assets/isogrid/roadHill2W.png b/tiled/assets/isogrid/roadHill2W.png new file mode 100644 index 0000000..6c29b2a Binary files /dev/null and b/tiled/assets/isogrid/roadHill2W.png differ diff --git a/tiled/assets/isogrid/roadHillE.png b/tiled/assets/isogrid/roadHillE.png new file mode 100644 index 0000000..c6808e8 Binary files /dev/null and b/tiled/assets/isogrid/roadHillE.png differ diff --git a/tiled/assets/isogrid/roadHillN.png b/tiled/assets/isogrid/roadHillN.png new file mode 100644 index 0000000..ac597c6 Binary files /dev/null and b/tiled/assets/isogrid/roadHillN.png differ diff --git a/tiled/assets/isogrid/roadHillS.png b/tiled/assets/isogrid/roadHillS.png new file mode 100644 index 0000000..30cf306 Binary files /dev/null and b/tiled/assets/isogrid/roadHillS.png differ diff --git a/tiled/assets/isogrid/roadHillW.png b/tiled/assets/isogrid/roadHillW.png new file mode 100644 index 0000000..9185bf3 Binary files /dev/null and b/tiled/assets/isogrid/roadHillW.png differ diff --git a/tiled/assets/isogrid/roadNE.png b/tiled/assets/isogrid/roadNE.png new file mode 100644 index 0000000..3607a53 Binary files /dev/null and b/tiled/assets/isogrid/roadNE.png differ diff --git a/tiled/assets/isogrid/roadNS.png b/tiled/assets/isogrid/roadNS.png new file mode 100644 index 0000000..f507e68 Binary files /dev/null and b/tiled/assets/isogrid/roadNS.png differ diff --git a/tiled/assets/isogrid/roadNW.png b/tiled/assets/isogrid/roadNW.png new file mode 100644 index 0000000..086ae18 Binary files /dev/null and b/tiled/assets/isogrid/roadNW.png differ diff --git a/tiled/assets/isogrid/roadSW.png b/tiled/assets/isogrid/roadSW.png new file mode 100644 index 0000000..ec2ac45 Binary files /dev/null and b/tiled/assets/isogrid/roadSW.png differ diff --git a/tiled/assets/isogrid/water.png b/tiled/assets/isogrid/water.png new file mode 100644 index 0000000..1851767 Binary files /dev/null and b/tiled/assets/isogrid/water.png differ diff --git a/tiled/assets/isogrid/waterCornerES.png b/tiled/assets/isogrid/waterCornerES.png new file mode 100644 index 0000000..d0f444d Binary files /dev/null and b/tiled/assets/isogrid/waterCornerES.png differ diff --git a/tiled/assets/isogrid/waterCornerNE.png b/tiled/assets/isogrid/waterCornerNE.png new file mode 100644 index 0000000..92b1508 Binary files /dev/null and b/tiled/assets/isogrid/waterCornerNE.png differ diff --git a/tiled/assets/isogrid/waterCornerNW.png b/tiled/assets/isogrid/waterCornerNW.png new file mode 100644 index 0000000..03fc00d Binary files /dev/null and b/tiled/assets/isogrid/waterCornerNW.png differ diff --git a/tiled/assets/isogrid/waterCornerSW.png b/tiled/assets/isogrid/waterCornerSW.png new file mode 100644 index 0000000..763108c Binary files /dev/null and b/tiled/assets/isogrid/waterCornerSW.png differ diff --git a/tiled/assets/isogrid/waterE.png b/tiled/assets/isogrid/waterE.png new file mode 100644 index 0000000..ec06d2f Binary files /dev/null and b/tiled/assets/isogrid/waterE.png differ diff --git a/tiled/assets/isogrid/waterES.png b/tiled/assets/isogrid/waterES.png new file mode 100644 index 0000000..973f513 Binary files /dev/null and b/tiled/assets/isogrid/waterES.png differ diff --git a/tiled/assets/isogrid/waterN.png b/tiled/assets/isogrid/waterN.png new file mode 100644 index 0000000..808f5d9 Binary files /dev/null and b/tiled/assets/isogrid/waterN.png differ diff --git a/tiled/assets/isogrid/waterNE.png b/tiled/assets/isogrid/waterNE.png new file mode 100644 index 0000000..3c107ca Binary files /dev/null and b/tiled/assets/isogrid/waterNE.png differ diff --git a/tiled/assets/isogrid/waterNW.png b/tiled/assets/isogrid/waterNW.png new file mode 100644 index 0000000..3696a7c Binary files /dev/null and b/tiled/assets/isogrid/waterNW.png differ diff --git a/tiled/assets/isogrid/waterS.png b/tiled/assets/isogrid/waterS.png new file mode 100644 index 0000000..9afcaa8 Binary files /dev/null and b/tiled/assets/isogrid/waterS.png differ diff --git a/tiled/assets/isogrid/waterSW.png b/tiled/assets/isogrid/waterSW.png new file mode 100644 index 0000000..571fb4b Binary files /dev/null and b/tiled/assets/isogrid/waterSW.png differ diff --git a/tiled/assets/isogrid/waterW.png b/tiled/assets/isogrid/waterW.png new file mode 100644 index 0000000..5f44ff1 Binary files /dev/null and b/tiled/assets/isogrid/waterW.png differ diff --git a/tiled/detiled.tiled-project b/tiled/detiled.tiled-project new file mode 100644 index 0000000..d0eb592 --- /dev/null +++ b/tiled/detiled.tiled-project @@ -0,0 +1,14 @@ +{ + "automappingRulesFile": "", + "commands": [ + ], + "compatibilityVersion": 1100, + "extensionsPath": "extensions", + "folders": [ + "." + ], + "properties": [ + ], + "propertyTypes": [ + ] +} diff --git a/tiled/export/grid-grid_items.tilemap b/tiled/export/grid-grid_items.tilemap new file mode 100644 index 0000000..be54730 --- /dev/null +++ b/tiled/export/grid-grid_items.tilemap @@ -0,0 +1,31 @@ +tile_set: "/example/assets/grid/grid_ignore_export.tilesource" +layers { + id: "tile_items" + z: 2.0E-4 + cell { + x: 16 + y: 3 + tile: 11 + } + cell { + x: 18 + y: 5 + tile: 9 + } + cell { + x: 4 + y: 6 + tile: 10 + } + cell { + x: 13 + y: 14 + tile: 9 + } + cell { + x: 22 + y: 14 + tile: 9 + } +} +material: "/builtins/materials/tile_map.material" diff --git a/tiled/export/grid-grid_tileset.tilemap b/tiled/export/grid-grid_tileset.tilemap new file mode 100644 index 0000000..5398ff5 --- /dev/null +++ b/tiled/export/grid-grid_tileset.tilemap @@ -0,0 +1,3395 @@ +tile_set: "/example/assets/grid/grid_tileset.tilesource" +layers { + id: "back" + z: 0.0 + cell { + x: 0 + y: 0 + tile: 64 + } + cell { + x: 1 + y: 0 + tile: 64 + } + cell { + x: 2 + y: 0 + tile: 64 + } + cell { + x: 3 + y: 0 + tile: 65 + } + cell { + x: 4 + y: 0 + tile: 65 + } + cell { + x: 5 + y: 0 + tile: 64 + } + cell { + x: 6 + y: 0 + tile: 65 + } + cell { + x: 7 + y: 0 + tile: 65 + } + cell { + x: 8 + y: 0 + tile: 64 + } + cell { + x: 9 + y: 0 + tile: 65 + } + cell { + x: 10 + y: 0 + tile: 65 + } + cell { + x: 11 + y: 0 + tile: 65 + } + cell { + x: 12 + y: 0 + tile: 65 + } + cell { + x: 13 + y: 0 + tile: 65 + } + cell { + x: 14 + y: 0 + tile: 64 + } + cell { + x: 15 + y: 0 + tile: 65 + } + cell { + x: 16 + y: 0 + tile: 64 + } + cell { + x: 17 + y: 0 + tile: 65 + } + cell { + x: 18 + y: 0 + tile: 64 + } + cell { + x: 19 + y: 0 + tile: 65 + } + cell { + x: 20 + y: 0 + tile: 65 + } + cell { + x: 21 + y: 0 + tile: 64 + } + cell { + x: 22 + y: 0 + tile: 64 + } + cell { + x: 23 + y: 0 + tile: 65 + } + cell { + x: 24 + y: 0 + tile: 64 + } + cell { + x: 25 + y: 0 + tile: 64 + } + cell { + x: 26 + y: 0 + tile: 65 + } + cell { + x: 27 + y: 0 + tile: 64 + } + cell { + x: 28 + y: 0 + tile: 65 + } + cell { + x: 29 + y: 0 + tile: 65 + } + cell { + x: 0 + y: 1 + tile: 65 + } + cell { + x: 1 + y: 1 + tile: 65 + } + cell { + x: 2 + y: 1 + tile: 64 + } + cell { + x: 3 + y: 1 + tile: 64 + } + cell { + x: 4 + y: 1 + tile: 64 + } + cell { + x: 5 + y: 1 + tile: 64 + } + cell { + x: 6 + y: 1 + tile: 64 + } + cell { + x: 7 + y: 1 + tile: 64 + } + cell { + x: 8 + y: 1 + tile: 64 + } + cell { + x: 9 + y: 1 + tile: 64 + } + cell { + x: 10 + y: 1 + tile: 64 + } + cell { + x: 11 + y: 1 + tile: 64 + } + cell { + x: 12 + y: 1 + tile: 64 + } + cell { + x: 13 + y: 1 + tile: 64 + } + cell { + x: 14 + y: 1 + tile: 64 + } + cell { + x: 15 + y: 1 + tile: 64 + } + cell { + x: 16 + y: 1 + tile: 65 + } + cell { + x: 17 + y: 1 + tile: 65 + } + cell { + x: 18 + y: 1 + tile: 64 + } + cell { + x: 19 + y: 1 + tile: 65 + } + cell { + x: 20 + y: 1 + tile: 64 + } + cell { + x: 21 + y: 1 + tile: 65 + } + cell { + x: 22 + y: 1 + tile: 65 + } + cell { + x: 23 + y: 1 + tile: 65 + } + cell { + x: 24 + y: 1 + tile: 65 + } + cell { + x: 25 + y: 1 + tile: 64 + } + cell { + x: 26 + y: 1 + tile: 64 + } + cell { + x: 27 + y: 1 + tile: 65 + } + cell { + x: 28 + y: 1 + tile: 65 + } + cell { + x: 29 + y: 1 + tile: 65 + } + cell { + x: 0 + y: 2 + tile: 65 + } + cell { + x: 1 + y: 2 + tile: 65 + } + cell { + x: 2 + y: 2 + tile: 64 + } + cell { + x: 3 + y: 2 + tile: 64 + } + cell { + x: 4 + y: 2 + tile: 64 + } + cell { + x: 5 + y: 2 + tile: 64 + } + cell { + x: 6 + y: 2 + tile: 64 + } + cell { + x: 7 + y: 2 + tile: 65 + } + cell { + x: 8 + y: 2 + tile: 64 + } + cell { + x: 9 + y: 2 + tile: 64 + } + cell { + x: 10 + y: 2 + tile: 64 + } + cell { + x: 11 + y: 2 + tile: 64 + } + cell { + x: 12 + y: 2 + tile: 65 + } + cell { + x: 13 + y: 2 + tile: 65 + } + cell { + x: 14 + y: 2 + tile: 64 + } + cell { + x: 15 + y: 2 + tile: 65 + } + cell { + x: 16 + y: 2 + tile: 65 + } + cell { + x: 17 + y: 2 + tile: 64 + } + cell { + x: 18 + y: 2 + tile: 65 + } + cell { + x: 19 + y: 2 + tile: 64 + } + cell { + x: 20 + y: 2 + tile: 64 + } + cell { + x: 21 + y: 2 + tile: 64 + } + cell { + x: 22 + y: 2 + tile: 64 + } + cell { + x: 23 + y: 2 + tile: 64 + } + cell { + x: 24 + y: 2 + tile: 64 + } + cell { + x: 25 + y: 2 + tile: 65 + } + cell { + x: 26 + y: 2 + tile: 65 + } + cell { + x: 27 + y: 2 + tile: 65 + } + cell { + x: 28 + y: 2 + tile: 65 + } + cell { + x: 29 + y: 2 + tile: 64 + } + cell { + x: 0 + y: 3 + tile: 64 + } + cell { + x: 1 + y: 3 + tile: 64 + } + cell { + x: 2 + y: 3 + tile: 65 + } + cell { + x: 3 + y: 3 + tile: 65 + } + cell { + x: 4 + y: 3 + tile: 65 + } + cell { + x: 5 + y: 3 + tile: 65 + } + cell { + x: 6 + y: 3 + tile: 64 + } + cell { + x: 7 + y: 3 + tile: 65 + } + cell { + x: 8 + y: 3 + tile: 65 + } + cell { + x: 9 + y: 3 + tile: 65 + } + cell { + x: 10 + y: 3 + tile: 65 + } + cell { + x: 11 + y: 3 + tile: 65 + } + cell { + x: 12 + y: 3 + tile: 65 + } + cell { + x: 13 + y: 3 + tile: 65 + } + cell { + x: 14 + y: 3 + tile: 65 + } + cell { + x: 15 + y: 3 + tile: 64 + } + cell { + x: 16 + y: 3 + tile: 65 + } + cell { + x: 17 + y: 3 + tile: 65 + } + cell { + x: 18 + y: 3 + tile: 64 + } + cell { + x: 19 + y: 3 + tile: 65 + } + cell { + x: 20 + y: 3 + tile: 65 + } + cell { + x: 21 + y: 3 + tile: 64 + } + cell { + x: 22 + y: 3 + tile: 64 + } + cell { + x: 23 + y: 3 + tile: 64 + } + cell { + x: 24 + y: 3 + tile: 64 + } + cell { + x: 25 + y: 3 + tile: 64 + } + cell { + x: 26 + y: 3 + tile: 65 + } + cell { + x: 27 + y: 3 + tile: 64 + } + cell { + x: 28 + y: 3 + tile: 65 + } + cell { + x: 29 + y: 3 + tile: 64 + } + cell { + x: 0 + y: 4 + tile: 64 + } + cell { + x: 1 + y: 4 + tile: 64 + } + cell { + x: 2 + y: 4 + tile: 65 + } + cell { + x: 3 + y: 4 + tile: 65 + } + cell { + x: 4 + y: 4 + tile: 65 + } + cell { + x: 5 + y: 4 + tile: 64 + } + cell { + x: 6 + y: 4 + tile: 64 + } + cell { + x: 7 + y: 4 + tile: 64 + } + cell { + x: 8 + y: 4 + tile: 64 + } + cell { + x: 9 + y: 4 + tile: 65 + } + cell { + x: 10 + y: 4 + tile: 65 + } + cell { + x: 11 + y: 4 + tile: 65 + } + cell { + x: 12 + y: 4 + tile: 65 + } + cell { + x: 13 + y: 4 + tile: 64 + } + cell { + x: 14 + y: 4 + tile: 64 + } + cell { + x: 15 + y: 4 + tile: 64 + } + cell { + x: 16 + y: 4 + tile: 64 + } + cell { + x: 17 + y: 4 + tile: 65 + } + cell { + x: 18 + y: 4 + tile: 65 + } + cell { + x: 19 + y: 4 + tile: 64 + } + cell { + x: 20 + y: 4 + tile: 65 + } + cell { + x: 21 + y: 4 + tile: 64 + } + cell { + x: 22 + y: 4 + tile: 65 + } + cell { + x: 23 + y: 4 + tile: 65 + } + cell { + x: 24 + y: 4 + tile: 64 + } + cell { + x: 25 + y: 4 + tile: 65 + } + cell { + x: 26 + y: 4 + tile: 64 + } + cell { + x: 27 + y: 4 + tile: 64 + } + cell { + x: 28 + y: 4 + tile: 65 + } + cell { + x: 29 + y: 4 + tile: 65 + } + cell { + x: 0 + y: 5 + tile: 64 + } + cell { + x: 1 + y: 5 + tile: 64 + } + cell { + x: 2 + y: 5 + tile: 65 + } + cell { + x: 3 + y: 5 + tile: 64 + } + cell { + x: 4 + y: 5 + tile: 64 + } + cell { + x: 5 + y: 5 + tile: 65 + } + cell { + x: 6 + y: 5 + tile: 65 + } + cell { + x: 7 + y: 5 + tile: 64 + } + cell { + x: 8 + y: 5 + tile: 64 + } + cell { + x: 9 + y: 5 + tile: 65 + } + cell { + x: 10 + y: 5 + tile: 64 + } + cell { + x: 11 + y: 5 + tile: 65 + } + cell { + x: 12 + y: 5 + tile: 64 + } + cell { + x: 13 + y: 5 + tile: 64 + } + cell { + x: 14 + y: 5 + tile: 64 + } + cell { + x: 15 + y: 5 + tile: 65 + } + cell { + x: 16 + y: 5 + tile: 64 + } + cell { + x: 17 + y: 5 + tile: 65 + } + cell { + x: 18 + y: 5 + tile: 64 + } + cell { + x: 19 + y: 5 + tile: 65 + } + cell { + x: 20 + y: 5 + tile: 64 + } + cell { + x: 21 + y: 5 + tile: 64 + } + cell { + x: 22 + y: 5 + tile: 65 + } + cell { + x: 23 + y: 5 + tile: 65 + } + cell { + x: 24 + y: 5 + tile: 65 + } + cell { + x: 25 + y: 5 + tile: 64 + } + cell { + x: 26 + y: 5 + tile: 65 + } + cell { + x: 27 + y: 5 + tile: 64 + } + cell { + x: 28 + y: 5 + tile: 64 + } + cell { + x: 29 + y: 5 + tile: 65 + } + cell { + x: 0 + y: 6 + tile: 65 + } + cell { + x: 1 + y: 6 + tile: 65 + } + cell { + x: 2 + y: 6 + tile: 65 + } + cell { + x: 3 + y: 6 + tile: 64 + } + cell { + x: 4 + y: 6 + tile: 64 + } + cell { + x: 5 + y: 6 + tile: 64 + } + cell { + x: 6 + y: 6 + tile: 65 + } + cell { + x: 7 + y: 6 + tile: 65 + } + cell { + x: 8 + y: 6 + tile: 65 + } + cell { + x: 9 + y: 6 + tile: 64 + } + cell { + x: 10 + y: 6 + tile: 65 + } + cell { + x: 11 + y: 6 + tile: 65 + } + cell { + x: 12 + y: 6 + tile: 64 + } + cell { + x: 13 + y: 6 + tile: 64 + } + cell { + x: 14 + y: 6 + tile: 65 + } + cell { + x: 15 + y: 6 + tile: 64 + } + cell { + x: 16 + y: 6 + tile: 65 + } + cell { + x: 17 + y: 6 + tile: 65 + } + cell { + x: 18 + y: 6 + tile: 65 + } + cell { + x: 19 + y: 6 + tile: 65 + } + cell { + x: 20 + y: 6 + tile: 64 + } + cell { + x: 21 + y: 6 + tile: 64 + } + cell { + x: 22 + y: 6 + tile: 65 + } + cell { + x: 23 + y: 6 + tile: 64 + } + cell { + x: 24 + y: 6 + tile: 64 + } + cell { + x: 25 + y: 6 + tile: 65 + } + cell { + x: 26 + y: 6 + tile: 65 + } + cell { + x: 27 + y: 6 + tile: 64 + } + cell { + x: 28 + y: 6 + tile: 65 + } + cell { + x: 29 + y: 6 + tile: 64 + } + cell { + x: 0 + y: 7 + tile: 65 + } + cell { + x: 1 + y: 7 + tile: 64 + } + cell { + x: 2 + y: 7 + tile: 65 + } + cell { + x: 3 + y: 7 + tile: 64 + } + cell { + x: 4 + y: 7 + tile: 64 + } + cell { + x: 5 + y: 7 + tile: 65 + } + cell { + x: 6 + y: 7 + tile: 64 + } + cell { + x: 7 + y: 7 + tile: 64 + } + cell { + x: 8 + y: 7 + tile: 65 + } + cell { + x: 9 + y: 7 + tile: 65 + } + cell { + x: 10 + y: 7 + tile: 64 + } + cell { + x: 11 + y: 7 + tile: 64 + } + cell { + x: 12 + y: 7 + tile: 65 + } + cell { + x: 13 + y: 7 + tile: 65 + } + cell { + x: 14 + y: 7 + tile: 64 + } + cell { + x: 15 + y: 7 + tile: 64 + } + cell { + x: 16 + y: 7 + tile: 65 + } + cell { + x: 17 + y: 7 + tile: 64 + } + cell { + x: 18 + y: 7 + tile: 64 + } + cell { + x: 19 + y: 7 + tile: 65 + } + cell { + x: 20 + y: 7 + tile: 65 + } + cell { + x: 21 + y: 7 + tile: 64 + } + cell { + x: 22 + y: 7 + tile: 64 + } + cell { + x: 23 + y: 7 + tile: 64 + } + cell { + x: 24 + y: 7 + tile: 65 + } + cell { + x: 25 + y: 7 + tile: 64 + } + cell { + x: 26 + y: 7 + tile: 64 + } + cell { + x: 27 + y: 7 + tile: 64 + } + cell { + x: 28 + y: 7 + tile: 65 + } + cell { + x: 29 + y: 7 + tile: 64 + } + cell { + x: 0 + y: 8 + tile: 65 + } + cell { + x: 1 + y: 8 + tile: 65 + } + cell { + x: 2 + y: 8 + tile: 65 + } + cell { + x: 3 + y: 8 + tile: 64 + } + cell { + x: 4 + y: 8 + tile: 64 + } + cell { + x: 5 + y: 8 + tile: 64 + } + cell { + x: 6 + y: 8 + tile: 126 + } + cell { + x: 7 + y: 8 + tile: 127 + } + cell { + x: 8 + y: 8 + tile: 128 + } + cell { + x: 9 + y: 8 + tile: 131 + } + cell { + x: 10 + y: 8 + tile: 132 + } + cell { + x: 11 + y: 8 + tile: 133 + } + cell { + x: 12 + y: 8 + tile: 64 + } + cell { + x: 13 + y: 8 + tile: 64 + } + cell { + x: 14 + y: 8 + tile: 64 + } + cell { + x: 15 + y: 8 + tile: 65 + } + cell { + x: 16 + y: 8 + tile: 65 + } + cell { + x: 17 + y: 8 + tile: 65 + } + cell { + x: 18 + y: 8 + tile: 65 + } + cell { + x: 19 + y: 8 + tile: 64 + } + cell { + x: 20 + y: 8 + tile: 64 + } + cell { + x: 21 + y: 8 + tile: 65 + } + cell { + x: 22 + y: 8 + tile: 65 + } + cell { + x: 23 + y: 8 + tile: 65 + } + cell { + x: 24 + y: 8 + tile: 65 + } + cell { + x: 25 + y: 8 + tile: 64 + } + cell { + x: 26 + y: 8 + tile: 64 + } + cell { + x: 27 + y: 8 + tile: 64 + } + cell { + x: 28 + y: 8 + tile: 65 + } + cell { + x: 29 + y: 8 + tile: 65 + } + cell { + x: 0 + y: 9 + tile: 65 + } + cell { + x: 1 + y: 9 + tile: 65 + } + cell { + x: 2 + y: 9 + tile: 65 + } + cell { + x: 3 + y: 9 + tile: 65 + } + cell { + x: 4 + y: 9 + tile: 65 + } + cell { + x: 5 + y: 9 + tile: 65 + } + cell { + x: 6 + y: 9 + tile: 108 + } + cell { + x: 7 + y: 9 + tile: 109 + } + cell { + x: 8 + y: 9 + tile: 110 + } + cell { + x: 9 + y: 9 + tile: 113 + } + cell { + x: 10 + y: 9 + tile: 114 + } + cell { + x: 11 + y: 9 + tile: 115 + } + cell { + x: 12 + y: 9 + tile: 64 + } + cell { + x: 13 + y: 9 + tile: 64 + } + cell { + x: 14 + y: 9 + tile: 65 + } + cell { + x: 15 + y: 9 + tile: 64 + } + cell { + x: 16 + y: 9 + tile: 64 + } + cell { + x: 17 + y: 9 + tile: 65 + } + cell { + x: 18 + y: 9 + tile: 64 + } + cell { + x: 19 + y: 9 + tile: 65 + } + cell { + x: 20 + y: 9 + tile: 64 + } + cell { + x: 21 + y: 9 + tile: 64 + } + cell { + x: 22 + y: 9 + tile: 65 + } + cell { + x: 23 + y: 9 + tile: 64 + } + cell { + x: 24 + y: 9 + tile: 64 + } + cell { + x: 25 + y: 9 + tile: 65 + } + cell { + x: 26 + y: 9 + tile: 64 + } + cell { + x: 27 + y: 9 + tile: 64 + } + cell { + x: 28 + y: 9 + tile: 64 + } + cell { + x: 29 + y: 9 + tile: 65 + } + cell { + x: 0 + y: 10 + tile: 64 + } + cell { + x: 1 + y: 10 + tile: 64 + } + cell { + x: 2 + y: 10 + tile: 64 + } + cell { + x: 3 + y: 10 + tile: 64 + } + cell { + x: 4 + y: 10 + tile: 65 + } + cell { + x: 5 + y: 10 + tile: 65 + } + cell { + x: 6 + y: 10 + tile: 90 + } + cell { + x: 7 + y: 10 + tile: 91 + } + cell { + x: 8 + y: 10 + tile: 92 + } + cell { + x: 9 + y: 10 + tile: 95 + } + cell { + x: 10 + y: 10 + tile: 96 + } + cell { + x: 11 + y: 10 + tile: 97 + } + cell { + x: 12 + y: 10 + tile: 65 + } + cell { + x: 13 + y: 10 + tile: 65 + } + cell { + x: 14 + y: 10 + tile: 64 + } + cell { + x: 15 + y: 10 + tile: 64 + } + cell { + x: 16 + y: 10 + tile: 65 + } + cell { + x: 17 + y: 10 + tile: 64 + } + cell { + x: 18 + y: 10 + tile: 64 + } + cell { + x: 19 + y: 10 + tile: 65 + } + cell { + x: 20 + y: 10 + tile: 65 + } + cell { + x: 21 + y: 10 + tile: 65 + } + cell { + x: 22 + y: 10 + tile: 65 + } + cell { + x: 23 + y: 10 + tile: 65 + } + cell { + x: 24 + y: 10 + tile: 64 + } + cell { + x: 25 + y: 10 + tile: 64 + } + cell { + x: 26 + y: 10 + tile: 65 + } + cell { + x: 27 + y: 10 + tile: 64 + } + cell { + x: 28 + y: 10 + tile: 65 + } + cell { + x: 29 + y: 10 + tile: 65 + } + cell { + x: 0 + y: 11 + tile: 64 + } + cell { + x: 1 + y: 11 + tile: 65 + } + cell { + x: 2 + y: 11 + tile: 65 + } + cell { + x: 3 + y: 11 + tile: 64 + } + cell { + x: 4 + y: 11 + tile: 65 + } + cell { + x: 5 + y: 11 + tile: 65 + } + cell { + x: 6 + y: 11 + tile: 190 + } + cell { + x: 7 + y: 11 + tile: 191 + } + cell { + x: 8 + y: 11 + tile: 192 + } + cell { + x: 9 + y: 11 + tile: 136 + } + cell { + x: 10 + y: 11 + tile: 137 + } + cell { + x: 11 + y: 11 + tile: 138 + } + cell { + x: 12 + y: 11 + tile: 64 + } + cell { + x: 13 + y: 11 + tile: 65 + } + cell { + x: 14 + y: 11 + tile: 64 + } + cell { + x: 15 + y: 11 + tile: 65 + } + cell { + x: 16 + y: 11 + tile: 65 + } + cell { + x: 17 + y: 11 + tile: 64 + } + cell { + x: 18 + y: 11 + tile: 64 + } + cell { + x: 19 + y: 11 + tile: 65 + } + cell { + x: 20 + y: 11 + tile: 65 + } + cell { + x: 21 + y: 11 + tile: 64 + } + cell { + x: 22 + y: 11 + tile: 64 + } + cell { + x: 23 + y: 11 + tile: 64 + } + cell { + x: 24 + y: 11 + tile: 65 + } + cell { + x: 25 + y: 11 + tile: 65 + } + cell { + x: 26 + y: 11 + tile: 64 + } + cell { + x: 27 + y: 11 + tile: 65 + } + cell { + x: 28 + y: 11 + tile: 65 + } + cell { + x: 29 + y: 11 + tile: 64 + } + cell { + x: 0 + y: 12 + tile: 64 + } + cell { + x: 1 + y: 12 + tile: 65 + } + cell { + x: 2 + y: 12 + tile: 64 + } + cell { + x: 3 + y: 12 + tile: 64 + } + cell { + x: 4 + y: 12 + tile: 65 + } + cell { + x: 5 + y: 12 + tile: 64 + } + cell { + x: 6 + y: 12 + tile: 172 + } + cell { + x: 7 + y: 12 + tile: 173 + } + cell { + x: 8 + y: 12 + tile: 174 + } + cell { + x: 9 + y: 12 + tile: 118 + } + cell { + x: 10 + y: 12 + tile: 119 + } + cell { + x: 11 + y: 12 + tile: 120 + } + cell { + x: 12 + y: 12 + tile: 64 + } + cell { + x: 13 + y: 12 + tile: 65 + } + cell { + x: 14 + y: 12 + tile: 64 + } + cell { + x: 15 + y: 12 + tile: 64 + } + cell { + x: 16 + y: 12 + tile: 64 + } + cell { + x: 17 + y: 12 + tile: 65 + } + cell { + x: 18 + y: 12 + tile: 64 + } + cell { + x: 19 + y: 12 + tile: 65 + } + cell { + x: 20 + y: 12 + tile: 65 + } + cell { + x: 21 + y: 12 + tile: 65 + } + cell { + x: 22 + y: 12 + tile: 65 + } + cell { + x: 23 + y: 12 + tile: 64 + } + cell { + x: 24 + y: 12 + tile: 64 + } + cell { + x: 25 + y: 12 + tile: 64 + } + cell { + x: 26 + y: 12 + tile: 65 + } + cell { + x: 27 + y: 12 + tile: 64 + } + cell { + x: 28 + y: 12 + tile: 65 + } + cell { + x: 29 + y: 12 + tile: 65 + } + cell { + x: 0 + y: 13 + tile: 64 + } + cell { + x: 1 + y: 13 + tile: 65 + } + cell { + x: 2 + y: 13 + tile: 65 + } + cell { + x: 3 + y: 13 + tile: 64 + } + cell { + x: 4 + y: 13 + tile: 65 + } + cell { + x: 5 + y: 13 + tile: 64 + } + cell { + x: 6 + y: 13 + tile: 154 + } + cell { + x: 7 + y: 13 + tile: 155 + } + cell { + x: 8 + y: 13 + tile: 156 + } + cell { + x: 9 + y: 13 + tile: 100 + } + cell { + x: 10 + y: 13 + tile: 101 + } + cell { + x: 11 + y: 13 + tile: 102 + } + cell { + x: 12 + y: 13 + tile: 64 + } + cell { + x: 13 + y: 13 + tile: 64 + } + cell { + x: 14 + y: 13 + tile: 65 + } + cell { + x: 15 + y: 13 + tile: 64 + } + cell { + x: 16 + y: 13 + tile: 64 + } + cell { + x: 17 + y: 13 + tile: 64 + } + cell { + x: 18 + y: 13 + tile: 65 + } + cell { + x: 19 + y: 13 + tile: 65 + } + cell { + x: 20 + y: 13 + tile: 65 + } + cell { + x: 21 + y: 13 + tile: 64 + } + cell { + x: 22 + y: 13 + tile: 64 + } + cell { + x: 23 + y: 13 + tile: 64 + } + cell { + x: 24 + y: 13 + tile: 65 + } + cell { + x: 25 + y: 13 + tile: 64 + } + cell { + x: 26 + y: 13 + tile: 65 + } + cell { + x: 27 + y: 13 + tile: 64 + } + cell { + x: 28 + y: 13 + tile: 64 + } + cell { + x: 29 + y: 13 + tile: 64 + } + cell { + x: 0 + y: 14 + tile: 65 + } + cell { + x: 1 + y: 14 + tile: 65 + } + cell { + x: 2 + y: 14 + tile: 64 + } + cell { + x: 3 + y: 14 + tile: 65 + } + cell { + x: 4 + y: 14 + tile: 64 + } + cell { + x: 5 + y: 14 + tile: 64 + } + cell { + x: 6 + y: 14 + tile: 65 + } + cell { + x: 7 + y: 14 + tile: 65 + } + cell { + x: 8 + y: 14 + tile: 65 + } + cell { + x: 9 + y: 14 + tile: 64 + } + cell { + x: 10 + y: 14 + tile: 64 + } + cell { + x: 11 + y: 14 + tile: 65 + } + cell { + x: 12 + y: 14 + tile: 65 + } + cell { + x: 13 + y: 14 + tile: 64 + } + cell { + x: 14 + y: 14 + tile: 64 + } + cell { + x: 15 + y: 14 + tile: 65 + } + cell { + x: 16 + y: 14 + tile: 64 + } + cell { + x: 17 + y: 14 + tile: 64 + } + cell { + x: 18 + y: 14 + tile: 64 + } + cell { + x: 19 + y: 14 + tile: 64 + } + cell { + x: 20 + y: 14 + tile: 65 + } + cell { + x: 21 + y: 14 + tile: 65 + } + cell { + x: 22 + y: 14 + tile: 64 + } + cell { + x: 23 + y: 14 + tile: 65 + } + cell { + x: 24 + y: 14 + tile: 65 + } + cell { + x: 25 + y: 14 + tile: 64 + } + cell { + x: 26 + y: 14 + tile: 64 + } + cell { + x: 27 + y: 14 + tile: 65 + } + cell { + x: 28 + y: 14 + tile: 65 + } + cell { + x: 29 + y: 14 + tile: 64 + } + cell { + x: 0 + y: 15 + tile: 64 + } + cell { + x: 1 + y: 15 + tile: 64 + } + cell { + x: 2 + y: 15 + tile: 64 + } + cell { + x: 3 + y: 15 + tile: 64 + } + cell { + x: 4 + y: 15 + tile: 64 + } + cell { + x: 5 + y: 15 + tile: 64 + } + cell { + x: 6 + y: 15 + tile: 64 + } + cell { + x: 7 + y: 15 + tile: 64 + } + cell { + x: 8 + y: 15 + tile: 65 + } + cell { + x: 9 + y: 15 + tile: 65 + } + cell { + x: 10 + y: 15 + tile: 64 + } + cell { + x: 11 + y: 15 + tile: 64 + } + cell { + x: 12 + y: 15 + tile: 65 + } + cell { + x: 13 + y: 15 + tile: 65 + } + cell { + x: 14 + y: 15 + tile: 64 + } + cell { + x: 15 + y: 15 + tile: 64 + } + cell { + x: 16 + y: 15 + tile: 64 + } + cell { + x: 17 + y: 15 + tile: 64 + } + cell { + x: 18 + y: 15 + tile: 65 + } + cell { + x: 19 + y: 15 + tile: 64 + } + cell { + x: 20 + y: 15 + tile: 65 + } + cell { + x: 21 + y: 15 + tile: 65 + } + cell { + x: 22 + y: 15 + tile: 64 + } + cell { + x: 23 + y: 15 + tile: 65 + } + cell { + x: 24 + y: 15 + tile: 65 + } + cell { + x: 25 + y: 15 + tile: 65 + } + cell { + x: 26 + y: 15 + tile: 65 + } + cell { + x: 27 + y: 15 + tile: 64 + } + cell { + x: 28 + y: 15 + tile: 65 + } + cell { + x: 29 + y: 15 + tile: 65 + } + cell { + x: 0 + y: 16 + tile: 64 + } + cell { + x: 1 + y: 16 + tile: 64 + } + cell { + x: 2 + y: 16 + tile: 65 + } + cell { + x: 3 + y: 16 + tile: 65 + } + cell { + x: 4 + y: 16 + tile: 64 + } + cell { + x: 5 + y: 16 + tile: 64 + } + cell { + x: 6 + y: 16 + tile: 65 + } + cell { + x: 7 + y: 16 + tile: 65 + } + cell { + x: 8 + y: 16 + tile: 65 + } + cell { + x: 9 + y: 16 + tile: 65 + } + cell { + x: 10 + y: 16 + tile: 65 + } + cell { + x: 11 + y: 16 + tile: 64 + } + cell { + x: 12 + y: 16 + tile: 65 + } + cell { + x: 13 + y: 16 + tile: 65 + } + cell { + x: 14 + y: 16 + tile: 65 + } + cell { + x: 15 + y: 16 + tile: 64 + } + cell { + x: 16 + y: 16 + tile: 65 + } + cell { + x: 17 + y: 16 + tile: 64 + } + cell { + x: 18 + y: 16 + tile: 64 + } + cell { + x: 19 + y: 16 + tile: 65 + } + cell { + x: 20 + y: 16 + tile: 64 + } + cell { + x: 21 + y: 16 + tile: 65 + } + cell { + x: 22 + y: 16 + tile: 64 + } + cell { + x: 23 + y: 16 + tile: 65 + } + cell { + x: 24 + y: 16 + tile: 64 + } + cell { + x: 25 + y: 16 + tile: 64 + } + cell { + x: 26 + y: 16 + tile: 65 + } + cell { + x: 27 + y: 16 + tile: 65 + } + cell { + x: 28 + y: 16 + tile: 64 + } + cell { + x: 29 + y: 16 + tile: 64 + } + cell { + x: 0 + y: 17 + tile: 64 + } + cell { + x: 1 + y: 17 + tile: 65 + } + cell { + x: 2 + y: 17 + tile: 65 + } + cell { + x: 3 + y: 17 + tile: 65 + } + cell { + x: 4 + y: 17 + tile: 64 + } + cell { + x: 5 + y: 17 + tile: 64 + } + cell { + x: 6 + y: 17 + tile: 64 + } + cell { + x: 7 + y: 17 + tile: 65 + } + cell { + x: 8 + y: 17 + tile: 65 + } + cell { + x: 9 + y: 17 + tile: 65 + } + cell { + x: 10 + y: 17 + tile: 65 + } + cell { + x: 11 + y: 17 + tile: 65 + } + cell { + x: 12 + y: 17 + tile: 64 + } + cell { + x: 13 + y: 17 + tile: 64 + } + cell { + x: 14 + y: 17 + tile: 65 + } + cell { + x: 15 + y: 17 + tile: 64 + } + cell { + x: 16 + y: 17 + tile: 65 + } + cell { + x: 17 + y: 17 + tile: 65 + } + cell { + x: 18 + y: 17 + tile: 64 + } + cell { + x: 19 + y: 17 + tile: 64 + } + cell { + x: 20 + y: 17 + tile: 65 + } + cell { + x: 21 + y: 17 + tile: 65 + } + cell { + x: 22 + y: 17 + tile: 64 + } + cell { + x: 23 + y: 17 + tile: 65 + } + cell { + x: 24 + y: 17 + tile: 65 + } + cell { + x: 25 + y: 17 + tile: 64 + } + cell { + x: 26 + y: 17 + tile: 65 + } + cell { + x: 27 + y: 17 + tile: 64 + } + cell { + x: 28 + y: 17 + tile: 64 + } + cell { + x: 29 + y: 17 + tile: 65 + } + cell { + x: 0 + y: 18 + tile: 64 + } + cell { + x: 1 + y: 18 + tile: 64 + } + cell { + x: 2 + y: 18 + tile: 64 + } + cell { + x: 3 + y: 18 + tile: 65 + } + cell { + x: 4 + y: 18 + tile: 65 + } + cell { + x: 5 + y: 18 + tile: 65 + } + cell { + x: 6 + y: 18 + tile: 65 + } + cell { + x: 7 + y: 18 + tile: 65 + } + cell { + x: 8 + y: 18 + tile: 64 + } + cell { + x: 9 + y: 18 + tile: 65 + } + cell { + x: 10 + y: 18 + tile: 64 + } + cell { + x: 11 + y: 18 + tile: 65 + } + cell { + x: 12 + y: 18 + tile: 65 + } + cell { + x: 13 + y: 18 + tile: 64 + } + cell { + x: 14 + y: 18 + tile: 64 + } + cell { + x: 15 + y: 18 + tile: 65 + } + cell { + x: 16 + y: 18 + tile: 64 + } + cell { + x: 17 + y: 18 + tile: 64 + } + cell { + x: 18 + y: 18 + tile: 64 + } + cell { + x: 19 + y: 18 + tile: 64 + } + cell { + x: 20 + y: 18 + tile: 65 + } + cell { + x: 21 + y: 18 + tile: 64 + } + cell { + x: 22 + y: 18 + tile: 65 + } + cell { + x: 23 + y: 18 + tile: 64 + } + cell { + x: 24 + y: 18 + tile: 64 + } + cell { + x: 25 + y: 18 + tile: 64 + } + cell { + x: 26 + y: 18 + tile: 65 + } + cell { + x: 27 + y: 18 + tile: 64 + } + cell { + x: 28 + y: 18 + tile: 64 + } + cell { + x: 29 + y: 18 + tile: 65 + } + cell { + x: 0 + y: 19 + tile: 64 + } + cell { + x: 1 + y: 19 + tile: 65 + } + cell { + x: 2 + y: 19 + tile: 64 + } + cell { + x: 3 + y: 19 + tile: 65 + } + cell { + x: 4 + y: 19 + tile: 64 + } + cell { + x: 5 + y: 19 + tile: 64 + } + cell { + x: 6 + y: 19 + tile: 65 + } + cell { + x: 7 + y: 19 + tile: 64 + } + cell { + x: 8 + y: 19 + tile: 65 + } + cell { + x: 9 + y: 19 + tile: 64 + } + cell { + x: 10 + y: 19 + tile: 65 + } + cell { + x: 11 + y: 19 + tile: 65 + } + cell { + x: 12 + y: 19 + tile: 64 + } + cell { + x: 13 + y: 19 + tile: 64 + } + cell { + x: 14 + y: 19 + tile: 64 + } + cell { + x: 15 + y: 19 + tile: 65 + } + cell { + x: 16 + y: 19 + tile: 65 + } + cell { + x: 17 + y: 19 + tile: 64 + } + cell { + x: 18 + y: 19 + tile: 64 + } + cell { + x: 19 + y: 19 + tile: 65 + } + cell { + x: 20 + y: 19 + tile: 65 + } + cell { + x: 21 + y: 19 + tile: 64 + } + cell { + x: 22 + y: 19 + tile: 64 + } + cell { + x: 23 + y: 19 + tile: 64 + } + cell { + x: 24 + y: 19 + tile: 65 + } + cell { + x: 25 + y: 19 + tile: 64 + } + cell { + x: 26 + y: 19 + tile: 65 + } + cell { + x: 27 + y: 19 + tile: 64 + } + cell { + x: 28 + y: 19 + tile: 64 + } + cell { + x: 29 + y: 19 + tile: 64 + } +} +layers { + id: "roads" + z: 1.0E-4 + cell { + x: 8 + y: 0 + tile: 173 + } + cell { + x: 9 + y: 0 + tile: 173 + } + cell { + x: 15 + y: 0 + tile: 172 + } + cell { + x: 16 + y: 0 + tile: 173 + } + cell { + x: 8 + y: 1 + tile: 173 + } + cell { + x: 9 + y: 1 + tile: 173 + } + cell { + x: 15 + y: 1 + tile: 172 + } + cell { + x: 16 + y: 1 + tile: 173 + } + cell { + x: 8 + y: 2 + tile: 173 + } + cell { + x: 9 + y: 2 + tile: 173 + } + cell { + x: 15 + y: 2 + tile: 172 + } + cell { + x: 16 + y: 2 + tile: 193 + } + cell { + x: 17 + y: 2 + tile: 175 + } + cell { + x: 18 + y: 2 + tile: 176 + } + cell { + x: 8 + y: 3 + tile: 173 + } + cell { + x: 9 + y: 3 + tile: 173 + } + cell { + x: 15 + y: 3 + tile: 172 + } + cell { + x: 16 + y: 3 + tile: 173 + } + cell { + x: 18 + y: 3 + tile: 172 + } + cell { + x: 19 + y: 3 + tile: 173 + } + cell { + x: 20 + y: 3 + tile: 192 + } + cell { + x: 9 + y: 4 + tile: 173 + } + cell { + x: 10 + y: 4 + tile: 173 + } + cell { + x: 15 + y: 4 + tile: 154 + } + cell { + x: 16 + y: 4 + tile: 155 + } + cell { + x: 18 + y: 4 + tile: 172 + } + cell { + x: 19 + y: 4 + tile: 172 + } + cell { + x: 20 + y: 4 + tile: 173 + } + cell { + x: 21 + y: 4 + tile: 174 + } + cell { + x: 10 + y: 5 + tile: 173 + } + cell { + x: 11 + y: 5 + tile: 173 + } + cell { + x: 12 + y: 5 + tile: 173 + } + cell { + x: 13 + y: 5 + tile: 173 + } + cell { + x: 18 + y: 5 + tile: 154 + } + cell { + x: 19 + y: 5 + tile: 172 + } + cell { + x: 20 + y: 5 + tile: 173 + } + cell { + x: 21 + y: 5 + tile: 174 + } + cell { + x: 14 + y: 6 + tile: 173 + } + cell { + x: 15 + y: 6 + tile: 173 + } + cell { + x: 19 + y: 6 + tile: 172 + } + cell { + x: 20 + y: 6 + tile: 173 + } + cell { + x: 21 + y: 6 + tile: 174 + } + cell { + x: 15 + y: 7 + tile: 173 + } + cell { + x: 19 + y: 7 + tile: 172 + } + cell { + x: 20 + y: 7 + tile: 173 + } + cell { + x: 21 + y: 7 + tile: 174 + } + cell { + x: 15 + y: 8 + tile: 173 + } + cell { + x: 19 + y: 8 + tile: 172 + } + cell { + x: 20 + y: 8 + tile: 173 + } + cell { + x: 21 + y: 8 + tile: 174 + } + cell { + x: 15 + y: 9 + tile: 173 + } + cell { + x: 16 + y: 9 + tile: 173 + } + cell { + x: 17 + y: 9 + tile: 173 + } + cell { + x: 18 + y: 9 + tile: 173 + } + cell { + x: 19 + y: 9 + tile: 173 + } + cell { + x: 20 + y: 9 + tile: 173 + } + cell { + x: 21 + y: 9 + tile: 173 + } + cell { + x: 22 + y: 9 + tile: 173 + } + cell { + x: 14 + y: 10 + tile: 173 + } + cell { + x: 15 + y: 10 + tile: 173 + } + cell { + x: 16 + y: 10 + tile: 155 + } + cell { + x: 17 + y: 10 + tile: 155 + } + cell { + x: 18 + y: 10 + tile: 155 + } + cell { + x: 19 + y: 10 + tile: 155 + } + cell { + x: 20 + y: 10 + tile: 155 + } + cell { + x: 21 + y: 10 + tile: 155 + } + cell { + x: 22 + y: 10 + tile: 173 + } + cell { + x: 23 + y: 10 + tile: 173 + } + cell { + x: 13 + y: 11 + tile: 173 + } + cell { + x: 14 + y: 11 + tile: 173 + } + cell { + x: 22 + y: 11 + tile: 155 + } + cell { + x: 23 + y: 11 + tile: 173 + } + cell { + x: 13 + y: 12 + tile: 173 + } + cell { + x: 23 + y: 12 + tile: 173 + } + cell { + x: 13 + y: 13 + tile: 173 + } + cell { + x: 22 + y: 13 + tile: 173 + } + cell { + x: 23 + y: 13 + tile: 173 + } +} +material: "/builtins/materials/tile_map.material" diff --git a/tiled/export/grid.collection b/tiled/export/grid.collection new file mode 100644 index 0000000..1343b0a --- /dev/null +++ b/tiled/export/grid.collection @@ -0,0 +1,55 @@ +name: "default" +scale_along_z: 0 +embedded_instances { + id: "tilemaps" + data: "components {\n" + " id: \"grid-grid_tileset\"\n" + " component: \"/tiled/export/grid-grid_tileset.tilemap\"\n" + " position {\n" + " x: 0.0\n" + " y: 0.0\n" + " z: 0.0\n" + " }\n" + " rotation {\n" + " x: 0.0\n" + " y: 0.0\n" + " z: 0.0\n" + " w: 1.0\n" + " }\n" + "}\n" + "components {\n" + " id: \"grid-grid_items\"\n" + " component: \"/tiled/export/grid-grid_items.tilemap\"\n" + " position {\n" + " x: 0.0\n" + " y: 0.0\n" + " z: 0.0\n" + " }\n" + " rotation {\n" + " x: 0.0\n" + " y: 0.0\n" + " z: 0.0\n" + " w: 1.0\n" + " }\n" + "}\n" + + "" + position { + x: 0 + y: 0 + z: 0.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale3 { + x: 1.0 + y: 1.0 + z: 1.0 + } +} + + diff --git a/tiled/game_shooting_circle.tiled-project b/tiled/game_shooting_circle.tiled-project deleted file mode 100644 index 823df68..0000000 --- a/tiled/game_shooting_circle.tiled-project +++ /dev/null @@ -1,442 +0,0 @@ -{ - "automappingRulesFile": "", - "commands": [ - ], - "extensionsPath": "extensions", - "folders": [ - "." - ], - "propertyTypes": [ - { - "color": "#ffa0a0a4", - "id": 2, - "members": [ - { - "name": "camera_url", - "type": "string", - "value": "/camera#script" - } - ], - "name": "camera", - "type": "class", - "useAs": [ - "property", - "map", - "layer", - "object", - "tile", - "tileset", - "wangcolor", - "wangset" - ] - }, - { - "color": "#ffa0a0a4", - "id": 18, - "members": [ - ], - "name": "collision", - "type": "class", - "useAs": [ - "property", - "map", - "layer", - "object", - "tile", - "tileset", - "wangcolor", - "wangset" - ] - }, - { - "color": "#ffa0a0a4", - "id": 8, - "members": [ - { - "name": "hex_color", - "type": "string", - "value": "" - }, - { - "name": "sprite_url", - "type": "string", - "value": "" - } - ], - "name": "color", - "type": "class", - "useAs": [ - "property", - "map", - "layer", - "object", - "tile", - "tileset", - "wangcolor", - "wangset" - ] - }, - { - "color": "#ffa0a0a4", - "id": 1, - "members": [ - { - "name": "factory_url", - "type": "string", - "value": "" - }, - { - "name": "is_slice9", - "type": "bool", - "value": false - } - ], - "name": "game_object", - "type": "class", - "useAs": [ - "property", - "map", - "layer", - "object", - "tile", - "tileset", - "wangcolor", - "wangset" - ] - }, - { - "color": "#ffa0a0a4", - "id": 20, - "members": [ - { - "name": "health", - "type": "float", - "value": 0 - } - ], - "name": "health", - "type": "class", - "useAs": [ - "property", - "map", - "layer", - "object", - "tile", - "tileset", - "wangcolor", - "wangset" - ] - }, - { - "color": "#ffa0a0a4", - "id": 21, - "members": [ - ], - "name": "health_circle_visual", - "type": "class", - "useAs": [ - "property", - "map", - "layer", - "object", - "tile", - "tileset", - "wangcolor", - "wangset" - ] - }, - { - "color": "#ffa0a0a4", - "id": 24, - "members": [ - { - "name": "speed", - "type": "float", - "value": 0 - } - ], - "name": "movement_controller", - "type": "class", - "useAs": [ - "property", - "map", - "layer", - "object", - "tile", - "tileset", - "wangcolor", - "wangset" - ] - }, - { - "color": "#ffa0a0a4", - "id": 22, - "members": [ - { - "name": "damage", - "type": "float", - "value": 0 - } - ], - "name": "on_collision_damage", - "type": "class", - "useAs": [ - "property", - "map", - "layer", - "object", - "tile", - "tileset", - "wangcolor", - "wangset" - ] - }, - { - "color": "#ffa0a0a4", - "id": 19, - "members": [ - { - "name": "damage", - "type": "float", - "value": 0 - }, - { - "name": "distance", - "type": "float", - "value": 0 - }, - { - "name": "power", - "type": "float", - "value": 0 - } - ], - "name": "on_collision_explosion", - "type": "class", - "useAs": [ - "property", - "map", - "layer", - "object", - "tile", - "tileset", - "wangcolor", - "wangset" - ] - }, - { - "color": "#ffa0a0a4", - "id": 27, - "members": [ - { - "name": "command", - "type": "string", - "value": "" - } - ], - "name": "on_spawn_command", - "type": "class", - "useAs": [ - "property", - "map", - "layer", - "object", - "tile", - "tileset", - "wangcolor", - "wangset" - ] - }, - { - "color": "#ffa0a0a4", - "id": 26, - "members": [ - { - "name": "amount", - "type": "int", - "value": 0 - }, - { - "name": "command", - "type": "string", - "value": "" - } - ], - "name": "on_target_count_command", - "type": "class", - "useAs": [ - "property", - "map", - "layer", - "object", - "tile", - "tileset", - "wangcolor", - "wangset" - ] - }, - { - "color": "#ffa0a0a4", - "id": 5, - "members": [ - { - "name": "animation_path", - "type": "string", - "value": "/resources/animations/name.json" - } - ], - "name": "panthera", - "type": "class", - "useAs": [ - "property", - "map", - "layer", - "object", - "tile", - "tileset", - "wangcolor", - "wangset" - ] - }, - { - "color": "#ffa0a0a4", - "id": 17, - "members": [ - ], - "name": "physics", - "type": "class", - "useAs": [ - "property", - "map", - "layer", - "object", - "tile", - "tileset", - "wangcolor", - "wangset" - ] - }, - { - "color": "#ffa0a0a4", - "id": 16, - "members": [ - ], - "name": "physics_movement", - "type": "class", - "useAs": [ - "property", - "map", - "layer", - "object", - "tile", - "tileset", - "wangcolor", - "wangset" - ] - }, - { - "color": "#ffa0a0a4", - "id": 28, - "members": [ - { - "name": "fx_url", - "type": "string", - "value": "" - } - ], - "name": "play_fx_on_remove", - "type": "class", - "useAs": [ - "property", - "map", - "layer", - "object", - "tile", - "tileset", - "wangcolor", - "wangset" - ] - }, - { - "color": "#ffa0a0a4", - "id": 11, - "members": [ - { - "name": "delay", - "type": "float", - "value": 0 - } - ], - "name": "remove_with_delay", - "type": "class", - "useAs": [ - "property", - "map", - "layer", - "object", - "tile", - "tileset", - "wangcolor", - "wangset" - ] - }, - { - "color": "#ffa0a0a4", - "id": 10, - "members": [ - { - "name": "bullet_prefab_id", - "type": "string", - "value": "" - }, - { - "name": "bullet_speed", - "type": "float", - "value": 2000 - }, - { - "name": "bullets_per_shoot", - "type": "int", - "value": 1 - }, - { - "name": "burst_count", - "type": "int", - "value": 0 - }, - { - "name": "burst_rate", - "type": "float", - "value": 0 - }, - { - "name": "fire_rate", - "type": "float", - "value": 0 - }, - { - "name": "is_auto_shoot", - "type": "bool", - "value": false - }, - { - "name": "spread_angle", - "type": "float", - "value": 0 - } - ], - "name": "shooter_controller", - "type": "class", - "useAs": [ - "property", - "map", - "layer", - "object", - "tile", - "tileset", - "wangcolor", - "wangset" - ] - } - ] -} diff --git a/tiled/game_shooting_circle.tiled-session b/tiled/game_shooting_circle.tiled-session deleted file mode 100644 index cca1132..0000000 --- a/tiled/game_shooting_circle.tiled-session +++ /dev/null @@ -1,76 +0,0 @@ -{ - "Map/SizeTest": { - "height": 4300, - "width": 2 - }, - "activeFile": "tilesets/shooting_circle.tsx", - "expandedProjectPaths": [ - ".", - "maps", - "tilesets" - ], - "file.lastUsedOpenFilter": "All Files (*)", - "fileStates": { - "/Users/insality/code/defold/ecs_template/resources/tilesets/shooting_circle.tsx": { - "dynamicWrapping": true, - "scaleInDock": 0.2596, - "scaleInEditor": 0.43 - }, - "/Users/insality/code/defold/shooting_circles/resources/tilesets/shooting_circle.tsx": { - "dynamicWrapping": false, - "scaleInDock": 1 - }, - "maps/game.tmx": { - "expandedObjectLayers": [ - 20 - ], - "scale": 0.426, - "selectedLayer": 1, - "viewCenter": { - "x": 491.7840375586855, - "y": 505.8685446009389 - } - }, - "maps/loader.tmx": { - "scale": 1.6173, - "selectedLayer": 0, - "viewCenter": { - "x": 115.00649230198479, - "y": 1077.4129722376802 - } - }, - "tilesets/game.tsx": { - "dynamicWrapping": false, - "scaleInDock": 1 - }, - "tilesets/shooting_circle.tsx": { - "dynamicWrapping": true, - "scaleInDock": 0.1194, - "scaleInEditor": 0.1398 - } - }, - "last.exportedFilePath": "/Users/insality/code/defold/shooting_circles/resources/tilesets", - "last.externalTilesetPath": "/Users/insality/code/defold/shooting_circles/game/tiled/tilesets", - "last.imagePath": "/Users/insality/code/defold/shooting_circles/game/tiled/images", - "lastUsedTilesetExportFilter": "All Files (*)", - "map.height": 18, - "map.lastUsedExportFilter": "All Files (*)", - "map.lastUsedFormat": "tmx", - "map.tileHeight": 60, - "map.tileWidth": 60, - "map.width": 32, - "openFiles": [ - "maps/game.tmx", - "tilesets/shooting_circle.tsx" - ], - "project": "game_shooting_circle.tiled-project", - "property.type": "int", - "recentFiles": [ - "maps/game.tmx", - "tilesets/shooting_circle.tsx", - "/Users/insality/code/defold/ecs_template/resources/tilesets/shooting_circle.tsx", - "maps/loader.tmx" - ], - "tileset.lastUsedFormat": "tsx", - "tileset.type": 1 -} diff --git a/tiled/images/arena_background.png b/tiled/images/arena_background.png deleted file mode 100644 index 47801fc..0000000 Binary files a/tiled/images/arena_background.png and /dev/null differ diff --git a/tiled/images/bullet_sniper.png b/tiled/images/bullet_sniper.png deleted file mode 100644 index 82932ca..0000000 Binary files a/tiled/images/bullet_sniper.png and /dev/null differ diff --git a/tiled/images/enemy.png b/tiled/images/enemy.png deleted file mode 100644 index ab2ab2c..0000000 Binary files a/tiled/images/enemy.png and /dev/null differ diff --git a/tiled/images/enemy_rectangle.png b/tiled/images/enemy_rectangle.png deleted file mode 100644 index 28f41f9..0000000 Binary files a/tiled/images/enemy_rectangle.png and /dev/null differ diff --git a/tiled/images/explosion.png b/tiled/images/explosion.png deleted file mode 100644 index cdcfdae..0000000 Binary files a/tiled/images/explosion.png and /dev/null differ diff --git a/tiled/images/pit.png b/tiled/images/pit.png deleted file mode 100644 index a896b11..0000000 Binary files a/tiled/images/pit.png and /dev/null differ diff --git a/tiled/images/ui_circle_32.png b/tiled/images/ui_circle_32.png deleted file mode 100644 index 82932ca..0000000 Binary files a/tiled/images/ui_circle_32.png and /dev/null differ diff --git a/tiled/images/ui_circle_64.png b/tiled/images/ui_circle_64.png deleted file mode 100644 index c74547d..0000000 Binary files a/tiled/images/ui_circle_64.png and /dev/null differ diff --git a/tiled/images/wall.png b/tiled/images/wall.png deleted file mode 100644 index 9df7a35..0000000 Binary files a/tiled/images/wall.png and /dev/null differ diff --git a/tiled/images/wall_pit.png b/tiled/images/wall_pit.png deleted file mode 100644 index e20fc7d..0000000 Binary files a/tiled/images/wall_pit.png and /dev/null differ diff --git a/tiled/maps/game.tmx b/tiled/maps/game.tmx deleted file mode 100644 index e110196..0000000 --- a/tiled/maps/game.tmx +++ /dev/null @@ -1,4432 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tiled/maps/grid.json b/tiled/maps/grid.json new file mode 100644 index 0000000..3912bb1 --- /dev/null +++ b/tiled/maps/grid.json @@ -0,0 +1,224 @@ +{ "compressionlevel":-1, + "editorsettings": + { + "export": + { + "format":"defoldcollection", + "target":"..\/export\/grid.collection" + } + }, + "height":20, + "infinite":false, + "layers":[ + { + "data":[65, 66, 65, 66, 65, 65, 66, 65, 66, 65, 66, 66, 65, 65, 65, 66, 66, 65, 65, 66, 66, 65, 65, 65, 66, 65, 66, 65, 65, 65, + 65, 65, 65, 66, 66, 66, 66, 66, 65, 66, 65, 66, 66, 65, 65, 66, 65, 65, 65, 65, 66, 65, 66, 65, 65, 65, 66, 65, 65, 66, + 65, 66, 66, 66, 65, 65, 65, 66, 66, 66, 66, 66, 65, 65, 66, 65, 66, 66, 65, 65, 66, 66, 65, 66, 66, 65, 66, 65, 65, 66, + 65, 65, 66, 66, 65, 65, 66, 66, 66, 66, 66, 65, 66, 66, 66, 65, 66, 65, 65, 66, 65, 66, 65, 66, 65, 65, 66, 66, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, 66, 66, 65, 65, 66, 66, 65, 65, 65, 65, 66, 65, 66, 66, 65, 66, 66, 66, 66, 65, 66, 66, + 66, 66, 65, 66, 65, 65, 66, 66, 66, 65, 65, 66, 66, 65, 65, 66, 65, 65, 65, 65, 66, 66, 65, 66, 66, 65, 65, 66, 66, 65, + 65, 66, 66, 65, 66, 65, 155, 156, 157, 101, 102, 103, 65, 65, 66, 65, 65, 65, 66, 66, 66, 65, 65, 65, 66, 65, 66, 65, 65, 65, + 65, 66, 65, 65, 66, 65, 173, 174, 175, 119, 120, 121, 65, 66, 65, 65, 65, 66, 65, 66, 66, 66, 66, 65, 65, 65, 66, 65, 66, 66, + 65, 66, 66, 65, 66, 66, 191, 192, 193, 137, 138, 139, 65, 66, 65, 66, 66, 65, 65, 66, 66, 65, 65, 65, 66, 66, 65, 66, 66, 65, + 65, 65, 65, 65, 66, 66, 91, 92, 93, 96, 97, 98, 66, 66, 65, 65, 66, 65, 65, 66, 66, 66, 66, 66, 65, 65, 66, 65, 66, 66, + 66, 66, 66, 66, 66, 66, 109, 110, 111, 114, 115, 116, 65, 65, 66, 65, 65, 66, 65, 66, 65, 65, 66, 65, 65, 66, 65, 65, 65, 66, + 66, 66, 66, 65, 65, 65, 127, 128, 129, 132, 133, 134, 65, 65, 65, 66, 66, 66, 66, 65, 65, 66, 66, 66, 66, 65, 65, 65, 66, 66, + 66, 65, 66, 65, 65, 66, 65, 65, 66, 66, 65, 65, 66, 66, 65, 65, 66, 65, 65, 66, 66, 65, 65, 65, 66, 65, 65, 65, 66, 65, + 66, 66, 66, 65, 65, 65, 66, 66, 66, 65, 66, 66, 65, 65, 66, 65, 66, 66, 66, 66, 65, 65, 66, 65, 65, 66, 66, 65, 66, 65, + 65, 65, 66, 65, 65, 66, 66, 65, 65, 66, 65, 66, 65, 65, 65, 66, 65, 66, 65, 66, 65, 65, 66, 66, 66, 65, 66, 65, 65, 66, + 65, 65, 66, 66, 66, 65, 65, 65, 65, 66, 66, 66, 66, 65, 65, 65, 65, 66, 66, 65, 66, 65, 66, 66, 65, 66, 65, 65, 66, 66, + 65, 65, 66, 66, 66, 66, 65, 66, 66, 66, 66, 66, 66, 66, 66, 65, 66, 66, 65, 66, 66, 65, 65, 65, 65, 65, 66, 65, 66, 65, + 66, 66, 65, 65, 65, 65, 65, 66, 65, 65, 65, 65, 66, 66, 65, 66, 66, 65, 66, 65, 65, 65, 65, 65, 65, 66, 66, 66, 66, 65, + 66, 66, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 66, 66, 65, 66, 65, 66, 66, 66, 66, 65, 65, 66, 66, 66, + 65, 65, 65, 66, 66, 65, 66, 66, 65, 66, 66, 66, 66, 66, 65, 66, 65, 66, 65, 66, 66, 65, 65, 66, 65, 65, 66, 65, 66, 66], + "height":20, + "id":1, + "name":"back", + "opacity":1, + "properties":[ + { + "name":"exclude", + "type":"bool", + "value":false + }], + "type":"tilelayer", + "visible":true, + "width":30, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 174, 174, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 174, 0, 0, 0, 0, 0, 0, 0, 156, 174, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 174, 156, 156, 156, 156, 156, 156, 174, 174, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 174, 174, 174, 174, 174, 174, 174, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 173, 174, 175, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 173, 174, 175, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 174, 0, 0, 0, 173, 174, 175, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 174, 174, 174, 0, 0, 0, 0, 155, 173, 174, 175, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 174, 0, 0, 0, 0, 155, 156, 0, 173, 173, 174, 175, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 174, 174, 0, 0, 0, 0, 0, 173, 174, 0, 173, 174, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 174, 174, 0, 0, 0, 0, 0, 173, 194, 176, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 174, 174, 0, 0, 0, 0, 0, 173, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 174, 174, 0, 0, 0, 0, 0, 173, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":20, + "id":4, + "name":"roads", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":30, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":20, + "id":3, + "name":"tile_items", + "opacity":1, + "properties":[ + { + "name":"exclude", + "type":"bool", + "value":true + }], + "type":"tilelayer", + "visible":true, + "width":30, + "x":0, + "y":0 + }, + { + "draworder":"topdown", + "id":2, + "name":"items", + "objects":[ + { + "gid":243, + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":173.068, + "y":137.38 + }, + { + "gid":243, + "height":16, + "id":2, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":149.337, + "y":140.956 + }, + { + "gid":243, + "height":16, + "id":3, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":155.513, + "y":120.151 + }, + { + "gid":246, + "height":16, + "id":4, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":98.6251, + "y":180.616 + }, + { + "gid":246, + "height":16, + "id":5, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":157.139, + "y":162.086 + }, + { + "gid":246, + "height":16, + "id":6, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":100.901, + "y":117.226 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }], + "nextlayerid":5, + "nextobjectid":7, + "orientation":"orthogonal", + "renderorder":"right-down", + "tiledversion":"1.11.2", + "tileheight":16, + "tilesets":[ + { + "firstgid":1, + "source":"..\/tilesets\/grid_tileset.json" + }, + { + "firstgid":235, + "source":"..\/tilesets\/grid_items.json" + }, + { + "firstgid":250, + "source":":\/automap-tiles.tsx" + }], + "tilewidth":16, + "type":"map", + "version":"1.10", + "width":30 +} \ No newline at end of file diff --git a/tiled/maps/grid_game_objects.json b/tiled/maps/grid_game_objects.json new file mode 100644 index 0000000..34f4357 --- /dev/null +++ b/tiled/maps/grid_game_objects.json @@ -0,0 +1,208 @@ +{ "compressionlevel":-1, + "height":20, + "infinite":false, + "layers":[ + { + "data":[428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, + 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, + 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, + 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, + 428, 428, 428, 428, 320, 320, 319, 320, 319, 319, 320, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, + 428, 428, 428, 428, 319, 345, 346, 346, 346, 346, 346, 347, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, + 428, 428, 428, 428, 319, 363, 364, 364, 364, 364, 364, 365, 319, 320, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, + 428, 428, 428, 428, 320, 363, 364, 364, 364, 364, 364, 366, 347, 320, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, + 428, 428, 428, 428, 319, 363, 364, 364, 364, 364, 364, 364, 365, 320, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, + 428, 428, 428, 428, 320, 363, 364, 364, 364, 364, 364, 364, 365, 319, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, + 428, 428, 428, 428, 319, 363, 364, 364, 364, 364, 348, 382, 383, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, + 428, 428, 428, 428, 320, 363, 364, 364, 364, 348, 383, 320, 320, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, + 428, 428, 428, 428, 319, 381, 382, 382, 382, 383, 320, 319, 319, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, + 428, 428, 428, 428, 319, 319, 320, 319, 319, 319, 320, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, + 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, + 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, + 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, + 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, + 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, + 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428], + "height":20, + "id":1, + "name":"back", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":30, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 351, 351, 351, 352, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 407, 408, 0, 0, 0, 0, 0, 0, 0, 0, 368, 369, 369, 369, 370, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 425, 426, 0, 0, 0, 0, 0, 0, 0, 0, 368, 369, 369, 369, 370, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2147484042, 395, 395, 394, 0, 0, 0, 0, 0, 0, 0, 368, 369, 369, 369, 370, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2147484042, 395, 395, 394, 0, 0, 0, 0, 0, 0, 0, 386, 387, 387, 387, 388, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 446, 446, 446, 413, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 446, 447, 320, 319, 319, 445, 446, 446, 446, 413, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 429, 319, 319, 319, 319, 320, 320, 320, 319, 320, 445, 446, 413, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 319, 320, 319, 320, 319, 319, 320, 319, 319, 319, 319, 320, 320, 427, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 429, 320, 320, 320, 319, 319, 319, 319, 319, 319, 409, 410, 431, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 429, 319, 319, 320, 319, 319, 319, 319, 320, 409, 431, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 430, 411, 319, 319, 319, 320, 320, 409, 410, 431, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 430, 410, 410, 410, 410, 410, 431, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":20, + "id":4, + "name":"roads", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":30, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 322, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 0, 339, 340, 0, 0, 337, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":20, + "id":3, + "name":"tile_items", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":30, + "x":0, + "y":0 + }, + { + "draworder":"topdown", + "id":2, + "name":"items", + "objects":[ + { + "gid":243, + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":173.068, + "y":137.38 + }, + { + "gid":243, + "height":16, + "id":2, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":149.337, + "y":140.956 + }, + { + "gid":243, + "height":16, + "id":3, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":155.513, + "y":120.151 + }, + { + "gid":246, + "height":16, + "id":4, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":98.6251, + "y":180.616 + }, + { + "gid":246, + "height":16, + "id":5, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":157.139, + "y":162.086 + }, + { + "gid":246, + "height":16, + "id":6, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":100.901, + "y":117.226 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }], + "nextlayerid":5, + "nextobjectid":7, + "orientation":"orthogonal", + "renderorder":"right-down", + "tiledversion":"1.11.2", + "tileheight":16, + "tilesets":[ + { + "firstgid":1, + "source":"..\/tilesets\/grid_tileset.json" + }, + { + "firstgid":235, + "source":"..\/tilesets\/grid_items.json" + }, + { + "firstgid":250, + "source":":\/automap-tiles.tsx" + }, + { + "firstgid":255, + "source":"..\/tilesets\/grid_game_objects.json" + }], + "tilewidth":16, + "type":"map", + "version":"1.10", + "width":30 +} \ No newline at end of file diff --git a/tiled/maps/hexgrid.json b/tiled/maps/hexgrid.json new file mode 100644 index 0000000..1d92bbc --- /dev/null +++ b/tiled/maps/hexgrid.json @@ -0,0 +1,626 @@ +{ "compressionlevel":-1, + "height":20, + "hexsidelength":95, + "infinite":false, + "layers":[ + { + "data":[12, 7, 12, 3, 10, 4, 11, 7, 8, 8, 6, 10, 9, 7, 9, 9, 3, 9, 3, 1, 8, 5, 7, 8, 7, 3, 1, 4, 7, 11, + 4, 7, 10, 3, 1, 10, 6, 12, 3, 2, 5, 9, 11, 2, 6, 2, 12, 11, 11, 11, 2, 10, 7, 5, 4, 5, 6, 6, 10, 10, + 1, 1, 1, 11, 4, 9, 7, 8, 6, 8, 7, 10, 4, 8, 8, 5, 9, 6, 12, 5, 4, 8, 3, 1, 2, 10, 10, 10, 1, 11, + 7, 3, 12, 9, 11, 5, 7, 10, 11, 10, 8, 4, 7, 12, 6, 4, 5, 5, 8, 7, 8, 3, 6, 3, 5, 4, 11, 11, 9, 12, + 8, 12, 5, 6, 4, 3, 11, 6, 9, 1, 4, 6, 6, 11, 9, 2, 5, 2, 11, 11, 10, 1, 2, 5, 10, 6, 5, 3, 9, 11, + 12, 12, 12, 6, 2, 10, 4, 7, 6, 4, 8, 3, 2, 9, 12, 7, 9, 1, 1, 2, 11, 1, 8, 9, 3, 6, 5, 9, 3, 12, + 11, 11, 3, 8, 10, 5, 4, 5, 2, 12, 2, 1, 10, 10, 7, 6, 9, 3, 3, 9, 8, 10, 9, 11, 5, 5, 2, 8, 12, 11, + 3, 10, 6, 5, 4, 4, 6, 7, 3, 5, 3, 6, 7, 2, 9, 8, 4, 10, 2, 2, 8, 2, 5, 3, 3, 1, 12, 2, 6, 10, + 8, 8, 3, 5, 2, 2, 9, 12, 6, 11, 6, 9, 8, 6, 4, 3, 3, 8, 12, 10, 8, 8, 12, 8, 12, 9, 3, 5, 12, 8, + 8, 9, 12, 6, 7, 11, 3, 1, 12, 12, 2, 4, 12, 8, 5, 7, 6, 12, 12, 11, 4, 1, 4, 5, 3, 4, 3, 6, 11, 1, + 3, 6, 12, 6, 7, 4, 4, 7, 7, 7, 7, 8, 4, 5, 1, 7, 1, 10, 8, 12, 3, 8, 7, 3, 3, 10, 10, 3, 10, 1, + 10, 5, 10, 1, 10, 6, 4, 9, 1, 8, 9, 8, 12, 2, 10, 3, 6, 4, 6, 9, 12, 12, 10, 12, 9, 9, 10, 10, 5, 3, + 1, 8, 1, 7, 4, 6, 8, 4, 9, 8, 10, 8, 3, 12, 2, 1, 4, 11, 9, 7, 7, 6, 1, 8, 9, 4, 4, 8, 6, 7, + 3, 11, 1, 7, 8, 6, 4, 8, 10, 6, 11, 10, 5, 4, 2, 11, 11, 10, 10, 10, 6, 2, 3, 4, 3, 2, 1, 5, 3, 11, + 1, 5, 3, 3, 2, 4, 5, 6, 4, 4, 1, 2, 12, 9, 9, 4, 6, 1, 7, 3, 5, 5, 1, 11, 2, 1, 2, 2, 6, 9, + 12, 3, 6, 9, 6, 3, 12, 9, 7, 3, 2, 7, 2, 10, 11, 10, 6, 3, 12, 9, 12, 2, 7, 4, 10, 8, 5, 6, 7, 3, + 3, 6, 11, 7, 10, 3, 2, 4, 7, 11, 8, 3, 9, 9, 2, 10, 12, 12, 5, 6, 4, 6, 2, 1, 6, 1, 7, 5, 8, 11, + 6, 7, 5, 4, 11, 4, 1, 1, 3, 1, 6, 9, 8, 1, 5, 11, 2, 5, 7, 11, 6, 2, 2, 6, 9, 7, 5, 3, 12, 2, + 10, 9, 2, 3, 12, 11, 2, 4, 8, 7, 7, 6, 1, 2, 8, 8, 1, 6, 4, 3, 9, 11, 9, 10, 10, 11, 11, 5, 3, 8, + 7, 8, 8, 7, 4, 12, 10, 12, 5, 7, 4, 4, 8, 11, 9, 3, 12, 1, 8, 5, 8, 3, 4, 8, 4, 2, 1, 11, 3, 12], + "height":20, + "id":1, + "name":"tiles", + "opacity":1, + "properties":[ + { + "name":"position_z", + "type":"float", + "value":-1 + }], + "type":"tilelayer", + "visible":true, + "width":30, + "x":0, + "y":0 + }, + { + "draworder":"topdown", + "id":2, + "name":"objects", + "objects":[ + { + "gid":14, + "height":221, + "id":3, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":169, + "x":1878.70853778214, + "y":1573.21786064769 + }, + { + "gid":14, + "height":221, + "id":4, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":169, + "x":1741.31894013739, + "y":1517.60778541053 + }, + { + "gid":14, + "height":221, + "id":5, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":169, + "x":1587.57343801112, + "y":1468.54007196598 + }, + { + "gid":14, + "height":221, + "id":6, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":169, + "x":2022.6404972195, + "y":1357.31992149166 + }, + { + "gid":13, + "height":264, + "id":7, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":235, + "x":1868.60680405626, + "y":1319.43866535819 + }, + { + "gid":13, + "height":264, + "id":8, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":235, + "x":1966.74223094537, + "y":1231.116781158 + }, + { + "gid":13, + "height":264, + "id":9, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":235, + "x":1538.2175335296, + "y":1139.5237160615 + }, + { + "gid":13, + "height":264, + "id":10, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":235, + "x":1433.53974484789, + "y":1234.3879620543 + }, + { + "gid":13, + "height":264, + "id":11, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":235, + "x":1305.96368989205, + "y":1123.16781157998 + }, + { + "gid":13, + "height":264, + "id":13, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":235, + "x":1122.77755969905, + "y":1254.01504743212 + }, + { + "gid":13, + "height":264, + "id":14, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":235, + "x":851.269545305855, + "y":1538.60778541053 + }, + { + "gid":13, + "height":264, + "id":15, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":235, + "x":825.100098135427, + "y":1689.0821066405 + }, + { + "gid":14, + "height":221, + "id":16, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":169, + "x":730.524043179588, + "y":1586.30258423291 + }, + { + "gid":14, + "height":221, + "id":17, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":169, + "x":1018.3879620543, + "y":1864.35296041871 + }, + { + "gid":14, + "height":221, + "id":18, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":169, + "x":887.540726202159, + "y":1952.67484461891 + }, + { + "gid":14, + "height":221, + "id":19, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":169, + "x":1296.4383382401, + "y":2001.74255806346 + }, + { + "gid":14, + "height":221, + "id":20, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":169, + "x":1741.31894013739, + "y":1926.50539744848 + }, + { + "gid":14, + "height":221, + "id":22, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":169, + "x":1852.53909061171, + "y":2027.91200523389 + }, + { + "gid":13, + "height":264, + "id":23, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":235, + "x":2264.419692509, + "y":1803.57343801112 + }, + { + "gid":13, + "height":264, + "id":24, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":235, + "x":2427.97873732417, + "y":1731.60745829244 + }, + { + "gid":13, + "height":264, + "id":25, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":235, + "x":2562.09715407262, + "y":1656.37029767746 + }, + { + "gid":13, + "height":264, + "id":26, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":235, + "x":2149.92836113837, + "y":2163.40333660451 + }, + { + "gid":13, + "height":264, + "id":27, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":235, + "x":2254.60614982008, + "y":2078.35263330062 + }, + { + "gid":13, + "height":264, + "id":28, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":235, + "x":2258.36127086501, + "y":2283.24795176917 + }, + { + "gid":13, + "height":264, + "id":29, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":235, + "x":-95, + "y":2952 + }, + { + "gid":13, + "height":264, + "id":30, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":235, + "x":48, + "y":2880 + }, + { + "gid":13, + "height":264, + "id":31, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":235, + "x":191, + "y":2808 + }, + { + "gid":13, + "height":264, + "id":32, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":235, + "x":334, + "y":2736 + }, + { + "gid":13, + "height":264, + "id":33, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":235, + "x":477, + "y":2664 + }, + { + "gid":13, + "height":264, + "id":34, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":235, + "x":620, + "y":2592 + }, + + { + "gid":13, + "height":264, + "id":35, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":235, + "x":763, + "y":2520 + }, + { + "gid":13, + "height":264, + "id":36, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":235, + "x":906, + "y":2448 + }, + { + "gid":13, + "height":264, + "id":37, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":235, + "x":1049, + "y":2376 + }, + { + "gid":13, + "height":264, + "id":38, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":235, + "x":1192, + "y":2304 + }, + { + "gid":13, + "height":264, + "id":39, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":235, + "x":1335, + "y":2232 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + { + "draworder":"topdown", + "id":4, + "name":"strange_objects", + "objects":[ + { + "height":400.597163473501, + "id":40, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":609.604379198806, + "x":1161.98059218711, + "y":2388.65389400348 + }, + { + "height":0, + "id":41, + "name":"", + "point":true, + "rotation":0, + "type":"", + "visible":true, + "width":0, + "x":1950.73401343618, + "y":2764.36924608111 + }, + { + "ellipse":true, + "height":398.108982333914, + "id":42, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":470.266235381936, + "x":2139.83578004479, + "y":2373.72480716596 + }, + { + "height":0, + "id":43, + "name":"", + "polyline":[ + { + "x":0, + "y":0 + }, + { + "x":333.416272704653, + "y":-201.542672306544 + }, + { + "x":-4.97636227917383, + "y":-325.951729285892 + }, + { + "x":350.833540681761, + "y":-594.675292361284 + }, + { + "x":666.832545409306, + "y":-609.604379198806 + }, + { + "x":669.320726548893, + "y":-186.613585469022 + }, + { + "x":768.847972132371, + "y":-920.627021647176 + }, + { + "x":99.5272455834784, + "y":-848.469768599154 + }, + { + "x":99.5272455834784, + "y":-845.981587459567 + }, + { + "x":-34.8345359542177, + "y":-405.573525752675 + }], + "rotation":0, + "type":"", + "visible":true, + "width":0, + "x":2928.58920129385, + "y":2682.25926847475 + }, + { + "height":0, + "id":44, + "name":"", + "polygon":[ + { + "x":0, + "y":0 + }, + { + "x":0, + "y":233.889027121174 + }, + { + "x":82.1099776063697, + "y":211.495396864892 + }, + { + "x":52.2518039313259, + "y":-256.282657377457 + }, + { + "x":-94.5508833043045, + "y":-179.149042050261 + }], + "rotation":0, + "type":"", + "visible":true, + "width":0, + "x":2739.48743468525, + "y":2530.48021895994 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }], + "nextlayerid":5, + "nextobjectid":45, + "orientation":"hexagonal", + "renderorder":"right-down", + "staggeraxis":"x", + "staggerindex":"odd", + "tiledversion":"1.11.2", + "tileheight":145, + "tilesets":[ + { + "firstgid":1, + "source":"..\/tilesets\/hexgrid_tiles.json" + }, + { + "firstgid":13, + "source":"..\/tilesets\/hexgrid_objects.json" + }], + "tilewidth":192, + "type":"map", + "version":"1.10", + "width":30 +} \ No newline at end of file diff --git a/tiled/maps/hexgrid_pointy.json b/tiled/maps/hexgrid_pointy.json new file mode 100644 index 0000000..454568a --- /dev/null +++ b/tiled/maps/hexgrid_pointy.json @@ -0,0 +1,115 @@ +{ "compressionlevel":-1, + "height":20, + "hexsidelength":38, + "infinite":false, + "layers":[ + { + "data":[30, 32, 27, 32, 21, 28, 29, 17, 34, 21, 26, 16, 23, 21, 23, 24, 27, 34, 32, 22, 25, 16, 30, 21, 31, 29, 20, 26, 23, 19, + 21, 20, 17, 32, 21, 16, 26, 27, 29, 33, 31, 26, 20, 22, 17, 32, 18, 29, 27, 21, 31, 21, 29, 29, 20, 30, 28, 27, 24, 19, + 18, 29, 27, 33, 33, 25, 19, 20, 23, 31, 31, 0, 29, 29, 19, 24, 32, 19, 25, 32, 33, 33, 17, 19, 15, 16, 26, 32, 24, 31, + 27, 18, 19, 32, 21, 26, 21, 28, 18, 33, 0, 0, 0, 26, 34, 34, 22, 15, 27, 28, 17, 28, 17, 16, 27, 33, 29, 21, 28, 33, + 16, 20, 30, 15, 15, 20, 29, 15, 28, 29, 15, 29, 30, 17, 15, 21, 31, 33, 22, 15, 16, 17, 34, 32, 26, 22, 25, 26, 27, 22, + 33, 33, 20, 31, 17, 26, 18, 26, 24, 32, 26, 17, 31, 33, 22, 24, 30, 33, 21, 31, 0, 15, 23, 33, 26, 25, 22, 16, 21, 20, + 15, 15, 16, 31, 25, 27, 19, 28, 20, 32, 25, 19, 21, 22, 15, 20, 30, 26, 15, 30, 0, 31, 34, 31, 32, 18, 27, 15, 34, 17, + 17, 26, 20, 25, 25, 31, 0, 16, 22, 24, 25, 26, 21, 28, 0, 31, 24, 20, 28, 28, 0, 20, 22, 28, 25, 25, 27, 32, 25, 34, + 23, 30, 21, 32, 16, 21, 0, 20, 24, 25, 19, 32, 33, 20, 0, 20, 34, 25, 21, 24, 24, 0, 18, 32, 33, 20, 31, 23, 22, 27, + 20, 28, 28, 26, 22, 29, 0, 32, 26, 18, 0, 25, 33, 23, 0, 27, 22, 16, 18, 18, 18, 32, 34, 33, 24, 17, 20, 27, 23, 27, + 20, 18, 18, 22, 28, 33, 0, 25, 25, 20, 0, 0, 24, 22, 0, 28, 32, 16, 0, 27, 16, 24, 19, 24, 29, 33, 33, 24, 27, 20, + 16, 16, 20, 34, 20, 16, 0, 15, 19, 33, 0, 0, 18, 18, 0, 28, 18, 23, 0, 19, 28, 20, 24, 28, 30, 15, 32, 29, 21, 20, + 30, 19, 34, 31, 21, 24, 15, 0, 19, 21, 33, 31, 28, 0, 0, 20, 17, 23, 0, 17, 33, 34, 15, 0, 29, 25, 29, 30, 25, 16, + 25, 19, 22, 23, 17, 15, 18, 0, 27, 31, 18, 0, 0, 0, 29, 18, 34, 0, 32, 28, 31, 0, 0, 22, 16, 23, 25, 22, 22, 20, + 20, 27, 15, 17, 29, 22, 27, 33, 0, 0, 0, 0, 22, 27, 30, 18, 0, 0, 17, 28, 31, 0, 33, 24, 31, 23, 28, 30, 32, 33, + 26, 18, 27, 34, 27, 22, 31, 16, 17, 29, 25, 26, 15, 18, 15, 20, 33, 23, 22, 18, 0, 33, 33, 28, 18, 24, 18, 28, 26, 16, + 31, 19, 27, 22, 28, 34, 32, 19, 28, 27, 34, 23, 24, 17, 27, 17, 26, 26, 15, 24, 0, 0, 31, 22, 30, 28, 30, 29, 22, 22, + 34, 24, 21, 32, 31, 34, 20, 15, 27, 19, 23, 32, 31, 17, 26, 27, 24, 18, 32, 29, 32, 27, 16, 31, 20, 24, 33, 29, 21, 16, + 16, 21, 20, 24, 16, 18, 18, 23, 34, 34, 23, 17, 21, 18, 34, 31, 30, 17, 22, 23, 26, 25, 25, 30, 18, 34, 30, 21, 16, 18, + 19, 31, 18, 34, 20, 27, 30, 15, 15, 25, 18, 33, 22, 22, 31, 20, 27, 19, 33, 19, 26, 27, 22, 33, 22, 20, 28, 31, 22, 18], + "height":20, + "id":1, + "name":"tiles", + "opacity":1, + "properties":[ + { + "name":"position_z", + "type":"float", + "value":-1 + }], + "type":"tilelayer", + "visible":true, + "width":30, + "x":0, + "y":0 + }, + { + "draworder":"topdown", + "id":2, + "name":"objects", + "objects":[ + { + "gid":13, + "height":264, + "id":40, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":235, + "x":0, + "y":0 + }, + { + "gid":13, + "height":97.4829828705128, + "id":41, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":86.7746249036762, + "x":146.659808914908, + "y":609.560627174192 + }, + { + "gid":13, + "height":136.325540126502, + "id":42, + "name":"", + "rotation":90, + "type":"", + "visible":true, + "width":121.350329947387, + "x":466.822255692162, + "y":453.923741473732 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }], + "nextlayerid":3, + "nextobjectid":43, + "orientation":"hexagonal", + "renderorder":"right-down", + "staggeraxis":"y", + "staggerindex":"odd", + "tiledversion":"1.11.2", + "tileheight":65, + "tilesets":[ + { + "firstgid":1, + "source":"..\/tilesets\/hexgrid_tiles.json" + }, + { + "firstgid":13, + "source":"..\/tilesets\/hexgrid_objects.json" + }, + { + "firstgid":15, + "source":"..\/tilesets\/hexgrid_pointy.json" + }], + "tilewidth":65, + "type":"map", + "version":"1.10", + "width":30 +} \ No newline at end of file diff --git a/tiled/maps/isogrid.json b/tiled/maps/isogrid.json new file mode 100644 index 0000000..4971b00 --- /dev/null +++ b/tiled/maps/isogrid.json @@ -0,0 +1,196 @@ +{ "compressionlevel":-1, + "height":20, + "infinite":false, + "layers":[ + { + "data":[31, 31, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 1, 1, + 31, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 1, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 22, 22, 22, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 22, 22, 22, 22, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 22, 22, 22, 22, 22, 76, 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 22, 22, 22, 22, 22, 22, 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 22, 22, 22, 22, 22, 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 22, 22, 22, 15, 15, 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 31, 31, 37, 39, 76, 76, 22, 22, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 86, 31, 31, 31, 31, 76, 76, 76, 63, 22, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 86, 31, 31, 31, 31, 31, 75, 2147483710, 63, 31, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 86, 84, 82, 31, 31, 25, 19, 17, 72, 31, 54, 53, 32, 32, 32, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 77, 78, 77, 81, 81, 81, 62, 72, 31, 31, 50, 49, 52, 52, 52, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 31, 31, 31, 31, 49, 52, 53, 32, 32, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 31, 31, 12, 6, 6, 10, 50, 12, 6, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 6, 6, 3, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, + 22, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 61, + 22, 22, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 61, 61], + "height":20, + "id":1, + "name":"tiles", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":30, + "x":0, + "y":0 + }, + { + "draworder":"topdown", + "id":2, + "name":"objects", + "objects":[ + { + "gid":89, + "height":61.5723, + "id":34, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":53.0949, + "x":0, + "y":0 + }, + { + "gid":89, + "height":61.5723, + "id":35, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":53.0949, + "x":-8.1601392309949e-15, + "y":49 + }, + { + "gid":89, + "height":61.5723, + "id":37, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":53.0949, + "x":49, + "y":0 + }, + { + "gid":89, + "height":34.0849164575597, + "id":39, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":29.3920355553144, + "x":49, + "y":49 + }, + { + "gid":89, + "height":76.759273070589, + "id":40, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":66.1908514940855, + "x":530.911414272719, + "y":629.945858242628 + }, + { + "gid":89, + "height":76.7593, + "id":41, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":66.1909, + "x":628.865789302753, + "y":630.665812139635 + }, + { + "gid":89, + "height":76.7593, + "id":42, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":66.1909, + "x":720.569737770332, + "y":606.533194121851 + }, + { + "gid":89, + "height":76.7593, + "id":43, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":66.1909, + "x":897.387573631402, + "y":471.297715460655 + }, + { + "height":0, + "id":44, + "name":"", + "polygon":[ + { + "x":0, + "y":0 + }, + { + "x":-1.54117905333844, + "y":952.907895325105 + }, + { + "x":1444.99077106636, + "y":955.006951538289 + }, + { + "x":1441.18242197652, + "y":0.945712195948921 + }], + "rotation":0, + "type":"", + "visible":true, + "width":0, + "x":0.327832840141114, + "y":-0.069391499864323 + }], + "opacity":1, + "properties":[ + { + "name":"position_z", + "type":"float", + "value":1 + }], + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }], + "nextlayerid":3, + "nextobjectid":45, + "orientation":"isometric", + "renderorder":"right-down", + "tiledversion":"1.11.2", + "tileheight":49, + "tilesets":[ + { + "firstgid":1, + "source":"..\/tilesets\/isogrid_tileset.json" + }, + { + "firstgid":89, + "source":"..\/tilesets\/hexgrid_objects.json" + }], + "tilewidth":98, + "type":"map", + "version":"1.10", + "width":30 +} \ No newline at end of file diff --git a/tiled/maps/isogrid_staggered.json b/tiled/maps/isogrid_staggered.json new file mode 100644 index 0000000..a5d6c81 --- /dev/null +++ b/tiled/maps/isogrid_staggered.json @@ -0,0 +1,170 @@ +{ "compressionlevel":-1, + "height":20, + "infinite":false, + "layers":[ + { + "data":[31, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 1, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 1, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 80, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 86, 79, 76, 76, 76, 1, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 31, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 31, 77, 2147483730, 76, 76, 76, 1, 1, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 31, 31, 31, 76, 76, 76, 76, 31, 76, 76, 76, 31, 31, 2147483733, 79, 76, 76, 1, 1, 1, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 31, 31, 76, 76, 76, 31, 31, 76, 76, 76, 31, 44, 31, 85, 76, 76, 1, 1, 1, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 31, 31, 31, 76, 76, 31, 31, 31, 76, 76, 31, 45, 42, 31, 88, 76, 76, 1, 1, 1, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 31, 31, 31, 76, 76, 31, 31, 31, 76, 76, 75, 31, 20, 75, 31, 79, 76, 1, 1, 1, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 31, 31, 31, 76, 31, 31, 31, 31, 76, 63, 2147483711, 64, 72, 24, 83, 76, 1, 1, 1, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 31, 31, 31, 76, 31, 31, 31, 31, 76, 62, 31, 16, 31, 84, 85, 76, 76, 1, 1, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 31, 31, 31, 76, 31, 31, 31, 31, 81, 73, 67, 74, 85, 81, 79, 76, 1, 1, 1, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 31, 31, 76, 31, 31, 31, 31, 76, 81, 18, 2147483722, 31, 79, 78, 76, 76, 1, 1, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 31, 31, 76, 31, 31, 31, 76, 76, 81, 73, 74, 83, 76, 76, 76, 76, 1, 1, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 31, 31, 76, 76, 31, 31, 76, 76, 76, 81, 72, 83, 76, 76, 76, 76, 76, 1, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 31, 76, 76, 76, 76, 76, 76, 76, 76, 81, 83, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 78, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, + 22, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, + 22, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 61], + "height":20, + "id":1, + "name":"tiles", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":30, + "x":0, + "y":0 + }, + { + "draworder":"topdown", + "id":2, + "name":"objects", + "objects":[ + { + "gid":89, + "height":264, + "id":24, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":235, + "x":451.133276377616, + "y":379.757368645878 + }, + { + "gid":89, + "height":264, + "id":25, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":235, + "x":724.520717642033, + "y":274.389292325217 + }, + { + "gid":89, + "height":149.04888266469, + "id":26, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":132.676088735614, + "x":1581.2189248366, + "y":157.77818320816 + }, + { + "gid":90, + "height":221, + "id":27, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":169, + "x":2130.14706811718, + "y":114.611249040762 + }, + { + "gid":90, + "height":51.0859828054432, + "id":29, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":35.448254275545, + "x":1762.7588109643, + "y":84.4788853927294 + }, + { + "gid":90, + "height":51.086, + "id":30, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":35.4483, + "x":1745.5521200663, + "y":92.7762274074232 + }, + { + "gid":90, + "height":51.086, + "id":31, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":35.4483, + "x":1727.43115731021, + "y":101.090551495512 + }, + { + "gid":90, + "height":51.086, + "id":32, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":35.4483, + "x":1710.37613353977, + "y":110.257626772124 + }], + "opacity":1, + "properties":[ + { + "name":"position_z", + "type":"float", + "value":1 + }], + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }], + "nextlayerid":4, + "nextobjectid":33, + "orientation":"staggered", + "renderorder":"right-down", + "staggeraxis":"y", + "staggerindex":"odd", + "tiledversion":"1.11.2", + "tileheight":48, + "tilesets":[ + { + "firstgid":1, + "source":"..\/tilesets\/isogrid_tileset.json" + }, + { + "firstgid":89, + "source":"..\/tilesets\/hexgrid_objects.json" + }], + "tilewidth":96, + "type":"map", + "version":"1.10", + "width":30 +} \ No newline at end of file diff --git a/tiled/tilesets/grid_game_objects.json b/tiled/tilesets/grid_game_objects.json new file mode 100644 index 0000000..7e11db5 --- /dev/null +++ b/tiled/tilesets/grid_game_objects.json @@ -0,0 +1,1656 @@ +{ "columns":0, + "grid": + { + "height":1, + "orientation":"orthogonal", + "width":1 + }, + "margin":0, + "name":"grid_game_objects", + "spacing":0, + "tilecount":234, + "tiledversion":"1.11.2", + "tileheight":16, + "tiles":[ + { + "id":0, + "image":"..\/assets\/grid_game_objects\/tile_0000.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":1, + "image":"..\/assets\/grid_game_objects\/tile_0001.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":2, + "image":"..\/assets\/grid_game_objects\/tile_0002.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":3, + "image":"..\/assets\/grid_game_objects\/tile_0003.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":4, + "image":"..\/assets\/grid_game_objects\/tile_0004.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":5, + "image":"..\/assets\/grid_game_objects\/tile_0005.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":6, + "image":"..\/assets\/grid_game_objects\/tile_0006.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":7, + "image":"..\/assets\/grid_game_objects\/tile_0007.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":8, + "image":"..\/assets\/grid_game_objects\/tile_0008.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":9, + "image":"..\/assets\/grid_game_objects\/tile_0009.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":10, + "image":"..\/assets\/grid_game_objects\/tile_0010.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":11, + "image":"..\/assets\/grid_game_objects\/tile_0011.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":12, + "image":"..\/assets\/grid_game_objects\/tile_0012.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":13, + "image":"..\/assets\/grid_game_objects\/tile_0013.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":14, + "image":"..\/assets\/grid_game_objects\/tile_0014.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":15, + "image":"..\/assets\/grid_game_objects\/tile_0015.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":16, + "image":"..\/assets\/grid_game_objects\/tile_0016.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":17, + "image":"..\/assets\/grid_game_objects\/tile_0017.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":18, + "image":"..\/assets\/grid_game_objects\/tile_0018.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":19, + "image":"..\/assets\/grid_game_objects\/tile_0019.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":20, + "image":"..\/assets\/grid_game_objects\/tile_0020.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":21, + "image":"..\/assets\/grid_game_objects\/tile_0021.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":22, + "image":"..\/assets\/grid_game_objects\/tile_0022.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":23, + "image":"..\/assets\/grid_game_objects\/tile_0023.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":24, + "image":"..\/assets\/grid_game_objects\/tile_0024.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":25, + "image":"..\/assets\/grid_game_objects\/tile_0025.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":26, + "image":"..\/assets\/grid_game_objects\/tile_0026.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":27, + "image":"..\/assets\/grid_game_objects\/tile_0027.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":28, + "image":"..\/assets\/grid_game_objects\/tile_0028.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":29, + "image":"..\/assets\/grid_game_objects\/tile_0029.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":30, + "image":"..\/assets\/grid_game_objects\/tile_0030.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":31, + "image":"..\/assets\/grid_game_objects\/tile_0031.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":32, + "image":"..\/assets\/grid_game_objects\/tile_0032.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":33, + "image":"..\/assets\/grid_game_objects\/tile_0033.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":34, + "image":"..\/assets\/grid_game_objects\/tile_0034.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":35, + "image":"..\/assets\/grid_game_objects\/tile_0035.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":36, + "image":"..\/assets\/grid_game_objects\/tile_0036.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":37, + "image":"..\/assets\/grid_game_objects\/tile_0037.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":38, + "image":"..\/assets\/grid_game_objects\/tile_0038.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":39, + "image":"..\/assets\/grid_game_objects\/tile_0039.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":40, + "image":"..\/assets\/grid_game_objects\/tile_0040.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":41, + "image":"..\/assets\/grid_game_objects\/tile_0041.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":42, + "image":"..\/assets\/grid_game_objects\/tile_0042.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":43, + "image":"..\/assets\/grid_game_objects\/tile_0043.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":44, + "image":"..\/assets\/grid_game_objects\/tile_0044.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":45, + "image":"..\/assets\/grid_game_objects\/tile_0045.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":46, + "image":"..\/assets\/grid_game_objects\/tile_0046.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":47, + "image":"..\/assets\/grid_game_objects\/tile_0047.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":48, + "image":"..\/assets\/grid_game_objects\/tile_0048.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":49, + "image":"..\/assets\/grid_game_objects\/tile_0049.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":50, + "image":"..\/assets\/grid_game_objects\/tile_0050.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":51, + "image":"..\/assets\/grid_game_objects\/tile_0051.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":52, + "image":"..\/assets\/grid_game_objects\/tile_0052.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":53, + "image":"..\/assets\/grid_game_objects\/tile_0053.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":54, + "image":"..\/assets\/grid_game_objects\/tile_0054.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":55, + "image":"..\/assets\/grid_game_objects\/tile_0055.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":56, + "image":"..\/assets\/grid_game_objects\/tile_0056.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":57, + "image":"..\/assets\/grid_game_objects\/tile_0057.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":58, + "image":"..\/assets\/grid_game_objects\/tile_0058.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":59, + "image":"..\/assets\/grid_game_objects\/tile_0059.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":60, + "image":"..\/assets\/grid_game_objects\/tile_0060.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":61, + "image":"..\/assets\/grid_game_objects\/tile_0061.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":62, + "image":"..\/assets\/grid_game_objects\/tile_0062.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":63, + "image":"..\/assets\/grid_game_objects\/tile_0063.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":64, + "image":"..\/assets\/grid_game_objects\/tile_0064.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":65, + "image":"..\/assets\/grid_game_objects\/tile_0065.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":66, + "image":"..\/assets\/grid_game_objects\/tile_0066.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":67, + "image":"..\/assets\/grid_game_objects\/tile_0067.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":68, + "image":"..\/assets\/grid_game_objects\/tile_0068.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":69, + "image":"..\/assets\/grid_game_objects\/tile_0069.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":70, + "image":"..\/assets\/grid_game_objects\/tile_0070.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":71, + "image":"..\/assets\/grid_game_objects\/tile_0071.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":72, + "image":"..\/assets\/grid_game_objects\/tile_0072.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":73, + "image":"..\/assets\/grid_game_objects\/tile_0073.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":74, + "image":"..\/assets\/grid_game_objects\/tile_0074.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":75, + "image":"..\/assets\/grid_game_objects\/tile_0075.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":76, + "image":"..\/assets\/grid_game_objects\/tile_0076.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":77, + "image":"..\/assets\/grid_game_objects\/tile_0077.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":78, + "image":"..\/assets\/grid_game_objects\/tile_0078.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":79, + "image":"..\/assets\/grid_game_objects\/tile_0079.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":80, + "image":"..\/assets\/grid_game_objects\/tile_0080.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":81, + "image":"..\/assets\/grid_game_objects\/tile_0081.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":82, + "image":"..\/assets\/grid_game_objects\/tile_0082.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":83, + "image":"..\/assets\/grid_game_objects\/tile_0083.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":84, + "image":"..\/assets\/grid_game_objects\/tile_0084.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":85, + "image":"..\/assets\/grid_game_objects\/tile_0085.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":86, + "image":"..\/assets\/grid_game_objects\/tile_0086.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":87, + "image":"..\/assets\/grid_game_objects\/tile_0087.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":88, + "image":"..\/assets\/grid_game_objects\/tile_0088.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":89, + "image":"..\/assets\/grid_game_objects\/tile_0089.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":90, + "image":"..\/assets\/grid_game_objects\/tile_0090.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":91, + "image":"..\/assets\/grid_game_objects\/tile_0091.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":92, + "image":"..\/assets\/grid_game_objects\/tile_0092.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":93, + "image":"..\/assets\/grid_game_objects\/tile_0093.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":94, + "image":"..\/assets\/grid_game_objects\/tile_0094.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":95, + "image":"..\/assets\/grid_game_objects\/tile_0095.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":96, + "image":"..\/assets\/grid_game_objects\/tile_0096.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":97, + "image":"..\/assets\/grid_game_objects\/tile_0097.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":98, + "image":"..\/assets\/grid_game_objects\/tile_0098.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":99, + "image":"..\/assets\/grid_game_objects\/tile_0099.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":100, + "image":"..\/assets\/grid_game_objects\/tile_0100.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":101, + "image":"..\/assets\/grid_game_objects\/tile_0101.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":102, + "image":"..\/assets\/grid_game_objects\/tile_0102.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":103, + "image":"..\/assets\/grid_game_objects\/tile_0103.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":104, + "image":"..\/assets\/grid_game_objects\/tile_0104.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":105, + "image":"..\/assets\/grid_game_objects\/tile_0105.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":106, + "image":"..\/assets\/grid_game_objects\/tile_0106.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":107, + "image":"..\/assets\/grid_game_objects\/tile_0107.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":108, + "image":"..\/assets\/grid_game_objects\/tile_0108.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":109, + "image":"..\/assets\/grid_game_objects\/tile_0109.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":110, + "image":"..\/assets\/grid_game_objects\/tile_0110.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":111, + "image":"..\/assets\/grid_game_objects\/tile_0111.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":112, + "image":"..\/assets\/grid_game_objects\/tile_0112.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":113, + "image":"..\/assets\/grid_game_objects\/tile_0113.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":114, + "image":"..\/assets\/grid_game_objects\/tile_0114.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":115, + "image":"..\/assets\/grid_game_objects\/tile_0115.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":116, + "image":"..\/assets\/grid_game_objects\/tile_0116.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":117, + "image":"..\/assets\/grid_game_objects\/tile_0117.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":118, + "image":"..\/assets\/grid_game_objects\/tile_0118.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":119, + "image":"..\/assets\/grid_game_objects\/tile_0119.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":120, + "image":"..\/assets\/grid_game_objects\/tile_0120.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":121, + "image":"..\/assets\/grid_game_objects\/tile_0121.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":122, + "image":"..\/assets\/grid_game_objects\/tile_0122.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":123, + "image":"..\/assets\/grid_game_objects\/tile_0123.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":124, + "image":"..\/assets\/grid_game_objects\/tile_0124.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":125, + "image":"..\/assets\/grid_game_objects\/tile_0125.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":126, + "image":"..\/assets\/grid_game_objects\/tile_0126.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":127, + "image":"..\/assets\/grid_game_objects\/tile_0127.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":128, + "image":"..\/assets\/grid_game_objects\/tile_0128.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":129, + "image":"..\/assets\/grid_game_objects\/tile_0129.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":130, + "image":"..\/assets\/grid_game_objects\/tile_0130.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":131, + "image":"..\/assets\/grid_game_objects\/tile_0131.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":132, + "image":"..\/assets\/grid_game_objects\/tile_0132.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":133, + "image":"..\/assets\/grid_game_objects\/tile_0133.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":134, + "image":"..\/assets\/grid_game_objects\/tile_0134.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":135, + "image":"..\/assets\/grid_game_objects\/tile_0135.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":136, + "image":"..\/assets\/grid_game_objects\/tile_0136.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":137, + "image":"..\/assets\/grid_game_objects\/tile_0137.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":138, + "image":"..\/assets\/grid_game_objects\/tile_0138.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":139, + "image":"..\/assets\/grid_game_objects\/tile_0139.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":140, + "image":"..\/assets\/grid_game_objects\/tile_0140.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":141, + "image":"..\/assets\/grid_game_objects\/tile_0141.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":142, + "image":"..\/assets\/grid_game_objects\/tile_0142.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":143, + "image":"..\/assets\/grid_game_objects\/tile_0143.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":144, + "image":"..\/assets\/grid_game_objects\/tile_0144.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":145, + "image":"..\/assets\/grid_game_objects\/tile_0145.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":146, + "image":"..\/assets\/grid_game_objects\/tile_0146.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":147, + "image":"..\/assets\/grid_game_objects\/tile_0147.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":148, + "image":"..\/assets\/grid_game_objects\/tile_0148.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":149, + "image":"..\/assets\/grid_game_objects\/tile_0149.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":150, + "image":"..\/assets\/grid_game_objects\/tile_0150.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":151, + "image":"..\/assets\/grid_game_objects\/tile_0151.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":152, + "image":"..\/assets\/grid_game_objects\/tile_0152.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":153, + "image":"..\/assets\/grid_game_objects\/tile_0153.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":154, + "image":"..\/assets\/grid_game_objects\/tile_0154.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":155, + "image":"..\/assets\/grid_game_objects\/tile_0155.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":156, + "image":"..\/assets\/grid_game_objects\/tile_0156.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":157, + "image":"..\/assets\/grid_game_objects\/tile_0157.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":158, + "image":"..\/assets\/grid_game_objects\/tile_0158.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":159, + "image":"..\/assets\/grid_game_objects\/tile_0159.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":160, + "image":"..\/assets\/grid_game_objects\/tile_0160.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":161, + "image":"..\/assets\/grid_game_objects\/tile_0161.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":162, + "image":"..\/assets\/grid_game_objects\/tile_0162.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":163, + "image":"..\/assets\/grid_game_objects\/tile_0163.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":164, + "image":"..\/assets\/grid_game_objects\/tile_0164.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":165, + "image":"..\/assets\/grid_game_objects\/tile_0165.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":166, + "image":"..\/assets\/grid_game_objects\/tile_0166.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":167, + "image":"..\/assets\/grid_game_objects\/tile_0167.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":168, + "image":"..\/assets\/grid_game_objects\/tile_0168.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":169, + "image":"..\/assets\/grid_game_objects\/tile_0169.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":170, + "image":"..\/assets\/grid_game_objects\/tile_0170.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":171, + "image":"..\/assets\/grid_game_objects\/tile_0171.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":172, + "image":"..\/assets\/grid_game_objects\/tile_0172.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":173, + "image":"..\/assets\/grid_game_objects\/tile_0173.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":174, + "image":"..\/assets\/grid_game_objects\/tile_0174.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":175, + "image":"..\/assets\/grid_game_objects\/tile_0175.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":176, + "image":"..\/assets\/grid_game_objects\/tile_0176.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":177, + "image":"..\/assets\/grid_game_objects\/tile_0177.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":178, + "image":"..\/assets\/grid_game_objects\/tile_0178.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":179, + "image":"..\/assets\/grid_game_objects\/tile_0179.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":180, + "image":"..\/assets\/grid_game_objects\/tile_0180.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":181, + "image":"..\/assets\/grid_game_objects\/tile_0181.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":182, + "image":"..\/assets\/grid_game_objects\/tile_0182.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":183, + "image":"..\/assets\/grid_game_objects\/tile_0183.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":184, + "image":"..\/assets\/grid_game_objects\/tile_0184.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":185, + "image":"..\/assets\/grid_game_objects\/tile_0185.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":186, + "image":"..\/assets\/grid_game_objects\/tile_0186.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":187, + "image":"..\/assets\/grid_game_objects\/tile_0187.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":188, + "image":"..\/assets\/grid_game_objects\/tile_0188.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":189, + "image":"..\/assets\/grid_game_objects\/tile_0189.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":190, + "image":"..\/assets\/grid_game_objects\/tile_0190.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":191, + "image":"..\/assets\/grid_game_objects\/tile_0191.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":192, + "image":"..\/assets\/grid_game_objects\/tile_0192.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":193, + "image":"..\/assets\/grid_game_objects\/tile_0193.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":194, + "image":"..\/assets\/grid_game_objects\/tile_0194.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":195, + "image":"..\/assets\/grid_game_objects\/tile_0195.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":196, + "image":"..\/assets\/grid_game_objects\/tile_0196.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":197, + "image":"..\/assets\/grid_game_objects\/tile_0197.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":198, + "image":"..\/assets\/grid_game_objects\/tile_0198.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":199, + "image":"..\/assets\/grid_game_objects\/tile_0199.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":200, + "image":"..\/assets\/grid_game_objects\/tile_0200.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":201, + "image":"..\/assets\/grid_game_objects\/tile_0201.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":202, + "image":"..\/assets\/grid_game_objects\/tile_0202.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":203, + "image":"..\/assets\/grid_game_objects\/tile_0203.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":204, + "image":"..\/assets\/grid_game_objects\/tile_0204.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":205, + "image":"..\/assets\/grid_game_objects\/tile_0205.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":206, + "image":"..\/assets\/grid_game_objects\/tile_0206.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":207, + "image":"..\/assets\/grid_game_objects\/tile_0207.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":208, + "image":"..\/assets\/grid_game_objects\/tile_0208.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":209, + "image":"..\/assets\/grid_game_objects\/tile_0209.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":210, + "image":"..\/assets\/grid_game_objects\/tile_0210.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":211, + "image":"..\/assets\/grid_game_objects\/tile_0211.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":212, + "image":"..\/assets\/grid_game_objects\/tile_0212.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":213, + "image":"..\/assets\/grid_game_objects\/tile_0213.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":214, + "image":"..\/assets\/grid_game_objects\/tile_0214.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":215, + "image":"..\/assets\/grid_game_objects\/tile_0215.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":216, + "image":"..\/assets\/grid_game_objects\/tile_0216.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":217, + "image":"..\/assets\/grid_game_objects\/tile_0217.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":218, + "image":"..\/assets\/grid_game_objects\/tile_0218.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":219, + "image":"..\/assets\/grid_game_objects\/tile_0219.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":220, + "image":"..\/assets\/grid_game_objects\/tile_0220.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":221, + "image":"..\/assets\/grid_game_objects\/tile_0221.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":222, + "image":"..\/assets\/grid_game_objects\/tile_0222.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":223, + "image":"..\/assets\/grid_game_objects\/tile_0223.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":224, + "image":"..\/assets\/grid_game_objects\/tile_0224.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":225, + "image":"..\/assets\/grid_game_objects\/tile_0225.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":226, + "image":"..\/assets\/grid_game_objects\/tile_0226.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":227, + "image":"..\/assets\/grid_game_objects\/tile_0227.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":228, + "image":"..\/assets\/grid_game_objects\/tile_0228.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":229, + "image":"..\/assets\/grid_game_objects\/tile_0229.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":230, + "image":"..\/assets\/grid_game_objects\/tile_0230.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":231, + "image":"..\/assets\/grid_game_objects\/tile_0231.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":232, + "image":"..\/assets\/grid_game_objects\/tile_0232.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }, + { + "id":233, + "image":"..\/assets\/grid_game_objects\/tile_0233.png", + "imageheight":16, + "imagewidth":16, + "type":"tile" + }], + "tilewidth":16, + "type":"tileset", + "version":"1.10" +} \ No newline at end of file diff --git a/tiled/tilesets/grid_items.json b/tiled/tilesets/grid_items.json new file mode 100644 index 0000000..347f09b --- /dev/null +++ b/tiled/tilesets/grid_items.json @@ -0,0 +1,66 @@ +{ "columns":0, + "grid": + { + "height":1, + "orientation":"orthogonal", + "width":1 + }, + "margin":0, + "name":"grid_items", + "properties":[ + { + "name":"tilesource", + "type":"string", + "value":"\/example\/assets\/grid\/grid_ignore_export.tilesource" + }], + "spacing":0, + "tilecount":7, + "tiledversion":"1.11.2", + "tileheight":16, + "tiles":[ + { + "id":7, + "image":"..\/assets\/grid\/cactus.png", + "imageheight":16, + "imagewidth":16 + }, + { + "id":8, + "image":"..\/assets\/grid\/icon_barrel.png", + "imageheight":16, + "imagewidth":16 + }, + { + "id":9, + "image":"..\/assets\/grid\/icon_chest.png", + "imageheight":16, + "imagewidth":16 + }, + { + "id":10, + "image":"..\/assets\/grid\/icon_key.png", + "imageheight":16, + "imagewidth":16 + }, + { + "id":11, + "image":"..\/assets\/grid\/icon_stop.png", + "imageheight":16, + "imagewidth":16 + }, + { + "id":12, + "image":"..\/assets\/grid\/icon_table.png", + "imageheight":16, + "imagewidth":16 + }, + { + "id":14, + "image":"..\/assets\/grid\/tree.png", + "imageheight":16, + "imagewidth":16 + }], + "tilewidth":16, + "type":"tileset", + "version":"1.10" +} \ No newline at end of file diff --git a/tiled/tilesets/grid_tileset.json b/tiled/tilesets/grid_tileset.json new file mode 100644 index 0000000..3a2b8d1 --- /dev/null +++ b/tiled/tilesets/grid_tileset.json @@ -0,0 +1,109 @@ +{ "columns":18, + "image":"..\/assets\/grid\/tilemap_packed.png", + "imageheight":208, + "imagewidth":288, + "margin":0, + "name":"grid_tileset", + "properties":[ + { + "name":"tilesource", + "type":"string", + "value":"\/example\/assets\/grid\/grid_tileset.tilesource" + }], + "spacing":0, + "tilecount":234, + "tiledversion":"1.11.2", + "tileheight":16, + "tiles":[ + { + "id":0, + "properties":[ + { + "name":"tilesource", + "type":"string", + "value":"\/example\/assets\/grid\/grid_tileset.tilesource" + }] + }], + "tilewidth":16, + "type":"tileset", + "version":"1.10", + "wangsets":[ + { + "colors":[ + { + "color":"#ff0000", + "name":"", + "probability":1, + "tile":-1 + }], + "name":"Unnamed Set", + "tile":-1, + "type":"corner", + "wangtiles":[ + { + "tileid":154, + "wangid":[0, 0, 0, 1, 0, 0, 0, 0] + }, + { + "tileid":156, + "wangid":[0, 0, 0, 0, 0, 1, 0, 0] + }, + { + "tileid":190, + "wangid":[0, 1, 0, 0, 0, 0, 0, 0] + }, + { + "tileid":192, + "wangid":[0, 0, 0, 0, 0, 0, 0, 1] + }] + }, + { + "colors":[ + { + "color":"#ff0000", + "name":"", + "probability":1, + "tile":-1 + }], + "name":"Unnamed Set", + "tile":-1, + "type":"edge", + "wangtiles":[ + { + "tileid":154, + "wangid":[0, 0, 1, 0, 1, 0, 0, 0] + }, + { + "tileid":155, + "wangid":[0, 0, 1, 0, 1, 0, 1, 0] + }, + { + "tileid":156, + "wangid":[0, 0, 0, 0, 1, 0, 1, 0] + }, + { + "tileid":172, + "wangid":[1, 0, 1, 0, 1, 0, 0, 0] + }, + { + "tileid":173, + "wangid":[1, 0, 1, 0, 1, 0, 1, 0] + }, + { + "tileid":174, + "wangid":[1, 0, 0, 0, 1, 0, 1, 0] + }, + { + "tileid":190, + "wangid":[1, 0, 1, 0, 0, 0, 0, 0] + }, + { + "tileid":191, + "wangid":[1, 0, 1, 0, 0, 0, 1, 0] + }, + { + "tileid":192, + "wangid":[1, 0, 0, 0, 0, 0, 1, 0] + }] + }] +} \ No newline at end of file diff --git a/tiled/tilesets/hexgrid_objects.json b/tiled/tilesets/hexgrid_objects.json new file mode 100644 index 0000000..cdf8e8d --- /dev/null +++ b/tiled/tilesets/hexgrid_objects.json @@ -0,0 +1,77 @@ +{ "columns":0, + "grid": + { + "height":1, + "orientation":"orthogonal", + "width":1 + }, + "margin":0, + "name":"hexgrid_objects", + "spacing":0, + "tilecount":2, + "tiledversion":"1.11.2", + "tileheight":264, + "tiles":[ + { + "id":0, + "image":"..\/assets\/hexgrid\/r_tree_round_2.png", + "imageheight":264, + "imagewidth":235, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":0, + "id":1, + "name":"", + "point":true, + "rotation":0, + "type":"", + "visible":true, + "width":0, + "x":124.330714586181, + "y":238.896319673135 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + } + }, + { + "id":1, + "image":"..\/assets\/hexgrid\/r_tree_round.png", + "imageheight":221, + "imagewidth":169, + "objectgroup": + { + "draworder":"index", + "name":"", + "objects":[ + { + "height":0, + "id":1, + "name":"", + "point":true, + "rotation":0, + "type":"", + "visible":true, + "width":0, + "x":79.155507606688, + "y":199.992964598974 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + } + }], + "tilewidth":235, + "type":"tileset", + "version":"1.10" +} \ No newline at end of file diff --git a/tiled/tilesets/hexgrid_pointy.json b/tiled/tilesets/hexgrid_pointy.json new file mode 100644 index 0000000..e2e862c --- /dev/null +++ b/tiled/tilesets/hexgrid_pointy.json @@ -0,0 +1,138 @@ +{ "columns":0, + "grid": + { + "height":1, + "orientation":"orthogonal", + "width":1 + }, + "margin":0, + "name":"hexgrid_pointy", + "spacing":0, + "tilecount":20, + "tiledversion":"1.11.2", + "tileheight":89, + "tiles":[ + { + "id":0, + "image":"..\/assets\/hexgrid_pointy\/tileAutumn_full.png", + "imageheight":89, + "imagewidth":65 + }, + { + "id":1, + "image":"..\/assets\/hexgrid_pointy\/tileAutumn.png", + "imageheight":89, + "imagewidth":65 + }, + { + "id":2, + "image":"..\/assets\/hexgrid_pointy\/tileDirt_full.png", + "imageheight":89, + "imagewidth":65 + }, + { + "id":3, + "image":"..\/assets\/hexgrid_pointy\/tileDirt.png", + "imageheight":89, + "imagewidth":65 + }, + { + "id":4, + "image":"..\/assets\/hexgrid_pointy\/tileGrass_full.png", + "imageheight":89, + "imagewidth":65 + }, + { + "id":5, + "image":"..\/assets\/hexgrid_pointy\/tileGrass.png", + "imageheight":89, + "imagewidth":65 + }, + { + "id":6, + "image":"..\/assets\/hexgrid_pointy\/tileLava_full.png", + "imageheight":89, + "imagewidth":65 + }, + { + "id":7, + "image":"..\/assets\/hexgrid_pointy\/tileLava.png", + "imageheight":89, + "imagewidth":65 + }, + { + "id":8, + "image":"..\/assets\/hexgrid_pointy\/tileMagic_full.png", + "imageheight":89, + "imagewidth":65 + }, + { + "id":9, + "image":"..\/assets\/hexgrid_pointy\/tileMagic.png", + "imageheight":89, + "imagewidth":65 + }, + { + "id":10, + "image":"..\/assets\/hexgrid_pointy\/tileRock_full.png", + "imageheight":89, + "imagewidth":65 + }, + { + "id":11, + "image":"..\/assets\/hexgrid_pointy\/tileRock.png", + "imageheight":89, + "imagewidth":65 + }, + { + "id":12, + "image":"..\/assets\/hexgrid_pointy\/tileSand_full.png", + "imageheight":89, + "imagewidth":65 + }, + { + "id":13, + "image":"..\/assets\/hexgrid_pointy\/tileSand.png", + "imageheight":89, + "imagewidth":65 + }, + { + "id":14, + "image":"..\/assets\/hexgrid_pointy\/tileSnow.png", + "imageheight":89, + "imagewidth":65 + }, + { + "id":15, + "image":"..\/assets\/hexgrid_pointy\/tileStone_full.png", + "imageheight":89, + "imagewidth":65 + }, + { + "id":16, + "image":"..\/assets\/hexgrid_pointy\/tileStone.png", + "imageheight":89, + "imagewidth":65 + }, + { + "id":17, + "image":"..\/assets\/hexgrid_pointy\/tileWater_full.png", + "imageheight":89, + "imagewidth":65 + }, + { + "id":18, + "image":"..\/assets\/hexgrid_pointy\/tileWater_shadow.png", + "imageheight":89, + "imagewidth":65 + }, + { + "id":19, + "image":"..\/assets\/hexgrid_pointy\/tileWater.png", + "imageheight":89, + "imagewidth":65 + }], + "tilewidth":65, + "type":"tileset", + "version":"1.10" +} \ No newline at end of file diff --git a/tiled/tilesets/hexgrid_tiles.json b/tiled/tilesets/hexgrid_tiles.json new file mode 100644 index 0000000..8730893 --- /dev/null +++ b/tiled/tilesets/hexgrid_tiles.json @@ -0,0 +1,102 @@ +{ "columns":0, + "grid": + { + "height":1, + "orientation":"orthogonal", + "width":1 + }, + "margin":0, + "name":"hexgrid_tiles", + "spacing":0, + "tilecount":12, + "tiledversion":"1.11.2", + "tileheight":189, + "tiles":[ + { + "id":0, + "image":"..\/assets\/hexgrid\/tile_dirt_2.png", + "imageheight":189, + "imagewidth":192, + "type":"tile" + }, + { + "id":1, + "image":"..\/assets\/hexgrid\/tile_dirt_3.png", + "imageheight":189, + "imagewidth":192, + "type":"tile" + }, + { + "id":2, + "image":"..\/assets\/hexgrid\/tile_dirt.png", + "imageheight":189, + "imagewidth":192, + "type":"tile" + }, + { + "id":3, + "image":"..\/assets\/hexgrid\/tile_grass_2.png", + "imageheight":189, + "imagewidth":192, + "type":"tile" + }, + { + "id":4, + "image":"..\/assets\/hexgrid\/tile_grass_3.png", + "imageheight":189, + "imagewidth":192, + "type":"tile" + }, + { + "id":5, + "image":"..\/assets\/hexgrid\/tile_grass.png", + "imageheight":189, + "imagewidth":192, + "type":"tile" + }, + { + "id":6, + "image":"..\/assets\/hexgrid\/tile_sand_2.png", + "imageheight":189, + "imagewidth":192, + "type":"tile" + }, + { + "id":7, + "image":"..\/assets\/hexgrid\/tile_sand_3.png", + "imageheight":189, + "imagewidth":192, + "type":"tile" + }, + { + "id":8, + "image":"..\/assets\/hexgrid\/tile_sand.png", + "imageheight":189, + "imagewidth":192, + "type":"tile" + }, + { + "id":9, + "image":"..\/assets\/hexgrid\/tile_stone_2.png", + "imageheight":189, + "imagewidth":192, + "type":"tile" + }, + { + "id":10, + "image":"..\/assets\/hexgrid\/tile_stone_3.png", + "imageheight":189, + "imagewidth":192, + "type":"tile" + }, + { + "id":11, + "image":"..\/assets\/hexgrid\/tile_stone.png", + "imageheight":189, + "imagewidth":192, + "type":"tile" + }], + "tilewidth":192, + "type":"tileset", + "version":"1.10" +} \ No newline at end of file diff --git a/tiled/tilesets/isogrid_tileset.json b/tiled/tilesets/isogrid_tileset.json new file mode 100644 index 0000000..6658c37 --- /dev/null +++ b/tiled/tilesets/isogrid_tileset.json @@ -0,0 +1,546 @@ +{ "columns":0, + "grid": + { + "height":1, + "orientation":"orthogonal", + "width":1 + }, + "margin":0, + "name":"isogrid_tileset", + "spacing":0, + "tilecount":88, + "tiledversion":"1.11.2", + "tileheight":80, + "tiles":[ + { + "id":0, + "image":"..\/assets\/isogrid\/beach.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":1, + "image":"..\/assets\/isogrid\/beachCornerES.png", + "imageheight":58, + "imagewidth":100 + }, + { + "id":2, + "image":"..\/assets\/isogrid\/beachCornerNE.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":3, + "image":"..\/assets\/isogrid\/beachCornerNW.png", + "imageheight":58, + "imagewidth":100 + }, + { + "id":4, + "image":"..\/assets\/isogrid\/beachCornerSW.png", + "imageheight":58, + "imagewidth":100 + }, + { + "id":5, + "image":"..\/assets\/isogrid\/beachE.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":6, + "image":"..\/assets\/isogrid\/beachES.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":7, + "image":"..\/assets\/isogrid\/beachN.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":8, + "image":"..\/assets\/isogrid\/beachNE.png", + "imageheight":58, + "imagewidth":100 + }, + { + "id":9, + "image":"..\/assets\/isogrid\/beachNW.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":10, + "image":"..\/assets\/isogrid\/beachS.png", + "imageheight":58, + "imagewidth":100 + }, + { + "id":11, + "image":"..\/assets\/isogrid\/beachSW.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":12, + "image":"..\/assets\/isogrid\/beachW.png", + "imageheight":58, + "imagewidth":100 + }, + { + "id":13, + "image":"..\/assets\/isogrid\/bridgeEW.png", + "imageheight":62, + "imagewidth":100 + }, + { + "id":14, + "image":"..\/assets\/isogrid\/bridgeNS.png", + "imageheight":62, + "imagewidth":100 + }, + { + "id":15, + "image":"..\/assets\/isogrid\/crossroad.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":16, + "image":"..\/assets\/isogrid\/crossroadESW.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":17, + "image":"..\/assets\/isogrid\/crossroadNES.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":18, + "image":"..\/assets\/isogrid\/crossroadNEW.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":19, + "image":"..\/assets\/isogrid\/crossroadNSW.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":20, + "image":"..\/assets\/isogrid\/dirt.png", + "imageheight":58, + "imagewidth":100 + }, + { + "id":21, + "image":"..\/assets\/isogrid\/dirtDouble.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":22, + "image":"..\/assets\/isogrid\/endE.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":23, + "image":"..\/assets\/isogrid\/endN.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":24, + "image":"..\/assets\/isogrid\/endS.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":25, + "image":"..\/assets\/isogrid\/endW.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":26, + "image":"..\/assets\/isogrid\/exitE.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":27, + "image":"..\/assets\/isogrid\/exitN.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":28, + "image":"..\/assets\/isogrid\/exitS.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":29, + "image":"..\/assets\/isogrid\/exitW.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":30, + "image":"..\/assets\/isogrid\/grass.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":31, + "image":"..\/assets\/isogrid\/grassWhole.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":32, + "image":"..\/assets\/isogrid\/hillE.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":33, + "image":"..\/assets\/isogrid\/hillES.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":34, + "image":"..\/assets\/isogrid\/hillN.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":35, + "image":"..\/assets\/isogrid\/hillNE.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":36, + "image":"..\/assets\/isogrid\/hillNW.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":37, + "image":"..\/assets\/isogrid\/hillS.png", + "imageheight":80, + "imagewidth":100 + }, + { + "id":38, + "image":"..\/assets\/isogrid\/hillSW.png", + "imageheight":80, + "imagewidth":100 + }, + { + "id":39, + "image":"..\/assets\/isogrid\/hillW.png", + "imageheight":80, + "imagewidth":100 + }, + { + "id":40, + "image":"..\/assets\/isogrid\/lotE.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":41, + "image":"..\/assets\/isogrid\/lotES.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":42, + "image":"..\/assets\/isogrid\/lotN.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":43, + "image":"..\/assets\/isogrid\/lotNE.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":44, + "image":"..\/assets\/isogrid\/lotNW.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":45, + "image":"..\/assets\/isogrid\/lotS.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":46, + "image":"..\/assets\/isogrid\/lotSW.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":47, + "image":"..\/assets\/isogrid\/lotW.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":48, + "image":"..\/assets\/isogrid\/riverBankedES.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":49, + "image":"..\/assets\/isogrid\/riverBankedEW.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":50, + "image":"..\/assets\/isogrid\/riverBankedNE.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":51, + "image":"..\/assets\/isogrid\/riverBankedNS.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":52, + "image":"..\/assets\/isogrid\/riverBankedNW.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":53, + "image":"..\/assets\/isogrid\/riverBankedSW.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":54, + "image":"..\/assets\/isogrid\/riverES.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":55, + "image":"..\/assets\/isogrid\/riverEW.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":56, + "image":"..\/assets\/isogrid\/riverNE.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":57, + "image":"..\/assets\/isogrid\/riverNS.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":58, + "image":"..\/assets\/isogrid\/riverNW.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":59, + "image":"..\/assets\/isogrid\/riverSW.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":60, + "image":"..\/assets\/isogrid\/road.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":61, + "image":"..\/assets\/isogrid\/roadES.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":62, + "image":"..\/assets\/isogrid\/roadEW.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":63, + "image":"..\/assets\/isogrid\/roadHill2E.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":64, + "image":"..\/assets\/isogrid\/roadHill2N.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":65, + "image":"..\/assets\/isogrid\/roadHill2S.png", + "imageheight":77, + "imagewidth":100 + }, + { + "id":66, + "image":"..\/assets\/isogrid\/roadHill2W.png", + "imageheight":77, + "imagewidth":100 + }, + { + "id":67, + "image":"..\/assets\/isogrid\/roadHillE.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":68, + "image":"..\/assets\/isogrid\/roadHillN.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":69, + "image":"..\/assets\/isogrid\/roadHillS.png", + "imageheight":80, + "imagewidth":100 + }, + { + "id":70, + "image":"..\/assets\/isogrid\/roadHillW.png", + "imageheight":80, + "imagewidth":100 + }, + { + "id":71, + "image":"..\/assets\/isogrid\/roadNE.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":72, + "image":"..\/assets\/isogrid\/roadNS.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":73, + "image":"..\/assets\/isogrid\/roadNW.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":74, + "image":"..\/assets\/isogrid\/roadSW.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":75, + "image":"..\/assets\/isogrid\/water.png", + "imageheight":58, + "imagewidth":100 + }, + { + "id":76, + "image":"..\/assets\/isogrid\/waterCornerES.png", + "imageheight":58, + "imagewidth":100 + }, + { + "id":77, + "image":"..\/assets\/isogrid\/waterCornerNE.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":78, + "image":"..\/assets\/isogrid\/waterCornerNW.png", + "imageheight":58, + "imagewidth":100 + }, + { + "id":79, + "image":"..\/assets\/isogrid\/waterCornerSW.png", + "imageheight":58, + "imagewidth":100 + }, + { + "id":80, + "image":"..\/assets\/isogrid\/waterE.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":81, + "image":"..\/assets\/isogrid\/waterES.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":82, + "image":"..\/assets\/isogrid\/waterN.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":83, + "image":"..\/assets\/isogrid\/waterNE.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":84, + "image":"..\/assets\/isogrid\/waterNW.png", + "imageheight":65, + "imagewidth":100 + }, + { + "id":85, + "image":"..\/assets\/isogrid\/waterS.png", + "imageheight":58, + "imagewidth":100 + }, + { + "id":86, + "image":"..\/assets\/isogrid\/waterSW.png", + "imageheight":58, + "imagewidth":100 + }, + { + "id":87, + "image":"..\/assets\/isogrid\/waterW.png", + "imageheight":58, + "imagewidth":100 + }], + "tilewidth":100, + "type":"tileset", + "version":"1.10" +} \ No newline at end of file diff --git a/tiled/tilesets/shooting_circle.tsx b/tiled/tilesets/shooting_circle.tsx deleted file mode 100644 index c7982fe..0000000 --- a/tiled/tilesets/shooting_circle.tsx +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/widget/properties_panel/properties/property_button.gui b/widget/properties_panel/properties/property_button.gui new file mode 100644 index 0000000..e2c9973 --- /dev/null +++ b/widget/properties_panel/properties/property_button.gui @@ -0,0 +1,166 @@ +fonts { + name: "druid_text_bold" + font: "/druid/fonts/druid_text_bold.font" +} +textures { + name: "druid" + texture: "/druid/druid.atlas" +} +nodes { + size { + x: 400.0 + y: 40.0 + } + type: TYPE_BOX + texture: "druid/empty" + id: "root" + adjust_mode: ADJUST_MODE_STRETCH + layer: "druid" + inherit_alpha: true + visible: false +} +nodes { + position { + x: -200.0 + } + scale { + x: 0.5 + y: 0.5 + } + size { + x: 350.0 + y: 40.0 + } + color { + x: 0.463 + y: 0.475 + z: 0.49 + } + type: TYPE_TEXT + text: "Button" + font: "druid_text_bold" + id: "text_name" + pivot: PIVOT_W + outline { + x: 1.0 + y: 1.0 + z: 1.0 + } + shadow { + x: 1.0 + y: 1.0 + z: 1.0 + } + adjust_mode: ADJUST_MODE_STRETCH + parent: "root" + layer: "druid_text_bold" + inherit_alpha: true + outline_alpha: 0.0 + shadow_alpha: 0.0 +} +nodes { + position { + x: 200.0 + } + size { + x: 200.0 + y: 40.0 + } + type: TYPE_BOX + id: "E_Anchor" + pivot: PIVOT_E + parent: "root" + inherit_alpha: true + size_mode: SIZE_MODE_AUTO + visible: false +} +nodes { + position { + x: -100.0 + } + size { + x: 200.0 + y: 40.0 + } + color { + x: 0.463 + y: 0.475 + z: 0.49 + } + type: TYPE_BOX + texture: "druid/rect_round2_width2" + id: "button" + parent: "E_Anchor" + layer: "druid" + inherit_alpha: true + slice9 { + x: 5.0 + y: 5.0 + z: 5.0 + w: 5.0 + } +} +nodes { + position { + y: -20.0 + } + size { + x: 200.0 + y: 4.0 + } + color { + x: 0.894 + y: 0.506 + z: 0.333 + } + type: TYPE_BOX + texture: "druid/pixel" + id: "selected" + pivot: PIVOT_S + adjust_mode: ADJUST_MODE_STRETCH + parent: "button" + layer: "druid" + inherit_alpha: true +} +nodes { + scale { + x: 0.5 + y: 0.5 + } + size { + x: 380.0 + y: 50.0 + } + color { + x: 0.722 + y: 0.741 + z: 0.761 + } + type: TYPE_TEXT + text: "Button" + font: "druid_text_bold" + id: "text_button" + outline { + x: 1.0 + y: 1.0 + z: 1.0 + } + shadow { + x: 1.0 + y: 1.0 + z: 1.0 + } + parent: "button" + layer: "druid_text_bold" + inherit_alpha: true + outline_alpha: 0.0 + shadow_alpha: 0.0 +} +layers { + name: "druid" +} +layers { + name: "druid_text_bold" +} +material: "/builtins/materials/gui.material" +adjust_reference: ADJUST_REFERENCE_PARENT diff --git a/widget/properties_panel/properties/property_button.lua b/widget/properties_panel/properties/property_button.lua new file mode 100644 index 0000000..175995e --- /dev/null +++ b/widget/properties_panel/properties/property_button.lua @@ -0,0 +1,66 @@ +local color = require("druid.color") + +---@class widget.property_button: druid.widget +---@field root node +---@field container druid.container +---@field text_name druid.text +---@field button druid.button +---@field text_button druid.text +local M = {} + + +function M:init() + self.root = self:get_node("root") + self.text_name = self.druid:new_text("text_name") + :set_text_adjust("scale_then_trim", 0.3) + + self.selected = self:get_node("selected") + gui.set_alpha(self.selected, 0) + + self.button = self.druid:new_button("button", self.on_click) + self.text_button = self.druid:new_text("text_button") + + self.container = self.druid:new_container(self.root) + self.container:add_container("text_name", nil, function(_, size) + self.text_button:set_size(size) + end) + self.container:add_container("E_Anchor") +end + + +function M:on_click() + gui.set_alpha(self.selected, 1) + gui.animate(self.selected, "color.w", 0, gui.EASING_INSINE, 0.16) +end + + +---@param text string +---@return widget.property_button +function M:set_text_property(text) + self.text_name:set_text(text) + return self +end + + +---@param text string +---@return widget.property_button +function M:set_text_button(text) + self.text_button:set_text(text) + return self +end + + +---@param enabled boolean +---@return widget.property_button +function M:set_enabled(enabled) + self.button:set_enabled(enabled) + return self +end + + +function M:set_color(color_value) + color.set_color(self:get_node("button"), color_value) +end + + +return M diff --git a/widget/properties_panel/properties/property_checkbox.gui b/widget/properties_panel/properties/property_checkbox.gui new file mode 100644 index 0000000..843cbf7 --- /dev/null +++ b/widget/properties_panel/properties/property_checkbox.gui @@ -0,0 +1,145 @@ +fonts { + name: "druid_text_bold" + font: "/druid/fonts/druid_text_bold.font" +} +textures { + name: "druid" + texture: "/druid/druid.atlas" +} +nodes { + size { + x: 400.0 + y: 40.0 + } + type: TYPE_BOX + texture: "druid/empty" + id: "root" + adjust_mode: ADJUST_MODE_STRETCH + layer: "druid" + inherit_alpha: true + visible: false +} +nodes { + position { + x: -200.0 + } + scale { + x: 0.5 + y: 0.5 + } + size { + x: 360.0 + y: 40.0 + } + color { + x: 0.463 + y: 0.475 + z: 0.49 + } + type: TYPE_TEXT + text: "Checkbox" + font: "druid_text_bold" + id: "text_name" + pivot: PIVOT_W + outline { + x: 1.0 + y: 1.0 + z: 1.0 + } + shadow { + x: 1.0 + y: 1.0 + z: 1.0 + } + parent: "root" + layer: "druid_text_bold" + inherit_alpha: true + outline_alpha: 0.0 + shadow_alpha: 0.0 +} +nodes { + position { + x: 200.0 + } + size { + x: 200.0 + y: 40.0 + } + type: TYPE_BOX + id: "E_Anchor" + pivot: PIVOT_E + parent: "root" + inherit_alpha: true + size_mode: SIZE_MODE_AUTO + visible: false +} +nodes { + position { + x: -180.0 + } + size { + x: 40.0 + y: 40.0 + } + color { + x: 0.463 + y: 0.475 + z: 0.49 + } + type: TYPE_BOX + texture: "druid/rect_round2_width2" + id: "button" + parent: "E_Anchor" + layer: "druid" + inherit_alpha: true + slice9 { + x: 5.0 + y: 5.0 + z: 5.0 + w: 5.0 + } +} +nodes { + color { + x: 0.722 + y: 0.741 + z: 0.761 + } + type: TYPE_BOX + texture: "druid/ui_circle_16" + id: "icon" + parent: "button" + layer: "druid" + inherit_alpha: true + size_mode: SIZE_MODE_AUTO +} +nodes { + position { + y: -20.0 + } + size { + x: 40.0 + y: 4.0 + } + color { + x: 0.894 + y: 0.506 + z: 0.333 + } + type: TYPE_BOX + texture: "druid/pixel" + id: "selected" + pivot: PIVOT_S + adjust_mode: ADJUST_MODE_STRETCH + parent: "button" + layer: "druid" + inherit_alpha: true +} +layers { + name: "druid" +} +layers { + name: "druid_text_bold" +} +material: "/builtins/materials/gui.material" +adjust_reference: ADJUST_REFERENCE_PARENT diff --git a/widget/properties_panel/properties/property_checkbox.lua b/widget/properties_panel/properties/property_checkbox.lua new file mode 100644 index 0000000..4dd9af9 --- /dev/null +++ b/widget/properties_panel/properties/property_checkbox.lua @@ -0,0 +1,83 @@ +local event = require("event.event") + +---@class widget.property_checkbox: druid.widget +---@field root node +---@field druid druid.instance +---@field text_name druid.text +---@field button druid.button +---@field selected node +local M = {} + + +function M:init() + self.root = self:get_node("root") + + self.icon = self:get_node("icon") + gui.set_enabled(self.icon, false) + + self.selected = self:get_node("selected") + gui.set_alpha(self.selected, 0) + + self.text_name = self.druid:new_text("text_name") + :set_text_adjust("scale_then_trim", 0.3) + + self.button = self.druid:new_button("button", self.on_click) + + self.container = self.druid:new_container(self.root) + self.container:add_container("text_name") + self.container:add_container("E_Anchor") + + self.on_change_value = event.create() +end + + +---@param value boolean +function M:set_value(value, is_instant) + if self._value == value then + return + end + + self._value = value + gui.set_enabled(self.icon, value) + self.on_change_value:trigger(value) + + if not is_instant then + gui.set_alpha(self.selected, 1) + gui.animate(self.selected, "color.w", 0, gui.EASING_INSINE, 0.16) + end +end + + +---@return boolean +function M:get_value() + return self._value +end + + +function M:on_click() + self:set_value(not self:get_value()) +end + + +---Set the text property of the checkbox +---@param text string +function M:set_text_property(text) + self.text_name:set_text(text) +end + + +---Set the callback function for when the checkbox value changes +---@param callback function +function M:on_change(callback) + self.on_change_value:subscribe(callback) +end + + +---Set the enabled state of the checkbox +---@param enabled boolean +function M:set_enabled(enabled) + self.button:set_enabled(enabled) +end + + +return M diff --git a/widget/properties_panel/properties/property_input.gui b/widget/properties_panel/properties/property_input.gui new file mode 100644 index 0000000..71737ed --- /dev/null +++ b/widget/properties_panel/properties/property_input.gui @@ -0,0 +1,152 @@ +fonts { + name: "druid_text_bold" + font: "/druid/fonts/druid_text_bold.font" +} +textures { + name: "druid" + texture: "/druid/druid.atlas" +} +nodes { + size { + x: 400.0 + y: 40.0 + } + type: TYPE_BOX + texture: "druid/empty" + id: "root" + adjust_mode: ADJUST_MODE_STRETCH + layer: "druid" + inherit_alpha: true + visible: false +} +nodes { + position { + x: -200.0 + } + scale { + x: 0.5 + y: 0.5 + } + size { + x: 350.0 + y: 50.0 + } + color { + x: 0.463 + y: 0.475 + z: 0.49 + } + type: TYPE_TEXT + text: "Input" + font: "druid_text_bold" + id: "text_name" + pivot: PIVOT_W + outline { + x: 1.0 + y: 1.0 + z: 1.0 + } + shadow { + x: 1.0 + y: 1.0 + z: 1.0 + } + parent: "root" + layer: "druid_text_bold" + inherit_alpha: true + outline_alpha: 0.0 + shadow_alpha: 0.0 +} +nodes { + position { + x: 200.0 + } + size { + x: 200.0 + y: 40.0 + } + type: TYPE_BOX + id: "E_Anchor" + pivot: PIVOT_E + parent: "root" + inherit_alpha: true + size_mode: SIZE_MODE_AUTO + visible: false +} +nodes { + position { + x: -100.0 + } + type: TYPE_TEMPLATE + id: "rich_input" + parent: "E_Anchor" + inherit_alpha: true + template: "/widget/rich_input/rich_input.gui" +} +nodes { + type: TYPE_BOX + id: "rich_input/root" + parent: "rich_input" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "rich_input/button" + parent: "rich_input/root" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "rich_input/placeholder_text" + parent: "rich_input/root" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "rich_input/input_text" + parent: "rich_input/root" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "rich_input/cursor_node" + parent: "rich_input/root" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "rich_input/cursor_text" + parent: "rich_input/cursor_node" + template_node_child: true +} +nodes { + position { + x: -100.0 + y: -20.0 + } + size { + x: 200.0 + y: 4.0 + } + color { + x: 0.894 + y: 0.506 + z: 0.333 + } + type: TYPE_BOX + texture: "druid/pixel" + id: "selected" + pivot: PIVOT_S + adjust_mode: ADJUST_MODE_STRETCH + parent: "E_Anchor" + layer: "druid" + inherit_alpha: true +} +layers { + name: "druid" +} +layers { + name: "druid_text_bold" +} +material: "/builtins/materials/gui.material" +adjust_reference: ADJUST_REFERENCE_PARENT diff --git a/widget/properties_panel/properties/property_input.lua b/widget/properties_panel/properties/property_input.lua new file mode 100644 index 0000000..29e98ab --- /dev/null +++ b/widget/properties_panel/properties/property_input.lua @@ -0,0 +1,57 @@ +local event = require("event.event") + +---@class widget.property_input: druid.widget +---@field root node +---@field container druid.container +---@field text_name druid.text +---@field button druid.button +---@field druid druid.instance +---@field on_change_value event fun(text: string) +local M = {} + +function M:init() + self.root = self:get_node("root") + self.text_name = self.druid:new_text("text_name") + :set_text_adjust("scale_then_trim", 0.3) + + self.selected = self:get_node("selected") + gui.set_alpha(self.selected, 0) + + self.rich_input = self.druid:new_rich_input("rich_input") + + self.container = self.druid:new_container(self.root) + self.container:add_container("text_name") + self.container:add_container("E_Anchor") + + self.on_change_value = event.create() + + self.rich_input.input.on_input_unselect:subscribe(function(_, text) + self.on_change_value:trigger(text) + end) +end + + +---@param text string +---@return widget.property_input +function M:set_text_property(text) + self.text_name:set_text(text) + return self +end + + +---@param text string|number +---@return widget.property_input +function M:set_text_value(text) + self.rich_input:set_text(tostring(text)) + return self +end + + +---@param callback fun(self: widget.property_input, text: string) +---@param callback_context any +function M:on_change(callback, callback_context) + self.rich_input.input.on_input_unselect:subscribe(callback, callback_context) +end + + +return M diff --git a/widget/properties_panel/properties/property_left_right_selector.gui b/widget/properties_panel/properties/property_left_right_selector.gui new file mode 100644 index 0000000..19c6a3d --- /dev/null +++ b/widget/properties_panel/properties/property_left_right_selector.gui @@ -0,0 +1,226 @@ +fonts { + name: "druid_text_bold" + font: "/druid/fonts/druid_text_bold.font" +} +textures { + name: "druid" + texture: "/druid/druid.atlas" +} +nodes { + size { + x: 400.0 + y: 40.0 + } + type: TYPE_BOX + texture: "druid/empty" + id: "root" + adjust_mode: ADJUST_MODE_STRETCH + layer: "druid" + inherit_alpha: true + visible: false +} +nodes { + position { + x: -200.0 + } + scale { + x: 0.5 + y: 0.5 + } + size { + x: 360.0 + y: 40.0 + } + color { + x: 0.463 + y: 0.475 + z: 0.49 + } + type: TYPE_TEXT + text: "Left Right Selector" + font: "druid_text_bold" + id: "text_name" + pivot: PIVOT_W + outline { + x: 1.0 + y: 1.0 + z: 1.0 + } + shadow { + x: 1.0 + y: 1.0 + z: 1.0 + } + parent: "root" + layer: "druid_text_bold" + inherit_alpha: true + outline_alpha: 0.0 + shadow_alpha: 0.0 +} +nodes { + position { + x: 200.0 + } + size { + x: 200.0 + y: 40.0 + } + type: TYPE_BOX + id: "E_Anchor" + pivot: PIVOT_E + parent: "root" + inherit_alpha: true + size_mode: SIZE_MODE_AUTO + visible: false +} +nodes { + position { + x: -180.0 + } + size { + x: 40.0 + y: 40.0 + } + color { + x: 0.463 + y: 0.475 + z: 0.49 + } + type: TYPE_BOX + texture: "druid/rect_round2_width2" + id: "button_left" + parent: "E_Anchor" + layer: "druid" + inherit_alpha: true + slice9 { + x: 5.0 + y: 5.0 + z: 5.0 + w: 5.0 + } +} +nodes { + rotation { + z: 180.0 + } + color { + x: 0.722 + y: 0.741 + z: 0.761 + } + type: TYPE_BOX + texture: "druid/icon_arrow" + id: "icon_left" + parent: "button_left" + layer: "druid" + inherit_alpha: true + size_mode: SIZE_MODE_AUTO +} +nodes { + position { + x: -20.0 + } + size { + x: 40.0 + y: 40.0 + } + color { + x: 0.463 + y: 0.475 + z: 0.49 + } + type: TYPE_BOX + texture: "druid/rect_round2_width2" + id: "button_right" + parent: "E_Anchor" + layer: "druid" + inherit_alpha: true + slice9 { + x: 5.0 + y: 5.0 + z: 5.0 + w: 5.0 + } +} +nodes { + color { + x: 0.722 + y: 0.741 + z: 0.761 + } + type: TYPE_BOX + texture: "druid/icon_arrow" + id: "icon_right" + parent: "button_right" + layer: "druid" + inherit_alpha: true + size_mode: SIZE_MODE_AUTO +} +nodes { + position { + x: -100.0 + y: -20.0 + } + size { + x: 120.0 + y: 4.0 + } + color { + x: 0.894 + y: 0.506 + z: 0.333 + } + type: TYPE_BOX + texture: "druid/pixel" + id: "selected" + pivot: PIVOT_S + adjust_mode: ADJUST_MODE_STRETCH + parent: "E_Anchor" + layer: "druid" + inherit_alpha: true +} +nodes { + position { + x: -100.0 + } + scale { + x: 0.5 + y: 0.5 + } + size { + x: 220.0 + y: 40.0 + } + color { + x: 0.463 + y: 0.475 + z: 0.49 + } + type: TYPE_TEXT + text: "42" + font: "druid_text_bold" + id: "text_value" + outline { + x: 1.0 + y: 1.0 + z: 1.0 + } + shadow { + x: 1.0 + y: 1.0 + z: 1.0 + } + parent: "E_Anchor" + layer: "druid_text_bold" + inherit_alpha: true + outline_alpha: 0.0 + shadow_alpha: 0.0 +} +layers { + name: "druid" +} +layers { + name: "druid_text_bold" +} +material: "/builtins/materials/gui.material" +adjust_reference: ADJUST_REFERENCE_PARENT diff --git a/widget/properties_panel/properties/property_left_right_selector.lua b/widget/properties_panel/properties/property_left_right_selector.lua new file mode 100644 index 0000000..fda5f01 --- /dev/null +++ b/widget/properties_panel/properties/property_left_right_selector.lua @@ -0,0 +1,211 @@ +local event = require("event.event") + +---@class widget.property_left_right_selector: druid.widget +---@field root node +---@field druid druid.instance +---@field text_name druid.text +---@field button druid.button +---@field selected node +---@field value string|number +---@field on_change_value event fun(value: string|number) +local M = {} + + +function M:init() + self.root = self:get_node("root") + self.selected = self:get_node("selected") + gui.set_alpha(self.selected, 0) + + self.text_name = self.druid:new_text("text_name") + :set_text_adjust("scale_then_trim", 0.3) + + self.text_value = self.druid:new_text("text_value") + self.button_left = self.druid:new_button("button_left", self.on_button_left) + self.button_left.on_repeated_click:subscribe(self.on_button_left, self) + + self.button_right = self.druid:new_button("button_right", self.on_button_right) + self.button_right.on_repeated_click:subscribe(self.on_button_right, self) + + self.on_change_value = event.create() + + self.container = self.druid:new_container(self.root) + self.container:add_container("text_name") + self.container:add_container("E_Anchor") +end + + +function M:set_text(text) + self.text_name:set_text(text) + return self +end + + +---Helper to cycle number in range +---@param value number Current value +---@param min number Min range value +---@param max number Max range value +---@param step number Step size +---@param is_loop boolean Is looped +---@return number Cycled value +local function step_number(value, min, max, step, is_loop) + local range = max - min + 1 + if is_loop then + -- Normalize step within range + local effective_step = step + if math.abs(step) >= range then + effective_step = step % range + if effective_step == 0 then + effective_step = step > 0 and range or -range + end + end + + value = value + effective_step + -- Handle wrapping + if max then + while value > max do + value = min + (value - max - 1) + end + end + if min then + while value < min do + value = max - (min - value - 1) + end + end + else + -- Clamp values + value = value + step + if max and value > max then + return max + elseif min and value < min then + return min + end + end + return value +end + + +---Helper to cycle array index with proper step wrapping +---@param array table Array to cycle through +---@param current_value any Current value to find index for +---@param step number Step direction +---@param is_loop boolean If true, cycle values. If false, clamp at ends +---@return any Next value in cycle +local function step_array(array, current_value, step, is_loop) + local index = 1 + for i, v in ipairs(array) do + if v == current_value then + index = i + break + end + end + + if is_loop then + -- Normalize step within array length + local range = #array + local effective_step = step + if math.abs(step) >= range then + effective_step = step % range + if effective_step == 0 then + effective_step = step > 0 and range or -range + end + end + + index = index + effective_step + -- Handle wrapping + while index > range do + index = 1 + (index - range - 1) + end + while index < 1 do + index = range - (1 - index - 1) + end + else + -- Clamp values + index = index + step + if index > #array then + index = #array + elseif index < 1 then + index = 1 + end + end + + return array[index] +end + + +function M:on_button_left() + self:add_step(-1) +end + +function M:on_button_right() + self:add_step(1) +end + + +---@param koef number -1 0 1, on 0 will not move +function M:add_step(koef) + local array_type = self.array_type + if array_type then + local value = self.value + local new_value = step_array(array_type.array, value, koef * array_type.steps, array_type.is_loop) + self:set_value(new_value) + return + end + + + local number_type = self.number_type + if number_type then + local value = tonumber(self.value) --[[@as number]] + local new_value = step_number(value, number_type.min, number_type.max, koef * number_type.steps, number_type.is_loop) + self:set_value(new_value) + return + end +end + + +function M:set_number_type(min, max, is_loop, steps) + self.number_type = { + min = min, + max = max, + steps = steps or 1, + is_loop = is_loop, + } + + return self +end + + +function M:set_array_type(array, is_loop, steps) + self.array_type = { + array = array, + steps = steps or 1, + is_loop = is_loop, + } + + return self +end + + +---@param value string|number +function M:set_value(value, is_instant) + if self.value == value then + return + end + + self.value = value + self.text_value:set_text(tostring(value)) + self.on_change_value:trigger(value) + + if not is_instant then + gui.set_alpha(self.selected, 1) + gui.animate(self.selected, "color.w", 0, gui.EASING_INSINE, 0.16) + end +end + + +---@return string|number +function M:get_value() + return self.value +end + + +return M diff --git a/widget/properties_panel/properties/property_slider.gui b/widget/properties_panel/properties/property_slider.gui new file mode 100644 index 0000000..22b5b3b --- /dev/null +++ b/widget/properties_panel/properties/property_slider.gui @@ -0,0 +1,236 @@ +fonts { + name: "druid_text_bold" + font: "/druid/fonts/druid_text_bold.font" +} +textures { + name: "druid" + texture: "/druid/druid.atlas" +} +nodes { + size { + x: 400.0 + y: 40.0 + } + type: TYPE_BOX + texture: "druid/empty" + id: "root" + adjust_mode: ADJUST_MODE_STRETCH + layer: "druid" + inherit_alpha: true + visible: false +} +nodes { + position { + x: -200.0 + } + scale { + x: 0.5 + y: 0.5 + } + size { + x: 380.0 + y: 40.0 + } + color { + x: 0.463 + y: 0.475 + z: 0.49 + } + type: TYPE_TEXT + text: "Slider" + font: "druid_text_bold" + id: "text_name" + pivot: PIVOT_W + outline { + x: 1.0 + y: 1.0 + z: 1.0 + } + shadow { + x: 1.0 + y: 1.0 + z: 1.0 + } + parent: "root" + layer: "druid_text_bold" + inherit_alpha: true + outline_alpha: 0.0 + shadow_alpha: 0.0 +} +nodes { + position { + x: 200.0 + } + size { + x: 200.0 + y: 40.0 + } + type: TYPE_BOX + id: "E_Anchor" + pivot: PIVOT_E + adjust_mode: ADJUST_MODE_STRETCH + parent: "root" + inherit_alpha: true + size_mode: SIZE_MODE_AUTO + visible: false +} +nodes { + position { + x: -133.0 + } + size { + x: 134.0 + y: 40.0 + } + color { + x: 0.129 + y: 0.141 + z: 0.157 + } + type: TYPE_BOX + texture: "druid/empty" + id: "slider" + parent: "E_Anchor" + layer: "druid" + inherit_alpha: true +} +nodes { + size { + x: 134.0 + y: 8.0 + } + color { + x: 0.129 + y: 0.141 + z: 0.157 + } + type: TYPE_BOX + texture: "druid/ui_circle_8" + id: "slider_back" + parent: "slider" + layer: "druid" + inherit_alpha: true + slice9 { + x: 4.0 + y: 4.0 + z: 4.0 + w: 4.0 + } +} +nodes { + position { + x: -55.0 + } + size { + x: 24.0 + y: 24.0 + } + color { + x: 0.722 + y: 0.741 + z: 0.761 + } + type: TYPE_BOX + texture: "druid/ui_circle_8" + id: "slider_pin" + parent: "slider" + layer: "druid" + inherit_alpha: true + slice9 { + x: 4.0 + y: 4.0 + z: 4.0 + w: 4.0 + } +} +nodes { + size { + x: 60.0 + y: 40.0 + } + color { + x: 0.463 + y: 0.475 + z: 0.49 + } + type: TYPE_BOX + texture: "druid/rect_round2_width2" + id: "button" + pivot: PIVOT_E + parent: "E_Anchor" + layer: "druid" + inherit_alpha: true + slice9 { + x: 4.0 + y: 4.0 + z: 4.0 + w: 4.0 + } +} +nodes { + position { + y: -20.0 + } + size { + x: 60.0 + y: 4.0 + } + color { + x: 0.894 + y: 0.506 + z: 0.333 + } + type: TYPE_BOX + texture: "druid/pixel" + id: "selected" + pivot: PIVOT_SE + adjust_mode: ADJUST_MODE_STRETCH + parent: "button" + layer: "druid" + inherit_alpha: true +} +nodes { + position { + x: -30.0 + } + scale { + x: 0.55 + y: 0.55 + } + size { + x: 100.0 + y: 40.0 + } + color { + x: 0.722 + y: 0.741 + z: 0.761 + } + type: TYPE_TEXT + text: "25 %" + font: "druid_text_bold" + id: "text_value" + outline { + x: 1.0 + y: 1.0 + z: 1.0 + } + shadow { + x: 1.0 + y: 1.0 + z: 1.0 + } + parent: "button" + layer: "druid_text_bold" + inherit_alpha: true + outline_alpha: 0.0 + shadow_alpha: 0.0 +} +layers { + name: "druid" +} +layers { + name: "druid_text_bold" +} +material: "/builtins/materials/gui.material" +adjust_reference: ADJUST_REFERENCE_PARENT diff --git a/widget/properties_panel/properties/property_slider.lua b/widget/properties_panel/properties/property_slider.lua new file mode 100644 index 0000000..780f469 --- /dev/null +++ b/widget/properties_panel/properties/property_slider.lua @@ -0,0 +1,126 @@ +local event = require("event.event") +local helper = require("druid.helper") + +---@class widget.property_slider: druid.widget +---@field root node +---@field container druid.container +---@field druid druid.instance +---@field text_name druid.text +---@field text_value druid.text +---@field slider druid.slider +---@field on_change_value event fun(value:number) +local M = {} + + +function M:init() + self.root = self:get_node("root") + self.selected = self:get_node("selected") + gui.set_alpha(self.selected, 0) + self._value = 0 + + self.min = 0 + self.max = 1 + self.step = 0.01 + + self.text_name = self.druid:new_text("text_name") + :set_text_adjust("scale_then_trim", 0.3) + + self.text_value = self.druid:new_text("text_value") + self.slider = self.druid:new_slider("slider_pin", vmath.vector3(55, 0, 0), self.update_value) --[[@as druid.slider]] + self.slider:set_input_node("slider") + + self:set_text_function(function(value) + return math.floor(value * 100) .. "%" + end) + + self.container = self.druid:new_container(self.root) + self.container:add_container("text_name") + self.container:add_container("E_Anchor") + + self.on_change_value = event.create() +end + + +---@param callback fun(value:number):string +function M:set_text_function(callback) + self._text_function = callback + self.text_value:set_text(self._text_function(self._value)) +end + + +---Sets the text property of the slider +---@param text string +function M:set_text_property(text) + self.text_name:set_text(text) +end + + +---Sets the callback function for when the slider value changes +---@param callback fun(value:number) +function M:on_change(callback) + self.on_change_value:subscribe(callback) +end + + +---@param value number +function M:set_value(value, is_instant) + local diff = math.abs(self.max - self.min) + self.slider:set((value - self.min) / diff, true) + + local is_changed = self._value ~= value + if not is_changed then + return + end + + self._value = value + self.text_value:set_text(self._text_function(value)) + self.on_change_value:trigger(value) + + if not is_instant then + gui.set_alpha(self.selected, 1) + gui.animate(self.selected, "color.w", 0, gui.EASING_INSINE, 0.16) + end +end + + +---@return number +function M:get_value() + return self._value +end + + +function M:update_value(value) + local current_value = self._value + + local diff = math.abs(self.max - self.min) + -- [0..1] To range + value = value * diff + self.min + + -- Round to steps value (0.1, or 5. Should be divided on this value) + value = math.floor(value / self.step + 0.5) * self.step + + value = helper.clamp(value, self.min, self.max) + + self:set_value(value) +end + + +function M:set_number_type(min, max, step) + self.min = min or 0 + self.max = max or 1 + self.step = step + + self:set_text_function(function(value) + return tostring(value) + end) + + self:set_value(self._value, true) +end + + +function M:_on_slider_change_by_user(value) + self:set_value(value) +end + + +return M diff --git a/widget/properties_panel/properties/property_text.gui b/widget/properties_panel/properties/property_text.gui new file mode 100644 index 0000000..f1a8937 --- /dev/null +++ b/widget/properties_panel/properties/property_text.gui @@ -0,0 +1,105 @@ +fonts { + name: "druid_text_bold" + font: "/druid/fonts/druid_text_bold.font" +} +textures { + name: "druid" + texture: "/druid/druid.atlas" +} +nodes { + size { + x: 400.0 + y: 40.0 + } + type: TYPE_BOX + texture: "druid/empty" + id: "root" + adjust_mode: ADJUST_MODE_STRETCH + layer: "druid" + inherit_alpha: true + visible: false +} +nodes { + position { + x: -200.0 + } + scale { + x: 0.5 + y: 0.5 + } + size { + x: 400.0 + y: 50.0 + } + color { + x: 0.463 + y: 0.475 + z: 0.49 + } + type: TYPE_TEXT + text: "Text" + font: "druid_text_bold" + id: "text_name" + pivot: PIVOT_W + outline { + x: 1.0 + y: 1.0 + z: 1.0 + } + shadow { + x: 1.0 + y: 1.0 + z: 1.0 + } + parent: "root" + layer: "druid_text_bold" + inherit_alpha: true + outline_alpha: 0.0 + shadow_alpha: 0.0 +} +nodes { + position { + x: 200.0 + } + scale { + x: 0.5 + y: 0.5 + } + size { + x: 350.0 + y: 50.0 + } + color { + x: 0.722 + y: 0.741 + z: 0.761 + } + type: TYPE_TEXT + text: "Text" + font: "druid_text_bold" + id: "text_right" + pivot: PIVOT_E + outline { + x: 1.0 + y: 1.0 + z: 1.0 + } + shadow { + x: 1.0 + y: 1.0 + z: 1.0 + } + parent: "root" + layer: "druid_text_bold" + inherit_alpha: true + outline_alpha: 0.0 + shadow_alpha: 0.0 +} +layers { + name: "druid" +} +layers { + name: "druid_text_bold" +} +material: "/builtins/materials/gui.material" +adjust_reference: ADJUST_REFERENCE_PARENT diff --git a/widget/properties_panel/properties/property_text.lua b/widget/properties_panel/properties/property_text.lua new file mode 100644 index 0000000..9a3d2a7 --- /dev/null +++ b/widget/properties_panel/properties/property_text.lua @@ -0,0 +1,42 @@ +---@class widget.property_text: druid.widget +---@field root node +---@field container druid.container +---@field text_name druid.text +---@field text_right druid.text +local M = {} + +function M:init() + self.root = self:get_node("root") + self.text_name = self.druid:new_text("text_name") + :set_text_adjust("scale_then_trim_left", 0.3) + + self.text_right = self.druid:new_text("text_right", "") + --:set_text_adjust("scale_then_trim_left", 0.3) -- TODO: not works? why? + + self.container = self.druid:new_container(self.root) + self.container:add_container("text_name", nil, function(_, size) + self.text_name:set_size(size) + end) + self.container:add_container("text_right", nil, function(_, size) + self.text_right:set_size(size) + end) +end + + +---@param text string +---@return widget.property_text +function M:set_text_property(text) + self.text_name:set_text(text) + return self +end + + +---@param text string|nil +---@return widget.property_text +function M:set_text_value(text) + self.text_right:set_text(text or "") + return self +end + + +return M diff --git a/widget/properties_panel/properties/property_vector3.gui b/widget/properties_panel/properties/property_vector3.gui new file mode 100644 index 0000000..b350a92 --- /dev/null +++ b/widget/properties_panel/properties/property_vector3.gui @@ -0,0 +1,510 @@ +fonts { + name: "druid_text_bold" + font: "/druid/fonts/druid_text_bold.font" +} +fonts { + name: "druid_text_regular" + font: "/druid/fonts/druid_text_regular.font" +} +textures { + name: "druid" + texture: "/druid/druid.atlas" +} +nodes { + size { + x: 400.0 + y: 40.0 + } + type: TYPE_BOX + texture: "druid/empty" + id: "root" + adjust_mode: ADJUST_MODE_STRETCH + layer: "druid" + inherit_alpha: true + visible: false +} +nodes { + position { + x: -200.0 + } + scale { + x: 0.5 + y: 0.5 + } + size { + x: 350.0 + y: 50.0 + } + color { + x: 0.463 + y: 0.475 + z: 0.49 + } + type: TYPE_TEXT + text: "Vector3" + font: "druid_text_bold" + id: "text_name" + pivot: PIVOT_W + outline { + x: 1.0 + y: 1.0 + z: 1.0 + } + shadow { + x: 1.0 + y: 1.0 + z: 1.0 + } + parent: "root" + layer: "druid_text_bold" + inherit_alpha: true + outline_alpha: 0.0 + shadow_alpha: 0.0 +} +nodes { + position { + x: 200.0 + } + size { + x: 200.0 + y: 40.0 + } + type: TYPE_BOX + id: "E_Anchor" + pivot: PIVOT_E + parent: "root" + inherit_alpha: true + size_mode: SIZE_MODE_AUTO + visible: false +} +nodes { + position { + x: -200.0 + } + size { + x: 66.0 + y: 40.0 + } + type: TYPE_BOX + id: "field_x" + pivot: PIVOT_W + parent: "E_Anchor" + inherit_alpha: true + size_mode: SIZE_MODE_AUTO + visible: false +} +nodes { + position { + x: 6.0 + } + scale { + x: 0.5 + y: 0.5 + } + size { + x: 30.0 + y: 40.0 + } + color { + x: 0.31 + y: 0.318 + z: 0.322 + } + type: TYPE_TEXT + text: "X" + font: "druid_text_regular" + id: "text_x" + parent: "field_x" + layer: "druid_text_regular" + inherit_alpha: true + outline_alpha: 0.0 + shadow_alpha: 0.0 +} +nodes { + position { + x: 40.0 + } + type: TYPE_TEMPLATE + id: "rich_input_x" + parent: "field_x" + inherit_alpha: true + template: "/widget/rich_input/rich_input.gui" +} +nodes { + size { + x: 45.0 + y: 40.0 + } + type: TYPE_BOX + id: "rich_input_x/root" + parent: "rich_input_x" + overridden_fields: 4 + template_node_child: true +} +nodes { + size { + x: 45.0 + y: 40.0 + } + type: TYPE_BOX + id: "rich_input_x/button" + parent: "rich_input_x/root" + overridden_fields: 4 + template_node_child: true +} +nodes { + size { + x: 60.0 + y: 50.0 + } + type: TYPE_TEXT + text: "..." + id: "rich_input_x/placeholder_text" + parent: "rich_input_x/root" + overridden_fields: 4 + overridden_fields: 8 + template_node_child: true +} +nodes { + size { + x: 70.0 + y: 50.0 + } + type: TYPE_TEXT + text: "10" + id: "rich_input_x/input_text" + parent: "rich_input_x/root" + overridden_fields: 4 + overridden_fields: 8 + template_node_child: true +} +nodes { + position { + x: 15.0 + } + type: TYPE_BOX + id: "rich_input_x/cursor_node" + parent: "rich_input_x/root" + overridden_fields: 1 + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "rich_input_x/cursor_text" + parent: "rich_input_x/cursor_node" + template_node_child: true +} +nodes { + position { + x: 40.0 + y: -20.0 + } + size { + x: 45.0 + y: 4.0 + } + color { + x: 0.894 + y: 0.506 + z: 0.333 + } + type: TYPE_BOX + texture: "druid/pixel" + id: "selected_x" + pivot: PIVOT_S + adjust_mode: ADJUST_MODE_STRETCH + parent: "field_x" + layer: "druid" + inherit_alpha: true +} +nodes { + position { + x: -132.0 + } + size { + x: 66.0 + y: 40.0 + } + type: TYPE_BOX + id: "field_y" + pivot: PIVOT_W + parent: "E_Anchor" + inherit_alpha: true + size_mode: SIZE_MODE_AUTO + visible: false +} +nodes { + position { + x: 6.0 + } + scale { + x: 0.5 + y: 0.5 + } + size { + x: 30.0 + y: 40.0 + } + color { + x: 0.31 + y: 0.318 + z: 0.322 + } + type: TYPE_TEXT + text: "Y" + font: "druid_text_regular" + id: "text_y" + parent: "field_y" + layer: "druid_text_regular" + inherit_alpha: true + outline_alpha: 0.0 + shadow_alpha: 0.0 +} +nodes { + position { + x: 40.0 + } + type: TYPE_TEMPLATE + id: "rich_input_y" + parent: "field_y" + inherit_alpha: true + template: "/widget/rich_input/rich_input.gui" +} +nodes { + size { + x: 45.0 + y: 40.0 + } + type: TYPE_BOX + id: "rich_input_y/root" + parent: "rich_input_y" + overridden_fields: 4 + template_node_child: true +} +nodes { + size { + x: 45.0 + y: 40.0 + } + type: TYPE_BOX + id: "rich_input_y/button" + parent: "rich_input_y/root" + overridden_fields: 4 + template_node_child: true +} +nodes { + size { + x: 60.0 + y: 50.0 + } + type: TYPE_TEXT + text: "..." + id: "rich_input_y/placeholder_text" + parent: "rich_input_y/root" + overridden_fields: 4 + overridden_fields: 8 + template_node_child: true +} +nodes { + size { + x: 70.0 + y: 50.0 + } + type: TYPE_TEXT + text: "10" + id: "rich_input_y/input_text" + parent: "rich_input_y/root" + overridden_fields: 4 + overridden_fields: 8 + template_node_child: true +} +nodes { + position { + x: 15.0 + } + type: TYPE_BOX + id: "rich_input_y/cursor_node" + parent: "rich_input_y/root" + overridden_fields: 1 + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "rich_input_y/cursor_text" + parent: "rich_input_y/cursor_node" + template_node_child: true +} +nodes { + position { + x: 40.0 + y: -20.0 + } + size { + x: 45.0 + y: 4.0 + } + color { + x: 0.894 + y: 0.506 + z: 0.333 + } + type: TYPE_BOX + texture: "druid/pixel" + id: "selected_y" + pivot: PIVOT_S + adjust_mode: ADJUST_MODE_STRETCH + parent: "field_y" + layer: "druid" + inherit_alpha: true +} +nodes { + position { + x: -66.0 + } + size { + x: 66.0 + y: 40.0 + } + type: TYPE_BOX + id: "field_z" + pivot: PIVOT_W + parent: "E_Anchor" + inherit_alpha: true + size_mode: SIZE_MODE_AUTO + visible: false +} +nodes { + position { + x: 6.0 + } + scale { + x: 0.5 + y: 0.5 + } + size { + x: 30.0 + y: 40.0 + } + color { + x: 0.31 + y: 0.318 + z: 0.322 + } + type: TYPE_TEXT + text: "Z" + font: "druid_text_regular" + id: "text_z" + parent: "field_z" + layer: "druid_text_regular" + inherit_alpha: true + outline_alpha: 0.0 + shadow_alpha: 0.0 +} +nodes { + position { + x: 40.0 + } + type: TYPE_TEMPLATE + id: "rich_input_z" + parent: "field_z" + inherit_alpha: true + template: "/widget/rich_input/rich_input.gui" +} +nodes { + size { + x: 45.0 + y: 40.0 + } + type: TYPE_BOX + id: "rich_input_z/root" + parent: "rich_input_z" + overridden_fields: 4 + template_node_child: true +} +nodes { + size { + x: 45.0 + y: 40.0 + } + type: TYPE_BOX + id: "rich_input_z/button" + parent: "rich_input_z/root" + overridden_fields: 4 + template_node_child: true +} +nodes { + size { + x: 60.0 + y: 50.0 + } + type: TYPE_TEXT + text: "..." + id: "rich_input_z/placeholder_text" + parent: "rich_input_z/root" + overridden_fields: 4 + overridden_fields: 8 + template_node_child: true +} +nodes { + size { + x: 70.0 + y: 50.0 + } + type: TYPE_TEXT + text: "10" + id: "rich_input_z/input_text" + parent: "rich_input_z/root" + overridden_fields: 4 + overridden_fields: 8 + template_node_child: true +} +nodes { + position { + x: 15.0 + } + type: TYPE_BOX + id: "rich_input_z/cursor_node" + parent: "rich_input_z/root" + overridden_fields: 1 + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "rich_input_z/cursor_text" + parent: "rich_input_z/cursor_node" + template_node_child: true +} +nodes { + position { + x: 40.0 + y: -20.0 + } + size { + x: 45.0 + y: 4.0 + } + color { + x: 0.894 + y: 0.506 + z: 0.333 + } + type: TYPE_BOX + texture: "druid/pixel" + id: "selected_z" + pivot: PIVOT_S + adjust_mode: ADJUST_MODE_STRETCH + parent: "field_z" + layer: "druid" + inherit_alpha: true +} +layers { + name: "druid" +} +layers { + name: "druid_text_regular" +} +layers { + name: "druid_text_bold" +} +material: "/builtins/materials/gui.material" +adjust_reference: ADJUST_REFERENCE_PARENT diff --git a/widget/properties_panel/properties/property_vector3.lua b/widget/properties_panel/properties/property_vector3.lua new file mode 100644 index 0000000..ed59fe2 --- /dev/null +++ b/widget/properties_panel/properties/property_vector3.lua @@ -0,0 +1,75 @@ +local event = require("event.event") + + +---@class widget.property_vector3: druid.widget +---@field root node +---@field container druid.container +---@field text_name druid.text +---@field button druid.button +---@field druid druid.instance +local M = {} + +function M:init() + self.root = self:get_node("root") + self.text_name = self.druid:new_text("text_name") + :set_text_adjust("scale_then_trim", 0.3) + + self.selected_x = self:get_node("selected_x") + gui.set_alpha(self.selected_x, 0) + + self.selected_y = self:get_node("selected_y") + gui.set_alpha(self.selected_y, 0) + + self.selected_z = self:get_node("selected_z") + gui.set_alpha(self.selected_z, 0) + + self.rich_input_x = self.druid:new_rich_input("rich_input_x") + self.rich_input_y = self.druid:new_rich_input("rich_input_y") + self.rich_input_z = self.druid:new_rich_input("rich_input_z") + + self.value = vmath.vector3(0) + + self.rich_input_x.input.on_input_unselect:subscribe(function() + self.value.x = tonumber(self.rich_input_x.input:get_text()) or 0 + self.on_change:trigger(self.value) + end) + + self.rich_input_y.input.on_input_unselect:subscribe(function() + self.value.y = tonumber(self.rich_input_y.input:get_text()) or 0 + self.on_change:trigger(self.value) + end) + + self.rich_input_z.input.on_input_unselect:subscribe(function() + self.value.z = tonumber(self.rich_input_z.input:get_text()) or 0 + self.on_change:trigger(self.value) + end) + + self.container = self.druid:new_container(self.root) + self.container:add_container("text_name") + self.container:add_container("E_Anchor") + + self.on_change = event.create() +end + + +---@param text string +---@return widget.property_vector3 +function M:set_text_property(text) + self.text_name:set_text(text) + return self +end + + +---@param x number +---@param y number +---@param z number +---@return widget.property_vector3 +function M:set_value(x, y, z) + self.rich_input_x:set_text(tostring(x)) + self.rich_input_y:set_text(tostring(y)) + self.rich_input_z:set_text(tostring(z)) + return self +end + + +return M diff --git a/widget/properties_panel/properties_panel.gui b/widget/properties_panel/properties_panel.gui new file mode 100644 index 0000000..6737993 --- /dev/null +++ b/widget/properties_panel/properties_panel.gui @@ -0,0 +1,846 @@ +fonts { + name: "druid_text_regular" + font: "/druid/fonts/druid_text_regular.font" +} +fonts { + name: "druid_text_bold" + font: "/druid/fonts/druid_text_bold.font" +} +textures { + name: "druid" + texture: "/druid/druid.atlas" +} +nodes { + size { + x: 400.0 + y: 400.0 + } + color { + x: 0.173 + y: 0.184 + z: 0.204 + } + type: TYPE_BOX + texture: "druid/ui_circle_16" + id: "root" + pivot: PIVOT_N + layer: "druid" + inherit_alpha: true + slice9 { + x: 8.0 + y: 8.0 + z: 8.0 + w: 8.0 + } +} +nodes { + position { + x: 200.0 + } + size { + x: 400.0 + y: 40.0 + } + color { + x: 0.173 + y: 0.184 + z: 0.204 + } + type: TYPE_BOX + texture: "druid/ui_circle_16" + id: "header" + pivot: PIVOT_NE + parent: "root" + layer: "druid" + inherit_alpha: true + slice9 { + x: 8.0 + y: 8.0 + z: 8.0 + w: 8.0 + } +} +nodes { + position { + x: -392.0 + y: -8.0 + } + scale { + x: 0.5 + y: 0.5 + } + size { + x: 500.0 + y: 50.0 + } + color { + x: 0.463 + y: 0.475 + z: 0.49 + } + type: TYPE_TEXT + text: "Properties" + font: "druid_text_regular" + id: "text_header" + pivot: PIVOT_NW + outline { + x: 1.0 + y: 1.0 + z: 1.0 + } + shadow { + x: 1.0 + y: 1.0 + z: 1.0 + } + parent: "header" + layer: "druid_text_regular" + inherit_alpha: true + outline_alpha: 0.0 + shadow_alpha: 0.0 +} +nodes { + position { + x: -8.0 + y: -4.0 + } + color { + x: 0.306 + y: 0.31 + z: 0.314 + } + type: TYPE_BOX + texture: "druid/icon_drag" + id: "icon_drag" + pivot: PIVOT_NE + parent: "header" + layer: "druid" + inherit_alpha: true + size_mode: SIZE_MODE_AUTO +} +nodes { + position { + x: -48.0 + y: -4.0 + } + color { + x: 0.306 + y: 0.31 + z: 0.314 + } + type: TYPE_BOX + texture: "druid/icon_refresh" + id: "icon_refresh" + pivot: PIVOT_NE + parent: "header" + layer: "druid" + inherit_alpha: true + size_mode: SIZE_MODE_AUTO +} +nodes { + position { + x: -88.0 + y: -4.0 + } + scale { + x: -1.0 + } + color { + x: 0.306 + y: 0.31 + z: 0.314 + } + type: TYPE_BOX + texture: "druid/icon_arrow" + id: "icon_back" + pivot: PIVOT_NW + parent: "header" + layer: "druid" + inherit_alpha: true + size_mode: SIZE_MODE_AUTO +} +nodes { + position { + y: -50.0 + } + size { + x: 400.0 + y: 350.0 + } + type: TYPE_BOX + id: "content" + pivot: PIVOT_N + parent: "root" + inherit_alpha: true + size_mode: SIZE_MODE_AUTO + visible: false +} +nodes { + position { + x: -200.0 + } + size { + x: 400.0 + y: 350.0 + } + type: TYPE_BOX + texture: "druid/empty" + id: "scroll_view" + xanchor: XANCHOR_LEFT + pivot: PIVOT_NW + adjust_mode: ADJUST_MODE_STRETCH + parent: "content" + layer: "druid" + inherit_alpha: true +} +nodes { + size { + x: 400.0 + y: 350.0 + } + type: TYPE_BOX + texture: "druid/pixel" + id: "scroll_content" + pivot: PIVOT_NW + adjust_mode: ADJUST_MODE_STRETCH + parent: "scroll_view" + layer: "druid" + inherit_alpha: true + slice9 { + x: 8.0 + y: 8.0 + w: 6.0 + } + visible: false +} +nodes { + position { + y: -10.0 + } + type: TYPE_BOX + texture: "druid/empty" + id: "properties" + parent: "content" + layer: "druid" + inherit_alpha: true + size_mode: SIZE_MODE_AUTO + visible: false +} +nodes { + type: TYPE_TEMPLATE + id: "property_slider" + parent: "properties" + inherit_alpha: true + template: "/widget/properties_panel/properties/property_slider.gui" +} +nodes { + type: TYPE_BOX + id: "property_slider/root" + parent: "property_slider" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "property_slider/text_name" + parent: "property_slider/root" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_slider/E_Anchor" + parent: "property_slider/root" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_slider/slider" + parent: "property_slider/E_Anchor" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_slider/slider_back" + parent: "property_slider/slider" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_slider/slider_pin" + parent: "property_slider/slider" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_slider/button" + parent: "property_slider/E_Anchor" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_slider/selected" + parent: "property_slider/button" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "property_slider/text_value" + parent: "property_slider/button" + template_node_child: true +} +nodes { + position { + y: -50.0 + } + type: TYPE_TEMPLATE + id: "property_checkbox" + parent: "properties" + inherit_alpha: true + template: "/widget/properties_panel/properties/property_checkbox.gui" +} +nodes { + type: TYPE_BOX + id: "property_checkbox/root" + parent: "property_checkbox" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "property_checkbox/text_name" + parent: "property_checkbox/root" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_checkbox/E_Anchor" + parent: "property_checkbox/root" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_checkbox/button" + parent: "property_checkbox/E_Anchor" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_checkbox/icon" + parent: "property_checkbox/button" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_checkbox/selected" + parent: "property_checkbox/button" + template_node_child: true +} +nodes { + position { + y: -100.0 + } + type: TYPE_TEMPLATE + id: "property_button" + parent: "properties" + inherit_alpha: true + template: "/widget/properties_panel/properties/property_button.gui" +} +nodes { + type: TYPE_BOX + id: "property_button/root" + parent: "property_button" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "property_button/text_name" + parent: "property_button/root" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_button/E_Anchor" + parent: "property_button/root" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_button/button" + parent: "property_button/E_Anchor" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_button/selected" + parent: "property_button/button" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "property_button/text_button" + parent: "property_button/button" + template_node_child: true +} +nodes { + position { + y: -150.0 + } + type: TYPE_TEMPLATE + id: "property_input" + parent: "properties" + inherit_alpha: true + template: "/widget/properties_panel/properties/property_input.gui" +} +nodes { + type: TYPE_BOX + id: "property_input/root" + parent: "property_input" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "property_input/text_name" + parent: "property_input/root" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_input/E_Anchor" + parent: "property_input/root" + template_node_child: true +} +nodes { + type: TYPE_TEMPLATE + id: "property_input/rich_input" + parent: "property_input/E_Anchor" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_input/rich_input/root" + parent: "property_input/rich_input" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_input/rich_input/button" + parent: "property_input/rich_input/root" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "property_input/rich_input/placeholder_text" + parent: "property_input/rich_input/root" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "property_input/rich_input/input_text" + parent: "property_input/rich_input/root" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_input/rich_input/cursor_node" + parent: "property_input/rich_input/root" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "property_input/rich_input/cursor_text" + parent: "property_input/rich_input/cursor_node" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_input/selected" + parent: "property_input/E_Anchor" + template_node_child: true +} +nodes { + position { + y: -200.0 + } + type: TYPE_TEMPLATE + id: "property_text" + parent: "properties" + inherit_alpha: true + template: "/widget/properties_panel/properties/property_text.gui" +} +nodes { + type: TYPE_BOX + id: "property_text/root" + parent: "property_text" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "property_text/text_name" + parent: "property_text/root" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "property_text/text_right" + parent: "property_text/root" + template_node_child: true +} +nodes { + position { + y: -250.0 + } + type: TYPE_TEMPLATE + id: "property_left_right_selector" + parent: "properties" + inherit_alpha: true + template: "/widget/properties_panel/properties/property_left_right_selector.gui" +} +nodes { + type: TYPE_BOX + id: "property_left_right_selector/root" + parent: "property_left_right_selector" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "property_left_right_selector/text_name" + parent: "property_left_right_selector/root" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_left_right_selector/E_Anchor" + parent: "property_left_right_selector/root" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_left_right_selector/button_left" + parent: "property_left_right_selector/E_Anchor" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_left_right_selector/icon_left" + parent: "property_left_right_selector/button_left" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_left_right_selector/button_right" + parent: "property_left_right_selector/E_Anchor" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_left_right_selector/icon_right" + parent: "property_left_right_selector/button_right" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_left_right_selector/selected" + parent: "property_left_right_selector/E_Anchor" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "property_left_right_selector/text_value" + parent: "property_left_right_selector/E_Anchor" + template_node_child: true +} +nodes { + position { + y: -300.0 + } + type: TYPE_TEMPLATE + id: "property_vector3" + parent: "properties" + inherit_alpha: true + template: "/widget/properties_panel/properties/property_vector3.gui" +} +nodes { + type: TYPE_BOX + id: "property_vector3/root" + parent: "property_vector3" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "property_vector3/text_name" + parent: "property_vector3/root" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_vector3/E_Anchor" + parent: "property_vector3/root" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_vector3/field_x" + parent: "property_vector3/E_Anchor" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "property_vector3/text_x" + parent: "property_vector3/field_x" + template_node_child: true +} +nodes { + type: TYPE_TEMPLATE + id: "property_vector3/rich_input_x" + parent: "property_vector3/field_x" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_vector3/rich_input_x/root" + parent: "property_vector3/rich_input_x" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_vector3/rich_input_x/button" + parent: "property_vector3/rich_input_x/root" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "property_vector3/rich_input_x/placeholder_text" + parent: "property_vector3/rich_input_x/root" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "property_vector3/rich_input_x/input_text" + parent: "property_vector3/rich_input_x/root" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_vector3/rich_input_x/cursor_node" + parent: "property_vector3/rich_input_x/root" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "property_vector3/rich_input_x/cursor_text" + parent: "property_vector3/rich_input_x/cursor_node" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_vector3/selected_x" + parent: "property_vector3/field_x" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_vector3/field_y" + parent: "property_vector3/E_Anchor" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "property_vector3/text_y" + parent: "property_vector3/field_y" + template_node_child: true +} +nodes { + type: TYPE_TEMPLATE + id: "property_vector3/rich_input_y" + parent: "property_vector3/field_y" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_vector3/rich_input_y/root" + parent: "property_vector3/rich_input_y" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_vector3/rich_input_y/button" + parent: "property_vector3/rich_input_y/root" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "property_vector3/rich_input_y/placeholder_text" + parent: "property_vector3/rich_input_y/root" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "property_vector3/rich_input_y/input_text" + parent: "property_vector3/rich_input_y/root" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_vector3/rich_input_y/cursor_node" + parent: "property_vector3/rich_input_y/root" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "property_vector3/rich_input_y/cursor_text" + parent: "property_vector3/rich_input_y/cursor_node" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_vector3/selected_y" + parent: "property_vector3/field_y" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_vector3/field_z" + parent: "property_vector3/E_Anchor" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "property_vector3/text_z" + parent: "property_vector3/field_z" + template_node_child: true +} +nodes { + type: TYPE_TEMPLATE + id: "property_vector3/rich_input_z" + parent: "property_vector3/field_z" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_vector3/rich_input_z/root" + parent: "property_vector3/rich_input_z" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_vector3/rich_input_z/button" + parent: "property_vector3/rich_input_z/root" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "property_vector3/rich_input_z/placeholder_text" + parent: "property_vector3/rich_input_z/root" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "property_vector3/rich_input_z/input_text" + parent: "property_vector3/rich_input_z/root" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_vector3/rich_input_z/cursor_node" + parent: "property_vector3/rich_input_z/root" + template_node_child: true +} +nodes { + type: TYPE_TEXT + id: "property_vector3/rich_input_z/cursor_text" + parent: "property_vector3/rich_input_z/cursor_node" + template_node_child: true +} +nodes { + type: TYPE_BOX + id: "property_vector3/selected_z" + parent: "property_vector3/field_z" + template_node_child: true +} +nodes { + position { + y: -100.0 + } + type: TYPE_TEMPLATE + id: "property_button_small" + parent: "properties" + inherit_alpha: true + template: "/widget/properties_panel/properties/property_button.gui" + enabled: false +} +nodes { + type: TYPE_BOX + id: "property_button_small/root" + parent: "property_button_small" + template_node_child: true +} +nodes { + size { + x: 700.0 + y: 40.0 + } + type: TYPE_TEXT + id: "property_button_small/text_name" + parent: "property_button_small/root" + overridden_fields: 4 + template_node_child: true +} +nodes { + size { + x: 40.0 + y: 40.0 + } + type: TYPE_BOX + id: "property_button_small/E_Anchor" + parent: "property_button_small/root" + overridden_fields: 4 + template_node_child: true +} +nodes { + position { + x: -20.0 + } + size { + x: 40.0 + y: 40.0 + } + type: TYPE_BOX + id: "property_button_small/button" + parent: "property_button_small/E_Anchor" + overridden_fields: 1 + overridden_fields: 4 + template_node_child: true +} +nodes { + size { + x: 40.0 + y: 4.0 + } + type: TYPE_BOX + id: "property_button_small/selected" + parent: "property_button_small/button" + overridden_fields: 4 + template_node_child: true +} +nodes { + size { + x: 40.0 + y: 50.0 + } + type: TYPE_TEXT + text: ">" + id: "property_button_small/text_button" + parent: "property_button_small/button" + overridden_fields: 4 + overridden_fields: 8 + template_node_child: true +} +layers { + name: "druid" +} +layers { + name: "druid_text_regular" +} +layers { + name: "druid_text_bold" +} +material: "/builtins/materials/gui.material" +adjust_reference: ADJUST_REFERENCE_PARENT diff --git a/widget/properties_panel/properties_panel.lua b/widget/properties_panel/properties_panel.lua new file mode 100644 index 0000000..55c5cf8 --- /dev/null +++ b/widget/properties_panel/properties_panel.lua @@ -0,0 +1,580 @@ +local event = require("event.event") + +local color = require("druid.color") +local helper = require("druid.helper") +local property_checkbox = require("widget.properties_panel.properties.property_checkbox") +local property_slider = require("widget.properties_panel.properties.property_slider") +local property_button = require("widget.properties_panel.properties.property_button") +local property_input = require("widget.properties_panel.properties.property_input") +local property_text = require("widget.properties_panel.properties.property_text") +local property_left_right_selector = require("widget.properties_panel.properties.property_left_right_selector") +local property_vector3 = require("widget.properties_panel.properties.property_vector3") + +---@class widget.properties_panel: druid.widget +---@field root node +---@field scroll druid.scroll +---@field layout druid.layout +---@field container druid.container +---@field container_content druid.container +---@field container_scroll_view druid.container +---@field container_scroll_content druid.container +---@field button_hidden druid.button +---@field text_header druid.text +---@field paginator widget.property_left_right_selector +---@field properties druid.widget[] List of created properties +---@field properties_constructors fun()[] List of properties functions to create a new widget. Used to not spawn non-visible widgets but keep the reference +local M = {} + +local COLOR_BUTTON = "#4E4F50" +local COLOR_REFRESH_ACTIVE = "#8BD092" + +function M:init() + self.root = self:get_node("root") + self.scale_root = gui.get_scale(self.root) + self.content = self:get_node("content") + + self.container = self.druid:new_container(self.root) + self.container:add_container("header") + self.container_content = self.container:add_container("content") + self.container_scroll_view = self.container_content:add_container("scroll_view") + self.container_scroll_content = self.container_scroll_view:add_container("scroll_content") + + self.default_size = self.container:get_size() + self.header_size = gui.get_size(self:get_node("header")) + + -- To have ability to go back to previous scene, collections of all properties to rebuild + self.scenes = {} + + self.properties = {} + self.properties_constructors = {} + self.current_page = 1 + self.properties_per_page = 15 + + self.text_header = self.druid:new_text("text_header") + self.scroll = self.druid:new_scroll("scroll_view", "scroll_content") + self.layout = self.druid:new_layout("scroll_content", "vertical") + :set_hug_content(false, true) + :set_padding(nil, 0) + + self.layout.on_size_changed:subscribe(self.on_size_changed, self) + + self.druid:new_drag("header", self.on_drag_widget) + self.button_hidden = self.druid:new_button("icon_drag", function() + self:set_hidden(not self._is_hidden) + end):set_style(nil) + + self.button_back = self.druid:new_button("icon_back", function() + self:previous_scene() + end) + gui.set_enabled(self.button_back.node, false) + + self.button_refresh = self.druid:new_button("icon_refresh", function() + self:toggle_auto_refresh() + end) + + -- We not using as a part of properties, since it handled in a way to be paginable + self.paginator = self.druid:new_widget(property_left_right_selector, "property_left_right_selector", "root") + self.paginator:set_text("Page") + self.paginator:set_number_type(1, 1, true) + self.paginator:set_value(self.current_page) + self.paginator.on_change_value:subscribe(function(value) + self:set_page(value) + end) + local width = self.layout:get_content_size() + self.paginator.container:set_size(width) + + gui.set_enabled(self.paginator.root, false) + + gui.set_enabled(self:get_node("property_checkbox/root"), false) + gui.set_enabled(self:get_node("property_slider/root"), false) + gui.set_enabled(self:get_node("property_button/root"), false) + gui.set_enabled(self:get_node("property_button_small/root"), false) + gui.set_enabled(self:get_node("property_input/root"), false) + gui.set_enabled(self:get_node("property_text/root"), false) + gui.set_enabled(self:get_node("property_left_right_selector/root"), false) + gui.set_enabled(self:get_node("property_vector3/root"), false) +end + + +function M:on_remove() + self:clear() +end + + +function M:toggle_auto_refresh() + self._is_auto_refresh = not self._is_auto_refresh + + if self._is_auto_refresh then + self.is_dirty = true + color.set_color(self.button_refresh.node, COLOR_REFRESH_ACTIVE) + self._timer_refresh = timer.delay(1, true, function() + self.is_dirty = true + end) + else + color.set_color(self.button_refresh.node, COLOR_BUTTON) + timer.cancel(self._timer_refresh) + self._timer_refresh = nil + end +end + + +function M:on_drag_widget(dx, dy) + local position = self.container:get_position() + self.container:set_position(position.x + dx * self.scale_root.x, position.y + dy * self.scale_root.y) +end + + +function M:clear_created_properties() + for index = 1, #self.properties do + local property = self.properties[index] + local root = property.root --[[@as node]] + + if root then + -- If prefab used clone nodes we can remove it + if property:get_nodes() then + gui.delete_node(root) + else + -- Probably we have component placed on scene directly + gui.set_enabled(root, false) + end + end + + self.druid:remove(self.properties[index]) + end + self.properties = {} + + self.layout:clear_layout() + + -- Use paginator as "pinned" widget + self.layout:add(self.paginator.root) +end + + +function M:next_scene() + local scene = { + header = self.text_header:get_text(), + current_page = self.current_page, + } + + helper.add_array(scene, self.properties_constructors) + table.insert(self.scenes, scene) + + self:clear() + + self.is_dirty = true + + gui.set_enabled(self.button_back.node, #self.scenes > 0) +end + + +function M:previous_scene() + local scene = table.remove(self.scenes) + self:clear() + helper.add_array(self.properties_constructors, scene) + + self.text_header:set_text(scene.header) + self.current_page = scene.current_page + + self.is_dirty = true + + gui.set_enabled(self.button_back.node, #self.scenes > 0) +end + + +function M:clear() + self:clear_created_properties() + self.properties_constructors = {} + self.current_page = 1 +end + + +function M:on_size_changed(new_size) + self.container_content:set_size(new_size.x, new_size.y, gui.PIVOT_N) + + self.default_size = vmath.vector3(new_size.x, new_size.y + 50, 0) + if not self._is_hidden then + self.container:set_size(self.default_size.x, self.default_size.y, gui.PIVOT_N) + end + + local width = self.layout:get_size().x - self.layout.padding.x - self.layout.padding.z + for index = 1, #self.properties do + local property = self.properties[index] + local container = property.container --[[@as druid.container]] + if container then + container:set_size(width) + end + end + self.paginator.container:set_size(width) +end + + +function M:update(dt) + if not self.is_dirty then + return + end + + self.is_dirty = false + + self:clear_created_properties() + + local properties_count = #self.properties_constructors + + -- Render all current properties + local start_index = (self.current_page - 1) * self.properties_per_page + 1 + local end_index = start_index + self.properties_per_page - 1 + end_index = math.min(end_index, properties_count) + + local is_paginator_visible = properties_count > self.properties_per_page + gui.set_enabled(self.paginator.root, is_paginator_visible) + self.paginator:set_number_type(1, math.ceil(properties_count / self.properties_per_page), true) + self.paginator.text_value:set_text(self.current_page .. " / " .. math.ceil(properties_count / self.properties_per_page)) + + for index = start_index, end_index do + self.properties_constructors[index]() + end +end + + +---@param on_create fun(checkbox: widget.property_checkbox)|nil +---@return widget.properties_panel +function M:add_checkbox(on_create) + return self:add_inner_widget(property_checkbox, "property_checkbox", "root", on_create) +end + + +---@param on_create fun(slider: widget.property_slider)|nil +---@return widget.properties_panel +function M:add_slider(on_create) + return self:add_inner_widget(property_slider, "property_slider", "root", on_create) +end + + +---@param on_create fun(button: widget.property_button)|nil +---@return widget.properties_panel +function M:add_button(on_create) + return self:add_inner_widget(property_button, "property_button", "root", on_create) +end + +---@param on_create fun(button: widget.property_button)|nil +---@return widget.properties_panel +function M:add_button_small(on_create) + return self:add_inner_widget(property_button, "property_button_small", "root", on_create) +end + + +---@param on_create fun(input: widget.property_input)|nil +---@return widget.properties_panel +function M:add_input(on_create) + return self:add_inner_widget(property_input, "property_input", "root", on_create) +end + + +---@param on_create fun(text: widget.property_text)|nil +function M:add_text(on_create) + return self:add_inner_widget(property_text, "property_text", "root", on_create) +end + + +---@param on_create fun(selector: widget.property_left_right_selector)|nil +function M:add_left_right_selector(on_create) + return self:add_inner_widget(property_left_right_selector, "property_left_right_selector", "root", on_create) +end + + +---@param on_create fun(vector3: widget.property_vector3)|nil +function M:add_vector3(on_create) + return self:add_inner_widget(property_vector3, "property_vector3", "root", on_create) +end + + +---@private +---@generic T: druid.widget +---@param widget_class T +---@param template string|nil +---@param nodes table|string|node|nil +---@param on_create fun(widget: T)|nil +---@return widget.properties_panel +function M:add_inner_widget(widget_class, template, nodes, on_create) + table.insert(self.properties_constructors, function() + local widget = self.druid:new_widget(widget_class, template, nodes) + + self:add_property(widget) + if on_create then + on_create(widget) + end + end) + + self.is_dirty = true + + return self +end + + +---@param create_widget_callback fun(): druid.widget +---@return widget.properties_panel +function M:add_widget(create_widget_callback) + table.insert(self.properties_constructors, function() + local widget = create_widget_callback() + self:add_property(widget) + end) + + self.is_dirty = true + + return self +end + + +---@private +function M:create_from_prefab(widget_class, template, nodes) + return self:add_property(self.druid:new_widget(widget_class, template, nodes)) +end + + +---@private +function M:add_property(widget) + gui.set_enabled(widget.root, true) + table.insert(self.properties, widget) + local width = self.layout:get_content_size() + widget.container:set_size(width) + + self.layout:add(widget.root) + + return widget +end + + +function M:remove(widget) + for index = 1, #self.properties do + if self.properties[index] == widget then + self.druid:remove(widget) + self.layout:remove(widget.root) + + -- If prefab used clone nodes we can remove it + if widget:get_nodes() then + gui.delete_node(widget.root) + else + -- Probably we have component placed on scene directly + gui.set_enabled(widget.root, false) + end + + table.remove(self.properties, index) + break + end + end +end + + +---Force to refresh properties next update +function M:set_dirty() + self.is_dirty = true +end + + +function M:set_hidden(is_hidden) + self._is_hidden = is_hidden + local node_header = self:get_node("header") + + local new_size = self._is_hidden and self.header_size or self.default_size + self.container:set_size(new_size.x, new_size.y, gui.PIVOT_N) + + local hidden_width = self.header_size.y + 8 + gui.set(node_header, "size.x", self._is_hidden and hidden_width or self.header_size.x) + + gui.set_visible(node_header, self._is_hidden) + gui.set_visible(self.root, not self._is_hidden) + + gui.set_enabled(self.text_header.node, not self._is_hidden) + gui.set_enabled(self.content, not self._is_hidden) + gui.set_enabled(self.button_refresh.node, not self._is_hidden) + gui.set_visible(self.button_back.node, not self._is_hidden) + + if not self._is_hidden then + self.is_dirty = true + end +end + + +function M:is_hidden() + return self._is_hidden +end + + +function M:load_previous_page() + self.current_page = self.current_page - 1 + self.is_dirty = true +end + + +---@param properties_per_page number +function M:set_properties_per_page(properties_per_page) + self.properties_per_page = properties_per_page +end + + +---Set a page of current scene +---@param page number +function M:set_page(page) + self.current_page = page + self.is_dirty = true +end + + +---Set a text at left top corner of the properties panel +---@param header string +function M:set_header(header) + self.text_header:set_text(header) +end + + +---@param data table +function M:render_lua_table(data) + local component_order = {} + for component_id in pairs(data) do + table.insert(component_order, component_id) + end + table.sort(component_order, function(a, b) + local a_type = type(data[a]) + local b_type = type(data[b]) + if a_type ~= b_type then + return a_type < b_type + end + if type(a) == "number" and type(b) == "number" then + return a < b + end + return tostring(a) < tostring(b) + end) + + for i = 1, #component_order do + local component_id = component_order[i] + self:add_property_component(component_id, data) + end + + local metatable = getmetatable(data) + if metatable and metatable.__index and type(metatable.__index) == "table" then + local metatable_order = {} + for key in pairs(metatable.__index) do + table.insert(metatable_order, key) + end + table.sort(metatable_order) + + for i = 1, #metatable_order do + local component_id = metatable_order[i] + local component = metatable.__index[component_id] + self:add_property_component("M:" .. component_id, data) + end + end +end + + +---@private +---@param component_id string +---@param data table +function M:add_property_component(component_id, data) + local component = data[component_id] + local component_type = type(component) + + if component_type == "table" then + local is_event = event.is_event(component) + if is_event then + self:add_button(function(button) + button:set_text_property(tostring(component_id)) + button:set_text_button("Call Event (" .. #component .. ")") + button.button.on_click:subscribe(function() + component:trigger() + end) + end) + else + self:add_button(function(button) + local is_empty = next(component) == nil + local is_array = component[1] ~= nil + local name = "Inspect" + if is_empty then + name = "Inspect (Empty)" + end + if is_array then + name = "Inspect (" .. #component .. ")" + end + + local button_name = component_id + -- If it's a number or array, try to get the id/name/prefab_id from the component + if type(component) == "table" and type(component_id) == "number" then + local extracted_id = component.name or component.prefab_id or component.node_id or component.id + if extracted_id then + button_name = component_id .. ". " .. extracted_id + end + end + + button:set_text_property(button_name) + button:set_text_button(name) + button.button.on_click:subscribe(function() + self:next_scene() + self:set_header(button_name) + self:render_lua_table(component) + end) + end) + end + end + + if component_type == "string" then + self:add_input(function(input) + input:set_text_property(tostring(component_id)) + input:set_text_value(tostring(data[component_id])) + input:on_change(function(_, value) + data[component_id] = value + end) + end) + end + + if component_type == "number" then + self:add_input(function(input) + input:set_text_property(tostring(component_id)) + input:set_text_value(tostring(helper.round(data[component_id], 3))) + input:on_change(function(_, value) + data[component_id] = tonumber(value) + end) + end) + end + + if component_type == "boolean" then + self:add_checkbox(function(checkbox) + checkbox:set_text_property(tostring(component_id)) + checkbox:set_value(data[component_id]) + checkbox:on_change(function(value) + data[component_id] = value + end) + end) + end + + if component_type == "userdata" then + if types.is_vector3(component) then + ---@cast component vector3 + self:add_vector3(function(vector3) + vector3:set_text_property(tostring(component_id)) + vector3:set_value(data[component_id].x, data[component_id].y, data[component_id].z) + vector3.on_change:subscribe(function(value) + data[component_id].x = value.x + data[component_id].y = value.y + data[component_id].z = value.z + end) + end) + else + self:add_text(function(text) + text:set_text_property(tostring(component_id)) + text:set_text_value(tostring(data[component_id])) + end) + end + end + + if component_type == "function" then + self:add_button(function(button) + button:set_text_property(tostring(component_id)) + button:set_text_button("Call") + button.button.on_click:subscribe(function() + component(data) + end) + end) + end +end + + +return M diff --git a/widget/properties_panel/properties_panel.version b/widget/properties_panel/properties_panel.version new file mode 100644 index 0000000..44cc754 --- /dev/null +++ b/widget/properties_panel/properties_panel.version @@ -0,0 +1 @@ +Insality:properties_panel@1 \ No newline at end of file diff --git a/widget/rich_input/rich_input.gui b/widget/rich_input/rich_input.gui new file mode 100644 index 0000000..da0872e --- /dev/null +++ b/widget/rich_input/rich_input.gui @@ -0,0 +1,171 @@ +fonts { + name: "druid_text_bold" + font: "/druid/fonts/druid_text_bold.font" +} +textures { + name: "druid" + texture: "/druid/druid.atlas" +} +nodes { + size { + x: 200.0 + y: 40.0 + } + type: TYPE_BOX + id: "root" + inherit_alpha: true + visible: false +} +nodes { + size { + x: 200.0 + y: 40.0 + } + color { + x: 0.31 + y: 0.318 + z: 0.322 + } + type: TYPE_BOX + texture: "druid/rect_round2_width2" + id: "button" + parent: "root" + layer: "druid" + inherit_alpha: true + slice9 { + x: 4.0 + y: 4.0 + z: 4.0 + w: 4.0 + } +} +nodes { + scale { + x: 0.5 + y: 0.5 + } + size { + x: 380.0 + y: 50.0 + } + color { + x: 0.31 + y: 0.318 + z: 0.322 + } + type: TYPE_TEXT + text: "Placeholder" + font: "druid_text_bold" + id: "placeholder_text" + outline { + x: 0.4 + y: 0.4 + z: 0.4 + } + shadow { + x: 1.0 + y: 1.0 + z: 1.0 + } + parent: "root" + layer: "druid_text_bold" + inherit_alpha: true + outline_alpha: 0.0 + shadow_alpha: 0.0 +} +nodes { + scale { + x: 0.5 + y: 0.5 + } + size { + x: 380.0 + y: 50.0 + } + color { + x: 0.722 + y: 0.741 + z: 0.761 + } + type: TYPE_TEXT + text: "User input" + font: "druid_text_bold" + id: "input_text" + shadow { + x: 1.0 + y: 1.0 + z: 1.0 + } + parent: "root" + layer: "druid_text_bold" + inherit_alpha: true + outline_alpha: 0.0 + shadow_alpha: 0.0 +} +nodes { + position { + x: 61.0 + } + scale { + x: 0.5 + y: 0.5 + } + size { + x: 16.0 + y: 50.0 + } + color { + x: 0.631 + y: 0.843 + z: 0.961 + } + type: TYPE_BOX + texture: "druid/ui_circle_16" + id: "cursor_node" + parent: "root" + layer: "druid" + inherit_alpha: true + slice9 { + x: 8.0 + y: 8.0 + z: 8.0 + w: 8.0 + } + alpha: 0.5 +} +nodes { + position { + x: -1.4 + y: 4.0 + } + size { + x: 20.0 + y: 40.0 + } + color { + x: 0.722 + y: 0.741 + z: 0.761 + } + type: TYPE_TEXT + text: "|" + font: "druid_text_bold" + id: "cursor_text" + shadow { + x: 1.0 + y: 1.0 + z: 1.0 + } + parent: "cursor_node" + layer: "druid_text_bold" + outline_alpha: 0.0 + shadow_alpha: 0.0 +} +layers { + name: "druid" +} +layers { + name: "druid_text_bold" +} +material: "/builtins/materials/gui.material" +adjust_reference: ADJUST_REFERENCE_PARENT diff --git a/widget/rich_input/rich_input.lua b/widget/rich_input/rich_input.lua new file mode 100644 index 0000000..a70b807 --- /dev/null +++ b/widget/rich_input/rich_input.lua @@ -0,0 +1,296 @@ +local helper = require("druid.helper") +local const = require("druid.const") +local utf8_lua = require("druid.system.utf8") +local utf8 = utf8 or utf8_lua + +---The widget that handles a rich text input field, it's a wrapper around the druid.input component +---@class widget.rich_input: druid.widget +---@field root node The root node of the rich input +---@field input druid.input The input component +---@field cursor node The cursor node +---@field cursor_text node The cursor text node +---@field cursor_position vector3 The position of the cursor +local M = {} + +local DOUBLE_CLICK_TIME = 0.35 +local TEMP_VECTOR = vmath.vector3(0) + + +function M:init() + self.root = self:get_node("root") + + self._last_touch_info = { + cursor_index = nil, + time = 0, + } + self.is_lshift = false + self.is_lctrl = false + + self.input = self.druid:new_input("button", "input_text") + self.is_button_input_enabled = gui.is_enabled(self.input.button.node) + + self.cursor = self:get_node("cursor_node") + self.cursor_position = gui.get_position(self.cursor) + self.cursor_text = self:get_node("cursor_text") + + self.drag = self.druid:new_drag("button", self._on_drag_callback) + self.drag.on_touch_start:subscribe(self._on_touch_start_callback) + self.drag:set_input_priority(const.PRIORITY_INPUT_MAX + 1) + self.drag:set_enabled(false) + + self.input:set_text("") + self.placeholder = self.druid:new_text("placeholder_text") + self.text_position = gui.get_position(self.input.text.node) + + self.input.on_input_text:subscribe(function() return self:_update_text() end) + self.input.on_input_select:subscribe(function() return self:_on_select() end) + self.input.on_input_unselect:subscribe(function() return self:_on_unselect() end) + self.input.on_select_cursor_change:subscribe(function() return self:_update_selection() end) + + self:_on_unselect() + self:_update_text() +end + + +---@private +---@param action_id hash Action id from on_input +---@param action table Action table from on_input +---@return boolean is_consumed True if input was consumed +function M:on_input(action_id, action) + if action_id == const.ACTION_LSHIFT then + if action.pressed then + self.is_lshift = true + elseif action.released then + self.is_lshift = false + end + end + + if action_id == const.ACTION_LCTRL or action_id == const.ACTION_LCMD then + if action.pressed then + self.is_lctrl = true + elseif action.released then + self.is_lctrl = false + end + end + + if self.input.is_selected then + if action_id == const.ACTION_LEFT and (action.pressed or action.repeated) then + self.input:move_selection(-1, self.is_lshift, self.is_lctrl) + return true + end + + if action_id == const.ACTION_RIGHT and (action.pressed or action.repeated) then + self.input:move_selection(1, self.is_lshift, self.is_lctrl) + return true + end + end + + return false +end + + +---Set placeholder text +---@param placeholder_text string The placeholder text +---@return widget.rich_input self Current instance +function M:set_placeholder(placeholder_text) + self.placeholder:set_text(placeholder_text) + return self +end + + +---Select input field +---@return widget.rich_input self Current instance +function M:select() + self.input:select() + return self +end + + +---Set input field text +---@param text string The input text +---@return widget.rich_input self Current instance +function M:set_text(text) + self.input:set_text(text) + gui.set_enabled(self.placeholder.node, true and #self.input:get_text() == 0) + + return self +end + + +---Set input field font +---@param font hash The font hash +---@return widget.rich_input self Current instance +function M:set_font(font) + gui.set_font(self.input.text.node, font) + gui.set_font(self.placeholder.node, font) + + return self +end + + +---Set input field text +function M:get_text() + return self.input:get_text() +end + + +---Set allowed charaters for input field. +-- See: https://defold.com/ref/stable/string/ +-- ex: [%a%d] for alpha and numeric +---@param characters string Regular expression for validate user input +---@return widget.rich_input self Current instance +function M:set_allowed_characters(characters) + self.input:set_allowed_characters(characters) + + return self +end + + +function M:_animate_cursor() + gui.cancel_animations(self.cursor_text, "color.w") + gui.set_alpha(self.cursor_text, 1) + gui.animate(self.cursor_text, "color.w", 0, gui.EASING_INSINE, 0.8, 0, nil, gui.PLAYBACK_LOOP_PINGPONG) +end + + +function M:_set_selection_width(selection_width) + gui.set_visible(self.cursor, selection_width > 0) + + local width = selection_width / self.input.text.scale.x + local height = gui.get_size(self.cursor).y + gui.set_size(self.cursor, vmath.vector3(width, height, 0)) + + local is_selection_to_right = self.input.cursor_index == self.input.end_index + gui.set_pivot(self.cursor, is_selection_to_right and gui.PIVOT_E or gui.PIVOT_W) +end + + +function M:_update_text() + local full_text = self.input:get_text() + local visible_text = self.input.text:get_text() + + local is_truncated = visible_text ~= full_text + local cursor_index = self.input.cursor_index + if is_truncated then + -- If text is truncated, we need to adjust the cursor index + -- to the last visible character + cursor_index = utf8.len(visible_text) + + end + + local left_text_part = utf8.sub(self.input:get_text(), 0, cursor_index) + local selected_text_part = utf8.sub(self.input:get_text(), self.input.start_index + 1, self.input.end_index) + + local left_part_width = self.input.text:get_text_size(left_text_part) + local selected_part_width = self.input.text:get_text_size(selected_text_part) + + local pivot_text = gui.get_pivot(self.input.text.node) + local pivot_offset = helper.get_pivot_offset(pivot_text) + + self.cursor_position.x = self.text_position.x - self.input.text_width * (0.5 + pivot_offset.x) + left_part_width + + gui.set_position(self.cursor, self.cursor_position) + gui.set_scale(self.cursor, self.input.text.scale) + + self:_set_selection_width(selected_part_width) +end + + +function M:_on_select() + gui.set_enabled(self.cursor, true) + gui.set_enabled(self.placeholder.node, false) + gui.set_enabled(self.input.button.node, true) + + self:_animate_cursor() + self.drag:set_enabled(true) +end + + +function M:_on_unselect() + gui.cancel_animations(self.cursor, gui.PROP_COLOR) + gui.set_enabled(self.cursor, false) + gui.set_enabled(self.input.button.node, self.is_button_input_enabled) + gui.set_enabled(self.placeholder.node, true and #self.input:get_text() == 0) + + self.drag:set_enabled(false) +end + + +---Update selection +function M:_update_selection() + self:_update_text() +end + + +function M:_get_index_by_touch(touch) + local text_node = self.input.text.node + TEMP_VECTOR.x = touch.screen_x + TEMP_VECTOR.y = touch.screen_y + + -- Distance to the text node position + local scene_scale = helper.get_scene_scale(text_node) + local local_pos = gui.screen_to_local(text_node, TEMP_VECTOR) + local_pos.x = local_pos.x / scene_scale.x + + -- Offset to the left side of the text node + local pivot_offset = helper.get_pivot_offset(gui.get_pivot(text_node)) + local_pos.x = local_pos.x + self.input.total_width * (0.5 + pivot_offset.x) + local_pos.x = local_pos.x - self.text_position.x + + local cursor_index = self.input.text:get_text_index_by_width(local_pos.x) + return cursor_index +end + + +function M:_on_touch_start_callback(touch) + local cursor_index = self:_get_index_by_touch(touch) + pprint(touch) + if self._last_touch_info.cursor_index == cursor_index then + local time = socket.gettime() + if time - self._last_touch_info.time < DOUBLE_CLICK_TIME then + local len = utf8.len(self.input:get_text()) + self.input:select_cursor(len, 0, len) + self._last_touch_info.cursor_index = nil + + return + end + end + + self._last_touch_info.cursor_index = cursor_index + self._last_touch_info.time = socket.gettime() + + if self.input.is_lshift then + local start_index = self.input.start_index + local end_index = self.input.end_index + + if cursor_index < start_index then + self.input:select_cursor(cursor_index, cursor_index, end_index) + elseif cursor_index > end_index then + self.input:select_cursor(cursor_index, start_index, cursor_index) + end + else + self.input:select_cursor(cursor_index) + end +end + + +---@param dx number The delta x position +---@param dy number The delta y position +---@param x number The x position +---@param y number The y position +---@param touch table The touch table +function M:_on_drag_callback(dx, dy, x, y, touch) + if not self._last_touch_info.cursor_index then + return + end + + local index = self:_get_index_by_touch(touch) + if self._last_touch_info.cursor_index <= index then + self.input:select_cursor(index, self._last_touch_info.cursor_index, index) + else + self.input:select_cursor(index, index, self._last_touch_info.cursor_index) + end +end + + +return M diff --git a/widget/rich_input/rich_input.version b/widget/rich_input/rich_input.version new file mode 100644 index 0000000..98cbcb8 --- /dev/null +++ b/widget/rich_input/rich_input.version @@ -0,0 +1 @@ +Insality:rich_input@1 \ No newline at end of file