This repository has been archived on 2020-09-30. You can view files and clone it, but cannot push or open issues or pull requests.
odyssey-old/Scenes/Rendering/MapTiles.gd
2020-07-08 14:30:46 +02:00

68 lines
1.9 KiB
GDScript

extends TileMap
class_name MapTiles
export(NodePath) var extended_tilemap_node
export var occluders = ["Wall"]
export var shadow_intensity = 0.2
onready var extended_tilemap = get_node(extended_tilemap_node) as TileMap
func _ready():
# Make occluders
make_occluders()
# Convert 2x2 tiles to 1x1 if possible
convert_extended()
func convert_extended():
var extended = extended_tilemap.tile_set
for id in tile_set.get_tiles_ids():
var name = tile_set.tile_get_name(id)
var extended_id = extended.find_tile_by_name(name)
if extended_id < 0:
# Not found, skip it
continue
# Find all uses of this tile
for cell in get_used_cells_by_id(id):
var x = cell.x * 2
var y = cell.y * 2
extended_tilemap.set_cell(x, y, extended_id)
extended_tilemap.set_cell(x+1, y, extended_id)
extended_tilemap.set_cell(x, y+1, extended_id)
extended_tilemap.set_cell(x+1, y+1, extended_id)
set_cellv(cell, -1)
extended_tilemap.update_bitmask_region()
extended_tilemap.update_dirty_quadrants()
func make_occluders():
var occluder_ids = []
for occluder_name in occluders:
var id = tile_set.find_tile_by_name(occluder_name)
if id >= 0:
occluder_ids.push_back(id)
for id in tile_set.get_tiles_ids():
if occluder_ids.find(id) < 0:
# Not an occluder, skip it
continue
# Find all uses of this tile
for cell in get_used_cells_by_id(id):
# Check sides
var occluder = Occluder.new()
occluder.ignore_sides = [
occluder_ids.find(get_cell(cell.x, cell.y-1)) >= 0, # Top
occluder_ids.find(get_cell(cell.x+1, cell.y)) >= 0, # Right
occluder_ids.find(get_cell(cell.x, cell.y+1)) >= 0, # Bottom
occluder_ids.find(get_cell(cell.x-1, cell.y)) >= 0 # Left
]
occluder.transform.origin = map_to_world(cell)
add_child(occluder)
func set_occluder_origin(origin):
for child in get_children():
if child is Occluder:
child.origin = origin