Beispiel #1
0
        protected override void OnUpdate()
        {
            for (int i = 0; i < data.Length; ++i)
            {
                var position = data.PositionComponent[i];

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

                if (lastPositionSent.TimeSinceLastUpdate <
                    1.0f / data.RateLimitedConfig[i].MaxPositionUpdateRateHz)
                {
                    continue;
                }

                var transform = data.TransformComponent[i];

                var coords = transform.Location.ToCoordinates();

                if (!TransformUtils.HasChanged(coords, position.Coords))
                {
                    continue;
                }

                position.Coords           = coords;
                data.PositionComponent[i] = position;

                lastPositionSent.TimeSinceLastUpdate = 0.0f;
                lastPositionSent.Position            = position;
                data.LastPositionSent[i]             = lastPositionSent;
            }
        }
        protected override void OnUpdate()
        {
            transformGroup.SetFilter(TransformInternal.ComponentAuthority.Authoritative);

            Entities.With(transformGroup).ForEach(
                (RateLimitedSendConfig config, ref TransformInternal.Component transform,
                 ref TransformToSend transformToSend, ref LastTransformSentData lastTransformSent,
                 ref TicksSinceLastTransformUpdate ticksSinceLastTransformUpdate) =>
            {
                lastTransformSent.TimeSinceLastUpdate += Time.deltaTime;

                if (lastTransformSent.TimeSinceLastUpdate < 1.0f / config.MaxTransformUpdateRateHz)
                {
                    return;
                }

                var transformHasChanged = false;

                var newVelocity = TransformUtils.ToFixedPointVector3(transformToSend.Velocity);
                if (TransformUtils.HasChanged(newVelocity, transform.Velocity))
                {
                    transform.Velocity  = newVelocity;
                    transformHasChanged = true;
                }

                var newLocation = TransformUtils.ToFixedPointVector3(transformToSend.Position - worker.Origin);
                if (TransformUtils.HasChanged(newLocation, transform.Location))
                {
                    transform.Location  = newLocation;
                    transformHasChanged = true;
                }

                var newRotation = TransformUtils.ToCompressedQuaternion(transformToSend.Orientation);
                if (TransformUtils.HasChanged(newRotation, transform.Rotation))
                {
                    transform.Rotation  = newRotation;
                    transformHasChanged = true;
                }

                if (!transformHasChanged)
                {
                    return;
                }

                transform.PhysicsTick   += ticksSinceLastTransformUpdate.NumberOfTicks;
                transform.TicksPerSecond = tickRate.PhysicsTicksPerRealSecond;

                lastTransformSent.TimeSinceLastUpdate = 0.0f;
                lastTransformSent.Transform           = transform;

                ticksSinceLastTransformUpdate = new TicksSinceLastTransformUpdate
                {
                    NumberOfTicks = 0
                };
            });
        }
