diff --git a/objects/plant.tscn b/objects/plant.tscn new file mode 100644 index 0000000..edfccf1 --- /dev/null +++ b/objects/plant.tscn @@ -0,0 +1,98 @@ +[gd_scene load_steps=2 format=3 uid="uid://c4dct5rm3sob2"] + +[sub_resource type="GDScript" id="GDScript_x3g5o"] +script/source = "class_name Plant + +extends StaticBody2D + +enum PlantState { SEED, SAPLING, GROWN, DEAD} + +signal grown +signal died + +@onready var growing_timer: Timer = $Growing + +@export var type: String + +@export var sprites: Array[AnimatedSprite2D] + +@export var state := PlantState.SEED +@export var growing_time := 1.0 +@export var dying_time := 30.0 + +@export var water_need := 0 +@export var soil_need := 0 +@export var distance_needed := 0.1 + +@export var water_prod := 0: + get: + if state == PlantState.GROWN: + return water_prod + if state == PlantState.DEAD: + return dead_water_prod + return 0 + +@export var soil_prod := 0: + get: + if state == PlantState.GROWN: + return soil_prod + if state == PlantState.DEAD: + return dead_soil_prod + return 0 + +@export var dead_water_prod := 0 +@export var dead_soil_prod := 1 +@export var distance_prod := 0.1 + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + pass # Replace with function body. + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta: float) -> void: + pass + + +func _on_growing_timeout() -> void: + match state: + PlantState.SEED: + push_error(\"Not possible to timeout while a seed\") + PlantState.SAPLING: + grow() + PlantState.GROWN: + die() + PlantState.DEAD: + push_error(\"Already dead\") + + +func plant(new_position: Vector2): + if state != PlantState.SEED: + push_error(\"Tried to plant \" + type + \", but was not at seed state\") + return + position = new_position + state = PlantState.SAPLING + growing_timer.start(growing_time) + + +func grow(): + if state != PlantState.SAPLING: + push_error(\"Tried to grow \" + type + \", but was not at sapling state\") + return + state = PlantState.GROWN + growing_timer.start(dying_time) + grown.emit() + + +func die(): + state = PlantState.DEAD + died.emit() + +" + +[node name="Plant" type="StaticBody2D"] +script = SubResource("GDScript_x3g5o") + +[node name="Growing" type="Timer" parent="."] + +[connection signal="timeout" from="Growing" to="." method="_on_growing_timeout"]