コード例 #1
0
ファイル: EcsNetSystems.cs プロジェクト: SH42913/leoecsnet
        protected override void PrepareComponentToNetwork(PrepareComponentToSendEvent <TComponent> prepareComponent)
        {
            TComponent componentToSend     = EcsWorld.GetComponent <TComponent>(prepareComponent.LocalEntityUid);
            bool       componentWasRemoved = prepareComponent.ComponentFlags.HasFlag(EcsNetComponentFlags.WAS_REMOVED);

#if DEBUG
            if (!componentWasRemoved && componentToSend == null)
            {
                throw new Exception(string.Format("{0} doesn't exist on this entity", typeof(TComponent).Name));
            }
#endif
            SendNetworkComponentEvent sendEvent;
            EcsWorld.CreateEntityWith(out sendEvent);
            sendEvent.ComponentTypeUid = ComponentUid;
            sendEvent.ComponentFlags   = prepareComponent.ComponentFlags;

            int  localEntity      = prepareComponent.LocalEntityUid;
            bool localEntityExist = NetworkConfig.Data.LocalEntitiesToNetwork.ContainsKey(localEntity);
            long networkEntity;

            if (componentWasRemoved)
            {
#if DEBUG
                if (!localEntityExist)
                {
                    throw new Exception(string.Format("You've tried to send removed {0} for not network entity", typeof(TComponent).Name));
                }
#endif

                networkEntity = NetworkConfig
                                .Data
                                .LocalEntitiesToNetwork[localEntity];
                sendEvent.NetworkEntityUid = networkEntity;

                if (EcsWorld.IsEntityExists(localEntity))
                {
                    return;
                }
                RemoveNetworkToLocalEntity(networkEntity, localEntity);
            }
            else
            {
                sendEvent.ComponentBytes = NetworkConfig.Data.Serializator.GetBytesFromComponent(componentToSend);

                if (localEntityExist)
                {
                    networkEntity = NetworkConfig
                                    .Data
                                    .LocalEntitiesToNetwork[localEntity];
                    sendEvent.NetworkEntityUid = networkEntity;
                }
                else
                {
                    networkEntity = NetworkConfig.Data.Random.NextInt64();
                    AddNetworkToLocalEntity(networkEntity, localEntity);
                    sendEvent.NetworkEntityUid = networkEntity;
                }
            }
        }
コード例 #2
0
ファイル: EcsNetSystems.cs プロジェクト: SH42913/leoecsnet
        protected override void PrepareComponentToNetwork(PrepareComponentToSendEvent <TEvent> prepareComponent)
        {
            TEvent componentToSend     = EcsWorld.GetComponent <TEvent>(prepareComponent.LocalEntityUid);
            bool   componentWasRemoved = prepareComponent.ComponentFlags.HasFlag(EcsNetComponentFlags.WAS_REMOVED);

#if DEBUG
            if (!componentWasRemoved && componentToSend == null)
            {
                throw new Exception(string.Format("Component {0} doesn't exist on this entity", nameof(TEvent)));
            }
#endif
            SendNetworkComponentEvent sendEvent;
            EcsWorld.CreateEntityWith(out sendEvent);
            sendEvent.ComponentTypeUid = ComponentUid;
            sendEvent.ComponentFlags   = prepareComponent.ComponentFlags;
            sendEvent.NetworkEntityUid = 0;
            sendEvent.ComponentBytes   = NetworkConfig.Data.Serializator.GetBytesFromComponent(componentToSend);
        }
コード例 #3
0
ファイル: EcsNetSystems.cs プロジェクト: SH42913/leoecsnet
 protected abstract void PrepareComponentToNetwork(PrepareComponentToSendEvent <T> componentToNetwork);