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; }
/// <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(); }
/// <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"); } } }
/// <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; } }
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)); }
/// <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(); }