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,10 +21,12 @@ namespace RebootReality.jelycho {
base.OnActorCommandServer(actorCommand);
if (actorCommand.CommandID == (ushort) ActorSpawnerCommands.SpawnActor) {
for (int i = 0; i < 200; ++i) {
(Vector3 spawnPoint, Quaternion spawnRotation) = GetSpawnPoint();
RR.SpawnActor(m_ActorPrefabReference, spawnPoint, spawnRotation);
}
}
}
public void SpawnActor() {
if (m_ActorPrefabReference == null) {

View File

@@ -1,4 +1,5 @@
using RebootKit.Engine.Main;
using RebootKit.Engine.Network;
using RebootKit.Engine.Simulation;
using Unity.Netcode;
using UnityEngine;
@@ -6,10 +7,14 @@ using UnityEngine.AddressableAssets;
namespace RebootReality.jelycho.Beacons {
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 Vector3 Position;
public void Serialize(FastBufferWriter writer) {
writer.WriteValue(Position);
public void Serialize(NetworkBufferWriter writer) {
writer.Write(Position);
}
public void Deserialize(FastBufferReader reader) {
reader.ReadValue(out Position);
public void Deserialize(NetworkBufferReader reader) {
reader.Read(out Position);
}
public int GetMaxBytes() {
return 0;
}
}

View File

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

View File

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

View File

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

View File

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

View File

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