public override void OnKeyDown(Keys key) { if (directConnectIPEnter) { if (key == Keys.Escape) { directConnectIPEnter = false; directConnectIP = ""; } if (key == Keys.Back && directConnectIP.Length > 0) { directConnectIP = directConnectIP.Substring(0, directConnectIP.Length - 1); } if (key == Keys.Enter) { // Try what was entered first as an IP, and then second as a host name. directConnectIPEnter = false; _P.PlaySound(InfiniminerSound.ClickHigh); IPAddress connectIp = null; if (!IPAddress.TryParse(directConnectIP, out connectIp)) { connectIp = null; try { IPAddress[] resolveResults = Dns.GetHostAddresses(directConnectIP); for (int i = 0; i < resolveResults.Length; i++) { if (resolveResults[i].AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) { connectIp = resolveResults[i]; break; } } } catch (Exception) { // So, GetHostAddresses() might fail, but we don't really care. Just leave connectIp as null. } } if (connectIp != null) { (_SM as InfiniminerGame).JoinGame(new IPEndPoint(connectIp, 5565)); nextState = "Infiniminer.States.LoadingState"; } directConnectIP = ""; } if (key == Keys.V && (Keyboard.GetState().IsKeyDown(Keys.LeftControl) || Keyboard.GetState().IsKeyDown(Keys.RightControl))) { try { directConnectIP += System.Windows.Forms.Clipboard.GetText(); } catch (Exception e) { } } else if (keyMap.IsKeyMapped(key)) { directConnectIP += keyMap.TranslateKey(key, false); } } else { if (key == Keys.Escape) { nextState = "Infiniminer.States.TitleState"; } } }
public override void OnKeyDown(Keys key) { // Exit! if (key == Keys.Y && Keyboard.GetState().IsKeyDown(Keys.Escape)) { _P.netClient.Disconnect("Client disconnected."); nextState = "Infiniminer.States.ServerBrowserState"; } // Pixelcide! if (key == Keys.K && Keyboard.GetState().IsKeyDown(Keys.Escape) && !_P.playerDead) { _P.KillPlayer("HAS COMMMITTED PIXELCIDE!"); } if (_P.chatMode != ChatMessageType.None) { // Put the characters in the chat buffer. if (key == Keys.Enter) { // If we have an actual message to send, fire it off at the server. if (_P.chatEntryBuffer.Length > 0) { NetBuffer msgBuffer = _P.netClient.CreateBuffer(); msgBuffer.Write((byte)InfiniminerMessage.ChatMessage); msgBuffer.Write((byte)_P.chatMode); msgBuffer.Write(_P.chatEntryBuffer); _P.netClient.SendMessage(msgBuffer, NetChannel.ReliableInOrder3); } _P.chatEntryBuffer = ""; _P.chatMode = ChatMessageType.None; } else if (key == Keys.Back) { if (_P.chatEntryBuffer.Length > 0) { _P.chatEntryBuffer = _P.chatEntryBuffer.Substring(0, _P.chatEntryBuffer.Length - 1); } } else if (key == Keys.Escape) { _P.chatEntryBuffer = ""; _P.chatMode = ChatMessageType.None; } else if (keyMap.IsKeyMapped(key)) { _P.chatEntryBuffer += keyMap.TranslateKey(key, Keyboard.GetState().IsKeyDown(Keys.LeftShift) || Keyboard.GetState().IsKeyDown(Keys.RightShift)); } return; } if (key == Keys.Y) { _P.chatMode = ChatMessageType.SayAll; } if (key == Keys.U) { _P.chatMode = _P.playerTeam == PlayerTeam.Red ? ChatMessageType.SayRedTeam : ChatMessageType.SayBlueTeam; } if (!_P.playerDead) { // Jump! if (key == Keys.Space) { Vector3 footPosition = _P.playerPosition + new Vector3(0f, -1.5f, 0f); if (_P.blockEngine.SolidAtPointForPlayer(footPosition) && _P.playerVelocity.Y == 0) { _P.playerVelocity.Y = JUMPVELOCITY; float amountBelowSurface = ((ushort)footPosition.Y) + 1 - footPosition.Y; _P.playerPosition.Y += amountBelowSurface + 0.01f; } } // Change weapon! if (key == Keys.E) { _P.PlaySound(InfiniminerSound.ClickLow); _P.playerToolSelected += 1; if (_P.playerToolSelected >= _P.playerTools.Length) { _P.playerToolSelected = 0; } } // Change block type! if (key == Keys.R && _P.playerTools[_P.playerToolSelected] == PlayerTools.ConstructionGun) { _P.PlaySound(InfiniminerSound.ClickLow); _P.playerBlockSelected += 1; if (_P.playerBlockSelected >= _P.playerBlocks.Length) { _P.playerBlockSelected = 0; } } // Deposit and withdraw from a bank. if (_P.AtBankTerminal()) { if (key == Keys.D1) { _P.DepositOre(); _P.PlaySound(InfiniminerSound.ClickHigh); } if (key == Keys.D2) { _P.WithdrawOre(); _P.PlaySound(InfiniminerSound.ClickHigh); } } // Radar pings. if (key == Keys.Q) { NetBuffer msgBuffer = _P.netClient.CreateBuffer(); msgBuffer.Write((byte)InfiniminerMessage.PlayerPing); msgBuffer.Write(_P.playerMyId); _P.netClient.SendMessage(msgBuffer, NetChannel.ReliableUnordered); } // Change class. if (key == Keys.M && _P.playerPosition.Y > 64 - InfiniminerGame.GROUND_LEVEL) { nextState = "Infiniminer.States.ClassSelectionState"; } // Change team. if (key == Keys.N) { nextState = "Infiniminer.States.TeamSelectionState"; } } }