Beispiel #3
0
        protected override void OnUpdate()
        {
            transformGroup.SetFilter(TransformInternal.ComponentAuthority.Authoritative);

            var rateLimitedConfigArray    = transformGroup.GetSharedComponentDataArray <RateLimitedSendConfig>();
            var transformArray            = transformGroup.GetComponentDataArray <TransformInternal.Component>();
            var transformToSendArray      = transformGroup.GetComponentDataArray <TransformToSend>();
            var lastTransformSentArray    = transformGroup.GetComponentDataArray <LastTransformSentData>();
            var ticksSinceLastUpdateArray = transformGroup.GetComponentDataArray <TicksSinceLastTransformUpdate>();

            for (int i = 0; i < transformArray.Length; ++i)
            {
                var lastTransformSent = lastTransformSentArray[i];
                lastTransformSent.TimeSinceLastUpdate += Time.deltaTime;
                lastTransformSentArray[i]              = lastTransformSent;

                if (lastTransformSent.TimeSinceLastUpdate <
                    1.0f / rateLimitedConfigArray[i].MaxTransformUpdateRateHz)
                {
                    continue;
                }

                var transform = transformArray[i];

                var transformToSend = transformToSendArray[i];

                var currentTransform = new TransformInternal.Component
                {
                    Location       = (transformToSend.Position - worker.Origin).ToImprobableLocation(),
                    Rotation       = transformToSend.Orientation.ToImprobableQuaternion(),
                    Velocity       = transformToSend.Velocity.ToImprobableVelocity(),
                    PhysicsTick    = transform.PhysicsTick + ticksSinceLastUpdateArray[i].NumberOfTicks,
                    TicksPerSecond = tickRate.PhysicsTicksPerRealSecond
                };

                if (!(TransformUtils.HasChanged(currentTransform.Location, transform.Location) ||
                      TransformUtils.HasChanged(currentTransform.Rotation, transform.Rotation)))
                {
                    continue;
                }

                lastTransformSent.TimeSinceLastUpdate = 0.0f;
                lastTransformSent.Transform           = transform;
                lastTransformSentArray[i]             = lastTransformSent;

                transformArray[i] = currentTransform;

                ticksSinceLastUpdateArray[i] = new TicksSinceLastTransformUpdate
                {
                    NumberOfTicks = 0
                };
            }
        }
        protected override void OnUpdate()
        {
            for (int i = 0; i < data.Length; ++i)
            {
                var lastTransformSent = data.LastTransformSent[i];
                lastTransformSent.TimeSinceLastUpdate += Time.deltaTime;
                data.LastTransformSent[i]              = lastTransformSent;

                if (lastTransformSent.TimeSinceLastUpdate <
                    1.0f / data.RateLimitedConfig[i].MaxTransformUpdateRateHz)
                {
                    continue;
                }

                var transform = data.TransformComponent[i];

                var transformToSend = data.TransformToSend[i];

                var currentTransform = new TransformInternal.Component
                {
                    Location       = (transformToSend.Position - worker.Origin).ToImprobableLocation(),
                    Rotation       = transformToSend.Orientation.ToImprobableQuaternion(),
                    Velocity       = transformToSend.Velocity.ToImprobableVelocity(),
                    PhysicsTick    = transform.PhysicsTick + data.TicksSinceLastUpdate[i].NumberOfTicks,
                    TicksPerSecond = tickRate.PhysicsTicksPerRealSecond,
                    DirtyBit       = true
                };

                if (!(TransformUtils.HasChanged(currentTransform.Location, transform.Location) ||
                      TransformUtils.HasChanged(currentTransform.Rotation, transform.Rotation)))
                {
                    continue;
                }

                lastTransformSent.TimeSinceLastUpdate = 0.0f;
                lastTransformSent.Transform           = transform;
                data.LastTransformSent[i]             = lastTransformSent;

                data.TransformComponent[i] = currentTransform;

                data.TicksSinceLastUpdate[i] = new TicksSinceLastTransformUpdate
                {
                    NumberOfTicks = 0
                };
            }
        }
        protected override void OnUpdate()
        {
            positionGroup.SetFilter(Position.ComponentAuthority.Authoritative);

            var rateLimitedConfigArray = positionGroup.GetSharedComponentDataArray <RateLimitedSendConfig>();
            var positionArray          = positionGroup.GetComponentDataArray <Position.Component>();
            var transformArray         = positionGroup.GetComponentDataArray <TransformInternal.Component>();
            var lastSentPositionArray  = positionGroup.GetComponentDataArray <LastPositionSentData>();

            for (int i = 0; i < positionArray.Length; ++i)
            {
                var position = positionArray[i];

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

                if (lastPositionSent.TimeSinceLastUpdate <
                    1.0f / rateLimitedConfigArray[i].MaxPositionUpdateRateHz)
                {
                    continue;
                }

                var transform = transformArray[i];

                var coords = transform.Location.ToCoordinates();

                if (!TransformUtils.HasChanged(coords, position.Coords))
                {
                    continue;
                }

                position.Coords  = coords;
                positionArray[i] = position;

                lastPositionSent.TimeSinceLastUpdate = 0.0f;
                lastPositionSent.Position            = position;
                lastSentPositionArray[i]             = lastPositionSent;
            }
        }
        protected override void OnUpdate()
        {
            Entities.With(positionGroup).ForEach((RateLimitedSendConfig config, ref Position.Component position,
                                                  ref TransformInternal.Component transformInternal, ref LastPositionSentData lastPositionSent) =>
            {
                lastPositionSent.TimeSinceLastUpdate += Time.deltaTime;

                if (lastPositionSent.TimeSinceLastUpdate < 1.0f / config.MaxPositionUpdateRateHz)
                {
                    return;
                }

                var coords = transformInternal.Location.ToCoordinates();
                if (!TransformUtils.HasChanged(coords, position.Coords))
                {
                    return;
                }

                position.Coords = coords;

                lastPositionSent.TimeSinceLastUpdate = 0.0f;
                lastPositionSent.Position            = position;
            });
        }