Ejemplo n.º 1
0
        /// <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();
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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;
        }
Ejemplo n.º 4
0
        /// <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);
        }
Ejemplo n.º 5
0
        //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();
        }
Ejemplo n.º 6
0
		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;
		}
Ejemplo n.º 7
0
		/// <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);
		}
Ejemplo n.º 8
0
        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);
        }