Exemple #1
0
        void IPhotonPeerListener.OnOperationResponse(OperationResponse operationResponse)
        {
            switch (operationResponse.OperationCode)
            {
            case (byte)OperationCode.SubscribeCounter:
            {
                // init first engine
                var newPage = new GameTabPage {
                    Padding = new Padding(3), UseVisualStyleBackColor = true
                };
                this.tabControlTabs.TabPages.Add(newPage);
                this.StartEngine(newPage, Program.GetDefaultSettings());
                newPage.Run();
                break;
            }

            case (byte)OperationCode.RadarSubscribe:
            {
                break;
            }

            default:
            {
                log.ErrorFormat("diagnostics: unexpected return {0}", operationResponse.ReturnCode);
                break;
            }
            }
        }
Exemple #2
0
        /// <summary>
        /// The on paint.
        /// </summary>
        /// <param name="e">
        /// The event args.
        /// </param>
        protected override void OnPaint(PaintEventArgs e)
        {
            if (this.worldData != null)
            {
                var boardSize = new[] { e.ClipRectangle.Width, e.ClipRectangle.Height };
                GameTabPage.PaintGrid(e.Graphics, boardSize, this.worldData);

                WorldData world  = this.worldData;
                float     width  = world.Width;
                float     height = world.Height;
                float     w      = boardSize[0] / width;
                float     h      = boardSize[1] / height;
                float     minW   = Math.Max(4, w);
                float     minH   = Math.Max(4, h);

                Color color = Color.DeepPink;
                var   brush = new SolidBrush(color);

                foreach (float[] entry in this.itemPositions.Values)
                {
                    float x = ((this.worldData.BottomRightCorner[0] - entry[0]) * w) - 1;
                    float y = (entry[1] * h) - 1;

                    e.Graphics.FillRectangle(brush, x - (minW / 2) + 1, y - (minH / 2) + 1, minW - 1, minH - 1);
                }

                string rttString = string.Format("Online: {0}", this.itemPositions.Count);
                e.Graphics.DrawString(rttString, this.Font, Settings.IslandTextBrush, 0, 0);
            }
        }
Exemple #3
0
        /// <summary>
        /// The handle game world entered.
        /// </summary>
        /// <param name="page">
        /// The game page.
        /// </param>
        private void HandleGameWorldEntered(GameTabPage page)
        {
            page.WorldEntered -= this.HandleGameWorldEntered;

            if (!this.tabPageRadar.Initialized)
            {
                this.tabPageRadar.Initialize(page.Game.WorldData);
                Operations.RadarSubscribe(this.diagnosticsPeer, page.Game.WorldData.Name);
            }
        }
Exemple #4
0
        /// <summary>
        /// The on text box auto move velocity leave.
        /// </summary>
        /// <param name="sender">
        /// The sender.
        /// </param>
        /// <param name="e">
        /// The event args.
        /// </param>
        private void OnTextBoxAutoMoveVelocityLeave(object sender, EventArgs e)
        {
            GameTabPage page = this.GetCurrentEnginePage();

            if (page == null)
            {
                return;
            }

            ((Settings)page.Game.Settings).AutoMoveVelocity = int.Parse(this.textBoxAutoMoveVelocity.Text);
        }
Exemple #5
0
        /// <summary>
        /// Change game engine's actor name on TextboxName changed.
        /// </summary>
        private void OnTextBoxNameTextChanged(object sender, EventArgs e)
        {
            GameTabPage page = this.GetCurrentGamePage();

            if (page == null)
            {
                return;
            }

            page.Game.Avatar.SetText(this.textBoxPlayerText.Text);
        }
Exemple #6
0
        /// <summary>
        /// The on text box send movement leave.
        /// </summary>
        /// <param name="sender">
        /// The sender.
        /// </param>
        /// <param name="e">
        /// The event args.
        /// </param>
        private void OnTextBoxSendMovementLeave(object sender, EventArgs e)
        {
            GameTabPage page = this.GetCurrentEnginePage();

            if (page == null)
            {
                return;
            }

            ((Settings)page.Game.Settings).SendInterval = int.Parse(this.textBoxSendMovementInterval.Text);
        }
