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 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