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";
                }
            }
        }
Beispiel #2
0
        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";
                }
            }
        }