示例#1
0
        public void UpdatePosition(PosUpdateType type, Vector3 newPos, Quaternion newRot, bool teleport)
        {
            if (type == PosUpdateType.Pos)
            {
                newRot = _lastRot;
            }
            else if (type == PosUpdateType.Rot)
            {
                newPos = _lastPos;
            }

            _prevRot = _lastRot;
            _lastRot = newRot;

            if (Vector3.Distance(newPos, _lastPos) > TeleportThreshold || teleport)
            {
                _prevPos           = _lastPos;
                _lastPos           = newPos;
                _interpProgress    = 1.1f;
                transform.position = newPos;
                return;
            }

            _prevPos        = _lastPos;
            _lastPos        = newPos;
            _interpProgress = 0f;
        }
示例#2
0
        public byte[] GetPosUpdateMessage(out PosUpdateType type)
        {
            var p = NeedSyncPosition;
            var r = NeedSyncRotation;

            type = PosUpdateType.None;
            if (p && r)
            {
                type = PosUpdateType.PosRot;
                var c = new S_UpdateEntityPosRotMessage {
                    CommandID = (byte)PosUpdateType.PosRot, Position = Position, Rotation = PackedRotation, UID = _owner.UID
                };
                return(ZeroFormatterSerializer.Serialize(c));
            }
            if (p)
            {
                type = PosUpdateType.Pos;
                var c = new S_UpdateEntityPosMessage {
                    CommandID = (byte)PosUpdateType.Pos, Position = Position, UID = _owner.UID
                };
                return(ZeroFormatterSerializer.Serialize(c));
            }
            if (r)
            {
                type = PosUpdateType.Rot;
                var c = new S_UpdateEntityRotMessage {
                    CommandID = (byte)PosUpdateType.Rot, Rotation = PackedRotation, UID = _owner.UID
                };
                return(ZeroFormatterSerializer.Serialize(c));
            }
            return(null);
        }
        public void UpdatePosition(uint uid, PosUpdateType type, Vector3 pos, Quaternion rot)
        {
            var e = GetEntity(uid);

            if (e)
            {
                e.UpdatePosition(type, pos, rot);
            }
        }
 public void UpdatePosition(PosUpdateType type, Vector3 pos, Quaternion rot)
 {
     _mover.UpdatePosition(type, pos, rot, false);
 }