Exemple #7
0
        /// <summary>
        /// The on check box send reliable checked changed.
        /// </summary>
        /// <param name="sender">
        /// The sender.
        /// </param>
        /// <param name="e">
        /// The event args.
        /// </param>
        private void OnCheckBoxSendReliableCheckedChanged(object sender, EventArgs e)
        {
            GameTabPage page = this.GetCurrentEnginePage();

            if (page == null)
            {
                return;
            }

            page.Game.Settings.SendReliable = this.checkBoxSendReliable.Checked;
        }
Exemple #8
0
        /// <summary>
        /// tag current game engine to settings tab or apply settings when switching back from settings tab
        /// </summary>
        /// <param name="sender">
        /// The sender.
        /// </param>
        /// <param name="e">
        /// The event args.
        /// </param>
        private void OnTabControlTabsSelectedIndexChanged(object sender, EventArgs e)
        {
            GameTabPage page = this.GetCurrentEnginePage();

            if (page != null)
            {
                this.InitTabSettings(page);
            }
            else if (this.tabControlTabs.SelectedTab == this.tabPageLog)
            {
                this.textBoxLog.ScrollToCaret();
            }
        }
Exemple #9
0
        /// <summary>
        /// change color on buttonColor click
        /// </summary>
        /// <param name="sender">
        /// The sender.
        /// </param>
        /// <param name="e">
        /// The event args.
        /// </param>
        private void OnButtonColorClick(object sender, EventArgs e)
        {
            var colorDialog = new ColorDialog();

            if (colorDialog.ShowDialog() != DialogResult.Cancel)
            {
                this.buttonPlayerColor.BackColor = colorDialog.Color;
                GameTabPage page = this.GetCurrentEnginePage();
                if (page != null)
                {
                    page.Game.Avatar.SetColor(colorDialog.Color.ToArgb());
                }
            }
        }
Exemple #10
0
        /// <summary>
        /// The stop engine.
        /// </summary>
        /// <param name="page">
        /// The game page.
        /// </param>
        private void StopEngine(GameTabPage page)
        {
            if (this.tabControlTabs.SelectedTab == page)
            {
                // set focus on tab before closing tab
                this.tabControlTabs.SelectedIndex = Math.Max(0, this.tabControlTabs.SelectedIndex - 1);
            }

            // shut down engine (event handlers are removed in OnGameStateChanged handler)
            page.Game.Disconnect();

            // remove tab
            this.tabControlTabs.Controls.Remove(page);
            page.Dispose();
        }
Exemple #11
0
        /// <summary>
        /// start/stop auto moving when checkBoxAutoMove changed.
        /// </summary>
        /// <param name="sender">
        /// The sender.
        /// </param>
        /// <param name="e">
        /// The event args.
        /// </param>
        private void OnCheckBoxAutoMoveCheckedChanged(object sender, EventArgs e)
        {
            GameTabPage page = this.GetCurrentEnginePage();

            if (page == null)
            {
                return;
            }

            ((Settings)page.Game.Settings).AutoMove = this.checkBoxAutoMoveEnabled.Checked;

            if (this.checkBoxAutoMoveEnabled.Checked)
            {
                page.AutoMove();
            }
        }
