Player movement and camera

This commit is contained in:
Marco 2025-06-11 15:28:26 +02:00
commit a324f2e347
43 changed files with 1777 additions and 316 deletions

View file

@ -16,24 +16,29 @@ public partial class CreateEmitterPattern : AttackPattern
[Export] public double LifeTime { get; set; } = 10d;
public override IPatternMachine MakeMachine(Node2D parent)
public override IPatternMachine MakeMachine(Node parent)
{
return new EmitterPatternMachine(this, parent);
}
public class EmitterPatternMachine(CreateEmitterPattern pattern, Node2D parent) : IPatternMachine
public class EmitterPatternMachine(CreateEmitterPattern pattern, Node parent) : IPatternMachine
{
private bool _active = false;
public Node2D Parent => parent;
public Node Parent => parent;
public AutonomousBulletEmitter Emitter { get; private set; }
public void Start()
{
if (parent is not Node2D parent2d)
{
return;
}
Emitter = pattern.CreateAsChild
? parent.CreateChild<AutonomousBulletEmitter>(pattern.Prefab,
parent.GlobalPosition + pattern.SpawnOffset)
: parent.CreateSibling<AutonomousBulletEmitter>(pattern.Prefab,
parent.GlobalPosition + pattern.SpawnOffset);
? parent2d.CreateChild<AutonomousBulletEmitter>(pattern.Prefab,
parent2d.GlobalPosition + pattern.SpawnOffset)
: parent2d.CreateSibling<AutonomousBulletEmitter>(pattern.Prefab,
parent2d.GlobalPosition + pattern.SpawnOffset);
Emitter.Script = pattern.Script;
Emitter.EmitOnStart = true;
Emitter.LifeTime = pattern.LifeTime;

View file

@ -14,14 +14,14 @@ public partial class MovementPattern : AttackPattern
[Export] public Tween.EaseType easeType = Tween.EaseType.InOut;
[Export] public AttackPattern shootingPattern;
public override IPatternMachine MakeMachine(Node2D parent)
public override IPatternMachine MakeMachine(Node parent)
{
return new MovementPatternMachine(this, parent);
}
public class MovementPatternMachine(MovementPattern pattern, Node2D parent) : IPatternMachine
public class MovementPatternMachine(MovementPattern pattern, Node parent) : IPatternMachine
{
public Node2D Parent => parent;
public Node Parent => parent;
public MovementPattern Pattern { get; } = pattern;
private IPatternMachine _machine;
@ -39,10 +39,11 @@ public partial class MovementPattern : AttackPattern
Boss = boss;
tween = parent.CreateTween();
isComplete = false;
Vector2 targetPosition = (Boss?.HomePosition ?? boss.ParentObject.GlobalPosition) + Pattern.relativeTargetPosition;
Vector2 targetPosition = (Boss?.HomePosition ?? parent.GlobalPosition) + Pattern.relativeTargetPosition;
tween.TweenProperty(Parent, "position", targetPosition, Pattern.moveDuration)
tween.TweenProperty(boss.ParentObject, "position", targetPosition, Pattern.moveDuration)
.SetTrans(Pattern.transitionType)
.SetEase(Pattern.easeType)
.Finished += () => isComplete = true;

View file

@ -16,14 +16,14 @@ public partial class NodeMovementPattern : AttackPattern
// [Export] private Tween.TransitionType transitionType = Tween.TransitionType.Linear;
[Export] public GTweens.Easings.Easing EaseType { get; private set; } = Easing.Linear;
public override IPatternMachine MakeMachine(Node2D parent)
public override IPatternMachine MakeMachine(Node parent)
{
return new NodeMovementPatternMachine(this, parent);
}
public class NodeMovementPatternMachine(NodeMovementPattern pattern, Node2D parent) : IPatternMachine
public class NodeMovementPatternMachine(NodeMovementPattern pattern, Node parent) : IPatternMachine
{
public Node2D Parent => parent;
public Node Parent => parent;
private GTween _tween;
private bool isComplete = false;
@ -37,11 +37,12 @@ public partial class NodeMovementPattern : AttackPattern
return;
}
_tween?.Complete();
isComplete = false;
Vector2 targetPosition = (scriptHost?.HomePosition ?? Parent.GlobalPosition) + pattern.relativeTargetPosition;
Vector2 targetPosition = (scriptHost?.HomePosition ?? scriptHost.ParentObject.GlobalPosition) + pattern.relativeTargetPosition;
_tween = GTweenSequenceBuilder.New()
.Append(scriptHost.ParentObject.TweenGlobalPosition(targetPosition, pattern.moveDuration))

View file

@ -112,14 +112,15 @@ public partial class SpiralPattern : AttackPattern
// };
}
public override IPatternMachine MakeMachine(Node2D parent)
public override IPatternMachine MakeMachine(Node parent)
{
return new SpiralPatternMachine(this, parent);
}
public class SpiralPatternMachine(SpiralPattern pattern, Node2D parent) : IPatternMachine
public class SpiralPatternMachine(SpiralPattern pattern, Node parent) : IPatternMachine
{
public Node2D Parent => parent;
public Node Parent => parent;
public IScriptHost ScriptHost { get; private set; }
private double timer;
private double burstTimer;
//private double _burstRateTimer;
@ -131,6 +132,8 @@ public partial class SpiralPattern : AttackPattern
public void Start()
{
ScriptHost = Parent as IScriptHost;
timer = 0;
_burstBullets = pattern.ShotsPerBurst;
burstTimer = pattern.burstInterval; // start immediately
@ -231,21 +234,21 @@ public partial class SpiralPattern : AttackPattern
{
if (pattern._predictPlayer && GameManager.Instance.PlayerVelocity.HasValue)
{
var predictedDirection = MathFunctions.PredictInterceptPosition(Parent.GlobalPosition,
var predictedDirection = MathFunctions.PredictInterceptPosition(ScriptHost.ParentObject.GlobalPosition,
GameManager.Instance.PlayerPosition.Value, GameManager.Instance.PlayerVelocity.Value,
pattern.BulletResource.BulletSpeed);
if (predictedDirection.HasValue)
{
direction = (predictedDirection.Value - Parent.GlobalPosition).Normalized();
direction = (predictedDirection.Value - ScriptHost.ParentObject.GlobalPosition).Normalized();
}
}
else
{
direction = (GameManager.Instance.PlayerPosition.Value - Parent.GlobalPosition).Normalized();
direction = (GameManager.Instance.PlayerPosition.Value - ScriptHost.ParentObject.GlobalPosition).Normalized();
}
}
var bullet = pattern.MakeBullet(Parent.GlobalPosition + pattern.EmitterOffset, pattern.bulletCount,
var bullet = pattern.MakeBullet(ScriptHost.ParentObject.GlobalPosition + pattern.EmitterOffset, pattern.bulletCount,
pattern.spread, angleOffset);
bullet.Direction = direction;