mtd/Scripts/tower_base.gd

81 lines
1.8 KiB
GDScript

extends StaticBody3D
class_name TowerBase
@export var inventory : Inventory
@export var block : Node3D
@export var collider : CollisionShape3D
@export var minimap_icon : Sprite3D
@export var north_mesh : CSGBox3D
@export var south_mesh : CSGBox3D
@export var east_mesh : CSGBox3D
@export var west_mesh : CSGBox3D
@export var north_collider : CollisionShape3D
@export var south_collider : CollisionShape3D
@export var east_collider : CollisionShape3D
@export var west_collider : CollisionShape3D
var tower = null
var has_card : bool :
set(_value):
return
get:
return inventory.contents.size() != 0
func add_card(card: Card) -> bool:
var result = inventory.add(card)
if result:
networked_spawn_tower.rpc()
return result
func remove_card() -> Card:
networked_remove_tower.rpc()
return inventory.remove()
func set_material(value: StandardMaterial3D):
block.material_override = value
func toggle_collision():
collider.disabled = !collider.disabled
func set_north_wall(value : bool):
north_mesh.set_visible(value)
north_collider.disabled = !value
func set_south_wall(value : bool):
south_mesh.set_visible(value)
south_collider.disabled = !value
func set_east_wall(value : bool):
east_mesh.set_visible(value)
east_collider.disabled = !value
func set_west_wall(value : bool):
west_mesh.set_visible(value)
west_collider.disabled = !value
@rpc("reliable", "call_local", "any_peer")
func networked_spawn_tower():
tower = inventory.selected_item.turret_scene.instantiate() as Tower
tower.stats = inventory.selected_item.tower_stats
tower.name = "tower"
tower.base_name = name
tower.position = Vector3(0, 1.2, 0)
minimap_icon.modulate = Color.RED
add_child(tower)
@rpc("reliable", "call_local", "any_peer")
func networked_remove_tower():
tower.queue_free()
tower = null
minimap_icon.modulate = Color.GREEN