Exemple #12
0
        /// <summary>
        /// The start engine.
        /// </summary>
        /// <param name="page">
        /// The game page.
        /// </param>
        /// <param name="settings">
        /// The settings.
        /// </param>
        private void StartEngine(GameTabPage page, Settings settings)
        {
            var engine = new Game(page, settings, Environment.UserName + ++this.gameCounter);
            var peer   = new PhotonPeer(engine, settings.UseTcp);

            ////{
            ////    DebugOut = log.IsDebugEnabled ? DE.Exitgames.Neutron.Client.NPeer.DebugLevel.ALL : DE.Exitgames.Neutron.Client.NPeer.DebugLevel.INFO
            ////};
            if (!this.tabPageRadar.Initialized)
            {
                page.WorldEntered += this.HandleGameWorldEntered;
            }

            engine.Initialize(peer);
            page.Initialize(engine);

            // set focus on game tab
            this.tabControlTabs.SelectedTab = page;
        }
Exemple #13
0
        /////// <summary>
        /////// The initialize.
        /////// </summary>
        ////private void Initialize()
        ////{
        ////    LogAppender.OnLog += this.LogText;
        ////    this.tabPageArea.Run();
        ////}

        /// <summary>
        /// tag page to settings tab and load values from game engine settings
        /// </summary>
        /// <param name="page">
        /// The game tab page.
        /// </param>
        private void InitTabSettings(GameTabPage page)
        {
            this.tabPageSettings.Tag = page;
            if (page != null)
            {
                Game engine   = page.Game;
                var  settings = (Settings)engine.Settings;

                this.tabPageSettings.Text             = engine.Avatar.Text;
                this.textBoxSendMovementInterval.Text = settings.SendInterval.ToString();
                this.textBoxAutoMoveInterval.Text     = settings.AutoMoveInterval.ToString();
                this.textBoxPlayerText.Text           = engine.Avatar.Text;
                this.buttonPlayerColor.BackColor      = Color.FromArgb(engine.Avatar.Color);
                this.checkBoxSendReliable.Checked     = settings.SendReliable;
                this.textBoxAutoMoveVelocity.Text     = settings.AutoMoveVelocity.ToString();
                this.checkBoxAutoMoveEnabled.Checked  = settings.AutoMove;
            }
            else
            {
                this.tabPageSettings.Text = "Settings";
            }
        }
        /// <summary>
        /// The handle game world entered.
        /// </summary>
        /// <param name="page">
        /// The game page.
        /// </param>
        private void HandleGameWorldEntered(GameTabPage page)
        {
            page.WorldEntered -= this.HandleGameWorldEntered;

            if (!this.tabPageRadar.Initialized)
            {
                this.tabPageRadar.Initialize(page.Game.WorldData);
                Operations.RadarSubscribe(this.diagnosticsPeer, page.Game.WorldData.Name);
            }
        }
        void IPhotonPeerListener.OnOperationResponse(OperationResponse operationResponse)
        {
            switch (operationResponse.OperationCode)
            {
                case (byte)OperationCode.SubscribeCounter:
                    {
                        // init first engine
                        var newPage = new GameTabPage { Padding = new Padding(3), UseVisualStyleBackColor = true };
                        this.tabControlTabs.TabPages.Add(newPage);
                        this.StartEngine(newPage, Program.GetDefaultSettings());
                        newPage.Run();
                        break;
                    }

                case (byte)OperationCode.RadarSubscribe:
                    {
                        break;
                    }

                default:
                    {
                        log.ErrorFormat("diagnostics: unexpected return {0}", operationResponse.ReturnCode);
                        break;
                    }
            }
        }
