예제 #1
0
        public void onResolutionChange()
        {
            resolution = GraphicCore.GetInitializator().GetResolution();

            manaPoint.Y   = resolution.Y - 168f;
            livePoint.Y   = resolution.Y - 168f;
            energyPoint.Y = resolution.Y - 168f;

            manaEmpty.Y   = resolution.Y - 168f;
            energyEmpty.Y = resolution.Y - 168f;
            liveEmpty.Y   = resolution.Y - 168f;
        }
예제 #2
0
        /// <summary>
        /// Funkce pro obnoveni obrazu
        /// </summary>
        public void UpdateLook()
        {
            if (GraphicCore.GetInitializator().IsDeviceLost())
            {
                return;
            }

            matrixProjection = Matrix.PerspectiveFovLH((float)(Math.PI / 4f), (float)dev.PresentationParameters.DeviceWindow.Width / (float)dev.PresentationParameters.DeviceWindow.Height, 5f, farDistance);
            matrixView       = Matrix.LookAtLH(position, lookAt, up);

            matrixViewProjection = matrixView * matrixProjection;

            clipVolume = ComputeClipVolume();
        }
예제 #3
0
        /// <summary>
        /// Nastavi, zda bude ci nebude videt hrac a vse s nim spojene
        /// </summary>
        /// <param name="enable">True - hrac bude videt, jinak false</param>
        public static void SetShowPlayer(bool enable)
        {
            showPlayer = enable;

            SceneManager sceneManager = GraphicCore.GetCurrentSceneManager();

            if (enable)
            {
                Camera  cam      = Camera.GetCameraInstance();
                Vector3 position = cam.GetVector3Position();
                Vector3 dir      = cam.GetVector3LookAt() - position;
                dir.Normalize();

                Scene.SceneManager.SceneObject pl = sceneManager.GetObject("Hrac");

                if (pl != null)
                {
                    player = (Objects.Player)pl.generalObject;

                    if ((Scene.SceneManager.DetailLevel)Properties.Settings.Default.DetailLevel == Scene.SceneManager.DetailLevel.Low)
                    {
                        player.SetModel(null);
                    }
                }
                else
                {
                    sceneManager.AddObject("Hrac", player, (Effect)null);
                }

                Vector3 playerPosition = position;
                playerPosition.Y -= HeightOfEye.Y;
                playerPosition   -= HeightOfEye.Z * dir;
                player.SetPosition(playerPosition);

                SceneManager.SceneObject pochoden = sceneManager.GetObject("Hrac_Pochoden");

                if (pochoden != null)
                {
                    player.EquipItem(pochoden.generalObject);
                }
            }
            else
            {
                if (player != null)
                {
                    player.SetMatrixWorld(originalPlayerWorld);
                    sceneManager.DeleteObject("Hrac");
                }
            }
        }
예제 #4
0
        /// <summary>
        /// Pokud neni volny pohyb, tak opravi vyskovou pozici hrace tak, aby hrac stal na terenu
        /// </summary>
        /// <param name="position">Puvodni pozice hrace</param>
        /// <param name="newPosition">Pozice hrace, na kterou chce hrac jit, tato promena bude prepsana korektni hodnotou</param>
        private static void RepairPositionInNonFreeLook(Vector3 position, ref Vector3 newPosition)
        {
            if (!freeLook)
            {
                Scene.SceneManager sm = GraphicCore.GetCurrentSceneManager();
                List <SceneManager.SceneObject> sos = sm.GetAllObjects();

                Vector3 dir = Vector3.Normalize(newPosition - position) * Speed * time;

                bool blocked = false;
                foreach (SceneManager.SceneObject so in sos)
                {
                    if (so.name.StartsWith("Hrac"))
                    {
                        continue;
                    }

                    if (so.generalObject.ComputeBoxCollission(newPosition) ||
                        so.generalObject.ComputeBoxCollission(newPosition + dir * 0.02f) ||
                        so.generalObject.ComputeBoxCollission(newPosition + dir * 0.01f) ||
                        so.generalObject.ComputeBoxCollission(newPosition + dir * 0.005f) ||
                        so.generalObject.ComputeBoxCollission(newPosition + dir * 0.0025f) ||
                        so.generalObject.ComputeBoxCollission(newPosition + dir * 0.00125f))
                    {
                        blocked = true;
                    }
                }

                if (terain.IsPositionOnTereain(newPosition) && !blocked /*!terain.IsPositionOnTerainBlocked(newPosition)*/)
                {
                    newPosition = terain.GetPositionOnTerain(newPosition);
                }
                else
                {
                    newPosition = terain.GetPositionOnTerain(position);
                }

                newPosition.Y += HeightOfEye.Y;
            }
        }
