#37 ajout d'item outils ainsi que de visualisation de leur zone d'effet (avec la classe ActionArea

This commit is contained in:
2025-08-19 11:29:20 +02:00
parent b0efeff809
commit 1f301815be
18 changed files with 233 additions and 89 deletions

View File

@@ -1,4 +1,4 @@
extends Node2D
extends Area2D
class_name Plant
const PLANT_AREA_WIDTH = 10
@@ -6,61 +6,66 @@ const PLANT_SPRITE_SCALE = 0.15
enum State {PLANTED, GROWING, MATURE}
var plant_type : PlantType
var planet : Planet
@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 plant_area : Area2D = generate_area()
@onready var collision_shape : CollisionShape2D = generate_collision_shape()
func _init(_plant_type, _planet):
plant_type = _plant_type
planet = _planet
func _init(_plant_type = null, _planet = null):
plant_type = _plant_type
planet = _planet
func generate_sprite() -> Sprite2D:
var sprite = Sprite2D.new()
var sprite = Sprite2D.new()
add_child(sprite)
sprite.texture = get_state_texture(state)
sprite.scale = Vector2.ONE * PLANT_SPRITE_SCALE
sprite.offset
add_child(sprite)
sprite.texture = get_state_texture(state)
sprite.scale = Vector2.ONE * PLANT_SPRITE_SCALE
sprite.offset
return sprite
return sprite
func generate_area() -> Area2D:
var area = Area2D.new()
var collision = CollisionShape2D.new()
var collision_shape = CircleShape2D.new()
collision_shape.radius = PLANT_AREA_WIDTH
func generate_collision_shape() -> CollisionShape2D:
var collision = CollisionShape2D.new()
var shape = CircleShape2D.new()
shape.radius = PLANT_AREA_WIDTH
collision.shape = collision_shape
area.add_child(collision)
add_child(area)
collision.shape = shape
add_child(collision)
return area
return collision
func pass_day():
day += 1
if day > plant_type.growing_time:
change_state(State.MATURE)
else:
change_state(State.GROWING)
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)
state = _state
plant_sprite.texture = get_state_texture(state)
if state == State.MATURE and plant_type.mature_effect:
plant_type.mature_effect.effect(self)
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
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)