Exemple #16
0
        private void OnKeyDown(object sender, KeyEventArgs e)
        {
            // ignore keyboard when entering text
            if (this.textBoxPlayerText.Focused)
            {
                return;
            }

            switch (e.KeyCode)
            {
            case Keys.Space:
            {
                this.tabControlTabs.SuspendLayout();
                if (this.tabControlTabs.SelectedTab == this.tabPageSettings)
                {
                    var t = this.tabPageSettings.Tag as TabPage;
                    this.tabControlTabs.SelectedTab = t;
                }
                else
                {
                    this.tabControlTabs.SelectedTab = this.tabPageSettings;
                }

                this.tabControlTabs.ResumeLayout(true);

                return;
            }

            case Keys.Oemplus:
            case Keys.Add:
            {
                var newPage = new GameTabPage {
                    Padding = new Padding(3), UseVisualStyleBackColor = true
                };
                this.tabControlTabs.TabPages.Add(newPage);
                this.StartGame(newPage, Program.GetDefaultSettings());
                newPage.Run();
                return;
            }
            }

            var page = this.tabControlTabs.SelectedTab as GameTabPage;

            if (page == null)
            {
                return;
            }

            Game game     = page.Game;
            var  settings = (Settings)game.Settings;

            switch (e.KeyCode)
            {
            case Keys.M:
            {
                if (settings.AutoMove)
                {
                    settings.AutoMove = false;
                }
                else
                {
                    settings.AutoMove = true;
                    page.AutoMove();
                }

                break;
            }

            case Keys.W:
            case Keys.NumPad8:
            {
                game.Avatar.MoveRelative(AddVelocity(Game.MoveUp, settings.AutoMoveVelocity), Vector.Zero);
                break;
            }

            case Keys.A:
            case Keys.NumPad4:
            {
                game.Avatar.MoveRelative(AddVelocity(Game.MoveLeft, settings.AutoMoveVelocity), Vector.Zero);
                break;
            }

            case Keys.S:
            case Keys.NumPad2:
            {
                game.Avatar.MoveRelative(AddVelocity(Game.MoveDown, settings.AutoMoveVelocity), Vector.Zero);
                break;
            }

            case Keys.D:
            case Keys.NumPad6:
            {
                game.Avatar.MoveRelative(AddVelocity(Game.MoveRight, settings.AutoMoveVelocity), Vector.Zero);
                break;
            }

            case Keys.NumPad5:
            {
                game.Avatar.MoveAbsolute(game.WorldData.BoundingBox.Max / 2, Vector.Zero);
                break;
            }

            case Keys.NumPad7:
            {
                game.Avatar.MoveRelative(AddVelocity(Game.MoveUpLeft, settings.AutoMoveVelocity), Vector.Zero);
                break;
            }

            case Keys.NumPad9:
            {
                game.Avatar.MoveRelative(AddVelocity(Game.MoveUpRight, settings.AutoMoveVelocity), Vector.Zero);
                break;
            }

            case Keys.NumPad1:
            {
                game.Avatar.MoveRelative(AddVelocity(Game.MoveDownLeft, settings.AutoMoveVelocity), Vector.Zero);
                break;
            }

            case Keys.NumPad3:
            {
                game.Avatar.MoveRelative(AddVelocity(Game.MoveDownRight, settings.AutoMoveVelocity), Vector.Zero);
                break;
            }

            case Keys.OemMinus:
            case Keys.Subtract:
            {
                this.StopGame(page);
                break;
            }

            case Keys.Insert:
            {
                page.SpawnBot();
                break;
            }

            case Keys.Delete:
            {
                page.DestroyBot();
                break;
            }

            case Keys.OemOpenBrackets:
            {
                Vector viewDistance = new Vector(page.MainCamera.ViewDistanceEnter);
                viewDistance.X = Math.Min(page.Game.WorldData.Width, viewDistance.X - (page.Game.WorldData.TileDimensions.X / 2));
                viewDistance.Y = Math.Min(page.Game.WorldData.Height, viewDistance.Y - (page.Game.WorldData.TileDimensions.Y / 2));
                page.MainCamera.SetViewDistance(viewDistance);
                break;
            }

            case Keys.OemCloseBrackets:
            {
                Vector viewDistance = new Vector(page.MainCamera.ViewDistanceEnter);
                viewDistance.X = Math.Min(page.Game.WorldData.Width, viewDistance.X + (page.Game.WorldData.TileDimensions.X / 2));
                viewDistance.Y = Math.Min(page.Game.WorldData.Height, viewDistance.Y + (page.Game.WorldData.TileDimensions.Y / 2));
                page.MainCamera.SetViewDistance(viewDistance);
                break;
            }
            }
        }
        /// <summary>
        /// The start engine.
        /// </summary>
        /// <param name="page">
        /// The game page.
        /// </param>
        /// <param name="settings">
        /// The settings.
        /// </param>
        private void StartEngine(GameTabPage page, Settings settings)
        {
            var engine = new Game(page, settings, Environment.UserName + ++this.gameCounter);
            var peer = new PhotonPeer(engine, settings.UseTcp);

            ////{
            ////    DebugOut = log.IsDebugEnabled ? DE.Exitgames.Neutron.Client.NPeer.DebugLevel.ALL : DE.Exitgames.Neutron.Client.NPeer.DebugLevel.INFO 
            ////};
            if (!this.tabPageRadar.Initialized)
            {
                page.WorldEntered += this.HandleGameWorldEntered;
            }

            engine.Initialize(peer);
            page.Initialize(engine);

            // set focus on game tab
            this.tabControlTabs.SelectedTab = page;
        }
        /////// <summary>
        /////// The initialize.
        /////// </summary>
        ////private void Initialize()
        ////{
        ////    LogAppender.OnLog += this.LogText;
        ////    this.tabPageArea.Run();
        ////}

        /// <summary>
        /// tag page to settings tab and load values from game engine settings
        /// </summary>
        /// <param name="page">
        /// The game tab page.
        /// </param>
        private void InitTabSettings(GameTabPage page)
        {
            this.tabPageSettings.Tag = page;
            if (page != null)
            {
                Game engine = page.Game;
                var settings = (Settings)engine.Settings;

                this.tabPageSettings.Text = engine.Avatar.Text;
                this.textBoxSendMovementInterval.Text = settings.SendInterval.ToString();
                this.textBoxAutoMoveInterval.Text = settings.AutoMoveInterval.ToString();
                this.textBoxPlayerText.Text = engine.Avatar.Text;
                this.buttonPlayerColor.BackColor = Color.FromArgb(engine.Avatar.Color);
                this.checkBoxSendReliable.Checked = settings.SendReliable;
                this.textBoxAutoMoveVelocity.Text = settings.AutoMoveVelocity.ToString();
                this.checkBoxAutoMoveEnabled.Checked = settings.AutoMove;
            }
            else
            {
                this.tabPageSettings.Text = "Settings";
            }
        }
        /// <summary>
        /// The on key down.
        /// </summary>
        /// <param name="sender">
        /// The sender.
        /// </param>
        /// <param name="e">
        /// The event args.
        /// </param>
        private void OnKeyDown(object sender, KeyEventArgs e)
        {
            // ignore keyboard when entering text
            if (this.textBoxPlayerText.Focused)
            {
                return;
            }

            switch (e.KeyCode)
            {
                case Keys.Space:
                    {
                        this.tabControlTabs.SuspendLayout();
                        if (this.tabControlTabs.SelectedTab == this.tabPageSettings)
                        {
                            var t = this.tabPageSettings.Tag as TabPage;
                            this.tabControlTabs.SelectedTab = t;
                        }
                        else
                        {
                            this.tabControlTabs.SelectedTab = this.tabPageSettings;
                        }

                        this.tabControlTabs.ResumeLayout(true);

                        return;
                    }

                case Keys.Oemplus:
                case Keys.Add:
                    {
                        var newPage = new GameTabPage { Padding = new Padding(3), UseVisualStyleBackColor = true };
                        this.tabControlTabs.TabPages.Add(newPage);
                        this.StartEngine(newPage, Program.GetDefaultSettings());
                        newPage.Run();
                        return;
                    }
            }

            var page = this.tabControlTabs.SelectedTab as GameTabPage;
            if (page == null)
            {
                return;
            }

            Game engine = page.Game;
            var settings = (Settings)engine.Settings;

            switch (e.KeyCode)
            {
                case Keys.M:
                    {
                        if (settings.AutoMove)
                        {
                            settings.AutoMove = false;
                        }
                        else
                        {
                            settings.AutoMove = true;
                            page.AutoMove();
                        }

                        break;
                    }

                case Keys.W:
                case Keys.NumPad8:
                    {
                        engine.Avatar.MoveRelative(AddVelocity(Game.MoveUp, settings.AutoMoveVelocity), null);
                        break;
                    }

                case Keys.A:
                case Keys.NumPad4:
                    {
                        engine.Avatar.MoveRelative(AddVelocity(Game.MoveLeft, settings.AutoMoveVelocity), null);
                        break;
                    }

                case Keys.S:
                case Keys.NumPad2:
                    {
                        engine.Avatar.MoveRelative(AddVelocity(Game.MoveDown, settings.AutoMoveVelocity), null);
                        break;
                    }

                case Keys.D:
                case Keys.NumPad6:
                    {
                        engine.Avatar.MoveRelative(AddVelocity(Game.MoveRight, settings.AutoMoveVelocity), null);
                        break;
                    }

                case Keys.NumPad5:
                    {
                        engine.Avatar.MoveAbsolute(new[] { engine.WorldData.BottomRightCorner[0] / 2, engine.WorldData.BottomRightCorner[1] / 2 }, null);
                        break;
                    }

                case Keys.NumPad7:
                    {
                        engine.Avatar.MoveRelative(AddVelocity(Game.MoveUpLeft, settings.AutoMoveVelocity), null);
                        break;
                    }

                case Keys.NumPad9:
                    {
                        engine.Avatar.MoveRelative(AddVelocity(Game.MoveUpRight, settings.AutoMoveVelocity), null);
                        break;
                    }

                case Keys.NumPad1:
                    {
                        engine.Avatar.MoveRelative(AddVelocity(Game.MoveDownLeft, settings.AutoMoveVelocity), null);
                        break;
                    }

                case Keys.NumPad3:
                    {
                        engine.Avatar.MoveRelative(AddVelocity(Game.MoveDownRight, settings.AutoMoveVelocity), null);
                        break;
                    }

                case Keys.OemMinus:
                case Keys.Subtract:
                    {
                        this.StopEngine(page);
                        break;
                    }

                case Keys.Insert:
                    {
                        page.SpawnBot();
                        break;
                    }

                case Keys.Delete:
                    {
                        page.DestroyBot();
                        break;
                    }
            }
        }
