/// <summary> /// Parameterless constructor. /// Initializes references and identifies the run mode. /// </summary> public Core() { Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); Application.ThreadException += new ThreadExceptionEventHandler(UIThreadException); Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(UnhandledException); ctorParams = new object[] { this }; #if DEBUG runMode = RunMode.Debug; #else runMode = RunMode.Release; #endif Atmosphere = new TVAtmosphere(); CameraFactory = new TVCameraFactory(); Globals = new TVGlobals(); InputEngine = new TVInputEngine(); InternalObjects = new TVInternalObjects(); LightEngine = new TVLightEngine(); MathLibrary = new TVMathLibrary(); Physics = new TVPhysics(); Scene = new TVScene(); Screen2DImmediate = new TVScreen2DImmediate(); Screen2DText = new TVScreen2DText(); TextureFactory = new TVTextureFactory(); MaterialFactory = new TVMaterialFactory(); GameControllers = new TVGameControllers(); DeviceInfo = new TVDeviceInfo(); GraphicEffect = new TVGraphicEffect(); }
public GameManager() { TotalTimeElapsed = 0; TvEngine = new TVEngine(); TvEngine.DisplayFPS(true); if (windowed) { Form1 form = new Form1(this); form.Show(); TvEngine.Init3DWindowed(form.Handle); } else { TvEngine.Init3DFullscreen(ScreenWidth, ScreenHeight); } TvInputEngine = new TVInputEngine(); TvInputEngine.Initialize(true, true); TvScene = new TVScene(); TvCamera = TvScene.GetCamera(); TvPhysics = new TVPhysics(); TvPhysics.Initialize(); TvPhysics.SetSolverModel(CONST_TV_PHYSICS_SOLVER.TV_SOLVER_LINEAR_10_PASSES); TvPhysics.SetFrictionModel(CONST_TV_PHYSICS_FRICTION.TV_FRICTION_EXACT); TvPhysics.SetGlobalGravity(new TV_3DVECTOR(0F, -980F, 0F)); TvPhysics.SetMaterialInteractionContinuousCollision(0, 0, true); TvPhysics.SetMaterialInteractionFriction(0, 0, 0.000001f, 0.000001f); TvPhysics.SetMaterialInteractionBounciness(0, 0, 0.5f); TvMaths = new TVMathLibrary(); TvScreen2DText = new TVScreen2DText(); TvLights = new TVLightEngine(); TvMaterials = new TVMaterialFactory(); TvGlobals = new TVGlobals(); Message = new MessageManager(this); }
public void Terminate() { if (TV3DEngine != null) { TV3DEngine.ReleaseAll(); } TV3DEngine = null; if (TV3DScene != null) { TV3DScene.DestroyAllMeshes(); } TV3DScene = null; if (TexFactory != null) { TexFactory.DeleteAll(); } TexFactory = null; if (Screen2DImmediate != null) { Screen2DImmediate = null; } Screen2DText = null; if (LightEngine != null) { LightEngine.DeleteAllLights(); } LightEngine = null; Gl = null; Camera = null; if (Atmosphere != null) { Atmosphere.Unload(); } Atmosphere = null; if (Input != null) { Input.UnloadDevices(); } Input = null; }
/// <summary> /// Initialise the scene /// </summary> /// <param name="window">The IWin32Window to render to. System.Windows.Forms.Form implements IWin32Window</param> /// <param name="target">The render target</param> /// <param name="resolution">The resolution to render in</param> public void Initialise(IWin32Window window, EnumRenderTarget target, Resolution resolution) { if (TV3DEngine != null) { Terminate(); } TV3DEngine = new TVEngine(); try { Engine.TV3DEngine.Init3DWindowedMode(window.Handle.ToInt32(), true); //TV3DEngine.Init3DFullscreen( 800, 600, 16, true, false, CONST_TV_DEPTHMODE.TV_DEPTHBUFFER_BESTBUFFER, 1, 0 ); _renderTarget = window; } catch (Exception e) { throw new EngineInitialisationException(e); } TV3DEngine.SetAngleSystem(CONST_TV_ANGLE.TV_ANGLE_DEGREE); TV3DEngine.SetVSync(true); TV3DEngine.DisplayFPS = true; TV3DScene = new TVScene(); TV3DScene.SetDepthBuffer(CONST_TV_DEPTHBUFFER.TV_WBUFFER); //TV3DScene.SetRenderMode( CONST_TV_RENDERMODE.TV_LINE ); TV3DScene.SetTextureFilter(CONST_TV_TEXTUREFILTER.TV_FILTER_ANISOTROPIC); TexFactory = new TVTextureFactory(); Screen2DImmediate = new TVScreen2DImmediate(); // TODO: this hax setting is to allow for clearing part of a rendersurface // would be nice if there is a better way.... Screen2DImmediate.SETTINGS_SetBlendingMode(DxVBLibA.CONST_D3DBLEND.D3DBLEND_ZERO, DxVBLibA.CONST_D3DBLEND.D3DBLEND_ONE, false); Screen2DText = new TVScreen2DText(); LightEngine = new TVLightEngine(); Gl = new TVGlobals(); Camera = new TVCamera(); Atmosphere = new TVAtmosphere(); Atmosphere.Fog_SetParameters(100F, 10000F, 0.0005F); Atmosphere.Fog_Enable(true); Input = new TVInputEngine(); FontIndex = Screen2DText.TextureFont_Create("font", "Verdana", 20, true, false, false, false); }
//Tak a zde se deje vsechno v hlavni smycce private void Dama_Load(object sender, EventArgs e) { //---POMOCNE----------------------- text = new TVScreen2DText(); text2 = new TVScreen2DText(); //--------------------------------- VytvorScenu(); xc = -75.0f; yc = -27.0f; zc = 21.0f; VyvorMistnost(); VytvorSachovnici(xc, yc, zc); NastavKameru(); NastavPromenne(); bDoLoop = true; this.Show(); this.Focus(); Scene.SetBackgroundColor(0.5f, 0.5f, 0.7f); // Lets setup the Loop: while (bDoLoop) { // Check if the application has focus, if yes thats when we process the loop. // Pomocne metody na posun ve scene /*heck_Input(); Check_Movement();*/ // The actual render loop: TV.Clear(false); // Render everything Scene.RenderAll(true); //Zmena tahu, nastaveni promennych JeTahnuto(); if (PoTahu) { if (KontrolaKonce2(TAH)) { Konec = true; } //Otaci kamerou na stranu protihrace OtocKamerou(TAH); //Zjisti, jestli uz je kamera spravne natocena JeKameraOtocena(); } else if (this.Focused && !Pause && !Konec) { Policko pom; //Nastavi uzivatelske promenne ZjistiNastaveni(); // Oznaci najete policko pom = GetPolicko(); OznacNajete(pom); //Reseni kliku do sachovnice, kdyz je policko oznaceno a kliknuto jinam //Provedeni tahu a pokracovani v nem, jeli to mozne //Vypsani chybovych,upozornujicich hlasek //Zamezeno vzorkovani, kvuli dlouhemu kliknuti tlacitka mysi Input.GetMouseState(ref tmpMouseX, ref tmpMouseY, ref tmpMouseB1, ref tmpMouseB2, ref tmpMouseB3, ref tmpMouseScrollNew); if (tmpMouseB1 && !MouseDOWN && lastPoleOZN != null && lastPoleOZN != pom) { //Zamezeni vzorkovani MouseDOWN = true; //Promazani chyb vypsane mezi tahem a kliknutim na spravne policko tahnuti SmazChyby(); pom = GetPolicko(); //Rozdeleni tahu na dve faze //Prvni faze je prvni klik po oznaceni na tahnutelne policko // -zde se provede presun // -jeli pri presunu neco skoceno, provede se kontrola dalsiho skoku // -jeli dalsi skok mozny nastavi se tah na druhou fazi //Druha faze je klik po skoceni na dalsi skocitelne policko // -po skoku se provede kontrola dalsiho skoku // -jeli dalsi skok mozny provede se znovu druha faze if (!VTahu) { //Prvni tah if (LPTah.Contains(pom)) { //Sloli neco skocit, naplni se SloSkocit tim Polickem SloNecoSkocit(); //Odkresleni napovedy tahu ProvedOdOznacovani(); //Pokud se skocilo nastavime priznak Smazano if (SloSkocit != null) { Naplneni_LPSkok(lastPoleOZN); if (LPSkok.Contains(pom)) Smazano = true; } Presun(ref lastPoleOZN, pom); //Kontrola jestli lze dale skakat jinak konec tahu if (Lze_Skocit(pom.fig) && Smazano) { VTahu = true; Smazano = false; LzeOdoznacit = false; OznacPolicko(pom); Naplneni_LPSkok(pom); //Pokud je zapnuto oznacovani tak se oznaci ProvedOznacovani(LPSkok, true); } else { //Pokud necim SloSkocit ale neskocilo se, tak se dana figurka smaze dle pravidel if (SloSkocit != null && !Smazano) { lastSmazane = Pole[SloSkocit.x, SloSkocit.y]; OznacSmazane(lastSmazane); Smaz(SloSkocit.x, SloSkocit.y); Upozorneni("Zapoměl jsi skočit, smazal jsem ti figurku!"); } Tahnuto = true; JeFigurkaNaKonci(pom); } } else Chyba("Sem nemůžeš táhnout!"); } else { //Pokracovani ve skakani if (LPSkok.Contains(pom)) { //Odkresleni oznacenych policek ke skoceni ProvedOdOznacovani(); Presun(ref lastPoleOZN, pom); if (Lze_Skocit(pom.fig)) { VTahu = true; Smazano = false; LzeOdoznacit = false; OznacPolicko(pom); Naplneni_LPSkok(pom); //Pokud je zapnuto oznacovani tak se oznaci ProvedOznacovani(LPSkok, true); } else { Tahnuto = true; JeFigurkaNaKonci(pom); } } else Chyba("Sem nemůžeš táhnout!"); } } else if (!tmpMouseB1) MouseDOWN = false; //Reseni kliku do sachovnice, kdyz neni nic oznaceno //Oznaceni figurky k tahnuti, jeli to mozne //Vypsani chybovych,upozornujicich hlasek //Zamezeno vzorkovani, kvuli dlouhemu kliknuti tlacitka mysi pom = GetPolicko(); if (tmpMouseB1 && !MouseDOWN && pom != null && pom.hodnota != 0 && LzeOdoznacit) { //Bool pro zamezeni vzorkovani MouseDOWN = true; //Smazani chybovych,upozornujicich hlasek z minuleho tahu, jsouli SmazChyby(); //Odoznaceni minuleho automaticky smazaneho policka if (lastSmazane != null) { OdOznacSmazane(lastSmazane); lastSmazane = null; } //Osetreni ze kdyz tahne bily tak pouze bilyma figurkama if ((pom.hodnota == 1 || pom.hodnota == 3) && TAH) { Naplneni_LPTah(pom); if (LPTah.Count != 0) OznacPolicko(pom); else Chyba("S touto figurkou nemůžeš nikam táhnout!"); //Pokud je zapnuto oznacovani tak se oznaci vsechna tahnutelna policka ProvedOznacovani(LPTah,pom.oznaceno); } //Osetreni ze kdyz tahne bily tak pouze bilyma figurkama else if ((pom.hodnota == 2 || pom.hodnota == 4) && !TAH) { Naplneni_LPTah(pom); //Oznaceni pripraveni k tahnuti pokud je kam tahnout if (LPTah.Count != 0) OznacPolicko(pom); else Chyba("S touto figurkou nemůžeš nikam táhnout!"); //Pokud je zapnuto oznacovani tak se oznaci ProvedOznacovani(LPTah,pom.oznaceno); } //Ostatni kliknute figurky hodi chybu else if (pom.hodnota != 10) Chyba("Toto není tvoje figurka!"); else Upozorneni("Kliknutí sem nemá žádný smysl."); } else if (!tmpMouseB1) MouseDOWN = false; //Osetreni upozorneni na policka na kterych nic neni pom = GetPolicko(); if (tmpMouseB1 && !MouseDOWN && pom != null) { if (pom.hodnota == 0) Upozorneni("Kliknutí sem nemá žádný smysl."); MouseDOWN = true; } else if (!tmpMouseB1) MouseDOWN = false; // text.NormalFont_DrawText(this.Size.ToString() + "Tah: " + TAH.ToString() + " LFB Count: " + LFB.Count.ToString() + " LFC Count: " + LFC.Count.ToString(), 50.0f, 40.0f, -16710933); //Pomocny vypis //VypisText(); //POMOCNY TEXT NA NASTAVOVANI KAMERY //text2.NormalFont_DrawText("SLx " + snglookatX + " " + "SLy " + snglookatY + " " + "SLz " + snglookatZ + " " + "SPx " + sngPositionX + " " + "SPy " + sngPositionY + " " + "SPz " + sngPositionZ + " " + "SAx " + sngAngleX + " " + "SAy " + sngAngleY, 50.0f, 100.0f, -16710933); //------------------------------------ } TV.RenderToScreen(); //Zpomaleni vykreslovani, pokud je okno neaktivni if (!this.Focused && f2 == null) System.Threading.Thread.Sleep(200); else if( f2 != null) if (!this.Focused && !f2.IsOpened) System.Threading.Thread.Sleep(200); Application.DoEvents(); } this.Close(); }
public void Terminate() { if(TV3DEngine != null) TV3DEngine.ReleaseAll(); TV3DEngine = null; if(TV3DScene != null) TV3DScene.DestroyAllMeshes(); TV3DScene = null; if(TexFactory != null) TexFactory.DeleteAll(); TexFactory = null; if(Screen2DImmediate != null) Screen2DImmediate = null; Screen2DText = null; if(LightEngine != null) LightEngine.DeleteAllLights(); LightEngine = null; Gl = null; Camera = null; if(Atmosphere != null) Atmosphere.Unload(); Atmosphere = null; if(Input != null) Input.UnloadDevices(); Input = null; }
/// <summary> /// Initialise the scene /// </summary> /// <param name="window">The IWin32Window to render to. System.Windows.Forms.Form implements IWin32Window</param> /// <param name="target">The render target</param> /// <param name="resolution">The resolution to render in</param> public void Initialise(IWin32Window window, EnumRenderTarget target, Resolution resolution) { if ( TV3DEngine != null ) { Terminate(); } TV3DEngine = new TVEngine(); try { Engine.TV3DEngine.Init3DWindowedMode(window.Handle.ToInt32(), true); //TV3DEngine.Init3DFullscreen( 800, 600, 16, true, false, CONST_TV_DEPTHMODE.TV_DEPTHBUFFER_BESTBUFFER, 1, 0 ); _renderTarget = window; } catch(Exception e) { throw new EngineInitialisationException(e); } TV3DEngine.SetAngleSystem( CONST_TV_ANGLE.TV_ANGLE_DEGREE ); TV3DEngine.SetVSync( true ); TV3DEngine.DisplayFPS = true; TV3DScene = new TVScene(); TV3DScene.SetDepthBuffer( CONST_TV_DEPTHBUFFER.TV_WBUFFER ); //TV3DScene.SetRenderMode( CONST_TV_RENDERMODE.TV_LINE ); TV3DScene.SetTextureFilter( CONST_TV_TEXTUREFILTER.TV_FILTER_ANISOTROPIC ); TexFactory = new TVTextureFactory(); Screen2DImmediate = new TVScreen2DImmediate(); // TODO: this hax setting is to allow for clearing part of a rendersurface // would be nice if there is a better way.... Screen2DImmediate.SETTINGS_SetBlendingMode( DxVBLibA.CONST_D3DBLEND.D3DBLEND_ZERO, DxVBLibA.CONST_D3DBLEND.D3DBLEND_ONE, false ); Screen2DText = new TVScreen2DText(); LightEngine = new TVLightEngine(); Gl = new TVGlobals(); Camera = new TVCamera(); Atmosphere = new TVAtmosphere(); Atmosphere.Fog_SetParameters( 100F, 10000F, 0.0005F ); Atmosphere.Fog_Enable( true ); Input = new TVInputEngine(); FontIndex = Screen2DText.TextureFont_Create("font", "Verdana", 20, true, false, false, false); }
private void StartEngine() { Time = new GameTime(); Components = new List<GameComponent>(); Engine = new TVEngine(); Scene = new TVScene(); Screen2D = new TVScreen2DImmediate(); Textures = new TVTextureFactory(); Text2D = new TVScreen2DText(); Globals = new TVGlobals(); Materials = new TVMaterialFactory(); Math = new TVMathLibrary(); Effects = new TVGraphicEffect(); Atmosphere = new TVAtmosphere(); Internal = new TVInternalObjects(); Light = new TVLightEngine(); Input = new TVInputEngine(); Random = new Random(); Engine.SetInternalShaderVersion(CONST_TV_SHADERMODEL.TV_SHADERMODEL_BEST); Engine.SetAngleSystem(CONST_TV_ANGLE.TV_ANGLE_DEGREE); Engine.AllowMultithreading(true); Engine.SetFPUPrecision(true); Engine.EnableSmoothTime(false); Engine.SetDebugMode(true, true); Engine.SetDebugFile("debug.txt"); Engine.EnableProfiler(false); Engine.DisplayFPS(false); Engine.SetVSync(false); Engine.SetAntialiasing(false, CONST_TV_MULTISAMPLE_TYPE.TV_MULTISAMPLE_NONE); Engine.Init3DWindowed(Form.Handle); //Engine.Init3DFullscreen(1920, 1200, 32, true, false, CONST_TV_DEPTHBUFFERFORMAT.TV_DEPTHBUFFER_BESTBUFFER, 1, Window.Handle); Engine.GetViewport().SetAutoResize(true); Input.Initialize(true, true); Input.SetRepetitionDelay(400, 100); Textures.SetTextureMode(CONST_TV_TEXTUREMODE.TV_TEXTUREMODE_BETTER); Light.SetGlobalAmbient(0, 0, 0); }