Implement RPC Node
This commit is contained in:
parent
f7ee533d5a
commit
605e43273e
13 changed files with 524 additions and 206 deletions
|
|
@ -16,17 +16,7 @@ public class Character(Sector sector, Vector3 localCoordinates) : GameObject(sec
|
|||
|
||||
if (IsMainPlayer())
|
||||
{
|
||||
GameManager.Singleton.ApplyOrigin();
|
||||
|
||||
if (!Global.IsGameHost)
|
||||
{
|
||||
GameManager.Singleton.RpcId(
|
||||
1,
|
||||
nameof(GameManager.Singleton.RpcSendNearbySectors),
|
||||
CurrentSector.Coordinates,
|
||||
NetworkManager.Singleton.LocalNetId
|
||||
);
|
||||
}
|
||||
GameManager.Instance.ApplyOrigin();
|
||||
}
|
||||
|
||||
reassigning = false;
|
||||
|
|
@ -34,7 +24,7 @@ public class Character(Sector sector, Vector3 localCoordinates) : GameObject(sec
|
|||
|
||||
public bool IsMainPlayer()
|
||||
{
|
||||
return player == GameManager.Singleton.MainPlayer;
|
||||
return player == GameManager.Instance.MainPlayer;
|
||||
}
|
||||
|
||||
public Player InstantiatePlayer()
|
||||
|
|
@ -48,6 +38,14 @@ public class Character(Sector sector, Vector3 localCoordinates) : GameObject(sec
|
|||
return instance;
|
||||
}
|
||||
|
||||
public override void Simulate(double delta)
|
||||
{
|
||||
if (!reassigning && !IsInCurrentSector())
|
||||
{
|
||||
UpdateSector();
|
||||
}
|
||||
}
|
||||
|
||||
public override void UpdateNodePosition()
|
||||
{
|
||||
if (IsMainPlayer())
|
||||
|
|
|
|||
|
|
@ -4,13 +4,41 @@ public partial class StarNode : StaticBody3D
|
|||
{
|
||||
public Star StarData { get; set; }
|
||||
|
||||
private Vector3 lastFrameCoordinates = Vector3.Zero;
|
||||
private Vector3 lastFrameRotation = Vector3.Zero;
|
||||
|
||||
private Vector3 velocityOffset = Vector3.Zero;
|
||||
private Vector3 angularVelocityOffset = Vector3.Zero;
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
GlobalPosition = StarData.LocalCoordinates + StarData.SectorOffset;
|
||||
GlobalRotation = StarData.Rotation;
|
||||
}
|
||||
|
||||
public override void _Process(double delta)
|
||||
{
|
||||
GlobalPosition = StarData.LocalCoordinates + StarData.SectorOffset;
|
||||
if (StarData.LocalCoordinates == lastFrameCoordinates)
|
||||
{
|
||||
velocityOffset += StarData.Velocity * delta;
|
||||
}
|
||||
else
|
||||
{
|
||||
lastFrameCoordinates = StarData.LocalCoordinates;
|
||||
velocityOffset = Vector3.Zero;
|
||||
}
|
||||
|
||||
if (StarData.Rotation == lastFrameRotation)
|
||||
{
|
||||
angularVelocityOffset += StarData.AngularVelocity * delta;
|
||||
}
|
||||
else
|
||||
{
|
||||
lastFrameRotation = StarData.Rotation;
|
||||
angularVelocityOffset = Vector3.Zero;
|
||||
}
|
||||
|
||||
GlobalPosition = StarData.LocalCoordinates + StarData.SectorOffset + velocityOffset;
|
||||
GlobalRotation = StarData.Rotation + angularVelocityOffset;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,8 +5,6 @@ public class Star(Sector sector, Vector3 localCoordinates) : GameObject(sector,
|
|||
public override void Simulate(double delta)
|
||||
{
|
||||
base.Simulate(delta);
|
||||
|
||||
//SetCoordinatesFromGlobal(new(GlobalCoordinates.X, GlobalCoordinates.Y, GlobalCoordinates.Z + 1 * (decimal)delta));
|
||||
}
|
||||
|
||||
public override Node3D Instantiate(Sector sector)
|
||||
|
|
@ -20,4 +18,22 @@ public class Star(Sector sector, Vector3 localCoordinates) : GameObject(sector,
|
|||
|
||||
return instance;
|
||||
}
|
||||
|
||||
public override Godot.Collections.Dictionary NetworkWrite(long id, bool full)
|
||||
{
|
||||
Godot.Collections.Dictionary gameObjectData = base.NetworkWrite(id, full);
|
||||
|
||||
if (gameObjectData != null)
|
||||
{
|
||||
QueueManager.NetworkSyncQueue.Enqueue((id, gameObjectData));
|
||||
}
|
||||
DirtyBits = DirtyFlags.None;
|
||||
|
||||
return gameObjectData;
|
||||
}
|
||||
|
||||
public override void NetworkRead(Godot.Collections.Dictionary gameObjectData)
|
||||
{
|
||||
base.NetworkRead(gameObjectData);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue