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 }; }); }
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; }); }