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