diff --git a/Scenes/test.tscn b/Scenes/test.tscn index 467cf289..649cc35e 100644 --- a/Scenes/test.tscn +++ b/Scenes/test.tscn @@ -303,7 +303,7 @@ position = Vector2(-1239.5, 10.9699) position = Vector2(-1432, 12) [node name="Enemy7" parent="." instance=ExtResource("18_ixcwn")] -position = Vector2(-1470, -205) +position = Vector2(-1506, -167) [node name="Elevator" parent="." instance=ExtResource("16_n40rt")] position = Vector2(-581, -485) diff --git a/Scripts/AttackPatterns/SpiralPattern.cs b/Scripts/AttackPatterns/SpiralPattern.cs index 539b84b0..37465bca 100644 --- a/Scripts/AttackPatterns/SpiralPattern.cs +++ b/Scripts/AttackPatterns/SpiralPattern.cs @@ -98,7 +98,8 @@ public partial class SpiralPattern : AttackPattern BulletScene = BulletScene, RotationOffset = angleOffset, Modifier = _modifier, - TimeModifiers = _timeModifiers?.Where(mod => mod != null).ToList() ?? new List() + TimeModifiers = _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 2b5f8878..780275f4 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,9 +35,15 @@ public partial class Bullet : Area2D _gameManager = gameManager; - // Ugly hack to make instances unique - _modifiers = _bulletInfo.TimeModifiers.Select(x => x.Wrap()).ToList(); + _modifiers = _bulletInfo.TimeModifiers; + // 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(); + } private void ApplyTimeModifiers() @@ -48,17 +54,17 @@ public partial class Bullet : Area2D { continue; } - if (_elapsedTime >= modifier.TimeModifier.TimeInSeconds) + if (_elapsedTime >= modifier.TimeInSeconds) { GD.Print("Applied time modifier"); - switch (modifier.TimeModifier.ModifierType) + switch (modifier.ModifierType) { case TimeModifierType.SpeedChange: //_bulletInfo.Speed += modifier.Value; - Speed = modifier.TimeModifier.Value; + Speed = modifier.Value; break; case TimeModifierType.RotationChange: - RotateBullet(modifier.TimeModifier.Value); + RotateBullet(modifier.Value); //Rotation += Mathf.DegToRad(modifier.Value); break; case TimeModifierType.FacePlayer: @@ -66,7 +72,7 @@ public partial class Bullet : Area2D break; } - if (!modifier.TimeModifier.Continuous) + if (!modifier.Continuous) { modifier.Applied = true; } @@ -121,7 +127,10 @@ public partial class Bullet : Area2D { ApplyTimeModifiers(); } - + } + + public override void _PhysicsProcess(double delta) + { this.Position += ((float)(Speed * delta) * _direction); } diff --git a/Scripts/PlayerMovement.cs b/Scripts/PlayerMovement.cs index 99fe073e..e8833c08 100644 --- a/Scripts/PlayerMovement.cs +++ b/Scripts/PlayerMovement.cs @@ -373,9 +373,6 @@ public partial class PlayerMovement : CharacterBody2D, IDestructible MoveAndSlide(); _crosshair.Position = CalculateCrosshairPosition(); - - //FindInteractable(); - } private void _on_interaction_controller_area_entered(Area2D area) diff --git a/Scripts/Resources/BulletResource.cs b/Scripts/Resources/BulletResource.cs index 9de60bcd..a5908091 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.ToList() + TimeModifiers = TimeModifiers.Select(x => x.MakeClone()).ToList() // TimeModifiers = TimeModifiers?.Where(mod => mod is TimeModifier).Cast().Select(m => new ModifierWrapper() // { // TimeModifier = m, diff --git a/Scripts/Resources/TestGeneric/GenericTestNode.cs b/Scripts/Resources/TestGeneric/GenericTestNode.cs new file mode 100644 index 00000000..ef2cc5ea --- /dev/null +++ b/Scripts/Resources/TestGeneric/GenericTestNode.cs @@ -0,0 +1,12 @@ +using Godot; + +namespace Cirno.Scripts.Resources.TestGeneric; + +public partial class GenericTestNode : Node2D +{ + + [Export] public GenericTestResourceBase TestResource { get; set; } = null!; + + + +} \ No newline at end of file diff --git a/Scripts/Resources/TestGeneric/GenericTestResourceBase.cs b/Scripts/Resources/TestGeneric/GenericTestResourceBase.cs new file mode 100644 index 00000000..9fb1d3ee --- /dev/null +++ b/Scripts/Resources/TestGeneric/GenericTestResourceBase.cs @@ -0,0 +1,15 @@ +using Godot; + +namespace Cirno.Scripts.Resources.TestGeneric; + +[GlobalClass] +public partial class GenericTestResourceBase : Resource +{ + [Export] + public int Value { get; set; } + + public void Test() + { + var asfd = this.MemberwiseClone() as GenericTestResourceBase; + } +} \ No newline at end of file diff --git a/Scripts/Resources/TimeModifier.cs b/Scripts/Resources/TimeModifier.cs index 46f13273..b0cee99e 100644 --- a/Scripts/Resources/TimeModifier.cs +++ b/Scripts/Resources/TimeModifier.cs @@ -9,6 +9,7 @@ public partial class TimeModifier : Resource [Export] public TimeModifierType ModifierType; [Export] public float Value; [Export] public bool Continuous = false; + public bool Applied { get; set; } = false; public ModifierWrapper Wrap() { @@ -18,6 +19,11 @@ public partial class TimeModifier : Resource Applied = false }; } + + public TimeModifier MakeClone() + { + return this.MemberwiseClone() as TimeModifier; + } } public class ModifierWrapper