Implement RPC Node

This commit is contained in:
Aslan 2026-02-02 12:17:04 -05:00
parent f7ee533d5a
commit 605e43273e
13 changed files with 524 additions and 206 deletions

View file

@ -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())

View file

@ -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;
}
}

View file

@ -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);
}
}