From cd83f39b3d2ca57cb460efef8ab9f351d5bfc69d Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Sun, 3 Apr 2022 18:15:15 +0200 Subject: [PATCH] :broom: Clean up AttractedTo --- src/entities/behaviours/AttractedTo.gd | 27 --------------- src/entities/behaviours/AttractedTo.tscn | 6 ---- .../behaviours/AttractedToMovement.gd | 34 +++++++++++++++++++ .../behaviours/AttractedToMovement.tscn | 9 +++++ 4 files changed, 43 insertions(+), 33 deletions(-) delete mode 100644 src/entities/behaviours/AttractedTo.gd delete mode 100644 src/entities/behaviours/AttractedTo.tscn create mode 100644 src/entities/behaviours/AttractedToMovement.gd create mode 100644 src/entities/behaviours/AttractedToMovement.tscn diff --git a/src/entities/behaviours/AttractedTo.gd b/src/entities/behaviours/AttractedTo.gd deleted file mode 100644 index 4655d7d..0000000 --- a/src/entities/behaviours/AttractedTo.gd +++ /dev/null @@ -1,27 +0,0 @@ -extends Node - - -export var movement_per_second: float = 32.0 -export var goal_path: String = "../../PhaseOneContainer/Fire" - - -onready var target: KinematicBody2D = get_parent() -# TODO: Use a better algorithm -onready var goal: StaticBody2D = get_node(goal_path) - - -signal touching_goal -var goal_reached_triggered: bool = false -signal goal_reached - -func _physics_process(_delta): - if target.global_position != null: - var direction: Vector2 = (goal.global_position - target.global_position).normalized() - var _motion: Vector2 = target.move_and_slide(direction * movement_per_second, Vector2.ZERO) - for slide_no in target.get_slide_count(): - var slide = target.get_slide_collision(slide_no) - if slide.collider == goal: - emit_signal("touching_goal") - if not goal_reached_triggered: - emit_signal("goal_reached") - goal_reached_triggered = true diff --git a/src/entities/behaviours/AttractedTo.tscn b/src/entities/behaviours/AttractedTo.tscn deleted file mode 100644 index 9642854..0000000 --- a/src/entities/behaviours/AttractedTo.tscn +++ /dev/null @@ -1,6 +0,0 @@ -[gd_scene load_steps=2 format=2] - -[ext_resource path="res://src/entities/behaviours/AttractedTo.gd" type="Script" id=1] - -[node name="AttractedTo" type="Node"] -script = ExtResource( 1 ) diff --git a/src/entities/behaviours/AttractedToMovement.gd b/src/entities/behaviours/AttractedToMovement.gd new file mode 100644 index 0000000..04fe642 --- /dev/null +++ b/src/entities/behaviours/AttractedToMovement.gd @@ -0,0 +1,34 @@ +extends Node +class_name AttractedToMovement + + +signal touching_goal +signal goal_reached + + +export var movement_per_second: float +export var goal_path: NodePath + + +onready var parent: KinematicBody2D = get_parent() +onready var goal: StaticBody2D = get_node(goal_path) if goal_path else null + + +var _goal_reached_triggered: bool = false + + +func move(): + var direction: Vector2 = (goal.global_position - parent.global_position).normalized() + var _motion: Vector2 = parent.move_and_slide(direction * movement_per_second, Vector2.ZERO) + for slide_no in parent.get_slide_count(): + var slide = parent.get_slide_collision(slide_no) + if slide.collider == goal: + emit_signal("touching_goal") + if not _goal_reached_triggered: + emit_signal("goal_reached") + _goal_reached_triggered = true + + +func _physics_process(_delta): + if goal: + move() diff --git a/src/entities/behaviours/AttractedToMovement.tscn b/src/entities/behaviours/AttractedToMovement.tscn new file mode 100644 index 0000000..23a796c --- /dev/null +++ b/src/entities/behaviours/AttractedToMovement.tscn @@ -0,0 +1,9 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://src/entities/behaviours/AttractedToMovement.gd" type="Script" id=1] + +[node name="AttractedToMovement" type="Node"] +script = ExtResource( 1 ) +__meta__ = { +"_editor_description_": "Moves the parent KinematicBody2D towards the specified goal." +}