public void MoveAndRotate(Vector3 moveIndicator, Vector3 rotationIndicator, MyCharacterMovementFlags movementFlags)
        {
            bool changed =
                CachedMovementState.MoveIndicator != moveIndicator ||
                CachedMovementState.RotationIndicator != rotationIndicator ||
                CachedMovementState.MovementFlags != movementFlags;

            if (changed)
            {
                CharacterInputMsg msg = new CharacterInputMsg();
                msg.CharacterEntityId = Entity.EntityId;
                msg.MoveIndicator     = moveIndicator;
                msg.RotationIndicator = rotationIndicator;
                msg.MovementFlags     = movementFlags;
                msg.Orientation       = Quaternion.CreateFromRotationMatrix(Entity.WorldMatrix);
                msg.Position          = Entity.WorldMatrix.Translation;
                CachedMovementState   = msg;

                if (!Sync.IsServer)
                {
                    Sync.Layer.SendMessageToServer(ref msg);
                }
                else
                {
                    Sync.Layer.SendMessageToAll(ref msg);
                }
            }
        }
        public void MoveAndRotate(Vector3 moveIndicator, Vector3 rotationIndicator, MyCharacterMovementFlags movementFlags)
        {
            bool changed =
                CachedMovementState.MoveIndicator != moveIndicator ||
                CachedMovementState.RotationIndicator != rotationIndicator ||
                CachedMovementState.MovementFlags != movementFlags;

            if (MyMultiplayer.Static != null && MyMultiplayer.Static.FrameCounter - m_lastUpdateFrame > 60)
            {  //Send input even if nothing changed, because clients can be moved by other forces and we need to sync them somehow at low framerate
                ResetUpdateTimer();
                changed = true;
            }

            if (changed)
            {
                CharacterInputMsg msg = new CharacterInputMsg();
                msg.CharacterEntityId = Entity.EntityId;
                msg.MoveIndicator     = moveIndicator;
                msg.RotationIndicator = rotationIndicator;
                msg.MovementFlags     = movementFlags;
                msg.Orientation       = Quaternion.CreateFromRotationMatrix(Entity.WorldMatrix);
                msg.Position          = Entity.WorldMatrix.Translation;
                CachedMovementState   = msg;

                if (!Sync.IsServer)
                {
                    Sync.Layer.SendMessageToServer(ref msg);
                }
                else
                {
                    Sync.Layer.SendMessageToAll(ref msg);
                }
            }
        }
        private static void OnCharacterInput(MySyncCharacter sync, ref CharacterInputMsg msg, MyNetworkClient sender)
        {
            sender.ClientFrameId     = msg.ClientFrameId;
            sync.CachedMovementState = msg;

            var matrix = MatrixD.CreateFromQuaternion(msg.Orientation);

            matrix.Translation      = msg.Position;
            sync.Entity.WorldMatrix = matrix;

            if (Sync.IsServer)
            {
                Sync.Layer.SendMessageToAllButOne(ref msg, sender.SteamUserId);
            }
        }
示例#4
0
        private static void OnCharacterInput(MySyncCharacter sync, ref CharacterInputMsg msg, MyNetworkClient sender)
        {
            sender.ClientFrameId = msg.ClientFrameId;

            if (sync.Entity.GetCurrentMovementState() != MyCharacterMovementEnum.Sitting && !sync.Entity.IsDead)
            {
                // Set orientation
                var pos = sync.Entity.PositionComp.GetPosition();
                var m   = Matrix.CreateFromQuaternion(msg.Orientation);
                m.Translation           = pos;
                sync.Entity.WorldMatrix = m;

                sync.m_moveIndicator     = msg.MoveIndicator;
                sync.m_rotationIndicator = msg.RotationIndicator;
                sync.m_movementFlags     = msg.MovementFlags;
            }
        }
        public void MoveAndRotate(Vector3 moveIndicator, Vector3 rotationIndicator, MyCharacterMovementFlags movementFlags)
        {
            bool changed = 
                CachedMovementState.MoveIndicator != moveIndicator ||
                CachedMovementState.RotationIndicator != rotationIndicator ||
                CachedMovementState.MovementFlags != movementFlags;

            if (changed)
            {
                CharacterInputMsg msg = new CharacterInputMsg();
                msg.CharacterEntityId = Entity.EntityId;
                msg.MoveIndicator = moveIndicator;
                msg.RotationIndicator = rotationIndicator;
                msg.MovementFlags = movementFlags;
                msg.Orientation = Quaternion.CreateFromRotationMatrix(Entity.WorldMatrix);
                msg.Position = Entity.WorldMatrix.Translation;
                CachedMovementState = msg;

                if (!Sync.IsServer)
                    Sync.Layer.SendMessageToServer(ref msg);
                else
                    Sync.Layer.SendMessageToAll(ref msg);            
            }
        }
        private static void OnCharacterInput(MySyncCharacter sync, ref CharacterInputMsg msg, MyNetworkClient sender)
        {
            sender.ClientFrameId = msg.ClientFrameId;
            sync.CachedMovementState = msg;

            var matrix = MatrixD.CreateFromQuaternion(msg.Orientation);
            matrix.Translation = msg.Position;
            sync.Entity.WorldMatrix = matrix;

            if (Sync.IsServer)
                Sync.Layer.SendMessageToAllButOne(ref msg, sender.SteamUserId);            
        }
        private static void OnCharacterInput(MySyncCharacter sync, ref CharacterInputMsg msg, MyNetworkClient sender)
        {
            sender.ClientFrameId = msg.ClientFrameId;

            if (sync.Entity.GetCurrentMovementState() != MyCharacterMovementEnum.Sitting && !sync.Entity.IsDead)
            {
                // Set orientation
                var pos = sync.Entity.PositionComp.GetPosition();
                var m = Matrix.CreateFromQuaternion(msg.Orientation);
                m.Translation = pos;
                sync.Entity.WorldMatrix = m;

                sync.m_moveIndicator = msg.MoveIndicator;
                sync.m_rotationIndicator = msg.RotationIndicator;
                sync.m_movementFlags = msg.MovementFlags;
            }
        }
示例#8
0
        public void MoveAndRotate(Vector3 moveIndicator, Vector3 rotationIndicator, MyCharacterMovementFlags movementFlags)
        {
            bool changed = 
                CachedMovementState.MoveIndicator != moveIndicator ||
                CachedMovementState.RotationIndicator != rotationIndicator ||
                CachedMovementState.MovementFlags != movementFlags;

            if (MyMultiplayer.Static != null && MyMultiplayer.Static.FrameCounter - m_lastUpdateFrame > 60)
            {  //Send input even if nothing changed, because clients can be moved by other forces and we need to sync them somehow at low framerate
                ResetUpdateTimer();
                changed = true;
            }

            if (changed)
            {
                CharacterInputMsg msg = new CharacterInputMsg();
                msg.CharacterEntityId = Entity.EntityId;
                msg.MoveIndicator = moveIndicator;
                msg.RotationIndicator = rotationIndicator;
                msg.MovementFlags = movementFlags;
                msg.Orientation = Quaternion.CreateFromRotationMatrix(Entity.WorldMatrix);
                msg.Position = Entity.WorldMatrix.Translation;
                CachedMovementState = msg;

                if (!Sync.IsServer)
                    Sync.Layer.SendMessageToServer(ref msg);
                else
                    Sync.Layer.SendMessageToAll(ref msg);            
            }
        }