private void ClientMessenger_OnRecievedPlayerFiredPacket(BasePacket packet) { PlayerFiredPacket playerUpdate = (PlayerFiredPacket)packet; if (playerUpdate.PlayerID != _localPlayer.NetworkID) // Local laser has already been shot so don't shoot it again { _laserManager.FireRemoteLaserClient(new Vector2(playerUpdate.XPosition, playerUpdate.YPosition), playerUpdate.Rotation, playerUpdate.PlayerID, playerUpdate.SendDate, playerUpdate.LaserID, _playerColours[playerUpdate.PlayerID]); } }
public PlayerFiredPacket MakePlayerFiredPacket(float xPosition, float yPosition, float speed, float rotation) { PlayerFiredPacket packet = new PlayerFiredPacket { XPosition = xPosition, YPosition = yPosition, Speed = speed, Rotation = rotation }; return(packet); }
private KeyboardMovementInput ProcessInputForLocalPlayer(GameTime gameTime, InputInformation inputInfo) { KeyboardMovementInput input = new KeyboardMovementInput(); // Keyboard/Dpad controls if (inputInfo.CurrentKeyboardState.IsKeyDown(Keys.Left) || inputInfo.CurrentGamePadState.DPad.Left == ButtonState.Pressed) { input.LeftPressed = true; } if (inputInfo.CurrentKeyboardState.IsKeyDown(Keys.Right) || inputInfo.CurrentGamePadState.DPad.Right == ButtonState.Pressed) { input.RightPressed = true; } if (inputInfo.CurrentKeyboardState.IsKeyDown(Keys.Up) || inputInfo.CurrentGamePadState.DPad.Up == ButtonState.Pressed) { input.UpPressed = true; } if (inputInfo.CurrentKeyboardState.IsKeyDown(Keys.Down) || inputInfo.CurrentGamePadState.DPad.Down == ButtonState.Pressed) { input.DownPressed = true; } if (inputInfo.CurrentKeyboardState.IsKeyDown(Keys.Space) || inputInfo.CurrentGamePadState.Buttons.X == ButtonState.Pressed) { var laser = _laserManager.FireLocalLaserClient(gameTime, _localPlayer.Position, _localPlayer.Rotation, _playerColours[_localPlayer.NetworkID]); if (laser != null) { input.FirePressed = true; var dataPacket = _localPlayer.BuildUpdatePacket(); PlayerFiredPacket packet = NetworkPacketFactory.Instance.MakePlayerFiredPacket(dataPacket.XPosition, dataPacket.YPosition, dataPacket.Speed, dataPacket.Rotation); packet.TotalGameTime = (float)gameTime.TotalGameTime.TotalSeconds; // TOTAL GAME TIME NOT ELAPSED TIME! packet.LaserID = laser.LaserID; // Send the packet to the server SendMessageToTheServer(packet, MessageType.GI_ClientSend_PlayerFired); } } if (Application.APPLY_CLIENT_SIDE_PREDICTION) { _localPlayer.ApplyInputToPlayer(input, (float)gameTime.ElapsedGameTime.TotalSeconds); _localPlayer.Update((float)gameTime.ElapsedGameTime.TotalSeconds); } _localPlayer.UpdateAnimation(gameTime); return(input); }