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;
            }
        }
Example #3
0
    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);
            }
        }
    }
Example #4
0
        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);
        }
Example #5
0
        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);
     }
 }
Example #7
0
 private void OnPositionUpdate(Position.Update update)
 {
     if (PositionReader.Authority == Authority.NotAuthoritative && update.coords.HasValue)
     {
         transform.position = update.coords.Value.ToUnityVector();
     }
 }
Example #8
0
    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);
    }
Example #9
0
 private void OnPositionUpdate(Position.Update update)
 {
     if (!CurrentlyBeingHeld() && PositionReader.Authority == Authority.NotAuthoritative)
     {
         if (update.coords.HasValue)
         {
             transform.position = update.coords.Value.ToUnityVector();
         }
     }
 }
Example #10
0
        private void UpdateComponent(EntityId entityId, Position.Update update)
        {
            var componentUpdateOps = new ComponentUpdateOp <Position>
            {
                EntityId = entityId,
                Update   = update
            };

            _updateComponentCallback(componentUpdateOps);
        }
Example #11
0
 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();
         }
     }
 }
Example #13
0
        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);
        }
Example #15
0
 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);
         }
     }
 }
Example #16
0
        private IEnumerator SetSpatialPosition(Vector3 position)
        {
            yield return(null);

            var spatialPositionUpdate = new Position.Update
            {
                Coords = position.ToSpatialCoordinates()
            };

            spatialPosition.SendUpdate(spatialPositionUpdate);
        }
Example #17
0
        private IEnumerator SetSpatialPosition(Vector3 position)
        {
            yield return(null);

            var spatialPositionUpdate = new Position.Update
            {
                Coords = Coordinates.FromUnityVector(position)
            };

            spatialPosition.SendUpdate(spatialPositionUpdate);
        }
Example #18
0
 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);
    }
Example #20
0
    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());
        }
Example #22
0
        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);
            }
        }
Example #23
0
        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));
            }
        }
Example #24
0
 // 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();
         }
     }
 }
Example #25
0
        // 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);
        }
Example #26
0
        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);
                }
            }
        }
Example #27
0
        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
            });
        }
Example #29
0
        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());
        }
Example #30
0
        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);
        }