예제 #1
0
        protected override void ProcessReceivedComponent(ReceivedNetworkComponentEvent received)
        {
            TEvent newEvent;
            var    receivedEvent = NetworkConfig.Data.Serializator.GetComponentFromBytes <TEvent>(received.ComponentBytes);

            EcsWorld.CreateEntityWith(out newEvent);
            NewToOldConverter(receivedEvent, newEvent);
        }
예제 #2
0
        private void ReceiveEvent(NetworkStream stream)
        {
            var receivedEvent = new ReceivedNetworkComponentEvent
            {
                ComponentTypeUid = stream.ReadShort(),
                ComponentFlags   = (EcsNetComponentFlags)stream.ReadByte()
            };

            short eventSize = stream.ReadShort();

            byte[] eventBytes = new byte[eventSize];
            stream.Read(eventBytes, 0, eventSize);
            receivedEvent.ComponentBytes = eventBytes;

            _receivedComponents.Add(receivedEvent);
        }
예제 #3
0
        protected override void ProcessReceivedComponent(ReceivedNetworkComponentEvent received)
        {
            TComponent oldComponent;
            long       networkEntity    = received.NetworkEntityUid;
            bool       localEntityExist = NetworkConfig.Data.NetworkEntitiesToLocal.ContainsKey(networkEntity);
            int        localEntity;
            bool       componentWasRemoved = received.ComponentFlags.HasFlag(EcsNetComponentFlags.WAS_REMOVED);

            if (componentWasRemoved && !localEntityExist)
            {
#if DEBUG
                throw new Exception(string.Format("Attempt to remove {0} for non exist local entity", typeof(TComponent).Name));
#endif
                return;
            }

            if (localEntityExist)
            {
                localEntity = NetworkConfig.Data.NetworkEntitiesToLocal[received.NetworkEntityUid];
                bool isNew;
                oldComponent = EcsWorld.EnsureComponent <TComponent>(localEntity, out isNew);
            }
            else
            {
                localEntity = EcsWorld.CreateEntityWith(out oldComponent);
                EcsWorld.CreateEntityWith <NewEntityReceivedEvent>().LocalEntity = localEntity;
                AddNetworkToLocalEntity(received.NetworkEntityUid, localEntity);
            }

            if (componentWasRemoved)
            {
                EcsWorld.RemoveComponent <TComponent>(localEntity);
                if (EcsWorld.IsEntityExists(localEntity))
                {
                    return;
                }

                RemoveNetworkToLocalEntity(networkEntity, localEntity);
            }
            else
            {
                var newComponent =
                    NetworkConfig.Data.Serializator.GetComponentFromBytes <TComponent>(received.ComponentBytes);
                NewToOldConverter(newComponent, oldComponent);
            }
        }
예제 #4
0
        private void ReceiveComponent(NetworkStream stream, long networkEntity)
        {
            var receivedNetworkComponent = new ReceivedNetworkComponentEvent
            {
                NetworkEntityUid = networkEntity,
                ComponentTypeUid = stream.ReadShort(),
                ComponentFlags   = (EcsNetComponentFlags)stream.ReadByte()
            };

            short componentSize = stream.ReadShort();

            byte[] componentBytes = new byte[componentSize];
            stream.Read(componentBytes, 0, componentSize);
            receivedNetworkComponent.ComponentBytes = componentBytes;

            _receivedComponents.Add(receivedNetworkComponent);
        }
예제 #5
0
 protected abstract void ProcessReceivedComponent(ReceivedNetworkComponentEvent receivedComponent);