コード例 #1
0
        /// <summary>
        /// Funkce se stara o zpracovani udalosti z DXInput vstupu
        /// </summary>
        /// <param name="actions">Vycet akci, ktere se maji provest</param>
        void ProcessActions(List <Input.Action> actions)
        {
            #region Actions from keyboard and mouse
            while (actions.Count > 0)
            {
                switch (actions[0])
                {
                case Input.Action.Action1:
                    if (game != null)
                    {
                        if (action1Stoper > 0)
                        {
                            break;
                        }

                        WRG.Camera cam = WRG.Camera.GetCameraInstance();
                        Vector3    dir = cam.GetDirectionVector2(graphic.GetCursorPosition());

                        Input.Action action = actions[0];
                        game.Logic.Spell(action, dir);

                        //WiccanRede.Objects.Fireball f = new WiccanRede.Objects.Fireball("Hrac", Graphics.GraphicCore.GetInitializator().GetDevice(), cam.GetVector3Position(), dir, new AI.ActionInfo(), null);
                        //Graphics.GraphicCore.GetCurrentSceneManager().AddObject(f.GetFireName(), f, null as Microsoft.DirectX.Direct3D.Effect);

                        action1Stoper = 50f;
                    }
                    break;

                case Input.Action.Action2:
                    if (game != null)
                    {
                        if (action2Stoper > 0)
                        {
                            break;
                        }

                        Vector2 pos = graphic.GetCursorPosition();
                        List <Graphics.Scene.SceneManager.SceneObject> selectedObjects = Graphics.GraphicCore.GetCurrentSceneManager().GetAllObjects((int)pos.X, (int)pos.Y);

                        if (selectedObjects.Count > 0)
                        {
                            int t = 0;

                            while (t < selectedObjects.Count && selectedObjects[t].name.StartsWith("Hrac") || selectedObjects[t].generalObject.isEquiped())
                            {
                                t++;
                            }

                            if (t >= selectedObjects.Count)
                            {
                                break;
                            }

                            float distance = selectedObjects[t].generalObject.GetDistanceFromCamera();

                            if (distance > selectedObjects[t].generalObject.GetSphereRadius() + 100)
                            {
                                break;
                            }

                            WiccanRede.Graphics.HUD.DrawText("Byl označen objekt " + selectedObjects[t].name, "System", System.Drawing.Color.Red, false);
                            Logger.AddInfo("Oznacen objekt: " + selectedObjects[t].name);

                            if (!(selectedObjects[t].generalObject is WiccanRede.Objects.PickupObject))
                            {
                                game.FireGameEventUp(selectedObjects[t].name, "click");
                            }
                            else
                            {
                                game.PickupObject(selectedObjects[t].name);
                                (selectedObjects[t].generalObject as PickupObject).Pickup();
                            }

                            action2Stoper = 300f;
                        }
                    }
                    break;

                case Input.Action.MoveForwardStart:
                    direction.X += 1;
                    break;

                case Input.Action.MoveForwardStop:
                    direction.X -= 1;
                    break;

                case Input.Action.MoveRightStart:
                    direction.Y += 1;
                    break;

                case Input.Action.MoveRightStop:
                    direction.Y -= 1;
                    break;

                case Input.Action.MoveBackwardStart:
                    direction.X += -1;
                    break;

                case Input.Action.MoveBackwardStop:
                    direction.X -= -1;
                    break;

                case Input.Action.MoveLeftStart:
                    direction.Y += -1;
                    break;

                case Input.Action.MoveLeftStop:
                    direction.Y -= -1;
                    break;

                case Input.Action.LookAround:
                    WRG.CameraDriver.LookAround(input.MouseRelativeMove.X, input.MouseRelativeMove.Y);
                    break;

                case Input.Action.Exit:
                    drawMenu = true;
                    this.menu.CurrentMenuResult = MenuResult.None;
                    break;
                }

                actions.RemoveAt(0);
            }
            #endregion

            #region Moving by Camera
            if (direction.Length() != 0 && !WRG.Console.ConsoleIsShowed())
            {
                float angle = 0f;

                if (direction.X == 1 && direction.Y == 1)
                {
                    angle = (float)Math.PI / 4f;
                }
                else if (direction.X == 1 && direction.Y == -1)
                {
                    angle = -(float)Math.PI / 4f;
                }
                else if (direction.X == -1 && direction.Y == -1)
                {
                    angle = -3f * (float)Math.PI / 4f;
                }
                else if (direction.X == -1 && direction.Y == 1)
                {
                    angle = 3f * (float)Math.PI / 4f;
                }
                else if (direction.X == 1)
                {
                    angle = 0;
                }
                else if (direction.X == -1)
                {
                    angle = (float)Math.PI;
                }
                else if (direction.Y == 1)
                {
                    angle = (float)Math.PI / 2f;
                }
                else if (direction.Y == -1)
                {
                    angle = -(float)Math.PI / 2f;
                }

                game.Logic.PlayerMove(angle);
            }

            #endregion

            #region Actions from Console
            List <string> commands = WRG.Console.ConsoleGetCommands();

            if (commands.Count > 0)
            {
                int    firstspace = commands[0].IndexOf(" ");
                string command    = commands[0];
                string parameters = String.Empty;

                if (firstspace != -1)
                {
                    command    = command.Substring(0, firstspace);
                    parameters = commands[0].Substring(firstspace + 1);
                }

                switch (command)
                {
                case "exit":
                case "quit": exit = true;
                    break;

                case "sensitivity":
                    float sensitivity = WRG.CameraDriver.GetSensitivity();

                    if (parameters == String.Empty)
                    {
                        WRG.Console.ConsoleWriteLine("Citlivost mysi je: " + sensitivity.ToString());
                    }
                    else if (!Single.TryParse(parameters, out sensitivity))
                    {
                        WRG.Console.ConsoleWriteLine("Je nutno zadat cislo, urcujici citlivost mysi");
                    }
                    else
                    {
                        WRG.CameraDriver.SetSensitivity(sensitivity);
                    }
                    break;

                case "fly":
                    WRG.CameraDriver.EnableFreeLook();
                    break;

                case "walk":
                    WRG.CameraDriver.DisableFreeLook();
                    break;

                case "help":
                    WRG.Console.ConsoleWriteLine("do konzole je mozne zadat prikazy:");
                    WRG.Console.ConsoleWriteLine("help");
                    WRG.Console.ConsoleWriteLine("exit");
                    WRG.Console.ConsoleWriteLine("quit");
                    WRG.Console.ConsoleWriteLine("sensitivity [t]");
                    WRG.Console.ConsoleWriteLine("fly");
                    WRG.Console.ConsoleWriteLine("walk");
                    WRG.Console.ConsoleWriteLine("shadowsoff");
                    WRG.Console.ConsoleWriteLine("shadowson");
                    WRG.Console.ConsoleWriteLine("wire");
                    WRG.Console.ConsoleWriteLine("solid");
                    WRG.Console.ConsoleWriteLine("quadtree");
                    WRG.Console.ConsoleWriteLine("occ");
                    WRG.Console.ConsoleWriteLine("lights");
                    WRG.Console.ConsoleWriteLine("bspheres");
                    break;

                case "shadowson":
                    WRG.GraphicCore.enableshadows = true;
                    break;

                case "shadowsoff":
                    WRG.GraphicCore.enableshadows = false;
                    break;

                case "wire":
                    WRG.GraphicCore.GetInitializator().GetDevice().RenderState.FillMode = Microsoft.DirectX.Direct3D.FillMode.WireFrame;
                    break;

                case "solid":
                    WRG.GraphicCore.GetInitializator().GetDevice().RenderState.FillMode = Microsoft.DirectX.Direct3D.FillMode.Solid;
                    break;

                case "quadtree":
                    WRG.GraphicCore.usedoptimize = WRG.GraphicCore.OptimizeType.QuadTree;
                    break;

                case "occ":
                    WRG.GraphicCore.usedoptimize = WRG.GraphicCore.OptimizeType.OcclussionCulling;
                    break;

                case "bspheres":
                    WRG.GraphicCore.showBoundingSpheres = !WRG.GraphicCore.showBoundingSpheres;
                    break;

                case "low":
                    graphic.InitDetails(Details.Low);
                    break;

                case "medium":
                    graphic.InitDetails(Details.Medium);
                    break;

                case "high":
                    graphic.InitDetails(Details.High);
                    break;

                case "ultra":
                    graphic.InitDetails(Details.UltraHigh);
                    break;

                case "lights":
                    WRG.GraphicCore.enableLights = !WRG.GraphicCore.enableLights;
                    WRG.GraphicCore.GetCurrentSceneManager().EnableLights(WRG.GraphicCore.enableLights);
                    break;

                case "restart":
                    Restart();
                    break;

                default: WRG.Console.ConsoleWriteLine("Zadany prikaz neexistuje");
                    break;
                }

                commands.RemoveAt(0);
            }
            #endregion
        }