예제 #5
0
        public HUD(Device device, Program form)
        {
            resolution = GraphicCore.GetInitializator().GetResolution();

            manaPoint   = new PointF(80f, resolution.Y - 168f);
            livePoint   = new PointF(20f, resolution.Y - 168f);
            energyPoint = new PointF(140f, resolution.Y - 168f);

            manaEmpty   = new System.Drawing.PointF(80f, resolution.Y - 168f);
            energyEmpty = new System.Drawing.PointF(140f, resolution.Y - 168f);
            liveEmpty   = new System.Drawing.PointF(20f, resolution.Y - 168f);

            empty  = TextureLoader.FromFile(device, @"Resources/HUD/prazdna.png");
            live   = TextureLoader.FromFile(device, @"Resources/HUD/zivot.png");
            mana   = TextureLoader.FromFile(device, @"Resources/HUD/mana.png");
            energy = TextureLoader.FromFile(device, @"Resources/HUD/energie.png");
            empty2 = TextureLoader.FromFile(device, @"Resources/HUD/prazdnej.png");
            live2  = TextureLoader.FromFile(device, @"Resources/HUD/zelenejobdelnik.png");



            this.device = device;
            this.form   = form;
            NpcObjects  = new List <SceneManager.SceneObject>();

            sprite   = new Sprite(device);
            sprite3d = new Sprite(device);
            s        = new Sprite(device);

            sm         = GraphicCore.GetCurrentSceneManager();
            NpcObjects = sm.GetObjectsOfType(Type.GetType("WiccanRede.Objects.Player"), false);

            // NpcInfo = form.Game.GetAllNpcInfo();

            f  = new Microsoft.DirectX.Direct3D.Font(device, new System.Drawing.Font(System.Drawing.FontFamily.GenericSerif, 16));
            f2 = new Microsoft.DirectX.Direct3D.Font(device, new System.Drawing.Font(System.Drawing.FontFamily.GenericSerif, 12));
        }
