working on multiplayer - still delay with more actors :/

This commit is contained in:
2025-07-21 09:05:24 +02:00
parent 3c13cc3034
commit 0d8cc0e291
10 changed files with 115 additions and 57 deletions

View File

@@ -21,8 +21,10 @@ namespace RebootReality.jelycho {
base.OnActorCommandServer(actorCommand); base.OnActorCommandServer(actorCommand);
if (actorCommand.CommandID == (ushort) ActorSpawnerCommands.SpawnActor) { if (actorCommand.CommandID == (ushort) ActorSpawnerCommands.SpawnActor) {
(Vector3 spawnPoint, Quaternion spawnRotation) = GetSpawnPoint(); for (int i = 0; i < 200; ++i) {
RR.SpawnActor(m_ActorPrefabReference, spawnPoint, spawnRotation); (Vector3 spawnPoint, Quaternion spawnRotation) = GetSpawnPoint();
RR.SpawnActor(m_ActorPrefabReference, spawnPoint, spawnRotation);
}
} }
} }

View File

@@ -1,4 +1,5 @@
using RebootKit.Engine.Main; using RebootKit.Engine.Main;
using RebootKit.Engine.Network;
using RebootKit.Engine.Simulation; using RebootKit.Engine.Simulation;
using Unity.Netcode; using Unity.Netcode;
using UnityEngine; using UnityEngine;
@@ -6,10 +7,14 @@ using UnityEngine.AddressableAssets;
namespace RebootReality.jelycho.Beacons { namespace RebootReality.jelycho.Beacons {
public class BaseManagerActorData : IActorData { public class BaseManagerActorData : IActorData {
public void Serialize(FastBufferWriter writer) { public void Serialize(NetworkBufferWriter writer) {
} }
public void Deserialize(FastBufferReader reader) { public void Deserialize(NetworkBufferReader reader) {
}
public int GetMaxBytes() {
return 0;
} }
} }
@@ -21,12 +26,16 @@ namespace RebootReality.jelycho.Beacons {
public struct SpawnBeaconCommandData : ISerializableEntity { public struct SpawnBeaconCommandData : ISerializableEntity {
public Vector3 Position; public Vector3 Position;
public void Serialize(FastBufferWriter writer) { public void Serialize(NetworkBufferWriter writer) {
writer.WriteValue(Position); writer.Write(Position);
} }
public void Deserialize(FastBufferReader reader) { public void Deserialize(NetworkBufferReader reader) {
reader.ReadValue(out Position); reader.Read(out Position);
}
public int GetMaxBytes() {
return 0;
} }
} }

View File

@@ -1,13 +1,17 @@
using RebootKit.Engine.Simulation; using RebootKit.Engine.Network;
using Unity.Netcode; using RebootKit.Engine.Simulation;
using UnityEngine; using UnityEngine;
namespace RebootReality.jelycho.Enemies { namespace RebootReality.jelycho.Enemies {
public class ZombieActorData : IActorData { public class ZombieActorData : IActorData {
public void Serialize(FastBufferWriter writer) { public void Serialize(NetworkBufferWriter writer) {
} }
public void Deserialize(FastBufferReader reader) { public void Deserialize(NetworkBufferReader reader) {
}
public int GetMaxBytes() {
return 0;
} }
} }

View File

@@ -1,4 +1,5 @@
using HighlightPlus; using HighlightPlus;
using RebootKit.Engine.Network;
using RebootKit.Engine.Simulation; using RebootKit.Engine.Simulation;
using Unity.Netcode; using Unity.Netcode;
using UnityEngine; using UnityEngine;
@@ -11,8 +12,12 @@ namespace RebootReality.jelycho.Items {
class ItemActorData : IActorData { class ItemActorData : IActorData {
public ItemConfig Config; public ItemConfig Config;
public void Serialize(FastBufferWriter writer) { } public void Serialize(NetworkBufferWriter writer) { }
public void Deserialize(FastBufferReader reader) { } public void Deserialize(NetworkBufferReader reader) { }
public int GetMaxBytes() {
return 0;
}
} }
[field: SerializeField] public ItemConfig Config { get; private set; } [field: SerializeField] public ItemConfig Config { get; private set; }

View File

@@ -1,5 +1,6 @@
using System.Globalization; using System.Globalization;
using RebootKit.Engine.Main; using RebootKit.Engine.Main;
using RebootKit.Engine.Network;
using RebootKit.Engine.Simulation; using RebootKit.Engine.Simulation;
using TMPro; using TMPro;
using Unity.Netcode; using Unity.Netcode;
@@ -11,12 +12,16 @@ namespace RebootReality.jelycho.Items {
class WorkbenchActorData : IActorData { class WorkbenchActorData : IActorData {
public int SelectedRecipeIndex; public int SelectedRecipeIndex;
public void Serialize(FastBufferWriter writer) { public void Serialize(NetworkBufferWriter writer) {
writer.WriteValue(SelectedRecipeIndex); writer.Write(SelectedRecipeIndex);
} }
public void Deserialize(FastBufferReader reader) { public void Deserialize(NetworkBufferReader reader) {
reader.ReadValue(out SelectedRecipeIndex); reader.Read(out SelectedRecipeIndex);
}
public int GetMaxBytes() {
return sizeof(int);
} }
} }

View File

@@ -2,6 +2,7 @@
using RebootKit.Engine.Extensions; using RebootKit.Engine.Extensions;
using RebootKit.Engine.Foundation; using RebootKit.Engine.Foundation;
using RebootKit.Engine.Main; using RebootKit.Engine.Main;
using RebootKit.Engine.Network;
using RebootKit.Engine.Simulation; using RebootKit.Engine.Simulation;
using RebootKit.Engine.Simulation.Sensors; using RebootKit.Engine.Simulation.Sensors;
using RebootReality.jelycho.Items; using RebootReality.jelycho.Items;
@@ -145,7 +146,7 @@ namespace RebootReality.jelycho.Player {
m_SyncRemoteStateTimer -= deltaTime; m_SyncRemoteStateTimer -= deltaTime;
if (m_SyncRemoteStateTimer <= 0.0f) { if (m_SyncRemoteStateTimer <= 0.0f) {
m_SyncRemoteStateTimer = 1.0f / RR.TickRate.IndexValue; m_SyncRemoteStateTimer = 1.0f / NetworkSystem.TickRate.IndexValue;
RemotePlayerActorState remoteState = new RemotePlayerActorState { RemotePlayerActorState remoteState = new RemotePlayerActorState {
Position = transform.position, Position = transform.position,
@@ -672,9 +673,13 @@ namespace RebootReality.jelycho.Player {
} }
public class PlayerActorData : IActorData { public class PlayerActorData : IActorData {
public void Serialize(FastBufferWriter writer) { } public void Serialize(NetworkBufferWriter writer) { }
public void Deserialize(FastBufferReader reader) { } public void Deserialize(NetworkBufferReader reader) { }
public int GetMaxBytes() {
return 0;
}
} }
public struct RemotePlayerActorState : IActorData { public struct RemotePlayerActorState : IActorData {
@@ -684,20 +689,27 @@ namespace RebootReality.jelycho.Player {
public float LookYaw; public float LookYaw;
public bool IsGrounded; public bool IsGrounded;
public void Serialize(FastBufferWriter writer) { public void Serialize(NetworkBufferWriter writer) {
writer.WriteValue(Position); writer.Write(Position);
writer.WriteValue(Velocity); writer.Write(Velocity);
writer.WriteValue(LookPitch); writer.Write(LookPitch);
writer.WriteValue(LookYaw); writer.Write(LookYaw);
writer.WriteValue(IsGrounded); writer.Write(IsGrounded);
} }
public void Deserialize(FastBufferReader reader) { public void Deserialize(NetworkBufferReader reader) {
reader.ReadValue(out Position); reader.Read(out Position);
reader.ReadValue(out Velocity); reader.Read(out Velocity);
reader.ReadValue(out LookPitch); reader.Read(out LookPitch);
reader.ReadValue(out LookYaw); reader.Read(out LookYaw);
reader.ReadValue(out IsGrounded); reader.Read(out IsGrounded);
}
public int GetMaxBytes() {
return sizeof(float) * 3 + // Position;
sizeof(float) * 3 + // Velocity
sizeof(float) * 2 + // LookPitch, LookYaw
sizeof(bool); // IsGrounded
} }
} }
@@ -714,12 +726,16 @@ namespace RebootReality.jelycho.Player {
struct PlayerActorPickupItemCommand : IActorData { struct PlayerActorPickupItemCommand : IActorData {
public ulong ItemActorID; public ulong ItemActorID;
public void Serialize(FastBufferWriter writer) { public void Serialize(NetworkBufferWriter writer) {
writer.WriteValue(ItemActorID); writer.Write(ItemActorID);
} }
public void Deserialize(FastBufferReader reader) { public void Deserialize(NetworkBufferReader reader) {
reader.ReadValue(out ItemActorID); reader.Read(out ItemActorID);
}
public int GetMaxBytes() {
return sizeof(ulong); // ItemActorID
} }
} }
@@ -727,38 +743,50 @@ namespace RebootReality.jelycho.Player {
public int InventorySlotIndex; public int InventorySlotIndex;
public int Count; public int Count;
public void Serialize(FastBufferWriter writer) { public void Serialize(NetworkBufferWriter writer) {
writer.WriteValue(InventorySlotIndex); writer.Write(InventorySlotIndex);
writer.WriteValue(Count); writer.Write(Count);
} }
public void Deserialize(FastBufferReader reader) { public void Deserialize(NetworkBufferReader reader) {
reader.ReadValue(out InventorySlotIndex); reader.Read(out InventorySlotIndex);
reader.ReadValue(out Count); reader.Read(out Count);
}
public int GetMaxBytes() {
return sizeof(int) * 2; // InventorySlotIndex, Count
} }
} }
struct PlayerActorEquipItemCommand : IActorData { struct PlayerActorEquipItemCommand : IActorData {
public int InventorySlotIndex; public int InventorySlotIndex;
public void Serialize(FastBufferWriter writer) { public void Serialize(NetworkBufferWriter writer) {
writer.WriteValue(InventorySlotIndex); writer.Write(InventorySlotIndex);
} }
public void Deserialize(FastBufferReader reader) { public void Deserialize(NetworkBufferReader reader) {
reader.ReadValue(out InventorySlotIndex); reader.Read(out InventorySlotIndex);
}
public int GetMaxBytes() {
return sizeof(int); // InventorySlotIndex
} }
} }
struct PlayerActorSelectItemSlotCommand : IActorData { struct PlayerActorSelectItemSlotCommand : IActorData {
public int SlotIndex; public int SlotIndex;
public void Serialize(FastBufferWriter writer) { public void Serialize(NetworkBufferWriter writer) {
writer.WriteValue(SlotIndex); writer.Write(SlotIndex);
} }
public void Deserialize(FastBufferReader reader) { public void Deserialize(NetworkBufferReader reader) {
reader.ReadValue(out SlotIndex); reader.Read(out SlotIndex);
}
public int GetMaxBytes() {
return sizeof(int); // SlotIndex
} }
} }
@@ -772,12 +800,16 @@ namespace RebootReality.jelycho.Player {
struct PlayerActorPrimaryEquippedItemChangedEvent : IActorData { struct PlayerActorPrimaryEquippedItemChangedEvent : IActorData {
public ulong ItemActorID; public ulong ItemActorID;
public void Serialize(FastBufferWriter writer) { public void Serialize(NetworkBufferWriter writer) {
writer.WriteValue(ItemActorID); writer.Write(ItemActorID);
} }
public void Deserialize(FastBufferReader reader) { public void Deserialize(NetworkBufferReader reader) {
reader.ReadValue(out ItemActorID); reader.Read(out ItemActorID);
}
public int GetMaxBytes() {
return sizeof(ulong); // ItemActorID
} }
} }
} }

View File

@@ -2,6 +2,7 @@
using R3; using R3;
using RebootKit.Engine.Foundation; using RebootKit.Engine.Foundation;
using RebootKit.Engine.Main; using RebootKit.Engine.Main;
using RebootKit.Engine.Network;
using RebootKit.Engine.Simulation; using RebootKit.Engine.Simulation;
using RebootReality.jelycho.Player.HUD; using RebootReality.jelycho.Player.HUD;
using Unity.Mathematics; using Unity.Mathematics;

View File

@@ -828,7 +828,7 @@ PlayerSettings:
webGLCloseOnQuit: 0 webGLCloseOnQuit: 0
webWasm2023: 0 webWasm2023: 0
scriptingDefineSymbols: scriptingDefineSymbols:
Standalone: RR_DEBUG Standalone: RR_DEBUG;RR_STEAM
additionalCompilerArguments: {} additionalCompilerArguments: {}
platformArchitecture: {} platformArchitecture: {}
scriptingBackend: scriptingBackend: