70 lines
2.6 KiB
GDScript
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
|