예제 #6
0
        /// <summary>
        /// Funkce nainicializuje jednotlive podsystemy a spusti herni smycku
        /// </summary>
        public void InitCore()
        {
            VideoManager video = new VideoManager(this, false);

            video.LoadVideo(@"Resources/Videos/logo2.avi", true);

            Logger.InitLogger();
            Logger.bWriteToOutput = true;
            Logger.AddInfo("Inicializace");

            graphic           = new WRG.GraphicCore(this, true);
            multimediaManager = new SoundManager(this);

            if (Properties.Settings.Default.EnableMusic)
            {
                multimediaManager.AddToPlayList(@"Resources/Music/");
            }


            multimediaManager.PlayMusic();
            video.PlayVideo();

            input = Input.GetInputInstance(this);
            input.SetCooperative(Microsoft.DirectX.DirectInput.CooperativeLevelFlags.Background | Microsoft.DirectX.DirectInput.CooperativeLevelFlags.NonExclusive);
            menu = new MenuManager(WRG.GraphicCore.GetInitializator().GetDevice());

            #region Init Tests
            if (graphic == null)
            {
                Logger.AddError(global::WiccanRede.Properties.Resources.Graphic_Core_Init_Error);
                return;
            }

            if (input == null)
            {
                Logger.AddError(global::WiccanRede.Properties.Resources.Input_Core_Init_Error);
                return;
            }
            #endregion

            this.Show();

            resourceLoadThread = new Thread(graphic.ResourcesLoad);
            resourceLoadThread.Start();

            List <Input.Action> actions = null;
            startTime = Environment.TickCount;
            input.Start();
            int lastTime = 0;

            while (resourceLoadThread.ThreadState != ThreadState.Stopped)
            {
                graphic.ResourceProgressRender();
                Application.DoEvents();
                Thread.Sleep(200);
            }

            video.StopVideo();
            video.Dispose();


            this.windowRect = new System.Drawing.Rectangle(this.Location, this.Size);
            Cursor.Position = PointToScreen(new System.Drawing.Point(0, 0));
            Cursor.Clip     = windowRect;
            Cursor.Hide();

            SetCore();

            WRG.Initializator init = WRG.GraphicCore.GetInitializator();

            while (!exit && this.Created)
            {
                milisecondsElapsed = (Environment.TickCount - startTime);
                int frametime = milisecondsElapsed - lastTime;

                WRG.CameraDriver.SetTime(frametime);
                actions = input.Update(true);

                if (game != null)
                {
                    List <WiccanRede.AI.NpcInfo> npcs = game.GetAllNpcInfo();

                    //je hrac mrtvy?
                    if (npcs[npcs.Count - 1].Status.hp <= 0 && this.menu.MenuState != MenuResult.Restart)
                    {
                        this.menu.UpdateState("Gameover");
                        this.drawMenu = true;
                    }
                    else if (this.menu.MenuState == MenuResult.Restart)
                    {
                        this.menu.UpdateState("MainMenu");
                        this.menu.MenuState = MenuResult.New;
                        Restart();
                    }

                    //je konec hry?
                    if (game.GetCurrentGameState().Name == "Final")
                    {
                        this.menu.UpdateState("ToBeContinued");
                        this.drawMenu = true;
                    }
                }

                if (this.Focused)
                {
                    Cursor.Clip = this.windowRect;

                    if (init.IsFullscreen())
                    {
                        Cursor.Clip = System.Drawing.Rectangle.Empty;
                    }
                }
                else
                {
                    Cursor.Clip = System.Drawing.Rectangle.Empty;
                }



                if (this.drawMenu)
                {
                    Cursor.Show();
                    init.GetDevice().BeginScene();
                    MenuResult result = this.menu.Update(this.PointToClient(MousePosition), (actions.Contains(Input.Action.Action1)));
                    init.GetDevice().EndScene();
                    init.GetDevice().Present();

                    if (result == MenuResult.Pub)
                    {
                        this.drawMenu = false;
                        this.menu.UpdateState("MainMenu");
                        this.menu.CurrentMenuResult = MenuResult.None;
                    }
                    else if (result == MenuResult.New)
                    {
                        this.drawMenu = false;
                        this.menu.UpdateState("MainMenu");
                        this.menu.CurrentMenuResult = MenuResult.New;
                    }
                    else if (result == MenuResult.Exit || actions.Contains(Input.Action.Exit))
                    {
                        this.exit = true;
                    }
                    System.Threading.Thread.Sleep(20);
                    Cursor.Hide();
                }
                else
                {
                    action1Stoper -= frametime;
                    action2Stoper -= frametime;

                    ProcessActions(actions);
                    graphic.Render(milisecondsElapsed);

                    if (game == null)
                    {
                        game = WiccanRede.Game.GameManager.GetInstance();
                        graphic.FirstTimeRender();
                    }

                    try
                    {
                        game.Update((float)(frametime) / 1000f);
                    }
                    catch (Exception ex)
                    {
                        Logger.AddError(ex.Message);
                    }
                }

                Application.DoEvents();

                lastTime = milisecondsElapsed;
            }
            Logging.Logger.Save();
            graphic.Dispose();
            multimediaManager.Dispose();
        }