mirror of
https://gitlab.com/MaddoScientisto/cirnogodot.git
synced 2026-06-01 11:15:33 +00:00
Player movement and camera
This commit is contained in:
parent
ed656f00bb
commit
a324f2e347
43 changed files with 1777 additions and 316 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue