From 97027ddc3397c2c3493c9b4aa8c80bc9847bd962 Mon Sep 17 00:00:00 2001 From: Marco Date: Tue, 4 Mar 2025 14:07:51 +0100 Subject: [PATCH] Delayed speed increase modifier --- Resources/Bullets/cheat_bullet.tres | 24 ++++++++++--- Resources/Bullets/yin_yang_bullet.tres | 19 +++++++++++ Scenes/Weapons/Bullets/Yin_Yan_Bullet.tscn | 29 ++++++++++++++++ Scripts/Bullet.cs | 7 +++- .../DelayedContinuousRotationModifier.cs | 2 +- .../Modifiers/DelayedSpeedIncreaseModifier.cs | 26 ++++++++++++++ .../DelayedSpeedIncreaseModifier.cs.uid | 1 + Scripts/Resources/TimeModifier.cs | 6 ++-- Sprites/Bullets/mid_bullet_yinyang.aseprite | 3 ++ Sprites/Bullets/mid_bullet_yinyang.png | 3 ++ Sprites/Bullets/mid_bullet_yinyang.png.import | 34 +++++++++++++++++++ 11 files changed, 145 insertions(+), 9 deletions(-) create mode 100644 Resources/Bullets/yin_yang_bullet.tres create mode 100644 Scenes/Weapons/Bullets/Yin_Yan_Bullet.tscn create mode 100644 Scripts/Resources/Modifiers/DelayedSpeedIncreaseModifier.cs create mode 100644 Scripts/Resources/Modifiers/DelayedSpeedIncreaseModifier.cs.uid create mode 100644 Sprites/Bullets/mid_bullet_yinyang.aseprite create mode 100644 Sprites/Bullets/mid_bullet_yinyang.png create mode 100644 Sprites/Bullets/mid_bullet_yinyang.png.import diff --git a/Resources/Bullets/cheat_bullet.tres b/Resources/Bullets/cheat_bullet.tres index 3f77ee83..f81b8919 100644 --- a/Resources/Bullets/cheat_bullet.tres +++ b/Resources/Bullets/cheat_bullet.tres @@ -1,11 +1,25 @@ -[gd_resource type="Resource" script_class="BulletResource" load_steps=3 format=3 uid="uid://bopwqpmxoy1rd"] +[gd_resource type="Resource" script_class="BulletResource" load_steps=6 format=3 uid="uid://bopwqpmxoy1rd"] -[ext_resource type="PackedScene" uid="uid://b1qnfiuokpvsr" path="res://Scenes/Weapons/bullet.tscn" id="1_i4nah"] +[ext_resource type="PackedScene" uid="uid://eqppkegmt562" path="res://Scenes/Weapons/Bullets/Yin_Yan_Bullet.tscn" id="1_5pffv"] +[ext_resource type="PackedScene" uid="uid://h11o0et1y54v" path="res://Scenes/Weapons/Bullets/explosion.tscn" id="2_26vvh"] [ext_resource type="Script" uid="uid://dslyrfcej3g2n" path="res://Scripts/Resources/BulletResource.cs" id="2_dbvc7"] +[ext_resource type="Script" uid="uid://ci2vjo54w7i18" path="res://Scripts/Resources/Modifiers/DelayedSpeedIncreaseModifier.cs" id="2_w7k7r"] + +[sub_resource type="Resource" id="Resource_26vvh"] +script = ExtResource("2_w7k7r") +TransitionType = 2 +EaseType = 2 +Duration = 0.5 +TimeInSeconds = 0.0 +ModifierType = 0 +Value = 20.0 +Continuous = false +metadata/_custom_type_script = "uid://ci2vjo54w7i18" [resource] script = ExtResource("2_dbvc7") -BulletScene = ExtResource("1_i4nah") +BulletScene = ExtResource("1_5pffv") +DestructionParticlesScene = ExtResource("2_26vvh") BulletSpeed = 100.0 Direction = Vector2(1, 0) BulletDamage = 50.0 @@ -13,5 +27,5 @@ LifeTime = 10.0 DestroyOnCollision = true Owner = 1 DamageType = 0 -Controllable = true -TimeModifiers = null +Controllable = false +TimeModifiers = Array[Object]([SubResource("Resource_26vvh")]) diff --git a/Resources/Bullets/yin_yang_bullet.tres b/Resources/Bullets/yin_yang_bullet.tres new file mode 100644 index 00000000..560818b1 --- /dev/null +++ b/Resources/Bullets/yin_yang_bullet.tres @@ -0,0 +1,19 @@ +[gd_resource type="Resource" script_class="BulletResource" load_steps=4 format=3 uid="uid://brfrxovsuxgts"] + +[ext_resource type="PackedScene" uid="uid://eqppkegmt562" path="res://Scenes/Weapons/Bullets/Yin_Yan_Bullet.tscn" id="1_lfcuj"] +[ext_resource type="PackedScene" uid="uid://dfbmny3s4rili" path="res://Scenes/Particles/IceBulletParticle.tscn" id="2_mdq2b"] +[ext_resource type="Script" uid="uid://dslyrfcej3g2n" path="res://Scripts/Resources/BulletResource.cs" id="3_78iov"] + +[resource] +script = ExtResource("3_78iov") +BulletScene = ExtResource("1_lfcuj") +DestructionParticlesScene = ExtResource("2_mdq2b") +BulletSpeed = 100.0 +Direction = Vector2(1, 0) +BulletDamage = 4.0 +LifeTime = 10.0 +DestroyOnCollision = true +Owner = 1 +DamageType = 1 +Controllable = false +TimeModifiers = null diff --git a/Scenes/Weapons/Bullets/Yin_Yan_Bullet.tscn b/Scenes/Weapons/Bullets/Yin_Yan_Bullet.tscn new file mode 100644 index 00000000..ea187b4d --- /dev/null +++ b/Scenes/Weapons/Bullets/Yin_Yan_Bullet.tscn @@ -0,0 +1,29 @@ +[gd_scene load_steps=4 format=3 uid="uid://eqppkegmt562"] + +[ext_resource type="Script" uid="uid://dsa4b75hdig8p" path="res://Scripts/Bullet.cs" id="1_lg4re"] +[ext_resource type="Texture2D" uid="uid://cy86tmig4yx8k" path="res://Sprites/Bullets/mid_bullet_yinyang.png" id="2_smwha"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_jxptd"] +radius = 2.23607 + +[node name="Bullet" type="Area2D" groups=["bullets"]] +collision_layer = 8 +collision_mask = 85 +script = ExtResource("1_lg4re") +Speed = 200.0 +metadata/_edit_group_ = true + +[node name="Sprite2D" type="Sprite2D" parent="."] +texture = ExtResource("2_smwha") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource("CircleShape2D_jxptd") + +[node name="Node2D" type="Node2D" parent="."] +editor_description = "Player Bullet" + +[node name="VisibleOnScreenNotifier2D" type="VisibleOnScreenNotifier2D" parent="."] + +[connection signal="area_entered" from="." to="." method="_on_area_entered"] +[connection signal="body_entered" from="." to="." method="_on_body_entered"] +[connection signal="screen_exited" from="VisibleOnScreenNotifier2D" to="." method="_on_visible_on_screen_notifier_2d_screen_exited"] diff --git a/Scripts/Bullet.cs b/Scripts/Bullet.cs index fc7ead39..31a3d294 100644 --- a/Scripts/Bullet.cs +++ b/Scripts/Bullet.cs @@ -59,9 +59,14 @@ public partial class Bullet : Area2D { modifier.Applied = true; modifier.TimeModifier.Start(this); + modifier.Elapsed = 0; + } + else + { + modifier.Elapsed += delta; } - modifier.TimeModifier.Update(this, delta); + modifier.TimeModifier.Update(this, delta, modifier.Elapsed); // switch (modifier.ModifierType) // { diff --git a/Scripts/Resources/Modifiers/DelayedContinuousRotationModifier.cs b/Scripts/Resources/Modifiers/DelayedContinuousRotationModifier.cs index a06482ec..b8ee0412 100644 --- a/Scripts/Resources/Modifiers/DelayedContinuousRotationModifier.cs +++ b/Scripts/Resources/Modifiers/DelayedContinuousRotationModifier.cs @@ -5,7 +5,7 @@ namespace Cirno.Scripts.Resources.Modifiers; [GlobalClass] public partial class DelayedContinuousRotationModifier : TimeModifier { - public override void Update(Bullet bullet, double delta) + public override void Update(Bullet bullet, double delta, double elapsed) { bullet.RotateSpriteDegrees((float)(Value * delta)); } diff --git a/Scripts/Resources/Modifiers/DelayedSpeedIncreaseModifier.cs b/Scripts/Resources/Modifiers/DelayedSpeedIncreaseModifier.cs new file mode 100644 index 00000000..82b777dc --- /dev/null +++ b/Scripts/Resources/Modifiers/DelayedSpeedIncreaseModifier.cs @@ -0,0 +1,26 @@ +using Cirno.Scripts.Actors; +using Godot; + +namespace Cirno.Scripts.Resources.Modifiers; + +[GlobalClass] +public partial class DelayedSpeedIncreaseModifier : TimeModifier +{ + + [Export] public Tween.TransitionType TransitionType { get; set; } = Tween.TransitionType.Linear; + [Export] public Tween.EaseType EaseType { get; set; } = Tween.EaseType.InOut; + + [Export] public float Duration { get; set; } = 1.0f; + + public override void Update(Bullet bullet, double delta, double elapsed) + { + float easedValue = ApplyEasing(Value, elapsed); + bullet.Speed += easedValue; + } + + private float ApplyEasing(float value, double time) + { + float t = Mathf.Clamp((float)time, 0f, 1f); // Ensure the value stays within range + return (float)Tween.InterpolateValue(0f, value, t, Duration, TransitionType, EaseType); + } +} \ No newline at end of file diff --git a/Scripts/Resources/Modifiers/DelayedSpeedIncreaseModifier.cs.uid b/Scripts/Resources/Modifiers/DelayedSpeedIncreaseModifier.cs.uid new file mode 100644 index 00000000..245e1b6c --- /dev/null +++ b/Scripts/Resources/Modifiers/DelayedSpeedIncreaseModifier.cs.uid @@ -0,0 +1 @@ +uid://ci2vjo54w7i18 diff --git a/Scripts/Resources/TimeModifier.cs b/Scripts/Resources/TimeModifier.cs index b3fb4646..ff000b09 100644 --- a/Scripts/Resources/TimeModifier.cs +++ b/Scripts/Resources/TimeModifier.cs @@ -17,7 +17,8 @@ public partial class TimeModifier : Resource return new ModifierWrapper() { TimeModifier = this, - Applied = false + Applied = false, + Elapsed = 0.0, }; } @@ -31,7 +32,7 @@ public partial class TimeModifier : Resource } - public virtual void Update(Bullet bullet, double delta) + public virtual void Update(Bullet bullet, double delta, double elapsed) { } @@ -41,6 +42,7 @@ public class ModifierWrapper { public TimeModifier TimeModifier { get; set; } public bool Applied { get; set; } = false; + public double Elapsed { get; set; } = 0f; public virtual void Start() { diff --git a/Sprites/Bullets/mid_bullet_yinyang.aseprite b/Sprites/Bullets/mid_bullet_yinyang.aseprite new file mode 100644 index 00000000..61e81d68 --- /dev/null +++ b/Sprites/Bullets/mid_bullet_yinyang.aseprite @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:52b8d1dacf03243513b37883ff9bac455c5524f7136f9decbd6170b49a06572f +size 892 diff --git a/Sprites/Bullets/mid_bullet_yinyang.png b/Sprites/Bullets/mid_bullet_yinyang.png new file mode 100644 index 00000000..82a033f4 --- /dev/null +++ b/Sprites/Bullets/mid_bullet_yinyang.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:488073f7651a681cc88f19891ab640c045af423344c0d6cc709266526e3b00f4 +size 174 diff --git a/Sprites/Bullets/mid_bullet_yinyang.png.import b/Sprites/Bullets/mid_bullet_yinyang.png.import new file mode 100644 index 00000000..08e2e307 --- /dev/null +++ b/Sprites/Bullets/mid_bullet_yinyang.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cy86tmig4yx8k" +path="res://.godot/imported/mid_bullet_yinyang.png-308b67e1a7b40a14eae4073b5ef45a8d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Sprites/Bullets/mid_bullet_yinyang.png" +dest_files=["res://.godot/imported/mid_bullet_yinyang.png-308b67e1a7b40a14eae4073b5ef45a8d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1