player sync

This commit is contained in:
brausjonas
2022-05-13 14:21:30 +02:00
parent 4e625ea185
commit 1fe20dbb5d
4 changed files with 79 additions and 2 deletions
@@ -130,6 +130,24 @@ public class Client
Send(new byte[]{6});
}
//1.12 == [1] = 1, [2] = 12
public void SendPositionUpdate(Vector3 position)
{
string x = position.x.ToString("F");
string y = position.y.ToString("F");
string z = position.z.ToString("F");
byte xV = byte.Parse(x.Split(',')[0]);
byte xN = byte.Parse(x.Split(',')[1]);
byte yV = byte.Parse(y.Split(',')[0]);
byte yN = byte.Parse(y.Split(',')[1]);
byte zV = byte.Parse(z.Split(',')[0]);
byte zN = byte.Parse(z.Split(',')[1]);
Send(new byte[] { 7, xV, xN, yV, yN, zV, zN });
}
private void Receive()
{
while(true)
@@ -150,6 +168,21 @@ public class Client
{
world.AddPlayer(data[1]);
}
if (data[0] == 7)
{
string xS = data[1] + "," + data[2];
string yS = data[3] + "," + data[4];
string zS = data[5] + "," + data[6];
float x = float.Parse(xS);
float y = float.Parse(yS);
float z = float.Parse(zS);
byte id = data[7];
world.UpdatePlayerPosition(new Vector3(x, y, z), id);
}
}
}
@@ -12,6 +12,7 @@ public class Player : MonoBehaviour
[SerializeField] private World world;
private Camera camera = null;
private Rigidbody rigidbody;
private Vector3 lastPosition = new Vector3();
//network
private Client client = null;
@@ -30,6 +31,15 @@ public class Player : MonoBehaviour
{
transform.Translate(Input.GetAxisRaw("Horizontal") * moveSpeed * Time.fixedDeltaTime, 0,
Input.GetAxisRaw("Vertical") * moveSpeed * Time.fixedDeltaTime);
Vector3 position = transform.position;
if (lastPosition.x != position.x || lastPosition.y != position.y || lastPosition.z != position.z)
{
client.SendPositionUpdate(transform.position);
}
lastPosition = new Vector3(transform.position.x, transform.position.y, transform.position.z);
}
private void Update()
@@ -52,6 +52,15 @@ public class World : MonoBehaviour
}
}
public void UpdatePlayerPosition(Vector3 position, byte id)
{
otherPlayers.TryGetValue(id, out GameObject g);
if(g != null)
{
g.transform.position = position;
}
}
public void AddPlayer(byte id)
{
playersToCreate.Enqueue(id);