forked from RevenantX/NetGameExample
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathClientPlayerManager.cs
More file actions
88 lines (74 loc) · 2.59 KB
/
Copy pathClientPlayerManager.cs
File metadata and controls
88 lines (74 loc) · 2.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
using System.Collections.Generic;
using Code.Shared;
using UnityEngine;
namespace Code.Client
{
public class ClientPlayerManager : BasePlayerManager
{
private readonly Dictionary<byte, PlayerHandler> _players;
private readonly ClientLogic _clientLogic;
private ClientPlayer _clientPlayer;
public ClientPlayer OurPlayer => _clientPlayer;
public ClientPlayerManager(ClientLogic clientLogic)
{
_clientLogic = clientLogic;
_players = new Dictionary<byte, PlayerHandler>();
}
public override IEnumerator<BasePlayer> GetEnumerator()
{
foreach (var ph in _players)
yield return ph.Value.Player;
}
public void ApplyServerState(ref ServerState serverState)
{
for (int i = 0; i < serverState.PlayerStatesCount; i++)
{
var state = serverState.PlayerStates[i];
if(!_players.TryGetValue(state.Id, out var handler))
return;
if (handler.Player == _clientPlayer)
{
_clientPlayer.ReceiveServerState(serverState, state);
}
else
{
var rp = (RemotePlayer)handler.Player;
rp.OnPlayerState(serverState.Tick, state);
}
}
}
public override void OnShoot(BasePlayer from, Vector2 to, BasePlayer hit)
{
if(from == _clientPlayer)
_clientLogic.SpawnShoot(from.Position, to);
}
public BasePlayer GetById(byte id)
{
return _players.TryGetValue(id, out var ph) ? ph.Player : null;
}
public BasePlayer RemovePlayer(byte id)
{
if (_players.TryGetValue(id, out var handler))
{
_players.Remove(id);
handler.View.Destroy();
}
return handler.Player;
}
public override void LogicUpdate()
{
foreach (var kv in _players)
kv.Value.Update(LogicTimer.FixedDelta);
}
public override int Count => _players.Count;
public void AddClientPlayer(ClientPlayer player, ClientPlayerView view)
{
_clientPlayer = player;
_players.Add(player.Id, new PlayerHandler(player, view));
}
public void AddPlayer(RemotePlayer player, RemotePlayerView view)
{
_players.Add(player.Id, new PlayerHandler(player, view));
}
}
}