Skip to content
This repository was archived by the owner on Sep 15, 2024. It is now read-only.

Commit 5b0da2e

Browse files
Enemies lerp to new positions
1 parent 990f674 commit 5b0da2e

3 files changed

Lines changed: 29 additions & 6 deletions

File tree

Scripts/Netcode/Common/SPacketEnemyPositions.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,14 @@ public override async Task Handle()
4444
{
4545
var sceneGameScript = SceneManager.GetActiveSceneScript<Game.SceneGame>();
4646

47-
foreach (var pair in Enemies)
47+
sceneGameScript.EnemyTransformQueue.Add(Enemies);
48+
49+
/*foreach (var pair in Enemies)
4850
{
4951
var enemy = sceneGameScript.Enemies[pair.Key];
50-
if (enemy.Position.DistanceTo(pair.Value.Position) > 100)
52+
if (enemy.Position.DistanceTo(pair.Value.Position) > 100) // TODO: Lerp
5153
sceneGameScript.Enemies[pair.Key].Position = pair.Value.Position;
52-
}
54+
}*/
5355

5456
await Task.FromResult(1);
5557
}

Scripts/Scenes/Game/Enemy.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,11 @@ public override void _Ready()
1414
{
1515
Sprite = GetNode<Sprite>(NodePathSprite);
1616

17-
var calcTarget = new GTimer(200);
18-
calcTarget.Connect(this, nameof(CalcVelocity));
17+
if (NetworkManager.IsHost)
18+
{
19+
var calcTarget = new GTimer(200);
20+
calcTarget.Connect(this, nameof(CalcVelocity));
21+
}
1922
}
2023

2124
public override void _PhysicsProcess(float delta)
@@ -30,7 +33,8 @@ public override void _PhysicsProcess(float delta)
3033

3134
public override void _IntegrateForces(Physics2DDirectBodyState state)
3235
{
33-
state.LinearVelocity = Velocity;
36+
if (NetworkManager.IsHost)
37+
state.LinearVelocity = Velocity;
3438
}
3539

3640
public Dictionary<byte, Game.OtherPlayer> Players { get; set; }

Scripts/Scenes/Game/SceneGame.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ public class SceneGame : AScene
1212
public Dictionary<byte, OtherPlayer> Players;
1313
public Dictionary<ushort, Enemy> Enemies;
1414
public ClientPlayer Player { get; set; }
15+
16+
public PrevCurQueue<Dictionary<ushort, DataEnemy>> EnemyTransformQueue { get; set; }
1517
private PrevCurQueue<Dictionary<byte, DataEntityTransform>> PlayerTransformQueue { get; set; }
1618

1719
private List<Sprite> Bullets = new List<Sprite>();
@@ -28,6 +30,7 @@ public override void _Ready()
2830

2931
AddChild(Player);
3032
PlayerTransformQueue = new PrevCurQueue<Dictionary<byte, DataEntityTransform>>(ServerIntervals.PlayerTransforms);
33+
EnemyTransformQueue = new PrevCurQueue<Dictionary<ushort, DataEnemy>>(ServerIntervals.PlayerTransforms);
3134

3235
var bullet = Prefabs.Bullet.Instance<Sprite>();
3336
Bullets.Add(bullet);
@@ -53,10 +56,14 @@ public override void _PhysicsProcess(float delta)
5356
bullet.Position += new Vector2(0, -1f);
5457

5558
PlayerTransformQueue.UpdateProgress(delta);
59+
EnemyTransformQueue.UpdateProgress(delta);
5660

5761
if (PlayerTransformQueue.NotReady)
5862
return;
5963

64+
if (EnemyTransformQueue.NotReady)
65+
return;
66+
6067
foreach (var pair in PlayerTransformQueue.Current)
6168
{
6269
if (!Players.ContainsKey(pair.Key)) // TODO: Find more optimal approach for checking this
@@ -73,6 +80,16 @@ public override void _PhysicsProcess(float delta)
7380
player.Position = Utils.Lerp(prev.Position, cur.Position, PlayerTransformQueue.Progress);
7481
player.PlayerSprite.Rotation = Utils.LerpAngle(player.PlayerSprite.Rotation, cur.Rotation, 0.05f);
7582
}
83+
84+
foreach (var pair in EnemyTransformQueue.Current)
85+
{
86+
var enemy = Enemies[pair.Key];
87+
88+
var prev = EnemyTransformQueue.Previous[pair.Key];
89+
var cur = pair.Value;
90+
91+
enemy.Position = Utils.Lerp(prev.Position, cur.Position, EnemyTransformQueue.Progress);
92+
}
7693
}
7794

7895
public override void _Input(InputEvent @event)

0 commit comments

Comments
 (0)