Exemple #20
0
        /// <summary>
        /// The on key down.
        /// </summary>
        /// <param name="sender">
        /// The sender.
        /// </param>
        /// <param name="e">
        /// The event args.
        /// </param>
        private void OnKeyDown(object sender, KeyEventArgs e)
        {
            // ignore keyboard when entering text
            if (this.textBoxPlayerText.Focused)
            {
                return;
            }

            switch (e.KeyCode)
            {
            case Keys.Space:
            {
                this.tabControlTabs.SuspendLayout();
                if (this.tabControlTabs.SelectedTab == this.tabPageSettings)
                {
                    var t = this.tabPageSettings.Tag as TabPage;
                    this.tabControlTabs.SelectedTab = t;
                }
                else
                {
                    this.tabControlTabs.SelectedTab = this.tabPageSettings;
                }

                this.tabControlTabs.ResumeLayout(true);

                return;
            }

            case Keys.Oemplus:
            case Keys.Add:
            {
                var newPage = new GameTabPage {
                    Padding = new Padding(3), UseVisualStyleBackColor = true
                };
                this.tabControlTabs.TabPages.Add(newPage);
                this.StartEngine(newPage, Program.GetDefaultSettings());
                newPage.Run();
                return;
            }
            }

            var page = this.tabControlTabs.SelectedTab as GameTabPage;

            if (page == null)
            {
                return;
            }

            Game engine   = page.Game;
            var  settings = (Settings)engine.Settings;

            switch (e.KeyCode)
            {
            case Keys.M:
            {
                if (settings.AutoMove)
                {
                    settings.AutoMove = false;
                }
                else
                {
                    settings.AutoMove = true;
                    page.AutoMove();
                }

                break;
            }

            case Keys.W:
            case Keys.NumPad8:
            {
                engine.Avatar.MoveRelative(AddVelocity(Game.MoveUp, settings.AutoMoveVelocity), null);
                break;
            }

            case Keys.A:
            case Keys.NumPad4:
            {
                engine.Avatar.MoveRelative(AddVelocity(Game.MoveLeft, settings.AutoMoveVelocity), null);
                break;
            }

            case Keys.S:
            case Keys.NumPad2:
            {
                engine.Avatar.MoveRelative(AddVelocity(Game.MoveDown, settings.AutoMoveVelocity), null);
                break;
            }

            case Keys.D:
            case Keys.NumPad6:
            {
                engine.Avatar.MoveRelative(AddVelocity(Game.MoveRight, settings.AutoMoveVelocity), null);
                break;
            }

            case Keys.NumPad5:
            {
                engine.Avatar.MoveAbsolute(new[] { engine.WorldData.BottomRightCorner[0] / 2, engine.WorldData.BottomRightCorner[1] / 2 }, null);
                break;
            }

            case Keys.NumPad7:
            {
                engine.Avatar.MoveRelative(AddVelocity(Game.MoveUpLeft, settings.AutoMoveVelocity), null);
                break;
            }

            case Keys.NumPad9:
            {
                engine.Avatar.MoveRelative(AddVelocity(Game.MoveUpRight, settings.AutoMoveVelocity), null);
                break;
            }

            case Keys.NumPad1:
            {
                engine.Avatar.MoveRelative(AddVelocity(Game.MoveDownLeft, settings.AutoMoveVelocity), null);
                break;
            }

            case Keys.NumPad3:
            {
                engine.Avatar.MoveRelative(AddVelocity(Game.MoveDownRight, settings.AutoMoveVelocity), null);
                break;
            }

            case Keys.OemMinus:
            case Keys.Subtract:
            {
                this.StopEngine(page);
                break;
            }

            case Keys.Insert:
            {
                page.SpawnBot();
                break;
            }

            case Keys.Delete:
            {
                page.DestroyBot();
                break;
            }
            }
        }
        /// <summary>
        /// The stop engine.
        /// </summary>
        /// <param name="page">
        /// The game page.
        /// </param>
        private void StopEngine(GameTabPage page)
        {
            if (this.tabControlTabs.SelectedTab == page)
            {
                // set focus on tab before closing tab
                this.tabControlTabs.SelectedIndex = Math.Max(0, this.tabControlTabs.SelectedIndex - 1);
            }

            // shut down engine (event handlers are removed in OnGameStateChanged handler)
            page.Game.Disconnect();

            // remove tab 
            this.tabControlTabs.Controls.Remove(page);
            page.Dispose();
        }
