public Message GuestStateChange(GuestInputChangeMessage message) { Player currentPlayer = _websocket.GetCurrentSessionPlayer(); Assert.ThrowIfNull(currentPlayer, "requires a user session", _websocket); GameInstance gameInstance = _websocket.FindPlayerGameInstance(currentPlayer); if (gameInstance != null) { var outgoingMessage = new GuestInputChangedMessage { Guest = currentPlayer.Id, Payload = message.Payload }; _websocket.Send(outgoingMessage, gameInstance.HostPlayer.Id); } return(null); }
// called when the game is guest (not hosting), gathers and sends user input to host private void SendInputAsGuest() { bool clicked = Input.GetMouseButtonDown(0); if (clicked) { SendGuestGroovyCommand(); clicked = false; // eat the click if a command is sent } var input = new GuestInput { mPos = GetMousePoint().Convert2d(), mDown = Input.GetMouseButton(0), mClicked = Input.GetMouseButtonDown(0), hArrows = Input.GetAxis("Horizontal"), vArrows = Input.GetAxis("Vertical"), btn1 = Input.GetButtonDown("Fire1"), btn2 = Input.GetButtonDown("Fire2"), btn3 = Input.GetButtonDown("Jump") }; if (lastGuestInput.mPos == null || input.mPos.X != lastGuestInput.mPos.X || input.mPos.Y != lastGuestInput.mPos.Y || input.mDown != lastGuestInput.mDown || input.hArrows != lastGuestInput.hArrows || input.vArrows != lastGuestInput.vArrows || input.btn1 != lastGuestInput.btn1 || input.btn2 != lastGuestInput.btn2 || input.btn3 != lastGuestInput.btn3) { var message = new GuestInputChangeMessage { Payload = input }; //Debug.Log($"SendInputAsGuest: {JsonConvert.SerializeObject(message)}"); stateFluxClient.SendRequest(message); lastGuestInput = input; } }