2023-11-08 14:28:55 +11:00
|
|
|
extends StaticBody3D
|
|
|
|
class_name TowerBase
|
|
|
|
|
|
|
|
@export var inventory : Inventory
|
2023-11-17 20:49:38 +11:00
|
|
|
@export var block : Node3D
|
2023-11-08 14:28:55 +11:00
|
|
|
@export var collider : CollisionShape3D
|
|
|
|
@export var minimap_icon : Sprite3D
|
2023-11-28 16:52:15 +11:00
|
|
|
@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
|
2023-11-08 14:28:55 +11:00
|
|
|
|
2023-12-08 03:05:11 +11:00
|
|
|
var owner_id : int
|
|
|
|
var point_id : int
|
2023-11-08 14:28:55 +11:00
|
|
|
var tower = null
|
|
|
|
var has_card : bool :
|
|
|
|
set(_value):
|
|
|
|
return
|
|
|
|
get:
|
|
|
|
return inventory.contents.size() != 0
|
|
|
|
|
|
|
|
|
2023-12-08 03:05:11 +11:00
|
|
|
func add_card(card: Card, caller_id: int) -> bool:
|
2023-11-08 14:28:55 +11:00
|
|
|
var result = inventory.add(card)
|
|
|
|
if result:
|
2023-12-08 03:05:11 +11:00
|
|
|
networked_spawn_tower.rpc(caller_id)
|
2023-11-08 14:28:55 +11:00
|
|
|
return result
|
|
|
|
|
|
|
|
|
2023-12-08 03:05:11 +11:00
|
|
|
func remove_card():
|
|
|
|
Game.connected_players_nodes[tower.owner_id].add_card(inventory.remove())
|
2023-11-13 19:36:35 +11:00
|
|
|
networked_remove_tower.rpc()
|
2023-11-08 14:28:55 +11:00
|
|
|
|
|
|
|
|
|
|
|
func set_material(value: StandardMaterial3D):
|
2023-11-17 20:49:38 +11:00
|
|
|
block.material_override = value
|
2023-11-08 14:28:55 +11:00
|
|
|
|
|
|
|
|
|
|
|
func toggle_collision():
|
|
|
|
collider.disabled = !collider.disabled
|
2023-11-13 19:36:35 +11:00
|
|
|
|
|
|
|
|
2023-12-08 03:05:11 +11:00
|
|
|
func set_north_wall(value: bool):
|
2023-11-28 16:52:15 +11:00
|
|
|
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
|
|
|
|
|
|
|
|
|
2023-11-13 19:36:35 +11:00
|
|
|
@rpc("reliable", "call_local", "any_peer")
|
2023-12-08 03:05:11 +11:00
|
|
|
func networked_spawn_tower(caller_id : int):
|
2023-11-15 15:19:40 +11:00
|
|
|
tower = inventory.selected_item.turret_scene.instantiate() as Tower
|
2023-11-13 19:36:35 +11:00
|
|
|
tower.stats = inventory.selected_item.tower_stats
|
|
|
|
tower.name = "tower"
|
2023-11-15 15:19:40 +11:00
|
|
|
tower.base_name = name
|
2023-12-08 03:05:11 +11:00
|
|
|
tower.owner_id = caller_id
|
2023-11-17 20:49:38 +11:00
|
|
|
tower.position = Vector3(0, 1.2, 0)
|
2023-11-13 19:36:35 +11:00
|
|
|
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
|