From 360b4dfe6a3df3a8a42be29426cecea68fe52aa5 Mon Sep 17 00:00:00 2001 From: MaddoScientisto Date: Sun, 18 Aug 2024 17:38:32 +0200 Subject: [PATCH] Player can die now --- Scenes/Enemy.tscn | 1 + Scenes/player.tscn | 21 ++++++++++++++-- Scenes/test.tscn | 9 +------ Scripts/Bullet.cs | 11 +++++---- Scripts/Enemy.cs | 19 ++++++++------- Scripts/PlayerMovement.cs | 50 ++++++++++++++++++++++++++++++++++++++- 6 files changed, 87 insertions(+), 24 deletions(-) diff --git a/Scenes/Enemy.tscn b/Scenes/Enemy.tscn index b4341a7b..33471e2b 100644 --- a/Scenes/Enemy.tscn +++ b/Scenes/Enemy.tscn @@ -22,6 +22,7 @@ collision_layer = 16 collision_mask = 9 script = ExtResource("1_lpwdj") BulletScene = ExtResource("2_ogldd") +BulletSpeed = 50.0 metadata/_edit_group_ = true [node name="Sprite2D" type="Sprite2D" parent="."] diff --git a/Scenes/player.tscn b/Scenes/player.tscn index 5ea116f7..35e6e923 100644 --- a/Scenes/player.tscn +++ b/Scenes/player.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=26 format=3 uid="uid://bghghp5ep4w2j"] +[gd_scene load_steps=27 format=3 uid="uid://bghghp5ep4w2j"] [ext_resource type="Script" path="res://Scripts/PlayerMovement.cs" id="1_m27vu"] [ext_resource type="Texture2D" uid="uid://la06powu57hu" path="res://Sprites/Cirno_Big.png" id="2_bwf6x"] @@ -138,7 +138,10 @@ animations = [{ [sub_resource type="CircleShape2D" id="CircleShape2D_oevaq"] radius = 17.2627 -[node name="Player" type="CharacterBody2D" node_paths=PackedStringArray("Muzzle") groups=["player"]] +[sub_resource type="CircleShape2D" id="CircleShape2D_e6woi"] +radius = 1.41421 + +[node name="Player" type="CharacterBody2D" node_paths=PackedStringArray("Muzzle") groups=["Destroyable", "player"]] collision_layer = 2 collision_mask = 99 script = ExtResource("1_m27vu") @@ -147,6 +150,8 @@ CrosshairDistance = 20.0 BulletScene = ExtResource("2_ov36d") SelectorScene = ExtResource("3_8wt6s") Muzzle = NodePath("Muzzle") +Health = 32.0 +RateOfFire = 0.1 metadata/_edit_group_ = true [node name="CollisionShape2D" type="CollisionShape2D" parent="."] @@ -188,4 +193,16 @@ script = ExtResource("7_uvgjg") [node name="CollisionShape2D" type="CollisionShape2D" parent="InteractionController"] shape = SubResource("CircleShape2D_oevaq") +[node name="ShootTimer" type="Timer" parent="."] +one_shot = true + +[node name="DamageHitBox" type="Area2D" parent="."] +collision_layer = 2 +collision_mask = 128 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="DamageHitBox"] +shape = SubResource("CircleShape2D_e6woi") +debug_color = Color(1, 0.00817797, 0.0443347, 0.42) + [connection signal="area_entered" from="InteractionController" to="." method="_on_interaction_controller_area_entered"] +[connection signal="area_entered" from="DamageHitBox" to="." method="_on_damage_hit_box_area_entered"] diff --git a/Scenes/test.tscn b/Scenes/test.tscn index 798f2975..17ef2f97 100644 --- a/Scenes/test.tscn +++ b/Scenes/test.tscn @@ -228,9 +228,8 @@ tile_set = SubResource("TileSet_d7en2") [node name="Solid2" type="TileMapLayer" parent="Factory Tilemaps" groups=["Solid"]] use_parent_material = true -tile_map_data = PackedByteArray("AADL//L/AAACAAYAAADL//P/AAACAAYAAADL//T/AAACAAYAAADL//X/AAACAAYAAADL//b/AAACAAYAAADL//f/AAACAAYAAADL//j/AAACAAYAAADL//n/AAACAAYAAADL//r/AAACAAYAAADL//v/AAACAAYAAADL//z/AAACAAYAAADS//T/AAAAAAcAAADM//H/AAABAAcAAADN//H/AAABAAcAAADO//H/AAABAAcAAADP//H/AAABAAcAAADT//T/AAABAAcAAADU//T/AAABAAcAAADV//T/AAABAAcAAADW//T/AAABAAcAAADX//T/AAABAAcAAADO//f/AAADAAAAAADN//f/AAADAAAAAADM//f/AAADAAAAAADS//f/AAADAAAAAADO//r/AAADAAAAAADN//r/AAADAAAAAADM//r/AAADAAAAAADS//r/AAADAAAAAADT//r/AAADAAAAAADU//r/AAADAAAAAADV//r/AAADAAAAAADW//r/AAADAAAAAADX//r/AAADAAAAAADa//f/AAAAAAYAAADa//n/AAAAAAYAAADa//r/AAAAAAYAAADa//v/AAAAAAYAAADa//z/AAAAAAYAAADa//3/AAAAAAYAAADa//7/AAAAAAYAAADL//3/AAACAAYAAADL//7/AAACAAYAAADa////AAAAAAYAAADa/wAAAAAAAAYAAADY//r/AAADAAAAAADZ//r/AAADAAAAAADM//3/AAAEAAUAAADN//3/AAAEAAUAAADO//3/AAAEAAUAAADP//3/AAAEAAUAAADQ//3/AAAEAAUAAADR//3/AAAEAAUAAADS//3/AAAEAAUAAADT//3/AAAFAAUAAADX//3/AAADAAUAAADY//3/AAAEAAUAAADZ//3/AAAEAAUAAADX//7/AAADAAcAAADY////AAAEAAUAAADZ////AAAEAAUAAADT//7/AAAFAAcAAADS//7/AAAEAAUAAADR//7/AAAEAAUAAADQ//7/AAAEAAUAAADP//7/AAAEAAUAAADO//7/AAAEAAUAAADN//7/AAAEAAUAAADM//7/AAAEAAUAAADX/wEAAAAFAAcAAADW/wEAAAAEAAUAAADV/wEAAAAEAAUAAADU/wEAAAAEAAUAAADT/wEAAAAEAAUAAADX/wAAAAADAAYAAAC2////AAADAAAAAAC1////AAADAAAAAAC0////AAADAAAAAACz////AAADAAAAAACy////AAADAAAAAACx////AAADAAAAAACx//7/AAADAAAAAACx//3/AAADAAAAAAC2/wIAAAADAAAAAAC1/wIAAAADAAAAAAC0/wIAAAADAAAAAACz/wIAAAADAAAAAACy/wIAAAADAAAAAACx/wIAAAADAAAAAACw/wIAAAADAAAAAACv/wIAAAADAAAAAACu/wIAAAADAAAAAACt/wIAAAADAAAAAACs/wIAAAADAAAAAACu////AAADAAAAAACu//7/AAADAAAAAACu//3/AAADAAAAAACt////AAADAAAAAACs////AAADAAAAAACr////AAADAAAAAACq////AAADAAAAAACp////AAADAAAAAACr/wIAAAADAAAAAACq/wIAAAADAAAAAACp/wIAAAADAAAAAADQ/wEAAAADAAUAAADR/wEAAAAEAAUAAADS/wEAAAAEAAUAAADQ/wIAAAADAAYAAADQ/wMAAAADAAcAAADR/wMAAAAEAAUAAADX////AAADAAUAAADY//7/AAAEAAUAAADZ//7/AAAEAAUAAADL/wkAAAAAAAQAAADM/wAAAQAAAAAAAQDM/wEAAQAAAAAAAQDM/wIAAQAAAAAAAQDM/wMAAQAAAAAAAQDR//b/AQAAAAAAAgDV//H/AQAAAAAAAgDW//H/AQAAAAAAAwDX//H/AQAAAAAABADH//L/AQAAAAAABQDG//f/AQAAAAAABgDG//r/AQAAAAAABwDI//v/AQAAAAAACADR//X/AQAAAAAAAQDM//T/AAABAAEAAADN//T/AAABAAEAAADO//T/AAABAAEAAADP//T/AAABAAEAAADQ//T/AAABAAEAAADR//T/AAABAAEAAADS//X/AAAEAAEAAADS//b/AAAEAAEAAADT//X/AAABAAEAAADT//b/AAABAAEAAADV//b/AAABAAEAAADV//X/AAABAAEAAADX//b/AAABAAEAAADX//X/AAABAAEAAADZ//b/AAABAAEAAADZ//X/AAABAAEAAADa//j/AAAAAAYAAADL////AAACAAYAAADL/wAAAAACAAYAAADL/wEAAAACAAYAAADL/wIAAAACAAYAAADL/wMAAAACAAYAAADL/wQAAAACAAYAAADL/wUAAAACAAYAAADL/wYAAAACAAYAAADL/wcAAAACAAYAAADL/wgAAAACAAYAAADa/wEAAAAAAAYAAADa/wIAAAAAAAYAAADa/wMAAAAAAAYAAADa/wQAAAAAAAYAAADa/wUAAAAAAAYAAADa/wYAAAAAAAYAAADa/wcAAAAAAAYAAADa/wgAAAAAAAYAAADa/wkAAAAAAAYAAADa/woAAAAAAAYAAADa/wsAAAAAAAYAAADa/wwAAAAAAAYAAADa/w0AAAAAAAYAAADa/w4AAAAAAAYAAADZ/w8AAAABAAUAAADY/w8AAAABAAUAAADX/w8AAAABAAUAAADW/w8AAAABAAUAAADV/w8AAAABAAUAAADU/w8AAAABAAUAAADT/w8AAAABAAUAAADS/w8AAAABAAUAAADR/w8AAAABAAUAAADQ/w8AAAABAAUAAADP/w8AAAABAAUAAADO/w8AAAABAAUAAADN/w8AAAABAAUAAADM/w8AAAABAAUAAADL/w4AAAAAAAQAAADL/w0AAAAAAAQAAADK/w4AAAABAAUAAADJ/w4AAAABAAUAAADI/w4AAAABAAUAAADH/w4AAAABAAUAAADG/w4AAAABAAUAAADF/w4AAAABAAUAAADE/w4AAAABAAUAAADL/wsAAAAFAAEAAADL/woAAAAFAAEAAADK/woAAAABAAEAAADI/woAAAABAAEAAADH/woAAAABAAEAAADH/wkAAAABAAEAAADI/wkAAAABAAEAAADK/wkAAAABAAEAAADF/woAAAABAAEAAADE/woAAAABAAEAAADE/wkAAAABAAEAAADF/wkAAAABAAEAAADB/woAAAABAAEAAADC/woAAAABAAEAAADC/wkAAAABAAEAAADB/wkAAAABAAEAAAC//woAAAABAAEAAAC//wkAAAABAAEAAADJ/woAAAADAAEAAADJ/wkAAAADAAEAAADG/woAAAADAAEAAADG/wkAAAADAAEAAADD/woAAAADAAEAAADD/wkAAAADAAEAAADA/woAAAADAAEAAADA/wkAAAADAAEAAADD/w4AAAABAAUAAADC/w4AAAABAAUAAADB/w4AAAABAAUAAADA/w4AAAABAAUAAAC//w4AAAABAAUAAADU//b/AAADAAEAAADU//X/AAADAAEAAADW//b/AAADAAEAAADW//X/AAADAAEAAADY//b/AAADAAEAAADY//X/AAADAAEAAAA=") +tile_map_data = PackedByteArray("AADL//L/AAACAAYAAADL//P/AAACAAYAAADL//T/AAACAAYAAADL//X/AAACAAYAAADL//b/AAACAAYAAADL//f/AAACAAYAAADL//j/AAACAAYAAADL//n/AAACAAYAAADL//r/AAACAAYAAADL//v/AAACAAYAAADL//z/AAACAAYAAADS//T/AAAAAAcAAADM//H/AAABAAcAAADN//H/AAABAAcAAADO//H/AAABAAcAAADP//H/AAABAAcAAADT//T/AAABAAcAAADU//T/AAABAAcAAADV//T/AAABAAcAAADW//T/AAABAAcAAADX//T/AAABAAcAAADO//f/AAADAAAAAADN//f/AAADAAAAAADM//f/AAADAAAAAADS//f/AAADAAAAAADO//r/AAADAAAAAADN//r/AAADAAAAAADM//r/AAADAAAAAADS//r/AAADAAAAAADT//r/AAADAAAAAADU//r/AAADAAAAAADV//r/AAADAAAAAADW//r/AAADAAAAAADX//r/AAADAAAAAADa//f/AAAAAAYAAADa//n/AAAAAAYAAADa//r/AAAAAAYAAADa//v/AAAAAAYAAADa//z/AAAAAAYAAADa//3/AAAAAAYAAADa//7/AAAAAAYAAADL//3/AAACAAYAAADL//7/AAACAAYAAADa////AAAAAAYAAADa/wAAAAAAAAYAAADY//r/AAADAAAAAADZ//r/AAADAAAAAADM//3/AAAEAAUAAADN//3/AAAEAAUAAADO//3/AAAEAAUAAADP//3/AAAEAAUAAADQ//3/AAAEAAUAAADR//3/AAAEAAUAAADS//3/AAAEAAUAAADT//3/AAAFAAUAAADX//3/AAADAAUAAADY//3/AAAEAAUAAADZ//3/AAAEAAUAAADX//7/AAADAAcAAADY////AAAEAAUAAADZ////AAAEAAUAAADT//7/AAAFAAcAAADS//7/AAAEAAUAAADR//7/AAAEAAUAAADQ//7/AAAEAAUAAADP//7/AAAEAAUAAADO//7/AAAEAAUAAADN//7/AAAEAAUAAADM//7/AAAEAAUAAADX/wEAAAAFAAcAAADW/wEAAAAEAAUAAADV/wEAAAAEAAUAAADU/wEAAAAEAAUAAADT/wEAAAAEAAUAAADX/wAAAAADAAYAAAC2////AAADAAAAAAC1////AAADAAAAAAC0////AAADAAAAAACz////AAADAAAAAACy////AAADAAAAAACx////AAADAAAAAACx//7/AAADAAAAAACx//3/AAADAAAAAAC2/wIAAAADAAAAAAC1/wIAAAADAAAAAAC0/wIAAAADAAAAAACz/wIAAAADAAAAAACy/wIAAAADAAAAAACx/wIAAAADAAAAAACw/wIAAAADAAAAAACv/wIAAAADAAAAAACu/wIAAAADAAAAAACt/wIAAAADAAAAAACs/wIAAAADAAAAAACu////AAADAAAAAACu//7/AAADAAAAAACu//3/AAADAAAAAACt////AAADAAAAAACs////AAADAAAAAACr////AAADAAAAAACq////AAADAAAAAACp////AAADAAAAAACr/wIAAAADAAAAAACq/wIAAAADAAAAAACp/wIAAAADAAAAAADQ/wEAAAADAAUAAADR/wEAAAAEAAUAAADS/wEAAAAEAAUAAADQ/wIAAAADAAYAAADQ/wMAAAADAAcAAADR/wMAAAAEAAUAAADX////AAADAAUAAADY//7/AAAEAAUAAADZ//7/AAAEAAUAAADL/wkAAAAAAAQAAADM/wAAAQAAAAAAAQDM/wEAAQAAAAAAAQDM/wIAAQAAAAAAAQDM/wMAAQAAAAAAAQDR//b/AQAAAAAAAgDV//H/AQAAAAAAAgDW//H/AQAAAAAAAwDX//H/AQAAAAAABADH//L/AQAAAAAABQDG//f/AQAAAAAABgDG//r/AQAAAAAABwDI//v/AQAAAAAACADR//X/AQAAAAAAAQDM//T/AAABAAEAAADN//T/AAABAAEAAADO//T/AAABAAEAAADP//T/AAABAAEAAADQ//T/AAABAAEAAADR//T/AAABAAEAAADS//X/AAAEAAEAAADS//b/AAAEAAEAAADT//X/AAABAAEAAADT//b/AAABAAEAAADV//b/AAABAAEAAADV//X/AAABAAEAAADX//b/AAABAAEAAADX//X/AAABAAEAAADZ//b/AAABAAEAAADZ//X/AAABAAEAAADa//j/AAAAAAYAAADL////AAACAAYAAADL/wAAAAACAAYAAADL/wEAAAACAAYAAADL/wIAAAACAAYAAADL/wMAAAACAAYAAADL/wQAAAACAAYAAADL/wUAAAACAAYAAADL/wYAAAACAAYAAADL/wcAAAACAAYAAADL/wgAAAACAAYAAADa/wEAAAAAAAYAAADa/wIAAAAAAAYAAADa/wMAAAAAAAYAAADa/wQAAAAAAAYAAADa/wUAAAAAAAYAAADa/wYAAAAAAAYAAADa/wcAAAAAAAYAAADa/wgAAAAAAAYAAADa/wkAAAAAAAYAAADa/woAAAAAAAYAAADa/wsAAAAAAAYAAADa/wwAAAAAAAYAAADa/w0AAAAAAAYAAADa/w4AAAAAAAYAAADZ/w8AAAABAAUAAADY/w8AAAABAAUAAADX/w8AAAABAAUAAADW/w8AAAABAAUAAADV/w8AAAABAAUAAADU/w8AAAABAAUAAADT/w8AAAABAAUAAADS/w8AAAABAAUAAADR/w8AAAABAAUAAADQ/w8AAAABAAUAAADP/w8AAAABAAUAAADO/w8AAAABAAUAAADN/w8AAAABAAUAAADM/w8AAAABAAUAAADL/w4AAAAAAAQAAADL/w0AAAAAAAQAAADK/w4AAAABAAUAAADJ/w4AAAABAAUAAADI/w4AAAABAAUAAADH/w4AAAABAAUAAADG/w4AAAABAAUAAADF/w4AAAABAAUAAADE/w4AAAABAAUAAADL/wsAAAAFAAEAAADL/woAAAAFAAEAAADK/woAAAABAAEAAADI/woAAAABAAEAAADH/woAAAABAAEAAADH/wkAAAABAAEAAADI/wkAAAABAAEAAADK/wkAAAABAAEAAADF/woAAAABAAEAAADE/woAAAABAAEAAADE/wkAAAABAAEAAADF/wkAAAABAAEAAADB/woAAAABAAEAAADC/woAAAABAAEAAADC/wkAAAABAAEAAADB/wkAAAABAAEAAAC//woAAAABAAEAAAC//wkAAAABAAEAAADJ/woAAAADAAEAAADJ/wkAAAADAAEAAADG/woAAAADAAEAAADG/wkAAAADAAEAAADD/woAAAADAAEAAADD/wkAAAADAAEAAADA/woAAAADAAEAAADA/wkAAAADAAEAAADD/w4AAAABAAUAAADC/w4AAAABAAUAAADB/w4AAAABAAUAAADA/w4AAAABAAUAAAC//w4AAAABAAUAAADU//b/AAADAAEAAADU//X/AAADAAEAAADW//b/AAADAAEAAADW//X/AAADAAEAAADY//b/AAADAAEAAADY//X/AAADAAEAAADT/wkAAQAAAAAAAgDU/wkAAQAAAAAAAgDU/woAAQAAAAAAAgDT/woAAQAAAAAAAgDT/wsAAQAAAAAAAgDU/wsAAQAAAAAAAgDU/wwAAQAAAAAAAgDT/wwAAQAAAAAAAgDS/wwAAQAAAAAAAgDR/wwAAQAAAAAAAgDR/wsAAQAAAAAAAgDS/wsAAQAAAAAAAgDS/woAAQAAAAAAAgDR/woAAQAAAAAAAgDS/wkAAQAAAAAAAgDR/wkAAQAAAAAAAgA=") tile_set = SubResource("TileSet_d7en2") -collision_visibility_mode = 1 [node name="Barrel" parent="Factory Tilemaps" instance=ExtResource("5_3uba3")] position = Vector2(-854, -138) @@ -268,12 +267,6 @@ position = Vector2(-903, 183) [node name="Red Box2" parent="Factory Tilemaps" instance=ExtResource("15_m0y0j")] position = Vector2(-696, -136) -[node name="Red Box3" parent="Factory Tilemaps" instance=ExtResource("15_m0y0j")] -position = Vector2(-744, 152) - -[node name="Red Box4" parent="Factory Tilemaps" instance=ExtResource("15_m0y0j")] -position = Vector2(-728, 152) - [node name="ControlPad" parent="Factory Tilemaps" node_paths=PackedStringArray("Target") instance=ExtResource("12_hfkf1")] position = Vector2(-713, -153) Target = NodePath("../Door") diff --git a/Scripts/Bullet.cs b/Scripts/Bullet.cs index 7bd5dc38..d918b4b4 100644 --- a/Scripts/Bullet.cs +++ b/Scripts/Bullet.cs @@ -59,11 +59,12 @@ public partial class Bullet : Area2D //Debug.WriteLine("Collision"); QueueFree(); } - else if (body.IsInGroup("Destroyable")) - { - Debug.WriteLine("Collision with destroyable object body"); - QueueFree(); - } + //// Do not Collide with body for purpose of destroying bullets + // else if (body.IsInGroup("Destroyable")) + // { + // Debug.WriteLine("Collision with destroyable object body"); + // QueueFree(); + // } } diff --git a/Scripts/Enemy.cs b/Scripts/Enemy.cs index 52fb6efd..6baf1cbe 100644 --- a/Scripts/Enemy.cs +++ b/Scripts/Enemy.cs @@ -15,6 +15,8 @@ public partial class Enemy : Area2D, IDestructible [Export] public double RateOfFire = 0.4f; + [Export] public float BulletSpeed = 100f; + private float _currentHealth = 0f; private bool _isDestroyed = false; @@ -71,6 +73,7 @@ public partial class Enemy : Area2D, IDestructible // bullet.Transform = this.GlobalTransform; // bullet.Position = this.Position; bullet.SetDirection((_cachedPlayer.GlobalPosition - this.GlobalPosition).Normalized()); + bullet.Speed = BulletSpeed; _cooldownTimer.Start(RateOfFire); } } @@ -117,6 +120,14 @@ public partial class Enemy : Area2D, IDestructible } + private void Explode() + { + Debug.WriteLine("Ded"); + //CreateParticles(); + //CreateDebris(); + QueueFree(); + } + public void Hit(float damage) { if (_isDestroyed) return; @@ -127,14 +138,6 @@ public partial class Enemy : Area2D, IDestructible Explode(); } - private void Explode() - { - Debug.WriteLine("Ded"); - //CreateParticles(); - //CreateDebris(); - QueueFree(); - } - public bool IsDestroyed() { return _isDestroyed; diff --git a/Scripts/PlayerMovement.cs b/Scripts/PlayerMovement.cs index cdc8f0d7..28200087 100644 --- a/Scripts/PlayerMovement.cs +++ b/Scripts/PlayerMovement.cs @@ -3,7 +3,7 @@ using System; using System.Diagnostics; using Cirno.Scripts; -public partial class PlayerMovement : CharacterBody2D +public partial class PlayerMovement : CharacterBody2D, IDestructible { [Export] public int Speed { get; set; } = 400; @@ -32,10 +32,25 @@ public partial class PlayerMovement : CharacterBody2D private Sprite2D _crosshair; + private Timer _cooldownTimer; + + [Export] public float Health = 4f; + + private float _currentHealth = 0f; + + [Export] public double RateOfFire = 0.4f; + + [Export] public float BulletSpeed = 300f; + + private bool _isDestroyed = false; + public override void _Ready() { + _currentHealth = Health; + _animatedSprite = GetNode("./Smoothing2D/AnimatedSprite2D"); _crosshair = GetNode("./Smoothing2D/Crosshair"); + _cooldownTimer = GetNode("./ShootTimer"); _movementDirection = Vector2.Zero; _facingDirection = Vector2.Zero; @@ -171,4 +186,37 @@ public partial class PlayerMovement : CharacterBody2D } } } + + private void Explode() + { + Debug.WriteLine("Ded"); + //CreateParticles(); + //CreateDebris(); + QueueFree(); + } + + public void Hit(float damage) + { + GD.Print($"Player damaged for {damage}"); + if (_isDestroyed) return; + + _currentHealth -= damage; + if (!(_currentHealth <= 0)) return; + _isDestroyed = true; + Explode(); + } + + public bool IsDestroyed() + { + return _isDestroyed; + } + + private void _on_damage_hit_box_area_entered(Area2D area) { + if (area is Bullet bullet) { + GD.Print("Received damage manually"); + this.Hit(bullet.Damage); + bullet.QueueFree(); + } + } + }