Files
romants/entities/buildings/player_camp.gd
2024-10-07 02:28:14 +02:00

70 lines
2.6 KiB
GDScript

class_name PlayerCamp extends Building
static var instance:PlayerCamp
var food_capacity:=100
var wood_capacity:=100
var stone_capacity:=100
var active_indicator:Indicator
func _init() -> void:
instance = self
func _exit_tree() -> void:
Game.instance.game_over()
func on_interact(object:CollisionObject3D, point:Vector3)->void:
if object is Terrain and active_indicator != null:
if active_indicator.type == Indicator.IndicatorType.ANT_WORKER:
var worker_scene := load("res://entities/ants/worker_ant.tscn") as PackedScene
buy_ant(20, point, worker_scene)
if active_indicator.type == Indicator.IndicatorType.ANT_SOLDIER:
var soldier_scene := load("res://entities/ants/soldier_ant.tscn") as PackedScene
buy_ant(40, point, soldier_scene)
if active_indicator.type == Indicator.IndicatorType.BUILDING_BALISTA:
var ballista_scene := load("res://entities/buildings/ballista.tscn") as PackedScene
buy_building(40, 40, point, ballista_scene)
func _on_worker_pressed() -> void:
if active_indicator != null: active_indicator.queue_free()
var worker_indicator_scene := load("res://entities/ants/worker_indicator.tscn") as PackedScene
active_indicator = worker_indicator_scene.instantiate() as Indicator
add_child(active_indicator)
func _on_soldier_pressed() -> void:
if active_indicator != null: active_indicator.queue_free()
var soldier_indicator_scene := load("res://entities/ants/soldier_indicator.tscn") as PackedScene
active_indicator = soldier_indicator_scene.instantiate() as Indicator
add_child(active_indicator)
func _on_balista_pressed() -> void:
if active_indicator != null: active_indicator.queue_free()
var ballista_indicator_scene := load("res://entities/buildings/balista_indicator.tscn") as PackedScene
active_indicator = ballista_indicator_scene.instantiate() as Indicator
add_child(active_indicator)
func buy_ant(food:int, point:Vector3, ant_scene:PackedScene)->void:
if food_capacity < food: return
food_capacity -= food
if food_capacity < food: active_indicator.queue_free()
var ant:= ant_scene.instantiate() as Ant
Player.instance.get_node("Ants").add_child(ant)
ant.global_position = point
func buy_building(stone:int, wood:int, point:Vector3, building_scene:PackedScene)->void:
if stone_capacity < stone or wood_capacity < wood: return
stone_capacity -= stone
wood_capacity -= wood
if stone_capacity < stone or wood_capacity < wood: active_indicator.queue_free()
var building:= building_scene.instantiate() as Node3D
Player.instance.get_node("Buildings").add_child(building)
building.global_position = point
Terrain.instance.refresh_navmap()
func _on_timer_timeout() -> void:
if health < max_health:
health += 1