project-villain/tiles/base_tile/base_tile.gd

167 lines
2.9 KiB
GDScript

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 = {}
var room_id = null
signal wall_built
func _ready():
$Label3D.text = str(grid_pos)
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
emit_signal("wall_built", room_id)
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
pass
elif con_mode == 2:
# closed
$Floor/FloorMesh.set_material_override(gray)
pass
elif con_mode == 3:
# open
pass
elif con_mode == 4:
# built
$Floor/FloorMesh.set_material_override(null)
pass
elif con_mode == 5:
# reinforced
pass
elif con_mode == 6:
# under construction
pass
else:
pass