From 5a4bf0c24e6eb14348700920b825310d5a02f39c Mon Sep 17 00:00:00 2001 From: edmand46 Date: Sat, 17 Dec 2022 14:05:53 +0400 Subject: [PATCH] refactor: entity structure changes --- Ragon.Core/Action/Loop.cs | 1 + Ragon.Core/Game/Entity.cs | 24 +++++++++--------------- Ragon.Core/Game/EntityEvent.cs | 21 +++++++++++++++++---- Ragon.Core/Game/EntityList.cs | 12 ++++++------ 4 files changed, 33 insertions(+), 25 deletions(-) diff --git a/Ragon.Core/Action/Loop.cs b/Ragon.Core/Action/Loop.cs index b310cdc..88155a1 100644 --- a/Ragon.Core/Action/Loop.cs +++ b/Ragon.Core/Action/Loop.cs @@ -6,6 +6,7 @@ public class Loop public Loop() { + _tasks = new List(35); } diff --git a/Ragon.Core/Game/Entity.cs b/Ragon.Core/Game/Entity.cs index 465c841..aba1470 100644 --- a/Ragon.Core/Game/Entity.cs +++ b/Ragon.Core/Game/Entity.cs @@ -13,7 +13,7 @@ public class Entity public byte[] Payload { get; private set; } public ushort StaticId { get; private set; } public ushort Type { get; private set; } - + private List _bufferedEvents; public Entity(RoomPlayer owner, ushort type, ushort staticId, RagonAuthority eventAuthority) @@ -25,7 +25,7 @@ public class Entity Payload = Array.Empty(); Authority = eventAuthority; State = new EntityState(this); - + _bufferedEvents = new List(); } @@ -38,7 +38,7 @@ public class Entity { Owner = owner; } - + public void RestoreBufferedEvents(RoomPlayer roomPlayer, RagonSerializer writer) { foreach (var bufferedEvent in _bufferedEvents) @@ -46,8 +46,8 @@ public class Entity writer.Clear(); writer.WriteOperation(RagonOperation.REPLICATE_ENTITY_EVENT); writer.WriteUShort(bufferedEvent.EventId); - writer.WriteUShort(bufferedEvent.PeerId); - writer.WriteByte((byte) RagonReplicationMode.Server); + writer.WriteUShort(bufferedEvent.Invoker.Connection.Id); + writer.WriteByte((byte)RagonReplicationMode.Server); writer.WriteUShort(Id); ReadOnlySpan data = bufferedEvent.EventData.AsSpan(); @@ -70,7 +70,7 @@ public class Entity serializer.WriteUShort(Owner.Connection.Id); ReadOnlySpan entityPayload = Payload.AsSpan(); - serializer.WriteUShort((ushort) entityPayload.Length); + serializer.WriteUShort((ushort)entityPayload.Length); serializer.WriteData(ref entityPayload); var sendData = serializer.ToArray(); @@ -109,7 +109,7 @@ public class Entity serializer.WriteOperation(RagonOperation.REPLICATE_ENTITY_EVENT); serializer.WriteUShort(eventId); serializer.WriteUShort(caller.Connection.Id); - serializer.WriteByte((byte) eventMode); + serializer.WriteByte((byte)eventMode); serializer.WriteUShort(Id); serializer.WriteData(ref payload); @@ -134,13 +134,7 @@ public class Entity if (eventMode == RagonReplicationMode.Buffered && targetMode != RagonTarget.Owner) { - var bufferedEvent = new EntityEvent() - { - EventData = payload.ToArray(), - Target = targetMode, - EventId = eventId, - PeerId = caller.Connection.Id, - }; + var bufferedEvent = new EntityEvent(caller, eventId, payload.ToArray(), targetMode); _bufferedEvents.Add(bufferedEvent); } @@ -151,7 +145,7 @@ public class Entity serializer.WriteOperation(RagonOperation.REPLICATE_ENTITY_EVENT); serializer.WriteUShort(eventId); serializer.WriteUShort(caller.Connection.Id); - serializer.WriteByte((byte) eventMode); + serializer.WriteByte((byte)eventMode); serializer.WriteUShort(Id); serializer.WriteData(ref payload); diff --git a/Ragon.Core/Game/EntityEvent.cs b/Ragon.Core/Game/EntityEvent.cs index 808eb3e..7d50d5e 100644 --- a/Ragon.Core/Game/EntityEvent.cs +++ b/Ragon.Core/Game/EntityEvent.cs @@ -4,8 +4,21 @@ namespace Ragon.Core.Game; public class EntityEvent { - public ushort PeerId { get; set; } - public ushort EventId { get; set; } - public byte[] EventData { get; set; } - public RagonTarget Target { set; get; } + public RoomPlayer Invoker { get; private set; } + public ushort EventId { get; private set; } + public byte[] EventData { get; private set; } + public RagonTarget Target { set; private get; } + + public EntityEvent( + RoomPlayer invoker, + ushort eventId, + byte[] payload, + RagonTarget target + ) + { + Invoker = invoker; + EventId = eventId; + EventData = payload; + Target = target; + } } \ No newline at end of file diff --git a/Ragon.Core/Game/EntityList.cs b/Ragon.Core/Game/EntityList.cs index 459208f..849aaf9 100644 --- a/Ragon.Core/Game/EntityList.cs +++ b/Ragon.Core/Game/EntityList.cs @@ -2,18 +2,18 @@ namespace Ragon.Core.Game; public class EntityList { - private List _dynamicEntitiesList = new List(); - private List _staticEntitesList = new List(); - private Dictionary _entitiesMap = new Dictionary(); + private readonly List _dynamicEntitiesList = new List(); + private readonly List _staticEntitiesList = new List(); + private readonly Dictionary _entitiesMap = new Dictionary(); - public IReadOnlyList StaticList => _staticEntitesList; + public IReadOnlyList StaticList => _staticEntitiesList; public IReadOnlyList DynamicList => _dynamicEntitiesList; public IReadOnlyDictionary Map => _entitiesMap; public void Add(Entity entity) { if (entity.StaticId != 0) - _staticEntitesList.Add(entity); + _staticEntitiesList.Add(entity); else _dynamicEntitiesList.Add(entity); @@ -24,7 +24,7 @@ public class EntityList { if (_entitiesMap.Remove(entity.Id, out var existEntity)) { - _staticEntitesList.Remove(entity); + _staticEntitiesList.Remove(entity); _dynamicEntitiesList.Remove(entity); return existEntity;