From 1a532a5afb996c3442462a4a4d771ece7eed8e05 Mon Sep 17 00:00:00 2001 From: djairoh Date: Sat, 20 Dec 2025 00:03:13 +0100 Subject: [PATCH] ft: prey collision --- .../molecular/molecular_player.gd | 9 +- .../molecular/molecular_stage.tscn | 2 +- .../molecular/nucleotide_prey.gd | 24 +++--- .../molecular/nucleotide_prey.tscn | 38 +++++---- evolve-die-repeat/molecular/prey.tscn | 82 ------------------- evolve-die-repeat/npc.tscn | 6 -- .../{npc.gd => shared/npc/npc2D.gd} | 8 +- .../{npc.gd.uid => shared/npc/npc2D.gd.uid} | 0 evolve-die-repeat/shared/npc/npc2D.tscn | 8 ++ .../npc/predator2D.gd} | 4 +- .../npc/predator2D.gd.uid} | 0 .../npc/predator2D.tscn} | 8 +- .../npc/prey2D.gd} | 4 +- .../npc/prey2D.gd.uid} | 0 .../npc/prey2D.tscn} | 4 +- .../thirdparty/extension_api.json | 4 +- 16 files changed, 66 insertions(+), 135 deletions(-) delete mode 100644 evolve-die-repeat/molecular/prey.tscn delete mode 100644 evolve-die-repeat/npc.tscn rename evolve-die-repeat/{npc.gd => shared/npc/npc2D.gd} (88%) rename evolve-die-repeat/{npc.gd.uid => shared/npc/npc2D.gd.uid} (100%) create mode 100644 evolve-die-repeat/shared/npc/npc2D.tscn rename evolve-die-repeat/{abstract_predator.gd => shared/npc/predator2D.gd} (88%) rename evolve-die-repeat/{abstract_predator.gd.uid => shared/npc/predator2D.gd.uid} (100%) rename evolve-die-repeat/{abstract_predator.tscn => shared/npc/predator2D.tscn} (51%) rename evolve-die-repeat/{abstract_prey.gd => shared/npc/prey2D.gd} (86%) rename evolve-die-repeat/{abstract_prey.gd.uid => shared/npc/prey2D.gd.uid} (100%) rename evolve-die-repeat/{abstract_prey.tscn => shared/npc/prey2D.tscn} (77%) diff --git a/evolve-die-repeat/molecular/molecular_player.gd b/evolve-die-repeat/molecular/molecular_player.gd index 5971a8e..d6b6672 100644 --- a/evolve-die-repeat/molecular/molecular_player.gd +++ b/evolve-die-repeat/molecular/molecular_player.gd @@ -1,14 +1,14 @@ extends CharacterBody2D -@export var speed = 400 +@export var speed = 200 var screen_size -var str = 1 +var damage = 1 func _ready(): screen_size = get_viewport_rect().size func _process(delta): - var velocity = Vector2.ZERO + velocity = Vector2.ZERO if Input.is_action_pressed("move_right"): velocity.x += 1 if Input.is_action_pressed("move_left"): @@ -18,5 +18,6 @@ func _process(delta): if Input.is_action_pressed("move_up"): velocity.y -= 1 - position += speed * velocity * delta + move_and_collide(speed * velocity * delta) + #position += speed * velocity * delta position = position.clamp(Vector2.ZERO, screen_size) diff --git a/evolve-die-repeat/molecular/molecular_stage.tscn b/evolve-die-repeat/molecular/molecular_stage.tscn index e2ed151..b3ef05f 100644 --- a/evolve-die-repeat/molecular/molecular_stage.tscn +++ b/evolve-die-repeat/molecular/molecular_stage.tscn @@ -6,7 +6,7 @@ [ext_resource type="Script" uid="uid://ceut2lrvkns75" path="res://debug_label.gd" id="4_mys4o"] [ext_resource type="Script" uid="uid://2pmjtnrg5471" path="res://molecular/preyManager.gd" id="5_ojt85"] -[node name="MolecularStag" type="Node2D"] +[node name="MolecularStage" type="Node2D"] [node name="Background" type="Node2D" parent="."] diff --git a/evolve-die-repeat/molecular/nucleotide_prey.gd b/evolve-die-repeat/molecular/nucleotide_prey.gd index 0e2e32e..c778e73 100644 --- a/evolve-die-repeat/molecular/nucleotide_prey.gd +++ b/evolve-die-repeat/molecular/nucleotide_prey.gd @@ -1,37 +1,41 @@ -extends AbstractPrey +extends AbstractPrey2D @onready var sprite = get_node("AnimatedSprite2D") # Called when the node enters the scene tree for the first time. func _ready() -> void: + $AnimatedSprite2D.animation = "Healthy" + $AnimatedSprite2D.play() pass # Replace with function body. # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: - self.move(Vector3(randfn(0, 1), randfn(0, 1), 0)) return +func _physics_process(delta: float) -> void: + self.move(Vector3(randfn(0, 1), randfn(0, 1), 0)) func move(destination: Vector3) -> void: - self.position += Vector2(destination.x, destination.y) # stub + move_and_collide(Vector2(destination.x, destination.y)) + +func die() -> void: + sprite.play("Dying") + super.die() -func _on_rigid_body_2d_body_entered(body: Node) -> void: +func _on_area_2d_body_entered(body: Node2D) -> void: # TODO: collision with other entities # check if colision with player - print("we collidin") if body.is_in_group("player"): handle_collision_player(body) - else: - self.die() + # Function to handle collision logic func handle_collision_player(player): - print("Collision!") - self.health -= player.str + self.health -= player.damage if sprite: if self.health <= 0: self.die() else: - sprite.play("injured") + sprite.play("Injured") diff --git a/evolve-die-repeat/molecular/nucleotide_prey.tscn b/evolve-die-repeat/molecular/nucleotide_prey.tscn index 4bdea7e..a40f58f 100644 --- a/evolve-die-repeat/molecular/nucleotide_prey.tscn +++ b/evolve-die-repeat/molecular/nucleotide_prey.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=10 format=3 uid="uid://c3iw2v3x6ngrb"] -[ext_resource type="PackedScene" uid="uid://bvsdg1v3ksixy" path="res://abstract_prey.tscn" id="1_qvulj"] +[ext_resource type="PackedScene" uid="uid://bvsdg1v3ksixy" path="res://shared/npc/prey2D.tscn" id="1_qvulj"] [ext_resource type="Script" uid="uid://bgossk6xo31gi" path="res://molecular/nucleotide_prey.gd" id="2_0227s"] [ext_resource type="Texture2D" uid="uid://bhcb5g7g7um8" path="res://molecular/assets/prey/prey-dying-frame0.png" id="2_lkj7f"] [ext_resource type="Texture2D" uid="uid://bxn11avw7dykl" path="res://molecular/assets/prey/prey-dying-frame1.png" id="3_svqyr"] @@ -12,52 +12,54 @@ [sub_resource type="SpriteFrames" id="SpriteFrames_66x8p"] animations = [{ "frames": [{ -"duration": 1.0, +"duration": 20.0, "texture": ExtResource("2_lkj7f") }, { -"duration": 1.0, +"duration": 20.0, "texture": ExtResource("3_svqyr") }], "loop": true, "name": &"Dying", -"speed": 5.0 +"speed": 1.0 }, { "frames": [{ -"duration": 1.0, +"duration": 20.0, "texture": ExtResource("4_ee1gb") }, { -"duration": 1.0, +"duration": 20.0, "texture": ExtResource("5_ae5nf") }], "loop": true, "name": &"Healthy", -"speed": 5.0 +"speed": 1.0 }, { "frames": [{ -"duration": 1.0, +"duration": 20.0, "texture": ExtResource("6_0f87h") }, { -"duration": 1.0, +"duration": 20.0, "texture": ExtResource("7_w7inl") }], "loop": true, "name": &"Injured", -"speed": 5.0 +"speed": 1.0 }] [node name="NucleotidePrey" instance=ExtResource("1_qvulj")] +collision_layer = 2 +collision_mask = 3 +motion_mode = 1 script = ExtResource("2_0227s") +maxHealth = 20 [node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="." index="0"] scale = Vector2(0.1, 0.1) sprite_frames = SubResource("SpriteFrames_66x8p") -animation = &"Healthy" +animation = &"Dying" +frame_progress = 0.60472965 -[node name="RigidBody2D" type="RigidBody2D" parent="." index="1"] -collision_layer = 2 -collision_mask = 3 +[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Area2D" index="0"] +position = Vector2(7.215866, -0.5034294) +polygon = PackedVector2Array(-8.831272, -2.3390446, -5.7760534, -2.3993049, -4.0230684, 0.41277456, -5.8890305, 2.9948444, -8.862037, 2.9326901, -10.268076, 0.28495264) -[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="RigidBody2D" index="0"] -polygon = PackedVector2Array(-16.442108, -21.739502, 14.039459, -23.432922, 29.280273, 3.097351, 12.346039, 27.369736, -17.571075, 29.62761, -32.247375, 1.968399) - -[connection signal="body_entered" from="RigidBody2D" to="." method="_on_rigid_body_2d_body_entered"] +[connection signal="body_entered" from="Area2D" to="." method="_on_area_2d_body_entered"] diff --git a/evolve-die-repeat/molecular/prey.tscn b/evolve-die-repeat/molecular/prey.tscn deleted file mode 100644 index bbb9c23..0000000 --- a/evolve-die-repeat/molecular/prey.tscn +++ /dev/null @@ -1,82 +0,0 @@ -[gd_scene load_steps=9 format=3 uid="uid://cum0iux1pv7bu"] - -[ext_resource type="Texture2D" uid="uid://bhcb5g7g7um8" path="res://molecular/assets/prey/prey-dying-frame0.png" id="2_5mr0w"] -[ext_resource type="Texture2D" uid="uid://bxn11avw7dykl" path="res://molecular/assets/prey/prey-dying-frame1.png" id="3_eomdj"] -[ext_resource type="Texture2D" uid="uid://ctkehsavw6ghx" path="res://molecular/assets/prey/prey-healthy-frame0.png" id="4_t6vdg"] -[ext_resource type="Texture2D" uid="uid://uy28y3mkk6nt" path="res://molecular/assets/prey/prey-healthy-frame1.png" id="5_8jbq3"] -[ext_resource type="Texture2D" uid="uid://btnyajci8ptb2" path="res://molecular/assets/prey/prey-injured-frame0.png" id="6_o44iv"] -[ext_resource type="Texture2D" uid="uid://bqll8ge4cr2uf" path="res://molecular/assets/prey/prey-injured-frame1.png" id="7_wx0y7"] - -[sub_resource type="GDScript" id="GDScript_56kmc"] -script/source = "extends RigidBody2D - - -# 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_visible_on_screen_notifier_2d_screen_exited(): - queue_free(); -" - -[sub_resource type="SpriteFrames" id="SpriteFrames_43b72"] -animations = [{ -"frames": [{ -"duration": 1.0, -"texture": ExtResource("2_5mr0w") -}, { -"duration": 1.0, -"texture": ExtResource("3_eomdj") -}], -"loop": true, -"name": &"Dying", -"speed": 5.0 -}, { -"frames": [{ -"duration": 1.0, -"texture": ExtResource("4_t6vdg") -}, { -"duration": 1.0, -"texture": ExtResource("5_8jbq3") -}], -"loop": true, -"name": &"Healthy", -"speed": 5.0 -}, { -"frames": [{ -"duration": 1.0, -"texture": ExtResource("6_o44iv") -}, { -"duration": 1.0, -"texture": ExtResource("7_wx0y7") -}], -"loop": true, -"name": &"Injured", -"speed": 5.0 -}] - -[node name="Prey" type="RigidBody2D"] -gravity_scale = 0.379 -script = SubResource("GDScript_56kmc") -metadata/_edit_group_ = true - -[node name="VisibleOnScreenNotifier2D" type="VisibleOnScreenNotifier2D" parent="."] - -[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] -scale = Vector2(0.1, 0.1) -sprite_frames = SubResource("SpriteFrames_43b72") -animation = &"Healthy" -frame_progress = 0.14205484 - -[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="."] -position = Vector2(0, 0.081250384) -scale = Vector2(0.1, 0.10208334) -polygon = PackedVector2Array(-15.967808, -28.469032, 14.526825, -28.826782, 30.048037, -3.7841516, 14.344225, 21.97399, -15.419998, 22.510618, -31.671623, -4.141903) - -[connection signal="screen_exited" from="VisibleOnScreenNotifier2D" to="." method="_on_visible_on_screen_notifier_2d_screen_exited"] diff --git a/evolve-die-repeat/npc.tscn b/evolve-die-repeat/npc.tscn deleted file mode 100644 index 0ac878b..0000000 --- a/evolve-die-repeat/npc.tscn +++ /dev/null @@ -1,6 +0,0 @@ -[gd_scene load_steps=2 format=3 uid="uid://biup0eej85fq2"] - -[ext_resource type="Script" uid="uid://biu3sctw15ga" path="res://npc.gd" id="1_ideak"] - -[node name="NPC" type="Node2D"] -script = ExtResource("1_ideak") diff --git a/evolve-die-repeat/npc.gd b/evolve-die-repeat/shared/npc/npc2D.gd similarity index 88% rename from evolve-die-repeat/npc.gd rename to evolve-die-repeat/shared/npc/npc2D.gd index 210ed68..d9125c9 100644 --- a/evolve-die-repeat/npc.gd +++ b/evolve-die-repeat/shared/npc/npc2D.gd @@ -1,5 +1,5 @@ -extends Node2D -class_name NPC +extends CharacterBody2D +class_name NPC2D @export var maxHealth: int = 0 var health: int = maxHealth @@ -15,6 +15,10 @@ func _process(delta: float) -> void: func spawn() -> void: pass +func take_damage(dmg: int) -> void: + self.health -= dmg; + if self.health < 0: + self.die() # I think the move per npc is to model concrete behaviours in functions. # How the npc acts can be determined elsewhere, these functions just implement the behvaiour diff --git a/evolve-die-repeat/npc.gd.uid b/evolve-die-repeat/shared/npc/npc2D.gd.uid similarity index 100% rename from evolve-die-repeat/npc.gd.uid rename to evolve-die-repeat/shared/npc/npc2D.gd.uid diff --git a/evolve-die-repeat/shared/npc/npc2D.tscn b/evolve-die-repeat/shared/npc/npc2D.tscn new file mode 100644 index 0000000..89542a0 --- /dev/null +++ b/evolve-die-repeat/shared/npc/npc2D.tscn @@ -0,0 +1,8 @@ +[gd_scene load_steps=2 format=3 uid="uid://biup0eej85fq2"] + +[ext_resource type="Script" uid="uid://biu3sctw15ga" path="res://shared/npc/npc2D.gd" id="1_ucjfp"] + +[node name="NPC" type="CharacterBody2D"] +script = ExtResource("1_ucjfp") + +[node name="Area2D" type="Area2D" parent="."] diff --git a/evolve-die-repeat/abstract_predator.gd b/evolve-die-repeat/shared/npc/predator2D.gd similarity index 88% rename from evolve-die-repeat/abstract_predator.gd rename to evolve-die-repeat/shared/npc/predator2D.gd index fb6b6e2..b5d4b5d 100644 --- a/evolve-die-repeat/abstract_predator.gd +++ b/evolve-die-repeat/shared/npc/predator2D.gd @@ -1,5 +1,5 @@ -extends NPC -class_name AbstractPredator +extends NPC2D +class_name AbstractPredator2D # Called when the node enters the scene tree for the first time. func _ready() -> void: diff --git a/evolve-die-repeat/abstract_predator.gd.uid b/evolve-die-repeat/shared/npc/predator2D.gd.uid similarity index 100% rename from evolve-die-repeat/abstract_predator.gd.uid rename to evolve-die-repeat/shared/npc/predator2D.gd.uid diff --git a/evolve-die-repeat/abstract_predator.tscn b/evolve-die-repeat/shared/npc/predator2D.tscn similarity index 51% rename from evolve-die-repeat/abstract_predator.tscn rename to evolve-die-repeat/shared/npc/predator2D.tscn index cee0962..bfcb1a4 100644 --- a/evolve-die-repeat/abstract_predator.tscn +++ b/evolve-die-repeat/shared/npc/predator2D.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=3 format=3 uid="uid://b7wqd5owafn6g"] -[ext_resource type="PackedScene" uid="uid://biup0eej85fq2" path="res://npc.tscn" id="1_eoj71"] -[ext_resource type="Script" uid="uid://dgfimmq53whll" path="res://abstract_predator.gd" id="2_hv0s6"] +[ext_resource type="PackedScene" uid="uid://biup0eej85fq2" path="res://shared/npc/npc2D.tscn" id="1_4llks"] +[ext_resource type="Script" uid="uid://dgfimmq53whll" path="res://shared/npc/predator2D.gd" id="2_rj1ok"] -[node name="AbstractPredator" instance=ExtResource("1_eoj71")] -script = ExtResource("2_hv0s6") +[node name="AbstractPredator" instance=ExtResource("1_4llks")] +script = ExtResource("2_rj1ok") diff --git a/evolve-die-repeat/abstract_prey.gd b/evolve-die-repeat/shared/npc/prey2D.gd similarity index 86% rename from evolve-die-repeat/abstract_prey.gd rename to evolve-die-repeat/shared/npc/prey2D.gd index d661054..84a8394 100644 --- a/evolve-die-repeat/abstract_prey.gd +++ b/evolve-die-repeat/shared/npc/prey2D.gd @@ -1,5 +1,5 @@ -extends NPC -class_name AbstractPrey +extends NPC2D +class_name AbstractPrey2D # Called when the node enters the scene tree for the first time. func _ready() -> void: diff --git a/evolve-die-repeat/abstract_prey.gd.uid b/evolve-die-repeat/shared/npc/prey2D.gd.uid similarity index 100% rename from evolve-die-repeat/abstract_prey.gd.uid rename to evolve-die-repeat/shared/npc/prey2D.gd.uid diff --git a/evolve-die-repeat/abstract_prey.tscn b/evolve-die-repeat/shared/npc/prey2D.tscn similarity index 77% rename from evolve-die-repeat/abstract_prey.tscn rename to evolve-die-repeat/shared/npc/prey2D.tscn index e8901d0..cce6fdd 100644 --- a/evolve-die-repeat/abstract_prey.tscn +++ b/evolve-die-repeat/shared/npc/prey2D.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=3 format=3 uid="uid://bvsdg1v3ksixy"] -[ext_resource type="PackedScene" uid="uid://biup0eej85fq2" path="res://npc.tscn" id="1_2m1le"] -[ext_resource type="Script" uid="uid://76jxpubyd8wp" path="res://abstract_prey.gd" id="2_dny00"] +[ext_resource type="PackedScene" uid="uid://biup0eej85fq2" path="res://shared/npc/npc2D.tscn" id="1_2m1le"] +[ext_resource type="Script" uid="uid://76jxpubyd8wp" path="res://shared/npc/prey2D.gd" id="2_dny00"] [node name="AbstractPrey" instance=ExtResource("1_2m1le")] script = ExtResource("2_dny00") diff --git a/evolve-die-repeat/thirdparty/extension_api.json b/evolve-die-repeat/thirdparty/extension_api.json index e143283..7198c99 100644 --- a/evolve-die-repeat/thirdparty/extension_api.json +++ b/evolve-die-repeat/thirdparty/extension_api.json @@ -4,8 +4,8 @@ "version_minor": 5, "version_patch": 1, "version_status": "stable", - "version_build": "official", - "version_full_name": "Godot Engine v4.5.1.stable.official", + "version_build": "arch_linux", + "version_full_name": "Godot Engine v4.5.1.stable.arch_linux", "precision": "single" }, "builtin_class_sizes": [