Exemple #22
0
        private void OnKeyDown(object sender, KeyEventArgs e)
        {
            // ignore keyboard when entering text
            if (this.textBoxPlayerText.Focused)
            {
                return;
            }

            switch (e.KeyCode)
            {
                case Keys.Space:
                    {
                        this.tabControlTabs.SuspendLayout();
                        if (this.tabControlTabs.SelectedTab == this.tabPageSettings)
                        {
                            var t = this.tabPageSettings.Tag as TabPage;
                            this.tabControlTabs.SelectedTab = t;
                        }
                        else
                        {
                            this.tabControlTabs.SelectedTab = this.tabPageSettings;
                        }

                        this.tabControlTabs.ResumeLayout(true);

                        return;
                    }

                case Keys.Oemplus:
                case Keys.Add:
                    {
                        var newPage = new GameTabPage { Padding = new Padding(3), UseVisualStyleBackColor = true };
                        this.tabControlTabs.TabPages.Add(newPage);
                        this.StartGame(newPage, Program.GetDefaultSettings());
                        newPage.Run();
                        return;
                    }
            }

            var page = this.tabControlTabs.SelectedTab as GameTabPage;
            if (page == null)
            {
                return;
            }

            Game game = page.Game;
            var settings = (Settings)game.Settings;

            switch (e.KeyCode)
            {
                case Keys.M:
                    {
                        if (settings.AutoMove)
                        {
                            settings.AutoMove = false;
                        }
                        else
                        {
                            settings.AutoMove = true;
                            page.AutoMove();
                        }

                        break;
                    }

                case Keys.W:
                case Keys.NumPad8:
                    {
                        game.Avatar.MoveRelative(AddVelocity(Game.MoveUp, settings.AutoMoveVelocity), Vector.Zero);
                        break;
                    }

                case Keys.A:
                case Keys.NumPad4:
                    {
                        game.Avatar.MoveRelative(AddVelocity(Game.MoveLeft, settings.AutoMoveVelocity), Vector.Zero);
                        break;
                    }

                case Keys.S:
                case Keys.NumPad2:
                    {
                        game.Avatar.MoveRelative(AddVelocity(Game.MoveDown, settings.AutoMoveVelocity), Vector.Zero);
                        break;
                    }

                case Keys.D:
                case Keys.NumPad6:
                    {
                        game.Avatar.MoveRelative(AddVelocity(Game.MoveRight, settings.AutoMoveVelocity), Vector.Zero);
                        break;
                    }

                case Keys.NumPad5:
                    {
                        game.Avatar.MoveAbsolute(game.WorldData.BoundingBox.Max / 2, Vector.Zero);
                        break;
                    }

                case Keys.NumPad7:
                    {
                        game.Avatar.MoveRelative(AddVelocity(Game.MoveUpLeft, settings.AutoMoveVelocity), Vector.Zero);
                        break;
                    }

                case Keys.NumPad9:
                    {
                        game.Avatar.MoveRelative(AddVelocity(Game.MoveUpRight, settings.AutoMoveVelocity), Vector.Zero);
                        break;
                    }

                case Keys.NumPad1:
                    {
                        game.Avatar.MoveRelative(AddVelocity(Game.MoveDownLeft, settings.AutoMoveVelocity), Vector.Zero);
                        break;
                    }

                case Keys.NumPad3:
                    {
                        game.Avatar.MoveRelative(AddVelocity(Game.MoveDownRight, settings.AutoMoveVelocity), Vector.Zero);
                        break;
                    }

                case Keys.OemMinus:
                case Keys.Subtract:
                    {
                        this.StopGame(page);
                        break;
                    }

                case Keys.Insert:
                    {
                        page.SpawnBot();
                        break;
                    }

                case Keys.Delete:
                    {
                        page.DestroyBot();
                        break;
                    }
                case Keys.OemOpenBrackets:
                    {
                        Vector viewDistance = new Vector(page.MainCamera.ViewDistanceEnter);
                        viewDistance.X = Math.Min(page.Game.WorldData.Width, viewDistance.X - (page.Game.WorldData.TileDimensions.X / 2));
                        viewDistance.Y = Math.Min(page.Game.WorldData.Height, viewDistance.Y - (page.Game.WorldData.TileDimensions.Y / 2));
                        page.MainCamera.SetViewDistance(viewDistance);
                        break;
                    }
                case Keys.OemCloseBrackets:
                    {
                        Vector viewDistance = new Vector(page.MainCamera.ViewDistanceEnter);
                        viewDistance.X = Math.Min(page.Game.WorldData.Width, viewDistance.X + (page.Game.WorldData.TileDimensions.X/2));
                        viewDistance.Y = Math.Min(page.Game.WorldData.Height, viewDistance.Y + (page.Game.WorldData.TileDimensions.Y/2));
                        page.MainCamera.SetViewDistance(viewDistance);
                        break;
                    }
            }
        }