diff --git a/Cirno.sln.DotSettings.user b/Cirno.sln.DotSettings.user index 8bea53eb..fb58ed39 100644 --- a/Cirno.sln.DotSettings.user +++ b/Cirno.sln.DotSettings.user @@ -5,6 +5,7 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded diff --git a/Resources/BossPhases/Rumia_Lasers.tres b/Resources/BossPhases/Rumia_Lasers.tres index 3389d9a1..26e9282e 100644 --- a/Resources/BossPhases/Rumia_Lasers.tres +++ b/Resources/BossPhases/Rumia_Lasers.tres @@ -1,21 +1,23 @@ -[gd_resource type="Resource" script_class="BossPhase" load_steps=13 format=3 uid="uid://hy1alw04fbds"] +[gd_resource type="Resource" script_class="BossPhase" load_steps=16 format=3 uid="uid://hy1alw04fbds"] [ext_resource type="Script" path="res://Scripts/Resources/BossPhase.cs" id="1_kkx86"] [ext_resource type="PackedScene" uid="uid://djro6xmsq7kqk" path="res://Scenes/Weapons/Bullets/enemyBullet_mid_blue_laser.tscn" id="1_nfjet"] +[ext_resource type="Script" path="res://Scripts/Resources/Modifiers/DelayedSpeedModifier.cs" id="2_1bi0q"] [ext_resource type="Script" path="res://Scripts/AttackPatterns/SpiralPattern.cs" id="2_peiit"] [ext_resource type="Script" path="res://Scripts/AttackPatterns/LaserPattern.cs" id="2_tctyt"] -[ext_resource type="Script" path="res://Scripts/Resources/TimeModifier.cs" id="2_v7sed"] +[ext_resource type="Script" path="res://Scripts/Resources/Modifiers/DelayedPlayerFacingModifier.cs" id="3_7fbut"] [ext_resource type="PackedScene" uid="uid://dbcj1u77spk6p" path="res://Scenes/Weapons/Bullets/enemyBullet_rice_yellow_small.tscn" id="4_7kssw"] +[ext_resource type="Script" path="res://Scripts/Resources/Modifiers/DelayedRotationModifier.cs" id="6_vwx23"] -[sub_resource type="Resource" id="Resource_e62ka"] -script = ExtResource("2_v7sed") +[sub_resource type="Resource" id="Resource_3a5dw"] +script = ExtResource("2_1bi0q") TimeInSeconds = 0.8 ModifierType = 0 Value = 0.0 Continuous = false -[sub_resource type="Resource" id="Resource_vkf1u"] -script = ExtResource("2_v7sed") +[sub_resource type="Resource" id="Resource_rtncg"] +script = ExtResource("3_7fbut") TimeInSeconds = 0.9 ModifierType = 2 Value = 0.0 @@ -39,12 +41,12 @@ spread = 360.0 owner = 2 _damageType = 0 _bulletDamage = 1.0 -_timeModifiers = Array[Object]([SubResource("Resource_e62ka"), SubResource("Resource_vkf1u")]) +_timeModifiers = Array[Object]([SubResource("Resource_3a5dw"), SubResource("Resource_rtncg")]) _targetPlayer = false WaitForCompletion = true -[sub_resource type="Resource" id="Resource_bs25y"] -script = ExtResource("2_v7sed") +[sub_resource type="Resource" id="Resource_54787"] +script = ExtResource("6_vwx23") TimeInSeconds = 2.0 ModifierType = 1 Value = -90.0 @@ -63,10 +65,17 @@ spread = 360.0 owner = 2 _damageType = 0 _bulletDamage = 1.0 -_timeModifiers = Array[Object]([SubResource("Resource_bs25y")]) +_timeModifiers = Array[Object]([SubResource("Resource_54787")]) _targetPlayer = false WaitForCompletion = true +[sub_resource type="Resource" id="Resource_1yaaf"] +script = ExtResource("6_vwx23") +TimeInSeconds = 2.0 +ModifierType = 1 +Value = 90.0 +Continuous = false + [sub_resource type="Resource" id="Resource_reykq"] script = ExtResource("2_peiit") BulletScene = ExtResource("4_7kssw") @@ -80,7 +89,7 @@ spread = 360.0 owner = 2 _damageType = 0 _bulletDamage = 1.0 -_timeModifiers = Array[Object]([SubResource("Resource_bs25y")]) +_timeModifiers = Array[Object]([SubResource("Resource_1yaaf")]) _targetPlayer = false WaitForCompletion = false diff --git a/Resources/BossPhases/Rumia_NS2.tres b/Resources/BossPhases/Rumia_NS2.tres index 46ae3545..7759a331 100644 --- a/Resources/BossPhases/Rumia_NS2.tres +++ b/Resources/BossPhases/Rumia_NS2.tres @@ -1,17 +1,19 @@ -[gd_resource type="Resource" script_class="BossPhase" load_steps=30 format=3 uid="uid://ddb5dqocmk6x7"] +[gd_resource type="Resource" script_class="BossPhase" load_steps=32 format=3 uid="uid://ddb5dqocmk6x7"] [ext_resource type="PackedScene" uid="uid://dh81snen2f6bf" path="res://Scenes/Weapons/Bullets/enemyBullet_rice_blue_small.tscn" id="1_as8n2"] [ext_resource type="Script" path="res://Scripts/Resources/BossPhase.cs" id="1_fdlxv"] -[ext_resource type="Script" path="res://Scripts/Resources/TimeModifier.cs" id="2_kghxb"] +[ext_resource type="Script" path="res://Scripts/Resources/Modifiers/DelayedRotationModifier.cs" id="2_onj13"] [ext_resource type="Script" path="res://Scripts/AttackPatterns/SpiralPattern.cs" id="2_wkmhk"] [ext_resource type="PackedScene" uid="uid://ctrk5qrb7n3fm" path="res://Scenes/Weapons/Bullets/enemyBullet_rice_green_small.tscn" id="4_tek7n"] [ext_resource type="PackedScene" uid="uid://chowj81jsdvcx" path="res://Scenes/Weapons/Bullets/enemyBullet_rice_red_small.tscn" id="5_n4xqo"] [ext_resource type="Script" path="res://Scripts/Resources/SimpleMovementPattern.cs" id="6_bw7cj"] [ext_resource type="PackedScene" uid="uid://dohakkayqj4w2" path="res://Scenes/Weapons/Bullets/enemyBullet_green.tscn" id="7_gsnyb"] [ext_resource type="Script" path="res://Scripts/Resources/SpeedModifier.cs" id="8_6ya1v"] +[ext_resource type="Script" path="res://Scripts/Resources/Modifiers/DelayedPlayerFacingModifier.cs" id="9_mfo5a"] +[ext_resource type="Script" path="res://Scripts/Resources/Modifiers/DelayedSpeedModifier.cs" id="10_nuha6"] -[sub_resource type="Resource" id="Resource_17kqi"] -script = ExtResource("2_kghxb") +[sub_resource type="Resource" id="Resource_cj86d"] +script = ExtResource("2_onj13") TimeInSeconds = 1.0 ModifierType = 1 Value = 90.0 @@ -30,12 +32,12 @@ spread = 360.0 owner = 2 _damageType = 0 _bulletDamage = 1.0 -_timeModifiers = Array[Resource]([SubResource("Resource_17kqi")]) +_timeModifiers = Array[Resource]([SubResource("Resource_cj86d")]) _targetPlayer = false WaitForCompletion = false -[sub_resource type="Resource" id="Resource_sk6w4"] -script = ExtResource("2_kghxb") +[sub_resource type="Resource" id="Resource_pbgtt"] +script = ExtResource("2_onj13") TimeInSeconds = 1.0 ModifierType = 1 Value = -90.0 @@ -54,7 +56,7 @@ spread = 360.0 owner = 2 _damageType = 0 _bulletDamage = 1.0 -_timeModifiers = Array[Resource]([SubResource("Resource_sk6w4")]) +_timeModifiers = Array[Resource]([SubResource("Resource_pbgtt")]) _targetPlayer = false WaitForCompletion = true @@ -71,7 +73,7 @@ spread = 360.0 owner = 2 _damageType = 0 _bulletDamage = 1.0 -_timeModifiers = Array[Resource]([SubResource("Resource_17kqi")]) +_timeModifiers = Array[Resource]([SubResource("Resource_cj86d")]) _targetPlayer = false WaitForCompletion = false @@ -88,7 +90,7 @@ spread = 360.0 owner = 2 _damageType = 0 _bulletDamage = 1.0 -_timeModifiers = Array[Resource]([SubResource("Resource_sk6w4")]) +_timeModifiers = Array[Resource]([SubResource("Resource_pbgtt")]) _targetPlayer = false WaitForCompletion = true @@ -105,7 +107,7 @@ spread = 360.0 owner = 2 _damageType = 0 _bulletDamage = 1.0 -_timeModifiers = Array[Resource]([SubResource("Resource_17kqi")]) +_timeModifiers = Array[Resource]([SubResource("Resource_cj86d")]) _targetPlayer = false WaitForCompletion = false @@ -122,7 +124,7 @@ spread = 360.0 owner = 2 _damageType = 0 _bulletDamage = 1.0 -_timeModifiers = Array[Resource]([SubResource("Resource_sk6w4")]) +_timeModifiers = Array[Resource]([SubResource("Resource_pbgtt")]) _targetPlayer = false WaitForCompletion = true @@ -142,15 +144,15 @@ Invert = true MinimumSpeed = 10.0 ScalingFactor = 10.0 -[sub_resource type="Resource" id="Resource_hutbf"] -script = ExtResource("2_kghxb") +[sub_resource type="Resource" id="Resource_ln27r"] +script = ExtResource("9_mfo5a") TimeInSeconds = 0.5 ModifierType = 2 Value = 0.0 Continuous = false -[sub_resource type="Resource" id="Resource_krtsy"] -script = ExtResource("2_kghxb") +[sub_resource type="Resource" id="Resource_nal31"] +script = ExtResource("10_nuha6") TimeInSeconds = 0.8 ModifierType = 0 Value = 50.0 @@ -170,8 +172,8 @@ owner = 2 _damageType = 0 _bulletDamage = 1.0 _modifier = SubResource("Resource_80ngy") -_timeModifiers = Array[Resource]([SubResource("Resource_hutbf"), SubResource("Resource_krtsy")]) -_targetPlayer = false +_timeModifiers = Array[Resource]([SubResource("Resource_ln27r"), SubResource("Resource_nal31")]) +_targetPlayer = true WaitForCompletion = true [sub_resource type="Resource" id="Resource_l05f2"] @@ -196,7 +198,7 @@ owner = 2 _damageType = 0 _bulletDamage = 1.0 _modifier = SubResource("Resource_80ngy") -_timeModifiers = Array[Resource]([SubResource("Resource_hutbf"), SubResource("Resource_krtsy")]) +_timeModifiers = Array[Resource]([SubResource("Resource_ln27r"), SubResource("Resource_nal31")]) _targetPlayer = false WaitForCompletion = true @@ -222,7 +224,7 @@ owner = 2 _damageType = 0 _bulletDamage = 1.0 _modifier = SubResource("Resource_80ngy") -_timeModifiers = Array[Resource]([SubResource("Resource_hutbf"), SubResource("Resource_krtsy")]) +_timeModifiers = Array[Resource]([SubResource("Resource_ln27r"), SubResource("Resource_nal31")]) _targetPlayer = false WaitForCompletion = true @@ -248,7 +250,7 @@ owner = 2 _damageType = 0 _bulletDamage = 1.0 _modifier = SubResource("Resource_80ngy") -_timeModifiers = Array[Resource]([SubResource("Resource_hutbf"), SubResource("Resource_krtsy")]) +_timeModifiers = Array[Resource]([SubResource("Resource_ln27r"), SubResource("Resource_nal31")]) _targetPlayer = false WaitForCompletion = true diff --git a/Scenes/Actors/Rumia.tscn b/Scenes/Actors/Rumia.tscn index ff5517c0..9bf46d87 100644 --- a/Scenes/Actors/Rumia.tscn +++ b/Scenes/Actors/Rumia.tscn @@ -30,7 +30,7 @@ collision_layer = 16 collision_mask = 9 script = ExtResource("1_na4uq") BossName = "Rumia" -Phases = Array[Resource]([ExtResource("2_1rhf6"), ExtResource("3_j7lbl"), ExtResource("2_eyxw4"), ExtResource("2_p8j4e")]) +Phases = Array[Resource]([ExtResource("2_eyxw4"), ExtResource("2_1rhf6"), ExtResource("3_j7lbl"), ExtResource("2_p8j4e")]) BossHudPrefab = ExtResource("4_ehp8q") _bossPortraitTexture = ExtResource("4_at5iq") Health = 200.0 diff --git a/Scripts/AttackPatterns/SpiralPattern.cs b/Scripts/AttackPatterns/SpiralPattern.cs index 37465bca..d396a821 100644 --- a/Scripts/AttackPatterns/SpiralPattern.cs +++ b/Scripts/AttackPatterns/SpiralPattern.cs @@ -98,7 +98,7 @@ public partial class SpiralPattern : AttackPattern BulletScene = BulletScene, RotationOffset = angleOffset, Modifier = _modifier, - TimeModifiers = _timeModifiers.Select(x => x.MakeClone()).ToList() + TimeModifiers = _timeModifiers.ToList()// _timeModifiers.Select(x => x.MakeClone()).ToList() // TimeModifiers = _timeModifiers?.Where(mod => mod != null).ToList() ?? new List() }; } diff --git a/Scripts/Bullet.cs b/Scripts/Bullet.cs index 780275f4..1366944a 100644 --- a/Scripts/Bullet.cs +++ b/Scripts/Bullet.cs @@ -25,7 +25,7 @@ public partial class Bullet : Area2D public BulletInfo BulletInfo => _bulletInfo; - private List _modifiers = new(); + private List _modifiers = new(); private GameManager _gameManager; @@ -35,52 +35,57 @@ public partial class Bullet : Area2D _gameManager = gameManager; - _modifiers = _bulletInfo.TimeModifiers; - + // Need to clone them here + // _modifiers = _bulletInfo.TimeModifiers.Select(x => x.MakeClone()).ToList(); + + // var clonedModifiers = _bulletInfo.TimeModifiers.Select(x => x.MakeClone()); // _modifiers = clonedModifiers.ToList(); - - + + // Ugly hack to make instances unique - //_modifiers = _bulletInfo.TimeModifiers.Select(x => x.Wrap()).ToList(); + _modifiers = _bulletInfo.TimeModifiers.Select(x => x.Wrap()).ToList(); } - private void ApplyTimeModifiers() + private void ApplyTimeModifiers(double delta) { foreach (var modifier in _modifiers) { - if (modifier.Applied) + if (_elapsedTime >= modifier.TimeModifier.TimeInSeconds) { - continue; - } - if (_elapsedTime >= modifier.TimeInSeconds) - { - GD.Print("Applied time modifier"); - switch (modifier.ModifierType) - { - case TimeModifierType.SpeedChange: - //_bulletInfo.Speed += modifier.Value; - Speed = modifier.Value; - break; - case TimeModifierType.RotationChange: - RotateBullet(modifier.Value); - //Rotation += Mathf.DegToRad(modifier.Value); - break; - case TimeModifierType.FacePlayer: - FacePlayer(); - break; - } - - if (!modifier.Continuous) + if (!modifier.Applied) { modifier.Applied = true; + modifier.TimeModifier.Start(this); } + + modifier.TimeModifier.Update(this, delta); + + // switch (modifier.ModifierType) + // { + // case TimeModifierType.SpeedChange: + // //_bulletInfo.Speed += modifier.Value; + // Speed = modifier.Value; + // break; + // case TimeModifierType.RotationChange: + // RotateBullet(modifier.Value); + // //Rotation += Mathf.DegToRad(modifier.Value); + // break; + // case TimeModifierType.FacePlayer: + // FacePlayer(); + // break; + // } + + // if (!modifier.Continuous) + // { + // modifier.Applied = true; + // } } } } - protected virtual void RotateBullet(float degrees) + public virtual void RotateBullet(float degrees) { float radians = Mathf.DegToRad(degrees); _direction = _direction.Rotated(radians).Normalized(); // Rotate direction @@ -88,7 +93,7 @@ public partial class Bullet : Area2D //Rotation = radians; } - private void FacePlayer() + public void FacePlayer() { if (_gameManager.Player != null) { @@ -123,14 +128,16 @@ public partial class Bullet : Area2D public override void _Process(double delta) { _elapsedTime += delta; - if (_bulletInfo != null) - { - ApplyTimeModifiers(); - } + } public override void _PhysicsProcess(double delta) { + if (_bulletInfo != null) + { + ApplyTimeModifiers(delta); + } + this.Position += ((float)(Speed * delta) * _direction); } diff --git a/Scripts/Resources/BulletResource.cs b/Scripts/Resources/BulletResource.cs index a5908091..7be19747 100644 --- a/Scripts/Resources/BulletResource.cs +++ b/Scripts/Resources/BulletResource.cs @@ -39,7 +39,7 @@ public partial class BulletResource : Resource Modifier = Modifier, LifeTime = LifeTime, DestructionParticlesScene = DestructionParticlesScene, - TimeModifiers = TimeModifiers.Select(x => x.MakeClone()).ToList() + TimeModifiers = TimeModifiers.Select(x => x).ToList() // TimeModifiers = TimeModifiers?.Where(mod => mod is TimeModifier).Cast().Select(m => new ModifierWrapper() // { // TimeModifier = m, diff --git a/Scripts/Resources/Modifiers/DelayedPlayerFacingModifier.cs b/Scripts/Resources/Modifiers/DelayedPlayerFacingModifier.cs new file mode 100644 index 00000000..e2e85e7a --- /dev/null +++ b/Scripts/Resources/Modifiers/DelayedPlayerFacingModifier.cs @@ -0,0 +1,12 @@ +using Godot; + +namespace Cirno.Scripts.Resources.Modifiers; + +[GlobalClass] +public partial class DelayedPlayerFacingModifier : TimeModifier +{ + public override void Start(Bullet bullet) + { + bullet.FacePlayer(); + } +} \ No newline at end of file diff --git a/Scripts/Resources/Modifiers/DelayedRotationModifier.cs b/Scripts/Resources/Modifiers/DelayedRotationModifier.cs new file mode 100644 index 00000000..6cc53973 --- /dev/null +++ b/Scripts/Resources/Modifiers/DelayedRotationModifier.cs @@ -0,0 +1,12 @@ +using Godot; + +namespace Cirno.Scripts.Resources.Modifiers; + +[GlobalClass] +public partial class DelayedRotationModifier : TimeModifier +{ + public override void Start(Bullet bullet) + { + bullet.RotateBullet(this.Value); + } +} \ No newline at end of file diff --git a/Scripts/Resources/Modifiers/DelayedSpeedModifier.cs b/Scripts/Resources/Modifiers/DelayedSpeedModifier.cs index 9e3105fc..58203474 100644 --- a/Scripts/Resources/Modifiers/DelayedSpeedModifier.cs +++ b/Scripts/Resources/Modifiers/DelayedSpeedModifier.cs @@ -1,9 +1,13 @@ -using Godot; +using Cirno.Scripts.Actors; +using Godot; namespace Cirno.Scripts.Resources.Modifiers; [GlobalClass] public partial class DelayedSpeedModifier : TimeModifier { - + public override void Start(Bullet bullet) + { + bullet.Speed = this.Value; + } } \ No newline at end of file diff --git a/Scripts/Resources/TimeModifier.cs b/Scripts/Resources/TimeModifier.cs index b0cee99e..b3fb4646 100644 --- a/Scripts/Resources/TimeModifier.cs +++ b/Scripts/Resources/TimeModifier.cs @@ -1,4 +1,5 @@ -using Godot; +using Cirno.Scripts.Actors; +using Godot; namespace Cirno.Scripts.Resources; @@ -24,6 +25,16 @@ public partial class TimeModifier : Resource { return this.MemberwiseClone() as TimeModifier; } + + public virtual void Start(Bullet bullet) + { + + } + + public virtual void Update(Bullet bullet, double delta) + { + + } } public class ModifierWrapper diff --git a/Scripts/Weapons/LaserBullet.cs b/Scripts/Weapons/LaserBullet.cs index fad05778..3469878a 100644 --- a/Scripts/Weapons/LaserBullet.cs +++ b/Scripts/Weapons/LaserBullet.cs @@ -63,7 +63,7 @@ public partial class LaserBullet : Bullet _lethalTimer.Start(); } - protected override void RotateBullet(float degrees) + public override void RotateBullet(float degrees) { base.RotateBullet(degrees);