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; } } }
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); }
protected abstract void PrepareComponentToNetwork(PrepareComponentToSendEvent <T> componentToNetwork);