From 089802fba00d57b15f0c8bbd07082f73138a378a Mon Sep 17 00:00:00 2001 From: Victor Date: Sun, 1 Sep 2024 14:24:24 +0200 Subject: [PATCH] robot wanderer and liberation only once --- objects/Planter.tscn | 12 +++++++++- objects/Robot.tscn | 31 +++++++++++++++++++++++++ objects/Wanderer.tscn | 12 ++++++++++ objects/gui/Seed_card.tscn | 2 +- scenes/Map.tscn | 3 ++- scripts/animal.gd | 5 +++- scripts/camera.gd | 1 - scripts/planter.gd | 24 ++++++++++++------- scripts/robot.gd | 47 ++++++++++++++++++++++++++++++++++++++ scripts/wanderer.gd | 22 ++++++++++++++++++ 10 files changed, 146 insertions(+), 13 deletions(-) create mode 100644 objects/Robot.tscn create mode 100644 objects/Wanderer.tscn create mode 100644 scripts/robot.gd create mode 100644 scripts/wanderer.gd diff --git a/objects/Planter.tscn b/objects/Planter.tscn index 188bc1f..631e9a6 100644 --- a/objects/Planter.tscn +++ b/objects/Planter.tscn @@ -1,10 +1,11 @@ -[gd_scene load_steps=6 format=3 uid="uid://qpdlnll5pihe"] +[gd_scene load_steps=7 format=3 uid="uid://qpdlnll5pihe"] [ext_resource type="Script" path="res://scripts/planter.gd" id="1_l7lry"] [ext_resource type="Script" path="res://scripts/plant_type.gd" id="2_7h3ga"] [ext_resource type="Resource" uid="uid://bgi2lo7kb3d2v" path="res://objects/plant_types/chardon.tres" id="3_lgbrc"] [ext_resource type="Resource" uid="uid://dnahox31xqy6l" path="res://objects/plant_types/peuplier.tres" id="4_tmfl1"] [ext_resource type="Resource" uid="uid://b6ufxuqdcgwmx" path="res://objects/plant_types/chene.tres" id="5_j34av"] +[ext_resource type="PackedScene" uid="uid://bp3c63qgkmi6o" path="res://objects/Robot.tscn" id="6_of7ri"] [node name="Planter" type="Node2D"] y_sort_enabled = true @@ -14,3 +15,12 @@ plants = Array[ExtResource("2_7h3ga")]([ExtResource("3_lgbrc"), ExtResource("4_t [node name="Timer" type="Timer" parent="."] wait_time = 0.2 one_shot = true + +[node name="Robot" parent="." instance=ExtResource("6_of7ri")] +position = Vector2(0, -64) + +[node name="RobotSeed" type="Sprite2D" parent="Robot"] +position = Vector2(0, 63) +scale = Vector2(0.5, 0.5) + +[connection signal="Planted" from="Robot" to="." method="_on_robot_planted"] diff --git a/objects/Robot.tscn b/objects/Robot.tscn new file mode 100644 index 0000000..5d6ce55 --- /dev/null +++ b/objects/Robot.tscn @@ -0,0 +1,31 @@ +[gd_scene load_steps=5 format=3 uid="uid://bp3c63qgkmi6o"] + +[ext_resource type="Script" path="res://scripts/robot.gd" id="1_4eix8"] +[ext_resource type="Texture2D" uid="uid://b11jyrkhw7ebp" path="res://icon.svg" id="2_8ulyj"] +[ext_resource type="PackedScene" uid="uid://dyuqq8v1tckrv" path="res://objects/Wanderer.tscn" id="2_mhqh4"] + +[sub_resource type="SpriteFrames" id="SpriteFrames_jlahh"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": ExtResource("2_8ulyj") +}], +"loop": true, +"name": &"Walk", +"speed": 5.0 +}] + +[node name="Robot" type="Node2D"] +script = ExtResource("1_4eix8") + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] +sprite_frames = SubResource("SpriteFrames_jlahh") +animation = &"Walk" + +[node name="Planting" type="Timer" parent="."] +one_shot = true + +[node name="Wanderer" parent="." node_paths=PackedStringArray("node_to_move") instance=ExtResource("2_mhqh4")] +node_to_move = NodePath("..") + +[connection signal="timeout" from="Planting" to="." method="_on_planting_timeout"] diff --git a/objects/Wanderer.tscn b/objects/Wanderer.tscn new file mode 100644 index 0000000..c638819 --- /dev/null +++ b/objects/Wanderer.tscn @@ -0,0 +1,12 @@ +[gd_scene load_steps=2 format=3 uid="uid://dyuqq8v1tckrv"] + +[ext_resource type="Script" path="res://scripts/wanderer.gd" id="1_53svd"] + +[node name="Wanderer" type="Node"] +script = ExtResource("1_53svd") + +[node name="NewTarget" type="Timer" parent="."] +one_shot = true +autostart = true + +[connection signal="timeout" from="NewTarget" to="." method="_on_new_target_timeout"] diff --git a/objects/gui/Seed_card.tscn b/objects/gui/Seed_card.tscn index 811e40c..20e6e07 100644 --- a/objects/gui/Seed_card.tscn +++ b/objects/gui/Seed_card.tscn @@ -4,7 +4,7 @@ [ext_resource type="Theme" uid="uid://dnebunkx13tbr" path="res://assets/gui/Text.tres" id="2_n5opx"] [ext_resource type="Texture2D" uid="uid://dpfe11wn04ntd" path="res://assets/gui/icons/watering-soil.svg" id="3_4sryb"] [ext_resource type="Texture2D" uid="uid://be2uusaqcpcpd" path="res://assets/gradients/Fertility.tres" id="4_5omu3"] -[ext_resource type="PackedScene" uid="uid://qjwtbyq2c87m" path="res://objects/gui/Stats_area.tscn" id="4_wwqbk"] +[ext_resource type="PackedScene" path="res://objects/gui/Stats_area.tscn" id="4_wwqbk"] [ext_resource type="Texture2D" uid="uid://cwowpvsoo3dey" path="res://assets/gradients/Water.tres" id="5_hwfmn"] [ext_resource type="Texture2D" uid="uid://dgo81cisfryi1" path="res://assets/gui/icons/soil-alt.svg" id="6_4k6c3"] [ext_resource type="Texture2D" uid="uid://bdg3ep75da6xd" path="res://assets/gui/icons/tree.svg" id="8_i3l01"] diff --git a/scenes/Map.tscn b/scenes/Map.tscn index 1cb7551..b66468e 100644 --- a/scenes/Map.tscn +++ b/scenes/Map.tscn @@ -17,7 +17,8 @@ texture = ExtResource("3_20ci8") texture_scale = Vector2(5, 5) polygon = PackedVector2Array(571, 76, 228, 282, 987, 657, 1379, 208) -[node name="Animals" type="Node" parent="."] +[node name="Animals" type="Node2D" parent="."] +y_sort_enabled = true [node name="Animal" parent="Animals" instance=ExtResource("4_pkphc")] position = Vector2(2121, 394) diff --git a/scripts/animal.gd b/scripts/animal.gd index 238b113..45f3ed4 100644 --- a/scripts/animal.gd +++ b/scripts/animal.gd @@ -3,13 +3,16 @@ extends Node2D signal liberated @export var plant_need: String +var libarated := false func _on_area_2d_area_entered(area: Area2D) -> void: var plant = area.get_parent() - if plant is Plant: + if plant is Plant and not liberated: if plant_need == plant.parameter.type: plant.grown.connect(tracked_plant_grew) func tracked_plant_grew(): + if liberated: + return print("Liberated !!") liberated.emit() diff --git a/scripts/camera.gd b/scripts/camera.gd index b3614a6..cf3c416 100644 --- a/scripts/camera.gd +++ b/scripts/camera.gd @@ -16,7 +16,6 @@ func _process(delta): if Input.is_action_pressed("grab"): var grabbing_movement = mouse_last_global_position - get_global_mouse_position() - print(grabbing_movement) movement += grabbing_movement var mouse_pos = get_viewport().get_mouse_position() diff --git a/scripts/planter.gd b/scripts/planter.gd index 3ae5361..ffab82c 100644 --- a/scripts/planter.gd +++ b/scripts/planter.gd @@ -8,6 +8,8 @@ const QUEUE_LENGTH := 6 # ENORME @onready var plant_scene = preload("res://objects/Plant.tscn") @onready var timer: Timer = $Timer +@onready var robot: Robot = $Robot +@onready var robot_seed: Sprite2D = $Robot/RobotSeed @export var plants: Array[PlantType] @@ -44,15 +46,21 @@ func take_next_seed() -> PlantType: return plants[plant_ind] func _unhandled_input(_event: InputEvent) -> void: - if Input.is_action_just_pressed("plant") : var mouse_pos = camera.get_global_mouse_position() var click_on_map = GameTerrain.is_on_map(mouse_pos) - if can_plant and click_on_map and timer.is_stopped(): - var chosen_type: PlantType = take_next_seed() - var plant = plant_scene.instantiate() - add_child(plant) - plant.init(chosen_type) - plant.plant(mouse_pos) - timer.start() + if can_plant and click_on_map and robot.state == robot.MoveState.IDLE: + var next_plant := plants[seed_queue.back()] + robot_seed.texture = next_plant.seed_sprite + robot.go_to(mouse_pos) + + +func _on_robot_planted() -> void: + var chosen_type: PlantType = take_next_seed() + var plant = plant_scene.instantiate() + add_child(plant) + plant.init(chosen_type) + plant.plant(robot.position) + timer.start() + robot_seed.texture = null diff --git a/scripts/robot.gd b/scripts/robot.gd new file mode 100644 index 0000000..b2b52e4 --- /dev/null +++ b/scripts/robot.gd @@ -0,0 +1,47 @@ +class_name Robot + +extends Node2D + +enum MoveState { IDLE, MOVING, PLANTING } + +const IDLE_SPEED := 75 +const MOVE_SPEED := 500 +const PLANTING_TIME := 1 +const DIST_TO_PLANT_SQR := 100 + +signal Planted + +@onready var wanderer: Wanderer = $Wanderer +@onready var planting: Timer = $Planting + +var target_pos := Vector2() + +var state := MoveState.IDLE + +func _ready() -> void: + wanderer.speed = IDLE_SPEED + wanderer.move = false + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta: float) -> void: + match state: + MoveState.IDLE: + wanderer.move = true + MoveState.MOVING: + wanderer.move = false + position += position.direction_to(target_pos) * MOVE_SPEED * delta + if position.distance_squared_to(target_pos) < DIST_TO_PLANT_SQR: + state = MoveState.PLANTING + planting.start(PLANTING_TIME) + MoveState.PLANTING: + wanderer.move = false + + +func go_to(new_target_pos: Vector2): + state = MoveState.MOVING + target_pos = new_target_pos + + +func _on_planting_timeout() -> void: + Planted.emit() + state = MoveState.IDLE diff --git a/scripts/wanderer.gd b/scripts/wanderer.gd new file mode 100644 index 0000000..cfc77b4 --- /dev/null +++ b/scripts/wanderer.gd @@ -0,0 +1,22 @@ +class_name Wanderer + +extends Node + +const DIST_FROM_MOUSE := 1000.0 + +@onready var new_target: Timer = $NewTarget + +@export var node_to_move: Node2D +@export var speed := 75 +@export var move := false +@export var wait_time_min := 1.0 +@export var wait_time_max := 2.0 +var target_pos := Vector2() + +func _process(delta: float) -> void: + if move: + node_to_move.position += node_to_move.position.direction_to(target_pos) * speed * delta + +func _on_new_target_timeout() -> void: + target_pos = get_viewport().get_camera_2d().get_global_mouse_position() + (Vector2.RIGHT * DIST_FROM_MOUSE).rotated(randf_range(0, PI)) + new_target.start(randf_range(wait_time_min, wait_time_max))