extends Node3D var id = null var _debug_sel_mode = { 1: "not selected", 2: "room select", 3: "build select", 4: "invalid select" } var _debug_con_mode = { 1: "non interactalble", 2: "closed", 3: "open", 4: "built", 5: "reinforced", 6: "under construction" } var _debug_face_mode = { 1: "none", 2: "full", 3: "partial", 4: "door" } # list of objects contained within var construction_mode = 0 var selection_mode = 0 var orange = preload("res://tiles/base_tile/orange.tres") var gray = preload("res://tiles/base_tile/gray.tres") var red = preload("res://tiles/base_tile/red.tres") var blue = preload("res://tiles/base_tile/blue.tres") var lightblue = preload("res://tiles/base_tile/lightblue.tres") var face_dict = { "floor": null, "north": null, "east": null, "south": null, "west": null } var neighbor_array = [ Vector3i(0, 0, -1), Vector3i(1, 0, 0), Vector3i(0, 0, 1), Vector3i(-1, 0, 0), ] var wall_array = [ Vector3i(0, 0, 0), Vector3i(1, 0, 0), Vector3i(1, 0, 1), Vector3i(0, 0, 1), ] var load_wall = preload("res://tiles/base_tile/base_wall.tscn") var grid_pos = null var wall_dict = {} func _ready(): pass func invalid_this_tile(): pass func update_face(neighbor_index, mode): var face = neighbor_array[neighbor_index] if mode == 1: for i in wall_dict.keys(): wall_dict[i].queue_free() wall_dict.erase(i) if mode == 2: if not wall_dict.has(face): var wall = load_wall.instantiate() wall.position = wall_array[neighbor_index] wall.rotation_degrees = Vector3(0, neighbor_index * -90, 0) wall_dict[face] = wall add_child(wall) func update(sel_mode: int = 0, con_mode: int = 0): if sel_mode: if sel_mode != selection_mode: selection_mode = sel_mode if sel_mode == 1: # not selected $Floor/FloorMesh.set_material_overlay(null) elif sel_mode == 2: # room selection for i in $Walls.get_children(): i.Mesh.set_material_override(orange) elif sel_mode == 3: # build selection $Floor/FloorMesh.set_material_overlay(lightblue) #for i in $Walls.get_children(): #i.Mesh.set_material_override(blue) elif sel_mode == 4: # invalid selection $Floor/FloorMesh.set_material_overlay(orange) #for i in $Walls.get_children(): #i.set_material_override(red) else: pass if con_mode: if con_mode != construction_mode: construction_mode = con_mode if con_mode == 1: # non-interactable $Label3D.text = "1" pass elif con_mode == 2: # closed $Label3D.text = "2" $Floor/FloorMesh.set_material_override(gray) pass elif con_mode == 3: # open pass elif con_mode == 4: # built $Label3D.text = "4" $Floor/FloorMesh.set_material_override(null) pass elif con_mode == 5: # reinforced pass elif con_mode == 6: # under construction pass else: pass