void FixedUpdate() { var velocity = SimulationSettings.PlayerAcceleration; var joystick = PlayerInputReader.Data.joystick; space = joystick.space; if (joystick.shift) { velocity = velocity * 3; } if (!DeathWriter.Data.death) { rigidbody.transform.Translate(0f, 0f, joystick.yAxis * Time.deltaTime * velocity); rigidbody.transform.Rotate(0, joystick.xAxis * 150 * Time.deltaTime, 0); } else { rigidbody.MovePosition(new Vector3(0f, 1f, 0f)); var update2 = new Death.Update(); update2.SetDeath(false); DeathWriter.Send(update2); } var pos = rigidbody.position; var positionUpdate = new Position.Update() .SetCoords(new Coordinates(pos.x, pos.y, pos.z)); PositionWriter.Send(positionUpdate); var rotationUpdate = new Rotation.Update() .SetRotation(rigidbody.rotation.ToNativeQuaternion()); RotationWriter.Send(rotationUpdate); }
private void OnClientUpdate(ClientRequest request) { // Move the player by the given delta. Move(request.Movement.ToVector3()); var positionNoOffset = transform.position - origin; // Send the update using the new position. var response = new ServerResponse { Position = positionNoOffset.ToIntAbsolute(), IncludesJump = request.IncludesJump, Timestamp = request.Timestamp, TimeDelta = request.TimeDelta }; var update = new ServerMovement.Update { Latest = response }; server.SendUpdate(update); if (Time.time - lastSpatialPositionTime > spatialPositionUpdateDelta) { var positionUpdate = new Position.Update { Coords = Coordinates.FromUnityVector(positionNoOffset) }; spatialPosition.SendUpdate(positionUpdate); lastSpatialPositionTime = Time.time; } }
void OnTriggerStay(Collider other) { if (other != null && other.gameObject.tag == "Player" && other.gameObject.GetComponent <PlayerMover>().space&& time <= Time.time && other is CapsuleCollider) { float newHealth = HealthWriter.Data.health - 25f; time = Time.time + 1; if (newHealth <= 0) { var update = new Health.Update(); update.SetHealth(100f); HealthWriter.Send(update); other.gameObject.GetComponent <ScoresPlayer> ().addScores(25f); GetComponent <ScoresPlayer> ().reset(); rigidbody.MovePosition(new Vector3(0f, 1f, 0f)); var pos = rigidbody.position; var positionUpdate = new Position.Update() .SetCoords(new Coordinates(pos.x, pos.y, pos.z)); PositionWriter.Send(positionUpdate); var update2 = new Death.Update(); update2.SetDeath(true); DeathWriter.Send(update2); } else { var update = new Health.Update(); update.SetHealth(newHealth); HealthWriter.Send(update); other.gameObject.GetComponent <ScoresPlayer> ().addScores(25f); } } }
public void TestUpdateExistingComponent() { var entityId = new EntityId(1); var data = new Position.Data(new Coordinates(1, 2, 3)); AddComponentOp(entityId, data); // A worker should only receive updates for components it is not authoritative over SetAuthority(entityId, Authority.NotAuthoritative); var positionUpdate = new Position.Update { coords = new Coordinates(4, 5, 6) }; UpdateComponent(entityId, positionUpdate); var expectedCoords = new Coordinates( positionUpdate.coords.Value.x, positionUpdate.coords.Value.y, positionUpdate.coords.Value.z); var actualCoords = new Coordinates( _componentMap.Get(entityId).Get().Value.coords.x, _componentMap.Get(entityId).Get().Value.coords.y, _componentMap.Get(entityId).Get().Value.coords.z); Assert.AreEqual(expectedCoords, actualCoords); }
private void FixedUpdate() { timeNow += Time.deltaTime; if (timeNow < TIME_DELAY) { return; } timeNow = 0; var newPosition = transform.position.ToCoordinates(); var newRotation = QuantizationUtils.QuantizeAngle(transform.rotation.eulerAngles.y); // 沿Y轴旋转 fixedFramesSinceLastUpdate++; if ((PositionNeedsUpdate(newPosition) || RotationNeedsUpdate(newRotation)) && fixedFramesSinceLastUpdate > SimulationSettings.TransformUpdatesToSkipBetweenSends) { fixedFramesSinceLastUpdate = 0; var update = new Position.Update() { Coords = newPosition }; positionComponent.SendUpdate(update); var update2 = new TransformComponent.Update() { Rotation = newRotation }; transformComponent.SendUpdate(update2); } }
private void VisualizePosition(Position.Update update) { if (update.coords.HasValue) { SetPosition(update.coords.Value); } }
private void OnPositionUpdate(Position.Update update) { if (PositionReader.Authority == Authority.NotAuthoritative && update.coords.HasValue) { transform.position = update.coords.Value.ToUnityVector(); } }
void FixedUpdate() { var joystick = PlayerInputReader.Data.joystick; var direction = new Vector3(joystick.xAxis, 0, joystick.yAxis); if (direction.sqrMagnitude > 1) { direction.Normalize(); } rigidbody.AddForce(direction * SimulationSettings.PlayerAcceleration); var pos = rigidbody.position; var positionUpdate = new Position.Update() .SetCoords(new Coordinates(pos.x, pos.y, pos.z)); PositionWriter.Send(positionUpdate); var rotationUpdate = new Rotation.Update() .SetRotation(rigidbody.rotation.ToNativeQuaternion()); RotationWriter.Send(rotationUpdate); }
private void OnPositionUpdate(Position.Update update) { if (!CurrentlyBeingHeld() && PositionReader.Authority == Authority.NotAuthoritative) { if (update.coords.HasValue) { transform.position = update.coords.Value.ToUnityVector(); } } }
private void UpdateComponent(EntityId entityId, Position.Update update) { var componentUpdateOps = new ComponentUpdateOp <Position> { EntityId = entityId, Update = update }; _updateComponentCallback(componentUpdateOps); }
void OnComponentUpdated(Position.Update update) { if (!PositionReader.HasAuthority) { if (update.coords.HasValue) { transform.position = update.coords.Value.ToVector3(); } } }
void OnPositionUpdated(Position.Update update) { if (!PositionReader.HasAuthority) { if (update.coords.HasValue) { transform.position = update.coords.Value.ToUnityVector(); } } }
public void TestUpdatComponentThatDoesNotExist() { var entityId = new EntityId(1); var positionUpdate = new Position.Update { coords = new Coordinates(4, 5, 6) }; UpdateComponent(entityId, positionUpdate); Assert.False(_componentMap.ContainsKey(entityId)); }
public void SendUpdate(Position.Update update) { var component = EntityManager.GetComponentData <Position.Component>(Entity); if (update.Coords.HasValue) { component.Coords = update.Coords.Value; } EntityManager.SetComponentData(Entity, component); }
void OnPositionUpdated(Position.Update update) { if (PositionReader.Authority == Authority.NotAuthoritative) { if (update.coords.HasValue) { transform.position = update.coords.Value.ToUnityVector(); //Debug.LogWarning("TRP: " + transform.position.y); } } }
private IEnumerator SetSpatialPosition(Vector3 position) { yield return(null); var spatialPositionUpdate = new Position.Update { Coords = position.ToSpatialCoordinates() }; spatialPosition.SendUpdate(spatialPositionUpdate); }
private IEnumerator SetSpatialPosition(Vector3 position) { yield return(null); var spatialPositionUpdate = new Position.Update { Coords = Coordinates.FromUnityVector(position) }; spatialPosition.SendUpdate(spatialPositionUpdate); }
private void OnPositionUpdated(Position.Update update) { if (positionComponent.Authority == Authority.NotAuthoritative) { // 好神奇!update.Coords竟然是一个map,不能直接获取 Coordinates coords; if (update.Coords.TryGetValue(out coords)) { myRigidbody.MovePosition(coords.ToVector3()); } } }
void Update() { var pos = transform.position; var positionUpdate = new Position.Update() .SetCoords(new Coordinates(pos.x, pos.y, pos.z)); PositionWriter.Send(positionUpdate); var rotationUpdate = new Rotation.Update() .SetRotation(MathUtils.ToNativeQuaternion(transform.rotation)); RotationWriter.Send(rotationUpdate); }
void FixedUpdate() { var pos = transform.position; var positionUpdate = new Position.Update() .SetCoords(new Coordinates(pos.x, pos.y, pos.z)); PositionWriter.Send(positionUpdate); transform.eulerAngles = new Vector3(0, transform.rotation.eulerAngles.y, 0); var rotationUpdate = new Rotation.Update() .SetRotation(MathUtils.ToNativeQuaternion(transform.rotation)); RotationWriter.Send(rotationUpdate); }
private void OnRequestRespawn(HealthComponent.RequestRespawn.RequestResponder request) { // Reset the player's health. var healthUpdate = new HealthComponent.Update { Health = health.Data.MaxHealth }; health.Send(healthUpdate); // Move to a spawn point (position and rotation) var(spawnPosition, spawnYaw, spawnPitch) = SpawnPoints.GetRandomSpawnPoint(); var newLatest = new ServerResponse { Position = spawnPosition.ToIntAbsolute(), IncludesJump = false, Timestamp = serverMovement.Data.Latest.Timestamp, TimeDelta = 0 }; var serverMovementUpdate = new ServerMovement.Update { Latest = newLatest }; serverMovement.Send(serverMovementUpdate); // Update the spatial position on respawn. var spatialPositionUpdate = new Position.Update { Coords = spawnPosition.ToSpatialCoordinates() }; spatialPosition.Send(spatialPositionUpdate); transform.position = spawnPosition + spatial.Worker.Origin; var forceRotationRequest = new RotationUpdate { Yaw = spawnYaw.ToInt1k(), Pitch = spawnPitch.ToInt1k(), TimeDelta = 0 }; serverMovement.SendForcedRotation(forceRotationRequest); // Trigger the respawn event. health.SendRespawn(new Empty()); }
void FixedUpdate() { int actualHealth = HealthWriter.Data.currentHealth; if (actualHealth <= 0) { HealthWriter.Send(new Health.Update().SetCurrentHealth(1000)); rigidbody.position = positionArray[Random.Range(0, 4)]; var pos = rigidbody.position; //Debug.LogError ("respawn in position: " + pos.x + "," + pos.y + "," + pos.z); var positionUpdate = new Position.Update() .SetCoords(new Coordinates(pos.x, pos.y, pos.z)); PositionWriter.Send(positionUpdate); } }
void FixedUpdate() { int actualHealth = HealthWriter.Data.currentHealth; if (actualHealth == 0) { rigidbody.position = new Vector3(0f, 0f, 0f); var pos = rigidbody.position; //Debug.LogError ("respawn in position: " + pos.x + "," + pos.y + "," + pos.z); var positionUpdate = new Position.Update() .SetCoords(new Coordinates(pos.x, pos.y, pos.z)); PositionWriter.Send(positionUpdate); HealthWriter.Send(new Health.Update().SetCurrentHealth(1000)); } }
// Callback for whenever one or more property of the Position standard library component is updated void OnPositionUpdated(Position.Update update) { /* * Only update the transform if this component is on a worker which isn't authorative over the * entity's Position standard library component. * This synchronises the entity's local representation on the worker with that of the entity on * whichever worker is authoritative over its Position and is responsible for its movement. */ if (!PositionReader.HasAuthority) { if (update.coords.HasValue) { transform.position = update.coords.Value.ToUnityVector(); } } }
// Update is called once per frame void Update() { var update = new Position.Update() { Coords = transform.position.ToCoordinates() }; spatialPosition.SendUpdate(update); var update2 = new PlayerTransform.Update() { //Position = Vector3f.FromUnityVector(transform.position), Rotation = Vector3f.FromUnityVector(transform.eulerAngles) }; _writer.SendUpdate(update2); }
IEnumerator SendPosition() { while (true) { yield return(new WaitForSeconds(1f)); if (authority == Authority.Authoritative) { var currentPosition = shipRigidbody.position; var updatedCoordinates = new Coordinates(currentPosition.x, currentPosition.y, currentPosition.z); var update = new Position.Update(); update.SetCoords(updatedCoordinates); PositionWriter.Send(update); } } }
private void SendPosition() { var newPosition = transform.position.ToCoordinates(); var newRotation = QuantizationUtils.QuantizeAngle(transform.rotation.eulerAngles.y); // 沿Y轴旋转 var update = new Position.Update() { Coords = newPosition }; positionComponent.SendUpdate(update); var update2 = new TransformComponent.Update() { Rotation = newRotation }; transformComponent.SendUpdate(update2); }
// Start is called before the first frame update void Update() { //InvokeRepeating("UpdateFuel", 1.0f, 2.0f); fuel++; munition += 3; transform.Translate(Vector3.left * Time.deltaTime / 3, Space.World); position = transform.position; var spatialPosition = new Position.Update { Coords = new Coordinates(position.x, position.y, position.z) }; tankPosition.SendUpdate(spatialPosition); //{ Coords = new Coordinates(position.x, position.y, position.z) }); tankWriter.SendUpdate(new Tank.Update { FuelQuantity = fuel, MunitionQuantity = munition }); }
public void TestHasUpdatedOnComponentUpdate() { var entityId = new EntityId(1); var data = new Position.Data(new Coordinates(1, 2, 3)); AddComponentOp(entityId, data); // A worker should only receive updates for components it is not authoritative over SetAuthority(entityId, Authority.NotAuthoritative); var positionUpdate = new Position.Update { coords = new Coordinates(4, 5, 6) }; _componentMap.AckUpdated(); UpdateComponent(entityId, positionUpdate); Assert.True(_componentMap.HasUpdated()); }
public void TestUpdateComponentWithoutAuthority() { var entityId = new EntityId(1); var data = new Position.Data(new Coordinates(1, 2, 3)); AddComponentOp(entityId, data); var positionUpdate = new Position.Update { coords = new Coordinates(4, 5, 6) }; UpdateComponent(entityId, positionUpdate); var expectedCoords = new Coordinates(data.Value.coords.x, data.Value.coords.y, data.Value.coords.z); var actualCoords = new Coordinates( _componentMap.Get(entityId).Get().Value.coords.x, _componentMap.Get(entityId).Get().Value.coords.y, _componentMap.Get(entityId).Get().Value.coords.z); Assert.AreEqual(expectedCoords, actualCoords); }