Exemplo n.º 1
0
        protected override void OnUpdate()
        {
            // Send update at SendRateHz.
            timeSinceLastSend += Time.deltaTime;
            if (timeSinceLastSend < 1.0f / SendRateHz)
            {
                return;
            }

            timeSinceLastSend = 0.0f;

            for (var i = 0; i < positionData.Length; i++)
            {
                var component = positionData.Position[i];

                if (component.DirtyBit != true)
                {
                    continue;
                }

                var entityId = positionData.SpatialEntityIds[i].EntityId;

                var update = new SchemaComponentUpdate(component.ComponentId);
                Generated.Improbable.SpatialOSPosition.Serialization.Serialize(component, update.GetFields());
                worker.Connection.SendComponentUpdate(entityId, new ComponentUpdate(update));

                component.DirtyBit       = false;
                positionData.Position[i] = component;
            }
        }
Exemplo n.º 2
0
        protected override void OnUpdate()
        {
            // Send update at SendRateHz.
            timeSinceLastSend += Time.deltaTime;
            if (timeSinceLastSend < 1.0f / SendRateHz)
            {
                return;
            }

            timeSinceLastSend = 0.0f;

            for (var i = 0; i < transformData.Length; i++)
            {
                var component = transformData.Transforms[i];

                if (component.DirtyBit != true)
                {
                    continue;
                }

                var entityId = transformData.SpatialEntityIds[i].EntityId;

                var update = new SchemaComponentUpdate(component.ComponentId);
                Transform.Serialization.Serialize(component,
                                                  update.GetFields());
                WorkerSystem.Connection.SendComponentUpdate(entityId, new ComponentUpdate(update));

                component.DirtyBit          = false;
                transformData.Transforms[i] = component;
            }
        }
Exemplo n.º 3
0
        public void SendComponentUpdate(EntityId entityId, uint componentId, SchemaComponentUpdate update, UpdateParameters?updateParameters = null)
        {
            lock (connectionLock)
            {
                ThrowIfNotConnected();

                connection.SendComponentUpdate(entityId.Value, new ComponentUpdate(componentId, update), updateParameters);
            }
        }
Exemplo n.º 4
0
        protected override void OnUpdate()
        {
            for (var i = 0; i < transformData.Length; i++)
            {
                var transform = transformData.Transform[i];

                if (transform.DirtyBit != true)
                {
                    continue;
                }

                var lastTransformSent = transformData.LastTransformSent[i];
                lastTransformSent.TimeSinceLastUpdate += Time.deltaTime;
                transformData.LastTransformSent[i]     = lastTransformSent;

                if (lastTransformSent.TimeSinceLastUpdate <
                    1.0f / TransformSynchronizationConfig.MaxTransformUpdateRateHz)
                {
                    continue;
                }

                // todo Need to be doing things with velocity and orientation too for this to work
                // also consider moving all this to the intermediate systems
                // var squareDisatnce =
                //     TransformUtils.SquareDisatnce(lastTransformSent.Transform.Location,
                //         transformData.Transform[i].Location);
                //
                // if (squareDisatnce == 0.0f)
                // {
                //     continue;
                // }
                //
                // if (lastTransformSent.TimeSinceLastUpdate <
                //     TransformSynchronizationConfig.MaxTimeForStalePositionWithoutUpdateS)
                // {
                //     if (squareDisatnce < TransformSynchronizationConfig.MaxSquarePositionChangeWithoutUpdate)
                //     {
                //         continue;
                //     }
                // }

                var entityId = transformData.SpatialEntityIds[i].EntityId;

                var update = new SchemaComponentUpdate(transform.ComponentId);
                TransformInternal.Serialization.SerializeUpdate(transform, update);
                WorkerSystem.Connection.SendComponentUpdate(entityId, new ComponentUpdate(update));

                transform.DirtyBit         = false;
                transformData.Transform[i] = transform;

                lastTransformSent.TimeSinceLastUpdate = 0.0f;
                lastTransformSent.Transform           = transform;
                transformData.LastTransformSent[i]    = lastTransformSent;
            }
        }
Exemplo n.º 5
0
        public static WrappedOp <ComponentUpdateOp> CreateComponentUpdateOp(long entityId, uint componentId)
        {
            var schemaComponentUpdate = new SchemaComponentUpdate(componentId);
            var op = new ComponentUpdateOp
            {
                Update   = new ComponentUpdate(schemaComponentUpdate),
                EntityId = new EntityId(entityId)
            };

            return(new WrappedOp <ComponentUpdateOp>(op));
        }
        protected override void OnUpdate()
        {
            for (var i = 0; i < positionData.Length; i++)
            {
                var position = positionData.Position[i];

                if (position.DirtyBit != true)
                {
                    continue;
                }

                var lastPositionSent = positionData.LastPositionSent[i];
                lastPositionSent.TimeSinceLastUpdate += Time.deltaTime;
                positionData.LastPositionSent[i]      = lastPositionSent;

                if (lastPositionSent.TimeSinceLastUpdate <
                    1.0f / TransformSynchronizationConfig.MaxPositionUpdateRateHz)
                {
                    continue;
                }

                var squareDistance =
                    TransformUtils.SquareDistance(lastPositionSent.Position.Coords, positionData.Position[i].Coords);

                if (squareDistance == 0.0f)
                {
                    continue;
                }

                if (lastPositionSent.TimeSinceLastUpdate <
                    TransformSynchronizationConfig.MaxTimeForStalePositionWithoutUpdateS)
                {
                    if (squareDistance < TransformSynchronizationConfig.MaxSquarePositionChangeWithoutUpdate)
                    {
                        continue;
                    }
                }

                var entityId = positionData.SpatialEntityIds[i].EntityId;

                var update = new SchemaComponentUpdate(position.ComponentId);
                Position.Serialization.SerializeUpdate(position, update);
                WorkerSystem.Connection.SendComponentUpdate(entityId, new ComponentUpdate(update));

                position.DirtyBit        = false;
                positionData.Position[i] = position;

                lastPositionSent.TimeSinceLastUpdate = 0.0f;
                lastPositionSent.Position            = position;
                positionData.LastPositionSent[i]     = lastPositionSent;
            }
        }
Exemplo n.º 7
0
            protected override void OnUpdate()
            {
                dirtyComponents = new NativeQueue <SerializedMessagesToSend.UpdateToSend>(Allocator.TempJob);
                var dirtyComponentsWriter = dirtyComponents.AsParallelWriter();
                var marker = foreachMarker;

                Dependency = Entities.WithName("EntityAclReplication")

                             .WithoutBurst()

                             .WithAll <HasAuthority>()
                             .WithChangeFilter <Component>()
                             .ForEach((ref Component component, in SpatialEntityId entity) =>
                {
                    marker.Begin();
                    if (!component.IsDataDirty())
                    {
                        marker.End();
                        return;
                    }

                    // Serialize component
                    var schemaUpdate = SchemaComponentUpdate.Create();
                    Serialization.SerializeUpdate(component, schemaUpdate);

                    component.MarkDataClean();

                    // Schedule update
                    var componentUpdate = new ComponentUpdate(ComponentId, schemaUpdate);
                    var update          = new SerializedMessagesToSend.UpdateToSend(componentUpdate, entity.EntityId.Id);
                    dirtyComponentsWriter.Enqueue(update);
                    marker.End();
                })
                             .ScheduleParallel(Dependency);

                spatialOsSendSystem.AddReplicationJobProducer(Dependency, dirtyComponents);
                dirtyComponents = default;
            }