extends Area2D class_name Plant const PLANT_AREA_WIDTH = 10 const PLANT_SPRITE_SCALE = 0.15 enum State {PLANTED, GROWING, MATURE} @export var plant_type : PlantType @export var planet : Planet var state : State = State.PLANTED : set = change_state var day : int = 0 @onready var plant_sprite : Sprite2D = generate_sprite() @onready var collision_shape : CollisionShape2D = generate_collision_shape() func _init(_plant_type = null, _planet = null): plant_type = _plant_type planet = _planet func generate_sprite() -> Sprite2D: var sprite = Sprite2D.new() add_child(sprite) sprite.texture = get_state_texture(state) sprite.scale = Vector2.ONE * PLANT_SPRITE_SCALE sprite.offset return sprite func generate_collision_shape() -> CollisionShape2D: var collision = CollisionShape2D.new() var shape = CircleShape2D.new() shape.radius = PLANT_AREA_WIDTH collision.shape = shape add_child(collision) return collision func pass_day(): day += 1 if day > plant_type.growing_time: change_state(State.MATURE) else: change_state(State.GROWING) func change_state(_state : State): state = _state plant_sprite.texture = get_state_texture(state) if state == State.MATURE and plant_type.mature_effect: plant_type.mature_effect.effect(self) func get_state_texture(s : State) -> Texture2D: match s: State.PLANTED: return plant_type.planted_texture State.GROWING: return plant_type.growing_texture State.MATURE: return plant_type.mature_texture return null func harvest(): day += 1 if day > plant_type.growing_time: change_state(State.MATURE) else: change_state(State.GROWING)