Last active
December 5, 2022 23:23
-
-
Save vmedea/afefa201e328db1d9253fe0d1812fbbb to your computer and use it in GitHub Desktop.
Godot tile data instancing plugin for consistent tile configurations
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Tile data instancing plugin for consistent tile configurations. | |
| # Part of "Xenomusa" (C) Mara Huldra 2022 | |
| # SPDX-License-Identifier: MIT | |
| @tool | |
| extends EditorPlugin | |
| # Avaiable tileset templates | |
| enum TemplateType { | |
| TERRAIN = 0, # 7x7 terrain template | |
| WALL = 1, # 4x4 wall template | |
| } | |
| # Terrain tile collision type. | |
| # Could ostensibly also be used for occlusion. | |
| enum CollisionType { | |
| PASS = 0, # Always pass | |
| BLOCK_OFF = 1, # "off" terrain is blocker | |
| BLOCK_ON = 2, # "on" terrain is blocker | |
| BLOCK = 3, # Always block | |
| } | |
| # Polygon generation mode. | |
| enum PolygonMode { | |
| BASIC, | |
| DIAG, | |
| } | |
| # Bitmask format to neighbour (depending on terrain mode, so that it only sets valid connectivity bits). | |
| # bit, neighbour | |
| var bitmaskbits = { | |
| TileSet.TERRAIN_MODE_MATCH_CORNERS_AND_SIDES: [ | |
| [0b100000000, TileSet.CELL_NEIGHBOR_TOP_LEFT_CORNER], | |
| [0b010000000, TileSet.CELL_NEIGHBOR_TOP_SIDE], | |
| [0b001000000, TileSet.CELL_NEIGHBOR_TOP_RIGHT_CORNER], | |
| [0b000100000, TileSet.CELL_NEIGHBOR_LEFT_SIDE], | |
| #0b000010000 (self bit) | |
| [0b000001000, TileSet.CELL_NEIGHBOR_RIGHT_SIDE], | |
| [0b000000100, TileSet.CELL_NEIGHBOR_BOTTOM_LEFT_CORNER], | |
| [0b000000010, TileSet.CELL_NEIGHBOR_BOTTOM_SIDE], | |
| [0b000000001, TileSet.CELL_NEIGHBOR_BOTTOM_RIGHT_CORNER], | |
| ], | |
| TileSet.TERRAIN_MODE_MATCH_SIDES: [ | |
| [0b010000000, TileSet.CELL_NEIGHBOR_TOP_SIDE], | |
| [0b000100000, TileSet.CELL_NEIGHBOR_LEFT_SIDE], | |
| #0b000010000 (self bit) | |
| [0b000001000, TileSet.CELL_NEIGHBOR_RIGHT_SIDE], | |
| [0b000000010, TileSet.CELL_NEIGHBOR_BOTTOM_SIDE], | |
| ], | |
| TileSet.TERRAIN_MODE_MATCH_CORNERS: [ | |
| [0b100000000, TileSet.CELL_NEIGHBOR_TOP_LEFT_CORNER], | |
| [0b001000000, TileSet.CELL_NEIGHBOR_TOP_RIGHT_CORNER], | |
| #0b000010000 (self bit) | |
| [0b000000100, TileSet.CELL_NEIGHBOR_BOTTOM_LEFT_CORNER], | |
| [0b000000001, TileSet.CELL_NEIGHBOR_BOTTOM_RIGHT_CORNER], | |
| ], | |
| } | |
| # 7x7 terrain template | |
| # subcoord, bitmask | |
| var tile_template_terrain = [ | |
| [Vector2i(0, 0), 0b000011011], | |
| [Vector2i(1, 0), 0b000111111], | |
| [Vector2i(2, 0), 0b000110110], | |
| [Vector2i(3, 0), 0b000010010], | |
| [Vector2i(4, 0), 0b111111110], | |
| [Vector2i(5, 0), 0b111111010], | |
| [Vector2i(6, 0), 0b111111011], | |
| [Vector2i(0, 1), 0b011011011], | |
| [Vector2i(1, 1), 0b111111111], | |
| [Vector2i(2, 1), 0b110110110], | |
| [Vector2i(3, 1), 0b010010010], | |
| [Vector2i(4, 1), 0b110111110], | |
| [Vector2i(5, 1), 0b010111010], | |
| [Vector2i(6, 1), 0b011111011], | |
| [Vector2i(0, 2), 0b011011000], | |
| [Vector2i(1, 2), 0b111111000], | |
| [Vector2i(2, 2), 0b110110000], | |
| [Vector2i(3, 2), 0b010010000], | |
| [Vector2i(4, 2), 0b110111111], | |
| [Vector2i(5, 2), 0b010111111], | |
| [Vector2i(6, 2), 0b011111111], | |
| [Vector2i(0, 3), 0b000011000], | |
| [Vector2i(1, 3), 0b000111000], | |
| [Vector2i(2, 3), 0b000110000], | |
| [Vector2i(3, 3), 0b000010000], | |
| [Vector2i(4, 3), 0b000111110], | |
| [Vector2i(5, 3), 0b000111010], | |
| [Vector2i(6, 3), 0b000111011], | |
| [Vector2i(0, 4), 0b011011010], | |
| [Vector2i(1, 4), 0b110110010], | |
| [Vector2i(2, 4), 0b011111110], | |
| [Vector2i(3, 4), 0b110111011], | |
| [Vector2i(4, 4), 0b110111000], | |
| [Vector2i(5, 4), 0b010111000], | |
| [Vector2i(6, 4), 0b011111000], | |
| [Vector2i(0, 5), 0b010011010], | |
| [Vector2i(1, 5), 0b010110010], | |
| [Vector2i(2, 5), 0b000011010], | |
| [Vector2i(3, 5), 0b000110010], | |
| [Vector2i(4, 5), 0b110111010], | |
| [Vector2i(5, 5), 0b011111010], | |
| [Vector2i(0, 6), 0b010011011], | |
| [Vector2i(1, 6), 0b010110110], | |
| [Vector2i(2, 6), 0b010011000], | |
| [Vector2i(3, 6), 0b010110000], | |
| [Vector2i(4, 6), 0b010111110], | |
| [Vector2i(5, 6), 0b010111011], | |
| ] | |
| # 4x4 wall template | |
| # subcoord, bitmask | |
| var tile_template_wall = [ | |
| [Vector2i(0, 0), 0b000011010], | |
| [Vector2i(1, 0), 0b000111010], | |
| [Vector2i(2, 0), 0b000110010], | |
| [Vector2i(3, 0), 0b000010010], | |
| [Vector2i(0, 1), 0b010011010], | |
| [Vector2i(1, 1), 0b010111010], | |
| [Vector2i(2, 1), 0b010110010], | |
| [Vector2i(3, 1), 0b010010010], | |
| [Vector2i(0, 2), 0b010011000], | |
| [Vector2i(1, 2), 0b010111000], | |
| [Vector2i(2, 2), 0b010110000], | |
| [Vector2i(3, 2), 0b010010000], | |
| [Vector2i(0, 3), 0b000011000], | |
| [Vector2i(1, 3), 0b000111000], | |
| [Vector2i(2, 3), 0b000110000], | |
| [Vector2i(3, 3), 0b000010000], | |
| ] | |
| # Template from template type enum | |
| var template_types = { | |
| TemplateType.TERRAIN: tile_template_terrain, | |
| TemplateType.WALL: tile_template_wall, | |
| } | |
| # Map from bitmask to the respective collision polygons. Basic 3x3 grid. | |
| # bitmask, polygons | |
| var polygons_from_bitmask_basic = { | |
| # Block inside | |
| 0b000011011: [[Vector2i(1,1), Vector2i(4,1), Vector2i(4,4), Vector2i(1,4)]], | |
| 0b000111111: [[Vector2i(0,1), Vector2i(4,1), Vector2i(4,4), Vector2i(0,4)]], | |
| 0b000110110: [[Vector2i(0,1), Vector2i(3,1), Vector2i(3,4), Vector2i(0,4)]], | |
| 0b000010010: [[Vector2i(1,1), Vector2i(3,1), Vector2i(3,4), Vector2i(1,4)]], | |
| 0b111111110: [[Vector2i(0,0), Vector2i(4,0), Vector2i(4,3), Vector2i(3,3), Vector2i(3,4), Vector2i(0,4)]], | |
| 0b111111010: [[Vector2i(0,0), Vector2i(4,0), Vector2i(4,3), Vector2i(3,3), Vector2i(3,4), Vector2i(1,4), Vector2i(1,3), Vector2i(0,3)]], | |
| 0b111111011: [[Vector2i(0,0), Vector2i(4,0), Vector2i(4,4), Vector2i(1,4), Vector2i(1,3), Vector2i(0,3)]], | |
| 0b011011011: [[Vector2i(1,0), Vector2i(4,0), Vector2i(4,4), Vector2i(1,4)]], | |
| 0b111111111: [[Vector2i(4,0), Vector2i(4,4), Vector2i(0,4), Vector2i(0,0)]], | |
| 0b110110110: [[Vector2i(0,0), Vector2i(3,0), Vector2i(3,4), Vector2i(0,4)]], | |
| 0b010010010: [[Vector2i(1,0), Vector2i(3,0), Vector2i(3,4), Vector2i(1,4)]], | |
| 0b110111110: [[Vector2i(0,0), Vector2i(3,0), Vector2i(3,1), Vector2i(4,1), Vector2i(4,3), Vector2i(3,3), Vector2i(3,4), Vector2i(0,4)]], | |
| 0b010111010: [[Vector2i(0,1), Vector2i(1,1), Vector2i(1,0), Vector2i(3,0), Vector2i(3,1), Vector2i(4,1), Vector2i(4,3), Vector2i(3,3), Vector2i(3,4), Vector2i(1,4), Vector2i(1,3), Vector2i(0,3)]], | |
| 0b011111011: [[Vector2i(0,1), Vector2i(1,1), Vector2i(1,0), Vector2i(4,0), Vector2i(4,4), Vector2i(1,4), Vector2i(1,3), Vector2i(0,3)]], | |
| 0b011011000: [[Vector2i(1,0), Vector2i(4,0), Vector2i(4,3), Vector2i(1,3)]], | |
| 0b111111000: [[Vector2i(0,0), Vector2i(4,0), Vector2i(4,3), Vector2i(0,3)]], | |
| 0b110110000: [[Vector2i(0,0), Vector2i(3,0), Vector2i(3,3), Vector2i(0,3)]], | |
| 0b010010000: [[Vector2i(1,0), Vector2i(3,0), Vector2i(3,3), Vector2i(1,3)]], | |
| 0b110111111: [[Vector2i(0,0), Vector2i(3,0), Vector2i(3,1), Vector2i(4,1), Vector2i(4,4), Vector2i(0,4)]], | |
| 0b010111111: [[Vector2i(0,1), Vector2i(1,1), Vector2i(1,0), Vector2i(3,0), Vector2i(3,1), Vector2i(4,1), Vector2i(4,4), Vector2i(0,4)]], | |
| 0b011111111: [[Vector2i(0,1), Vector2i(1,1), Vector2i(1,0), Vector2i(4,0), Vector2i(4,4), Vector2i(0,4)]], | |
| 0b000011000: [[Vector2i(4,1), Vector2i(4,3), Vector2i(1,3), Vector2i(1,1)]], | |
| 0b000111000: [[Vector2i(0,1), Vector2i(4,1), Vector2i(4,3), Vector2i(0,3)]], | |
| 0b000110000: [[Vector2i(0,1), Vector2i(3,1), Vector2i(3,3), Vector2i(0,3)]], | |
| 0b000010000: [[Vector2i(1,1), Vector2i(3,1), Vector2i(3,3), Vector2i(1,3)]], | |
| 0b000111110: [[Vector2i(0,1), Vector2i(4,1), Vector2i(4,3), Vector2i(3,3), Vector2i(3,4), Vector2i(0,4)]], | |
| 0b000111010: [[Vector2i(0,1), Vector2i(4,1), Vector2i(4,3), Vector2i(3,3), Vector2i(3,4), Vector2i(1,4), Vector2i(1,3), Vector2i(0,3)]], | |
| 0b000111011: [[Vector2i(0,1), Vector2i(4,1), Vector2i(4,4), Vector2i(1,4), Vector2i(1,3), Vector2i(0,3)]], | |
| 0b011011010: [[Vector2i(1,0), Vector2i(4,0), Vector2i(4,3), Vector2i(3,3), Vector2i(3,4), Vector2i(1,4)]], | |
| 0b110110010: [[Vector2i(3,0), Vector2i(3,4), Vector2i(1,4), Vector2i(1,3), Vector2i(0,3), Vector2i(0,0)]], | |
| 0b011111110: [[Vector2i(0,1), Vector2i(1,1), Vector2i(1,0), Vector2i(4,0), Vector2i(4,3), Vector2i(3,3), Vector2i(3,4), Vector2i(0,4)]], | |
| 0b110111011: [[Vector2i(0,0), Vector2i(3,0), Vector2i(3,1), Vector2i(4,1), Vector2i(4,4), Vector2i(1,4), Vector2i(1,3), Vector2i(0,3)]], | |
| 0b110111000: [[Vector2i(0,0), Vector2i(3,0), Vector2i(3,1), Vector2i(4,1), Vector2i(4,3), Vector2i(0,3)]], | |
| 0b010111000: [[Vector2i(0,1), Vector2i(1,1), Vector2i(1,0), Vector2i(3,0), Vector2i(3,1), Vector2i(4,1), Vector2i(4,3), Vector2i(0,3)]], | |
| 0b011111000: [[Vector2i(0,1), Vector2i(1,1), Vector2i(1,0), Vector2i(4,0), Vector2i(4,3), Vector2i(0,3)]], | |
| 0b010011010: [[Vector2i(1,0), Vector2i(3,0), Vector2i(3,1), Vector2i(4,1), Vector2i(4,3), Vector2i(3,3), Vector2i(3,4), Vector2i(1,4)]], | |
| 0b010110010: [[Vector2i(1,0), Vector2i(3,0), Vector2i(3,4), Vector2i(1,4), Vector2i(1,3), Vector2i(0,3), Vector2i(0,1), Vector2i(1,1)]], | |
| 0b000011010: [[Vector2i(1,1), Vector2i(4,1), Vector2i(4,3), Vector2i(3,3), Vector2i(3,4), Vector2i(1,4)]], | |
| 0b000110010: [[Vector2i(0,1), Vector2i(3,1), Vector2i(3,4), Vector2i(1,4), Vector2i(1,3), Vector2i(0,3)]], | |
| 0b110111010: [[Vector2i(0,0), Vector2i(3,0), Vector2i(3,1), Vector2i(4,1), Vector2i(4,3), Vector2i(3,3), Vector2i(3,4), Vector2i(1,4), Vector2i(1,3), Vector2i(0,3)]], | |
| 0b011111010: [[Vector2i(0,1), Vector2i(1,1), Vector2i(1,0), Vector2i(4,0), Vector2i(4,3), Vector2i(3,3), Vector2i(3,4), Vector2i(1,4), Vector2i(1,3), Vector2i(0,3)]], | |
| 0b010011011: [[Vector2i(1,0), Vector2i(3,0), Vector2i(3,1), Vector2i(4,1), Vector2i(4,4), Vector2i(1,4)]], | |
| 0b010110110: [[Vector2i(0,1), Vector2i(1,1), Vector2i(1,0), Vector2i(3,0), Vector2i(3,4), Vector2i(0,4)]], | |
| 0b010011000: [[Vector2i(1,0), Vector2i(1,3), Vector2i(4,3), Vector2i(4,1), Vector2i(3,1), Vector2i(3,0)]], | |
| 0b010110000: [[Vector2i(3,0), Vector2i(3,3), Vector2i(0,3), Vector2i(0,1), Vector2i(1,1), Vector2i(1,0)]], | |
| 0b010111110: [[Vector2i(0,1), Vector2i(1,1), Vector2i(1,0), Vector2i(3,0), Vector2i(3,1), Vector2i(4,1), Vector2i(4,3), Vector2i(3,3), Vector2i(3,4), Vector2i(0,4)]], | |
| 0b010111011: [[Vector2i(0,1), Vector2i(1,1), Vector2i(1,0), Vector2i(3,0), Vector2i(3,1), Vector2i(4,1), Vector2i(4,4), Vector2i(1,4), Vector2i(1,3), Vector2i(0,3)]], | |
| # Block outside | |
| 0b111100100: [[Vector2i(0,0), Vector2i(4,0), Vector2i(4,1), Vector2i(1,1), Vector2i(1,4), Vector2i(0,4)]], | |
| 0b111000000: [[Vector2i(0,1), Vector2i(4,1), Vector2i(4,0), Vector2i(0,0)]], | |
| 0b111001001: [[Vector2i(0,0), Vector2i(4,0), Vector2i(4,4), Vector2i(3,4), Vector2i(3,1), Vector2i(0,1)]], | |
| 0b111101101: [[Vector2i(0,0), Vector2i(4,0), Vector2i(4,4), Vector2i(3,4), Vector2i(3,1), Vector2i(1,1), Vector2i(1,4), Vector2i(0,4)]], | |
| 0b000000001: [[Vector2i(3,3), Vector2i(4,3), Vector2i(4,4), Vector2i(3,4)]], | |
| 0b000000101: [[Vector2i(0,3), Vector2i(1,3), Vector2i(1,4), Vector2i(0,4)], [Vector2i(3,3), Vector2i(4,3), Vector2i(4,4), Vector2i(3,4)]], | |
| 0b000000100: [[Vector2i(0,3), Vector2i(1,3), Vector2i(1,4), Vector2i(0,4)]], | |
| 0b100100100: [[Vector2i(0,0), Vector2i(1,0), Vector2i(1,4), Vector2i(0,4)]], | |
| 0b000000000: [], | |
| 0b001001001: [[Vector2i(3,0), Vector2i(4,0), Vector2i(4,4), Vector2i(3,4)]], | |
| 0b101101101: [[Vector2i(0,0), Vector2i(1,0), Vector2i(1,4), Vector2i(0,4)], [Vector2i(3,0), Vector2i(4,0), Vector2i(4,4), Vector2i(3,4)]], | |
| 0b001000001: [[Vector2i(3,0), Vector2i(4,0), Vector2i(4,1), Vector2i(3,1)], [Vector2i(3,3), Vector2i(4,3), Vector2i(4,4), Vector2i(3,4)]], | |
| 0b101000101: [[Vector2i(0,0), Vector2i(1,0), Vector2i(1,1), Vector2i(0,1)], [Vector2i(3,0), Vector2i(4,0), Vector2i(4,1), Vector2i(3,1)], [Vector2i(0,3), Vector2i(1,3), Vector2i(1,4), Vector2i(0,4)], [Vector2i(3,3), Vector2i(4,3), Vector2i(4,4), Vector2i(3,4)]], | |
| 0b100000100: [[Vector2i(0,0), Vector2i(1,0), Vector2i(1,1), Vector2i(0,1)], [Vector2i(0,3), Vector2i(1,3), Vector2i(1,4), Vector2i(0,4)]], | |
| 0b100100111: [[Vector2i(0,0), Vector2i(1,0), Vector2i(1,3), Vector2i(4,3), Vector2i(4,4), Vector2i(0,4)]], | |
| 0b000000111: [[Vector2i(0,3), Vector2i(4,3), Vector2i(4,4), Vector2i(0,4)]], | |
| 0b001001111: [[Vector2i(0,3), Vector2i(3,3), Vector2i(3,0), Vector2i(4,0), Vector2i(4,4), Vector2i(0,4)]], | |
| 0b101101111: [[Vector2i(0,0), Vector2i(1,0), Vector2i(1,3), Vector2i(3,3), Vector2i(3,0), Vector2i(4,0), Vector2i(4,4), Vector2i(0,4)]], | |
| 0b001000000: [[Vector2i(3,0), Vector2i(4,0), Vector2i(4,1), Vector2i(3,1)]], | |
| 0b101000000: [[Vector2i(0,0), Vector2i(1,0), Vector2i(1,1), Vector2i(0,1)], [Vector2i(3,0), Vector2i(4,0), Vector2i(4,1), Vector2i(3,1)]], | |
| 0b100000000: [[Vector2i(0,0), Vector2i(1,0), Vector2i(1,1), Vector2i(0,1)]], | |
| 0b111100111: [[Vector2i(0,0), Vector2i(4,0), Vector2i(4,1), Vector2i(1,1), Vector2i(1,3), Vector2i(4,3), Vector2i(4,4), Vector2i(0,4)]], | |
| 0b111000111: [[Vector2i(0,0), Vector2i(4,0), Vector2i(4,1), Vector2i(0,1)], [Vector2i(0,3), Vector2i(4,3), Vector2i(4,4), Vector2i(0,4)]], | |
| 0b111001111: [[Vector2i(0,0), Vector2i(4,0), Vector2i(4,4), Vector2i(0,4), Vector2i(0,3), Vector2i(3,3), Vector2i(3,1), Vector2i(0,1)]], | |
| 0b111101111: [[Vector2i(0,0), Vector2i(4,0), Vector2i(4,1), Vector2i(1,1), Vector2i(1,3), Vector2i(3,3), Vector2i(3,1), Vector2i(4,1), Vector2i(4,4), Vector2i(0,4)]], | |
| 0b111000001: [[Vector2i(0,0), Vector2i(4,0), Vector2i(4,1), Vector2i(0,1)], [Vector2i(3,3), Vector2i(4,3), Vector2i(4,4), Vector2i(3,4)]], | |
| 0b111000101: [[Vector2i(0,0), Vector2i(4,0), Vector2i(4,1), Vector2i(0,1)], [Vector2i(0,3), Vector2i(1,3), Vector2i(1,4), Vector2i(0,4)], [Vector2i(3,3), Vector2i(4,3), Vector2i(4,4), Vector2i(3,4)]], | |
| 0b111000100: [[Vector2i(0,0), Vector2i(4,0), Vector2i(4,1), Vector2i(0,1)], [Vector2i(0,3), Vector2i(1,3), Vector2i(1,4), Vector2i(0,4)]], | |
| 0b100100101: [[Vector2i(0,0), Vector2i(1,0), Vector2i(1,4), Vector2i(0,4)], [Vector2i(3,3), Vector2i(4,3), Vector2i(4,4), Vector2i(3,4)]], | |
| 0b001001101: [[Vector2i(0,3), Vector2i(1,3), Vector2i(1,4), Vector2i(0,4)], [Vector2i(3,0), Vector2i(4,0), Vector2i(4,4), Vector2i(3,4)]], | |
| 0b100000001: [[Vector2i(0,0), Vector2i(1,0), Vector2i(1,1), Vector2i(0,1)], [Vector2i(3,3), Vector2i(4,3), Vector2i(4,4), Vector2i(3,4)]], | |
| 0b001000100: [[Vector2i(0,3), Vector2i(1,3), Vector2i(1,4), Vector2i(0,4)], [Vector2i(3,0), Vector2i(4,0), Vector2i(4,1), Vector2i(3,1)]], | |
| 0b001000111: [[Vector2i(3,0), Vector2i(4,0), Vector2i(4,1), Vector2i(3,1)], [Vector2i(0,3), Vector2i(4,3), Vector2i(4,4), Vector2i(0,4)]], | |
| 0b101000111: [[Vector2i(0,0), Vector2i(1,0), Vector2i(1,1), Vector2i(0,1)], [Vector2i(4,0), Vector2i(4,1), Vector2i(3,1), Vector2i(3,0)], [Vector2i(0,3), Vector2i(4,3), Vector2i(4,4), Vector2i(0,4)]], | |
| 0b100000111: [[Vector2i(0,0), Vector2i(1,0), Vector2i(1,1), Vector2i(0,1)], [Vector2i(0,3), Vector2i(4,3), Vector2i(4,4), Vector2i(0,4)]], | |
| 0b101100101: [[Vector2i(0,0), Vector2i(1,0), Vector2i(1,4), Vector2i(0,4)], [Vector2i(3,0), Vector2i(4,0), Vector2i(4,1), Vector2i(3,1)], [Vector2i(3,3), Vector2i(4,3), Vector2i(4,4), Vector2i(3,4)]], | |
| 0b101001101: [[Vector2i(0,0), Vector2i(1,0), Vector2i(1,1), Vector2i(0,1)], [Vector2i(3,0), Vector2i(4,0), Vector2i(4,4), Vector2i(3,4)], [Vector2i(0,3), Vector2i(1,3), Vector2i(1,4), Vector2i(0,4)]], | |
| 0b111100101: [[Vector2i(0,0), Vector2i(4,0), Vector2i(4,1), Vector2i(1,1), Vector2i(1,4), Vector2i(0,4)], [Vector2i(3,3), Vector2i(4,3), Vector2i(4,4), Vector2i(3,4)]], | |
| 0b111001101: [[Vector2i(0,0), Vector2i(4,0), Vector2i(4,4), Vector2i(3,4), Vector2i(3,1), Vector2i(0,1)], [Vector2i(0,3), Vector2i(1,3), Vector2i(1,4), Vector2i(0,4)]], | |
| 0b001000101: [[Vector2i(3,0), Vector2i(4,0), Vector2i(4,1), Vector2i(3,1)], [Vector2i(0,3), Vector2i(1,3), Vector2i(1,4), Vector2i(0,4)], [Vector2i(3,3), Vector2i(4,3), Vector2i(4,4), Vector2i(3,4)]], | |
| 0b100000101: [[Vector2i(0,0), Vector2i(1,0), Vector2i(1,1), Vector2i(0,1)], [Vector2i(0,3), Vector2i(1,3), Vector2i(1,4), Vector2i(0,4)], [Vector2i(3,3), Vector2i(4,3), Vector2i(4,4), Vector2i(3,4)]], | |
| 0b101100100: [[Vector2i(0,0), Vector2i(1,0), Vector2i(1,4), Vector2i(0,4)], [Vector2i(3,0), Vector2i(4,0), Vector2i(4,1), Vector2i(3,1)]], | |
| 0b101001001: [[Vector2i(0,0), Vector2i(1,0), Vector2i(1,1), Vector2i(0,1)], [Vector2i(3,0), Vector2i(4,0), Vector2i(4,4), Vector2i(3,4)]], | |
| 0b101100111: [[Vector2i(0,0), Vector2i(1,0), Vector2i(1,3), Vector2i(4,3), Vector2i(4,4), Vector2i(0,4)], [Vector2i(4,0), Vector2i(4,1), Vector2i(3,1), Vector2i(3,0)]], | |
| 0b101001111: [[Vector2i(0,0), Vector2i(1,0), Vector2i(1,1), Vector2i(0,1)], [Vector2i(3,0), Vector2i(4,0), Vector2i(4,4), Vector2i(0,4), Vector2i(0,3), Vector2i(3,3)]], | |
| 0b101000001: [[Vector2i(0,0), Vector2i(1,0), Vector2i(1,1), Vector2i(0,1)], [Vector2i(3,0), Vector2i(4,0), Vector2i(4,1), Vector2i(3,1)], [Vector2i(3,3), Vector2i(4,3), Vector2i(4,4), Vector2i(3,4)]], | |
| 0b101000100: [[Vector2i(0,0), Vector2i(1,0), Vector2i(1,1), Vector2i(0,1)], [Vector2i(3,0), Vector2i(4,0), Vector2i(4,1), Vector2i(3,1)], [Vector2i(0,3), Vector2i(1,3), Vector2i(1,4), Vector2i(0,4)]], | |
| } | |
| # Map from bitmask to the respective collision polygons. 3x3 grid with diagonals, for better shorelines. | |
| var polygons_from_bitmask_diag = { | |
| # Block inside | |
| 0b000011011: [[Vector2i(2,2), Vector2i(4,1), Vector2i(4,4), Vector2i(1,4)]], | |
| 0b000111111: [[Vector2i(0,1), Vector2i(4,1), Vector2i(4,4), Vector2i(0,4)]], | |
| 0b000110110: [[Vector2i(0,1), Vector2i(2,2), Vector2i(3,4), Vector2i(0,4)]], | |
| 0b000010010: [[Vector2i(2,1), Vector2i(3,4), Vector2i(1,4)]], | |
| 0b111111110: [[Vector2i(0,0), Vector2i(4,0), Vector2i(4,3), Vector2i(3,4), Vector2i(0,4)]], | |
| 0b111111010: [[Vector2i(0,0), Vector2i(4,0), Vector2i(4,3), Vector2i(3,4), Vector2i(1,4), Vector2i(0,3)]], | |
| 0b111111011: [[Vector2i(0,0), Vector2i(4,0), Vector2i(4,4), Vector2i(1,4), Vector2i(0,3)]], | |
| 0b011011011: [[Vector2i(1,0), Vector2i(4,0), Vector2i(4,4), Vector2i(1,4)]], | |
| 0b111111111: [[Vector2i(4,0), Vector2i(4,4), Vector2i(0,4), Vector2i(0,0)]], | |
| 0b110110110: [[Vector2i(0,0), Vector2i(3,0), Vector2i(3,4), Vector2i(0,4)]], | |
| 0b010010010: [[Vector2i(1,0), Vector2i(3,0), Vector2i(3,4), Vector2i(1,4)]], | |
| 0b110111110: [[Vector2i(0,0), Vector2i(3,0), Vector2i(4,1), Vector2i(4,3), Vector2i(3,4), Vector2i(0,4)]], | |
| 0b010111010: [[Vector2i(0,1), Vector2i(1,0), Vector2i(3,0), Vector2i(4,1), Vector2i(4,3), Vector2i(3,4), Vector2i(1,4), Vector2i(0,3)]], | |
| 0b011111011: [[Vector2i(0,1), Vector2i(1,0), Vector2i(4,0), Vector2i(4,4), Vector2i(1,4), Vector2i(0,3)]], | |
| 0b011011000: [[Vector2i(1,0), Vector2i(4,0), Vector2i(4,3), Vector2i(2,2)]], | |
| 0b111111000: [[Vector2i(0,0), Vector2i(4,0), Vector2i(4,3), Vector2i(0,3)]], | |
| 0b110110000: [[Vector2i(0,0), Vector2i(3,0), Vector2i(2,2), Vector2i(0,3)]], | |
| 0b010010000: [[Vector2i(1,0), Vector2i(3,0), Vector2i(2,3)]], | |
| 0b110111111: [[Vector2i(0,0), Vector2i(3,0), Vector2i(4,1), Vector2i(4,4), Vector2i(0,4)]], | |
| 0b010111111: [[Vector2i(0,1), Vector2i(1,0), Vector2i(3,0), Vector2i(4,1), Vector2i(4,4), Vector2i(0,4)]], | |
| 0b011111111: [[Vector2i(0,1), Vector2i(1,0), Vector2i(4,0), Vector2i(4,4), Vector2i(0,4)]], | |
| 0b000011000: [[Vector2i(4,1), Vector2i(4,3), Vector2i(1,2)]], | |
| 0b000111000: [[Vector2i(0,1), Vector2i(4,1), Vector2i(4,3), Vector2i(0,3)]], | |
| 0b000110000: [[Vector2i(0,1), Vector2i(3,2), Vector2i(0,3)]], | |
| 0b000010000: [[Vector2i(2,1), Vector2i(3,2), Vector2i(2,3), Vector2i(1,2)]], | |
| 0b000111110: [[Vector2i(0,1), Vector2i(4,1), Vector2i(4,3), Vector2i(3,4), Vector2i(0,4)]], | |
| 0b000111010: [[Vector2i(0,1), Vector2i(4,1), Vector2i(4,3), Vector2i(3,4), Vector2i(1,4), Vector2i(0,3)]], | |
| 0b000111011: [[Vector2i(0,1), Vector2i(4,1), Vector2i(4,4), Vector2i(1,4), Vector2i(0,3)]], | |
| 0b011011010: [[Vector2i(1,0), Vector2i(4,0), Vector2i(4,3), Vector2i(3,4), Vector2i(1,4)]], | |
| 0b110110010: [[Vector2i(3,0), Vector2i(3,4), Vector2i(1,4), Vector2i(0,3), Vector2i(0,0)]], | |
| 0b011111110: [[Vector2i(0,1), Vector2i(1,0), Vector2i(4,0), Vector2i(4,3), Vector2i(3,4), Vector2i(0,4)]], | |
| 0b110111011: [[Vector2i(0,0), Vector2i(3,0), Vector2i(4,1), Vector2i(4,4), Vector2i(1,4), Vector2i(0,3)]], | |
| 0b110111000: [[Vector2i(0,0), Vector2i(3,0), Vector2i(4,1), Vector2i(4,3), Vector2i(0,3)]], | |
| 0b010111000: [[Vector2i(0,1), Vector2i(1,0), Vector2i(3,0), Vector2i(4,1), Vector2i(4,3), Vector2i(0,3)]], | |
| 0b011111000: [[Vector2i(0,1), Vector2i(1,0), Vector2i(4,0), Vector2i(4,3), Vector2i(0,3)]], | |
| 0b010011010: [[Vector2i(1,0), Vector2i(3,0), Vector2i(4,1), Vector2i(4,3), Vector2i(3,4), Vector2i(1,4)]], | |
| 0b010110010: [[Vector2i(1,0), Vector2i(3,0), Vector2i(3,4), Vector2i(1,4), Vector2i(0,3), Vector2i(0,1)]], | |
| 0b000011010: [[Vector2i(2,2), Vector2i(4,1), Vector2i(4,3), Vector2i(3,4), Vector2i(1,4)]], | |
| 0b000110010: [[Vector2i(0,1), Vector2i(2,2), Vector2i(3,4), Vector2i(1,4), Vector2i(0,3)]], | |
| 0b110111010: [[Vector2i(0,0), Vector2i(3,0), Vector2i(4,1), Vector2i(4,3), Vector2i(3,4), Vector2i(1,4), Vector2i(0,3)]], | |
| 0b011111010: [[Vector2i(0,1), Vector2i(1,0), Vector2i(4,0), Vector2i(4,3), Vector2i(3,4), Vector2i(1,4), Vector2i(0,3)]], | |
| 0b010011011: [[Vector2i(1,0), Vector2i(3,0), Vector2i(4,1), Vector2i(4,4), Vector2i(1,4)]], | |
| 0b010110110: [[Vector2i(0,1), Vector2i(1,0), Vector2i(3,0), Vector2i(3,4), Vector2i(0,4)]], | |
| 0b010011000: [[Vector2i(1,0), Vector2i(2,2), Vector2i(4,3), Vector2i(4,1), Vector2i(3,0)]], | |
| 0b010110000: [[Vector2i(3,0), Vector2i(2,2), Vector2i(0,3), Vector2i(0,1), Vector2i(1,0)]], | |
| 0b010111110: [[Vector2i(0,1), Vector2i(1,0), Vector2i(3,0), Vector2i(4,1), Vector2i(4,3), Vector2i(3,4), Vector2i(0,4)]], | |
| 0b010111011: [[Vector2i(0,1), Vector2i(1,0), Vector2i(3,0), Vector2i(4,1), Vector2i(4,4), Vector2i(1,4), Vector2i(0,3)]], | |
| # Block outside | |
| 0b111100100: [[Vector2i(0,0), Vector2i(4,0), Vector2i(4,1), Vector2i(2,2), Vector2i(1,4), Vector2i(0,4)]], | |
| 0b111000000: [[Vector2i(0,1), Vector2i(4,1), Vector2i(4,0), Vector2i(0,0)]], | |
| 0b111001001: [[Vector2i(0,0), Vector2i(4,0), Vector2i(4,4), Vector2i(3,4), Vector2i(2,2), Vector2i(0,1)]], | |
| 0b111101101: [[Vector2i(0,0), Vector2i(4,0), Vector2i(4,4), Vector2i(3,4), Vector2i(2,1), Vector2i(1,4), Vector2i(0,4)]], | |
| 0b000000001: [[Vector2i(4,3), Vector2i(4,4), Vector2i(3,4)]], | |
| 0b000000101: [[Vector2i(0,3), Vector2i(1,4), Vector2i(0,4)], [Vector2i(4,3), Vector2i(4,4), Vector2i(3,4)]], | |
| 0b000000100: [[Vector2i(0,3), Vector2i(1,4), Vector2i(0,4)]], | |
| 0b100100100: [[Vector2i(0,0), Vector2i(1,0), Vector2i(1,4), Vector2i(0,4)]], | |
| 0b000000000: [], | |
| 0b001001001: [[Vector2i(3,0), Vector2i(4,0), Vector2i(4,4), Vector2i(3,4)]], | |
| 0b101101101: [[Vector2i(0,0), Vector2i(1,0), Vector2i(1,4), Vector2i(0,4)], [Vector2i(3,0), Vector2i(4,0), Vector2i(4,4), Vector2i(3,4)]], | |
| 0b001000001: [[Vector2i(3,0), Vector2i(4,0), Vector2i(4,1)], [Vector2i(4,3), Vector2i(4,4), Vector2i(3,4)]], | |
| 0b101000101: [[Vector2i(0,0), Vector2i(1,0), Vector2i(0,1)], [Vector2i(3,0), Vector2i(4,0), Vector2i(4,1)], [Vector2i(0,3), Vector2i(1,4), Vector2i(0,4)], [Vector2i(4,3), Vector2i(4,4), Vector2i(3,4)]], | |
| 0b100000100: [[Vector2i(0,0), Vector2i(1,0), Vector2i(0,1)], [Vector2i(0,3), Vector2i(1,4), Vector2i(0,4)]], | |
| 0b100100111: [[Vector2i(0,0), Vector2i(1,0), Vector2i(2,2), Vector2i(4,3), Vector2i(4,4), Vector2i(0,4)]], | |
| 0b000000111: [[Vector2i(0,3), Vector2i(4,3), Vector2i(4,4), Vector2i(0,4)]], | |
| 0b001001111: [[Vector2i(0,3), Vector2i(2,2), Vector2i(3,0), Vector2i(4,0), Vector2i(4,4), Vector2i(0,4)]], | |
| 0b101101111: [[Vector2i(0,0), Vector2i(1,0), Vector2i(2,3), Vector2i(3,0), Vector2i(4,0), Vector2i(4,4), Vector2i(0,4)]], | |
| 0b001000000: [[Vector2i(3,0), Vector2i(4,0), Vector2i(4,1)]], | |
| 0b101000000: [[Vector2i(0,0), Vector2i(1,0), Vector2i(0,1)], [Vector2i(3,0), Vector2i(4,0), Vector2i(4,1)]], | |
| 0b100000000: [[Vector2i(0,0), Vector2i(1,0), Vector2i(0,1)]], | |
| 0b111100111: [[Vector2i(0,0), Vector2i(4,0), Vector2i(4,1), Vector2i(1,2), Vector2i(4,3), Vector2i(4,4), Vector2i(0,4)]], | |
| 0b111000111: [[Vector2i(0,0), Vector2i(4,0), Vector2i(4,1), Vector2i(0,1)], [Vector2i(0,3), Vector2i(4,3), Vector2i(4,4), Vector2i(0,4)]], | |
| 0b111001111: [[Vector2i(0,0), Vector2i(4,0), Vector2i(4,4), Vector2i(0,4), Vector2i(0,3), Vector2i(3,2), Vector2i(0,1)]], | |
| 0b111101111: [[Vector2i(0,0), Vector2i(4,0), Vector2i(4,2), Vector2i(3,2), Vector2i(2,1), Vector2i(1,2), Vector2i(2,3), Vector2i(3,2), Vector2i(4,2), Vector2i(4,4), Vector2i(0,4)]], | |
| 0b111000001: [[Vector2i(0,0), Vector2i(4,0), Vector2i(4,1), Vector2i(0,1)], [Vector2i(4,3), Vector2i(4,4), Vector2i(3,4)]], | |
| 0b111000101: [[Vector2i(0,0), Vector2i(4,0), Vector2i(4,1), Vector2i(0,1)], [Vector2i(0,3), Vector2i(1,4), Vector2i(0,4)], [Vector2i(4,3), Vector2i(4,4), Vector2i(3,4)]], | |
| 0b111000100: [[Vector2i(0,0), Vector2i(4,0), Vector2i(4,1), Vector2i(0,1)], [Vector2i(0,3), Vector2i(1,4), Vector2i(0,4)]], | |
| 0b100100101: [[Vector2i(0,0), Vector2i(1,0), Vector2i(1,4), Vector2i(0,4)], [Vector2i(4,3), Vector2i(4,4), Vector2i(3,4)]], | |
| 0b001001101: [[Vector2i(0,3), Vector2i(1,4), Vector2i(0,4)], [Vector2i(3,0), Vector2i(4,0), Vector2i(4,4), Vector2i(3,4)]], | |
| 0b100000001: [[Vector2i(0,0), Vector2i(1,0), Vector2i(0,1)], [Vector2i(4,3), Vector2i(4,4), Vector2i(3,4)]], | |
| 0b001000100: [[Vector2i(0,3), Vector2i(1,4), Vector2i(0,4)], [Vector2i(3,0), Vector2i(4,0), Vector2i(4,1)]], | |
| 0b001000111: [[Vector2i(3,0), Vector2i(4,0), Vector2i(4,1)], [Vector2i(0,3), Vector2i(4,3), Vector2i(4,4), Vector2i(0,4)]], | |
| 0b101000111: [[Vector2i(0,0), Vector2i(1,0), Vector2i(0,1)], [Vector2i(4,0), Vector2i(4,1), Vector2i(3,0)], [Vector2i(0,3), Vector2i(4,3), Vector2i(4,4), Vector2i(0,4)]], | |
| 0b100000111: [[Vector2i(0,0), Vector2i(1,0), Vector2i(0,1)], [Vector2i(0,3), Vector2i(4,3), Vector2i(4,4), Vector2i(0,4)]], | |
| 0b101100101: [[Vector2i(0,0), Vector2i(1,0), Vector2i(1,4), Vector2i(0,4)], [Vector2i(3,0), Vector2i(4,0), Vector2i(4,1)], [Vector2i(4,3), Vector2i(4,4), Vector2i(3,4)]], | |
| 0b101001101: [[Vector2i(0,0), Vector2i(1,0), Vector2i(0,1)], [Vector2i(3,0), Vector2i(4,0), Vector2i(4,4), Vector2i(3,4)], [Vector2i(0,3), Vector2i(1,4), Vector2i(0,4)]], | |
| 0b111100101: [[Vector2i(0,0), Vector2i(4,0), Vector2i(4,1), Vector2i(2,2), Vector2i(1,4), Vector2i(0,4)], [Vector2i(4,3), Vector2i(4,4), Vector2i(3,4)]], | |
| 0b111001101: [[Vector2i(0,0), Vector2i(4,0), Vector2i(4,4), Vector2i(3,4), Vector2i(2,2), Vector2i(0,1)], [Vector2i(0,3), Vector2i(1,4), Vector2i(0,4)]], | |
| 0b001000101: [[Vector2i(3,0), Vector2i(4,0), Vector2i(4,1)], [Vector2i(0,3), Vector2i(1,4), Vector2i(0,4)], [Vector2i(4,3), Vector2i(4,4), Vector2i(3,4)]], | |
| 0b100000101: [[Vector2i(0,0), Vector2i(1,0), Vector2i(0,1)], [Vector2i(0,3), Vector2i(1,4), Vector2i(0,4)], [Vector2i(4,3), Vector2i(4,4), Vector2i(3,4)]], | |
| 0b101100100: [[Vector2i(0,0), Vector2i(1,0), Vector2i(1,4), Vector2i(0,4)], [Vector2i(3,0), Vector2i(4,0), Vector2i(4,1)]], | |
| 0b101001001: [[Vector2i(0,0), Vector2i(1,0), Vector2i(0,1)], [Vector2i(3,0), Vector2i(4,0), Vector2i(4,4), Vector2i(3,4)]], | |
| 0b101100111: [[Vector2i(0,0), Vector2i(1,0), Vector2i(2,2), Vector2i(4,3), Vector2i(4,4), Vector2i(0,4)], [Vector2i(4,0), Vector2i(4,1), Vector2i(3,0)]], | |
| 0b101001111: [[Vector2i(0,0), Vector2i(1,0), Vector2i(0,1)], [Vector2i(3,0), Vector2i(4,0), Vector2i(4,4), Vector2i(0,4), Vector2i(0,3), Vector2i(2,2)]], | |
| 0b101000001: [[Vector2i(0,0), Vector2i(1,0), Vector2i(0,1)], [Vector2i(3,0), Vector2i(4,0), Vector2i(4,1)], [Vector2i(4,3), Vector2i(4,4), Vector2i(3,4)]], | |
| 0b101000100: [[Vector2i(0,0), Vector2i(1,0), Vector2i(0,1)], [Vector2i(3,0), Vector2i(4,0), Vector2i(4,1)], [Vector2i(0,3), Vector2i(1,4), Vector2i(0,4)]], | |
| } | |
| # Polygon generation modes, from enum. | |
| var polygon_modes = { | |
| PolygonMode.BASIC: polygons_from_bitmask_basic, | |
| PolygonMode.DIAG: polygons_from_bitmask_diag, | |
| } | |
| # Actual tileset templates to instantiate. | |
| var instance_table = [ | |
| # Source 0 | |
| # Holes | |
| { | |
| source_id = 0, | |
| base_tile = Vector2i(14, 7), | |
| template_type = TemplateType.TERRAIN, | |
| do_set_collision = true, | |
| physics_layer = 0, | |
| collision_type = CollisionType.BLOCK_ON, | |
| collision_polygon = PolygonMode.BASIC, | |
| collision_stop_x1 = -10, | |
| collision_stop_x3 = 10, | |
| collision_stop_y1 = -10, | |
| collision_stop_y3 = 10, | |
| do_set_occluder = false, | |
| do_set_terrain = true, | |
| terrain_set = 3, | |
| terrain_on = 7, | |
| terrain_off = -1, | |
| }, | |
| # Grey stone floor | |
| { | |
| source_id = 0, | |
| base_tile = Vector2i(7, 0), | |
| template_type = TemplateType.TERRAIN, | |
| do_set_collision = true, | |
| physics_layer = 0, | |
| collision_type = CollisionType.PASS, | |
| collision_polygon = PolygonMode.BASIC, | |
| do_set_occluder = false, | |
| do_set_terrain = true, | |
| terrain_set = 0, | |
| terrain_on = 6, | |
| terrain_off = -1, | |
| }, | |
| # Source 1 | |
| # Water<->LightPurpleTerrain shoreline | |
| { | |
| source_id = 1, | |
| base_tile = Vector2i(0, 0), | |
| template_type = TemplateType.TERRAIN, | |
| do_set_collision = true, | |
| physics_layer = 0, | |
| collision_type = CollisionType.BLOCK_OFF, | |
| collision_polygon = PolygonMode.DIAG, | |
| collision_stop_x1 = -5.5, | |
| collision_stop_x3 = 5.5, | |
| collision_stop_y1 = -5.5, | |
| collision_stop_y3 = 5.5, | |
| do_set_occluder = false, | |
| do_set_terrain = true, | |
| terrain_set = 0, | |
| terrain_on = 2, | |
| terrain_off = 0, | |
| }, | |
| # Ground<->Hot lava shoreline | |
| { | |
| source_id = 1, | |
| base_tile = Vector2i(7, 0), | |
| template_type = TemplateType.TERRAIN, | |
| do_set_collision = true, | |
| physics_layer = 0, | |
| collision_type = CollisionType.BLOCK_ON, | |
| collision_polygon = PolygonMode.DIAG, | |
| collision_stop_x1 = -8, | |
| collision_stop_x3 = 11, | |
| collision_stop_y1 = -7, | |
| collision_stop_y3 = 7, | |
| do_set_occluder = false, | |
| do_set_terrain = true, | |
| terrain_set = 0, | |
| terrain_on = 4, | |
| terrain_off = 1, | |
| }, | |
| # Ground<->Cold lava shoreline | |
| { | |
| source_id = 1, | |
| base_tile = Vector2i(7, 7), | |
| template_type = TemplateType.TERRAIN, | |
| do_set_collision = true, | |
| physics_layer = 0, | |
| collision_type = CollisionType.PASS, | |
| collision_polygon = PolygonMode.BASIC, | |
| do_set_occluder = false, | |
| do_set_terrain = true, | |
| terrain_set = 0, | |
| terrain_on = 3, | |
| terrain_off = 1, | |
| }, | |
| # Ground<->Purple terrain shoreline | |
| { | |
| source_id = 1, | |
| base_tile = Vector2i(0, 14), | |
| template_type = TemplateType.TERRAIN, | |
| do_set_collision = true, | |
| physics_layer = 0, | |
| collision_type = CollisionType.PASS, | |
| collision_polygon = PolygonMode.BASIC, | |
| do_set_occluder = false, | |
| do_set_terrain = true, | |
| terrain_set = 0, | |
| terrain_on = 2, | |
| terrain_off = 1, | |
| }, | |
| # Cold lava<->Hot lava shoreline | |
| { | |
| source_id = 1, | |
| base_tile = Vector2i(7, 14), | |
| template_type = TemplateType.TERRAIN, | |
| do_set_collision = true, | |
| physics_layer = 0, | |
| collision_type = CollisionType.BLOCK_ON, | |
| collision_polygon = PolygonMode.BASIC, | |
| collision_stop_x1 = -11, | |
| collision_stop_x3 = 11, | |
| collision_stop_y1 = -11, | |
| collision_stop_y3 = 11, | |
| do_set_occluder = false, | |
| do_set_terrain = true, | |
| terrain_set = 0, | |
| terrain_on = 4, | |
| terrain_off = 3, | |
| }, | |
| # Purple block building | |
| { | |
| source_id = 1, | |
| base_tile = Vector2i(0, 21), | |
| template_type = TemplateType.TERRAIN, | |
| do_set_collision = true, | |
| physics_layer = 0, | |
| collision_type = CollisionType.BLOCK, | |
| collision_polygon = PolygonMode.BASIC, | |
| do_set_occluder = false, | |
| do_set_terrain = true, | |
| terrain_set = 2, | |
| terrain_on = 6, | |
| terrain_off = -1, | |
| }, | |
| # Source 2 | |
| # Water<->Ground shoreline | |
| { | |
| source_id = 2, | |
| base_tile = Vector2i(7, 0), | |
| template_type = TemplateType.TERRAIN, | |
| do_set_collision = true, | |
| physics_layer = 0, | |
| collision_type = CollisionType.BLOCK_OFF, | |
| collision_polygon = PolygonMode.DIAG, | |
| collision_stop_x1 = -10, | |
| collision_stop_x3 = 10, | |
| collision_stop_y1 = -10, | |
| collision_stop_y3 = 10, | |
| do_set_occluder = false, | |
| do_set_terrain = true, | |
| terrain_set = 0, | |
| terrain_on = 1, | |
| terrain_off = 0, | |
| }, | |
| # Purple shrub 1 | |
| { | |
| source_id = 2, | |
| base_tile = Vector2i(42, 7), | |
| template_type = TemplateType.TERRAIN, | |
| do_set_collision = true, | |
| physics_layer = 0, | |
| collision_type = CollisionType.BLOCK_ON, | |
| collision_polygon = PolygonMode.BASIC, | |
| collision_stop_x1 = -5.5, | |
| collision_stop_x3 = 5.5, | |
| collision_stop_y1 = -5.5, | |
| collision_stop_y3 = 5.5, | |
| do_set_occluder = false, | |
| do_set_terrain = true, | |
| terrain_set = 3, | |
| terrain_on = 2, | |
| terrain_off = -1, | |
| }, | |
| # Purple shrub 2 | |
| { | |
| source_id = 2, | |
| base_tile = Vector2i(49, 14), | |
| template_type = TemplateType.TERRAIN, | |
| do_set_collision = true, | |
| physics_layer = 0, | |
| collision_type = CollisionType.BLOCK_ON, | |
| collision_polygon = PolygonMode.BASIC, | |
| collision_stop_x1 = -5.5, | |
| collision_stop_x3 = 5.5, | |
| collision_stop_y1 = -5.5, | |
| collision_stop_y3 = 5.5, | |
| do_set_occluder = false, | |
| do_set_terrain = true, | |
| terrain_set = 3, | |
| terrain_on = 3, | |
| terrain_off = -1, | |
| }, | |
| # Brown shrub | |
| { | |
| source_id = 2, | |
| base_tile = Vector2i(42, 14), | |
| template_type = TemplateType.TERRAIN, | |
| do_set_collision = true, | |
| physics_layer = 0, | |
| collision_type = CollisionType.BLOCK_ON, | |
| collision_polygon = PolygonMode.BASIC, | |
| collision_stop_x1 = -5.5, | |
| collision_stop_x3 = 5.5, | |
| collision_stop_y1 = -5.5, | |
| collision_stop_y3 = 5.5, | |
| do_set_occluder = false, | |
| do_set_terrain = true, | |
| terrain_set = 3, | |
| terrain_on = 4, | |
| terrain_off = -1, | |
| }, | |
| # Source 3 | |
| # Building front 1 | |
| { | |
| source_id = 3, | |
| base_tile = Vector2i(0, 7), | |
| template_type = TemplateType.WALL, | |
| do_set_collision = true, | |
| physics_layer = 0, | |
| collision_type = CollisionType.BLOCK, | |
| collision_polygon = PolygonMode.BASIC, | |
| do_set_occluder = false, | |
| do_set_terrain = true, | |
| terrain_set = 1, | |
| terrain_on = 0, | |
| terrain_off = -1, | |
| }, | |
| # Building front 2 | |
| { | |
| source_id = 3, | |
| base_tile = Vector2i(4, 7), | |
| template_type = TemplateType.WALL, | |
| do_set_collision = true, | |
| physics_layer = 0, | |
| collision_type = CollisionType.BLOCK, | |
| collision_polygon = PolygonMode.BASIC, | |
| do_set_occluder = false, | |
| do_set_terrain = true, | |
| terrain_set = 1, | |
| terrain_on = 1, | |
| terrain_off = -1, | |
| }, | |
| # Building front 3 | |
| { | |
| source_id = 3, | |
| base_tile = Vector2i(8, 7), | |
| template_type = TemplateType.WALL, | |
| do_set_collision = true, | |
| physics_layer = 0, | |
| collision_type = CollisionType.BLOCK, | |
| collision_polygon = PolygonMode.BASIC, | |
| do_set_occluder = false, | |
| do_set_terrain = true, | |
| terrain_set = 1, | |
| terrain_on = 8, | |
| terrain_off = -1, | |
| }, | |
| # Building front 4 | |
| { | |
| source_id = 3, | |
| base_tile = Vector2i(12, 7), | |
| template_type = TemplateType.WALL, | |
| do_set_collision = true, | |
| physics_layer = 0, | |
| collision_type = CollisionType.BLOCK, | |
| collision_polygon = PolygonMode.BASIC, | |
| do_set_occluder = false, | |
| do_set_terrain = true, | |
| terrain_set = 1, | |
| terrain_on = 9, | |
| terrain_off = -1, | |
| }, | |
| # Building roof 1 | |
| { | |
| source_id = 3, | |
| base_tile = Vector2i(0, 0), | |
| template_type = TemplateType.TERRAIN, | |
| do_set_collision = true, | |
| physics_layer = 0, | |
| collision_type = CollisionType.BLOCK_OFF, | |
| collision_polygon = PolygonMode.BASIC, | |
| collision_stop_x1 = -2, | |
| collision_stop_x3 = 2, | |
| collision_stop_y1 = -8, | |
| collision_stop_y3 = 8, | |
| do_set_occluder = false, | |
| do_set_terrain = true, | |
| terrain_set = 2, | |
| terrain_on = 7, | |
| terrain_off = -1, | |
| }, | |
| # Building roof 2 | |
| { | |
| source_id = 3, | |
| base_tile = Vector2i(14, 0), | |
| template_type = TemplateType.TERRAIN, | |
| do_set_collision = true, | |
| physics_layer = 0, | |
| collision_type = CollisionType.BLOCK_OFF, | |
| collision_polygon = PolygonMode.BASIC, | |
| collision_stop_x1 = -2, | |
| collision_stop_x3 = 2, | |
| collision_stop_y1 = -8, | |
| collision_stop_y3 = 8, | |
| do_set_occluder = false, | |
| do_set_terrain = true, | |
| terrain_set = 2, | |
| terrain_on = 8, | |
| terrain_off = -1, | |
| }, | |
| # Source 6 | |
| # Crystals overlay | |
| { | |
| source_id = 6, | |
| base_tile = Vector2i(0, 4), | |
| template_type = TemplateType.TERRAIN, | |
| do_set_collision = true, | |
| physics_layer = 0, | |
| collision_type = CollisionType.BLOCK_ON, | |
| collision_polygon = PolygonMode.BASIC, | |
| collision_stop_x1 = -5.5, | |
| collision_stop_x3 = 5.5, | |
| collision_stop_y1 = -5.5, | |
| collision_stop_y3 = 5.5, | |
| do_set_occluder = false, | |
| do_set_terrain = true, | |
| terrain_set = 3, | |
| terrain_on = 0, | |
| terrain_off = -1, | |
| }, | |
| # Purple haze | |
| { | |
| source_id = 6, | |
| base_tile = Vector2i(7, 4), | |
| template_type = TemplateType.TERRAIN, | |
| do_set_collision = true, | |
| physics_layer = 0, | |
| collision_type = CollisionType.PASS, | |
| collision_polygon = PolygonMode.BASIC, | |
| do_set_occluder = false, | |
| do_set_terrain = true, | |
| terrain_set = 3, | |
| terrain_on = 1, | |
| terrain_off = -1, | |
| }, | |
| # Dark haze | |
| { | |
| source_id = 6, | |
| base_tile = Vector2i(7, 4), | |
| alternative = 1, | |
| template_type = TemplateType.TERRAIN, | |
| do_set_collision = true, | |
| physics_layer = 0, | |
| collision_type = CollisionType.PASS, | |
| collision_polygon = PolygonMode.BASIC, | |
| do_set_occluder = false, | |
| do_set_terrain = true, | |
| terrain_set = 3, | |
| terrain_on = 8, | |
| terrain_off = -1, | |
| }, | |
| ] | |
| func _enter_tree(): | |
| print("Running tileset templater plugin") | |
| var tileset: TileSet = load("res://tilesets/game.tres") | |
| for op in instance_table: | |
| var alternative: int = 0 | |
| if "alternative" in op: | |
| alternative = op["alternative"] | |
| print("Instantiating tile template to source %s base coordinate %s alternative %s..." % [op.source_id, op.base_tile, alternative]) | |
| var source = tileset.get_source(op.source_id) as TileSetAtlasSource | |
| if source == null: | |
| printerr("Tile source %s is not a TileAtlasSource" % [op.source_id]) | |
| return | |
| for rec in template_types[op.template_type]: | |
| var subcoord: Vector2i = rec[0] | |
| var bitmask: int = rec[1] | |
| var data: TileData = source.get_tile_data(op.base_tile + subcoord, alternative) | |
| if data != null: | |
| if op.do_set_collision: | |
| var collision_bitmask = 0 | |
| if op.collision_type & CollisionType.BLOCK_ON: | |
| collision_bitmask |= bitmask | |
| if op.collision_type & CollisionType.BLOCK_OFF: | |
| # XXX: inversion formula would be different for non-3x3 tile formats | |
| collision_bitmask |= (~bitmask) & 0x1ff | |
| var polygons = polygon_modes[op.collision_polygon][collision_bitmask] | |
| data.set_collision_polygons_count(op.physics_layer, polygons.size()) | |
| # Expand polygons to tile size and possibly custom stops. | |
| var xstops = [-tileset.tile_size.x / 2, -tileset.tile_size.x / 6, 0, tileset.tile_size.x / 6, tileset.tile_size.x / 2] | |
| var ystops = [-tileset.tile_size.y / 2, -tileset.tile_size.y / 6, 0, tileset.tile_size.y / 6, tileset.tile_size.y / 2] | |
| if "collision_stop_x1" in op: | |
| xstops[1] = op.collision_stop_x1 | |
| if "collision_stop_x3" in op: | |
| xstops[3] = op.collision_stop_x3 | |
| if "collision_stop_y1" in op: | |
| ystops[1] = op.collision_stop_y1 | |
| if "collision_stop_y3" in op: | |
| ystops[3] = op.collision_stop_y3 | |
| for pid in polygons.size(): | |
| var points: PackedVector2Array = PackedVector2Array() | |
| for point in polygons[pid]: | |
| points.append(Vector2(xstops[point[0]], ystops[point[1]])) | |
| data.set_collision_polygon_points(op.physics_layer, pid, points) | |
| if op.do_set_occluder: | |
| # data.set_occluder ... | |
| pass | |
| if op.do_set_terrain: | |
| data.terrain_set = op.terrain_set | |
| data.terrain = op.terrain_on | |
| for bitinfo in bitmaskbits[tileset.get_terrain_set_mode(op.terrain_set)]: | |
| if rec[1] & bitinfo[0]: | |
| data.set_terrain_peering_bit(bitinfo[1], op.terrain_on) | |
| else: | |
| data.set_terrain_peering_bit(bitinfo[1], op.terrain_off) | |
| else: | |
| printerr("Tile %s:%s:%s has no associated data" % [op.source_id, subcoord, alternative]) | |
| print("Successfully set all tile information.") | |
| func _exit_tree(): | |
| pass |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment