public VideoScene(string directory, string format, float fps, int total_frames) { FPS = fps; TotalFrames = total_frames; current_frame = 0; time = 0.0f; frames = new TgcTexture[TotalFrames]; for (int i = 1; i <= TotalFrames; i++) { frames[i - 1] = TgcTexture.createTexture(directory + @"\" + i.ToString("D4") + "." + format); } sprite = new TgcSprite(); sprite.Texture = frames[current_frame]; Size screenSize = GuiController.Instance.Panel3d.Size; Size textureSize = sprite.Texture.Size; sprite.Scaling = new Vector2( (float)screenSize.Width / textureSize.Width, (float)screenSize.Height / textureSize.Height); sprite.Position = new Vector2( FastMath.Max(screenSize.Width / 2 - textureSize.Width * sprite.Scaling.X / 2, 0), FastMath.Max(screenSize.Height / 2 - textureSize.Height * sprite.Scaling.Y / 2, 0)); sound = new TgcStaticSound(); sound.loadSound(directory + @"\sound.wav"); Playing = false; }
public MenuInicio() { //Crear Sprite sprite = new TgcSprite(); sprite.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "menu\\inicio.jpg"); //Ubicarlo centrado en la pantalla Size screenSize = GuiController.Instance.Panel3d.Size; Size textureSize = sprite.Texture.Size; sprite.Position = new Vector2(0, 0); sprite.Scaling = new Vector2((float)screenSize.Width / textureSize.Width, (float)screenSize.Height / textureSize.Height + 0.01f); //Crear Text menuLineas = new TgcText2d[] { new TgcText2d(), new TgcText2d(), new TgcText2d(), new TgcText2d() }; //Cargar Textos menuLineas[0].Text = "(I) Iniciar"; menuLineas[0].Position = new Point(inicialX, inicialY - distEntreLineas); menuLineas[0].changeFont(new System.Drawing.Font("TimesNewRoman", 23, FontStyle.Bold | FontStyle.Bold)); menuLineas[1].Text = "(C) Creditos"; menuLineas[1].Position = new Point(inicialX, inicialY); menuLineas[1].changeFont(new System.Drawing.Font("TimesNewRoman", 23, FontStyle.Bold | FontStyle.Bold)); menuLineas[2].Text = "(A) Ayuda"; menuLineas[2].Position = new Point(inicialX, inicialY + distEntreLineas); menuLineas[2].changeFont(new System.Drawing.Font("TimesNewRoman", 23, FontStyle.Bold | FontStyle.Bold)); //Inicializa el d3dInput input = GuiController.Instance.D3dInput; }
/// <summary> /// Crear un nuevo Sprite animado /// </summary> /// <param name="texturePath">path de la textura animada</param> /// <param name="frameSize">tamaño de un tile de la animacion</param> /// <param name="totalFrames">cantidad de frames que tiene la animacion</param> /// <param name="frameRate">velocidad en cuadros por segundo</param> public TgcAnimatedSprite(string texturePath, Size frameSize, int totalFrames, float frameRate) { this.enabled = true; this.currentFrame = 0; this.frameSize = frameSize; this.totalFrames = totalFrames; this.currentTime = 0; this.playing = true; //Crear textura Device d3dDevice = GuiController.Instance.D3dDevice; TgcTexture texture = TgcTexture.createTexture(d3dDevice, texturePath); //Sprite sprite = new TgcSprite(); sprite.Texture = texture; //Calcular valores de frames de la textura textureWidth = texture.Width; textureHeight = texture.Height; framesPerColumn = (int)textureWidth / frameSize.Width; framesPerRow = (int)textureHeight / frameSize.Height; int realTotalFrames = framesPerRow * framesPerColumn; if (realTotalFrames > totalFrames) { throw new Exception("Error en AnimatedSprite. No coinciden la cantidad de frames y el tamaño de la textura: " + totalFrames); } setFrameRate(frameRate); }
public override void init() { Device d3dDevice = GuiController.Instance.D3dDevice; //Crear Sprite sprite = new TgcSprite(); sprite.Texture = TgcTexture.createTexture(GuiController.Instance.ExamplesMediaDir + "\\Texturas\\LogoTGC.png"); //Ubicarlo centrado en la pantalla Size screenSize = GuiController.Instance.Panel3d.Size; Size textureSize = sprite.Texture.Size; sprite.Position = new Vector2(FastMath.Max(screenSize.Width / 2 - textureSize.Width / 2, 0), FastMath.Max(screenSize.Height / 2 - textureSize.Height / 2, 0)); //Modifiers para variar parametros del sprite GuiController.Instance.Modifiers.addVertex2f("position", new Vector2(0, 0), new Vector2(screenSize.Width, screenSize.Height), sprite.Position); GuiController.Instance.Modifiers.addVertex2f("scaling", new Vector2(0, 0), new Vector2(4, 4), sprite.Scaling); GuiController.Instance.Modifiers.addFloat("rotation", 0, 360, 0); //Creamos un Box3D para que se vea como el Sprite es en 2D y se dibuja siempre arriba de la escena 3D box = TgcBox.fromSize(new Vector3(10, 10, 10), TgcTexture.createTexture(GuiController.Instance.ExamplesMediaDir + "\\Texturas\\pasto.jpg")); //Hacer que la camara se centre en el box3D GuiController.Instance.RotCamera.targetObject(box.BoundingBox); }
public Indicadores() { spriteBala = new TgcSprite(); spriteBala.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "\\RenderMan\\sprites\\bala.png"); Size textureSize = spriteBala.Texture.Size; spriteBalaPosX = textureSize.Width; spriteBala.Scaling = new Vector2(ajustarTexturaAPantalla(divicionEntera(screenSize.Width, 50), textureSize.Width), ajustarTexturaAPantalla(divicionEntera(screenSize.Height, 12), textureSize.Height)); spriteBala.Position = new Vector2(25, screenSize.Height - 45); spriteCargador = new TgcSprite(); spriteCargador.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "\\RenderMan\\sprites\\cargador.png"); Size textureSizeCargador = spriteCargador.Texture.Size; spriteCargadorPosX = textureSizeCargador.Width; spriteCargador.Scaling = new Vector2(ajustarTexturaAPantalla(divicionEntera(screenSize.Width, 30), textureSize.Width), ajustarTexturaAPantalla(divicionEntera(screenSize.Height, 3), textureSize.Height)); spriteCargador.Position = new Vector2(120, screenSize.Height - 45); spriteEnemigo = new TgcSprite(); spriteEnemigo.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "\\RenderMan\\sprites\\enemigo2.png"); Size texturaSizeEnemigo = spriteEnemigo.Texture.Size; spriteEnemigoPosX = texturaSizeEnemigo.Width; spriteEnemigo.Scaling = new Vector2(ajustarTexturaAPantalla(divicionEntera(screenSize.Width, 35), textureSize.Width), ajustarTexturaAPantalla(divicionEntera(screenSize.Height, 4), textureSize.Height)); spriteEnemigo.Position = new Vector2(screenSize.Width - 140, 20); spriteVida = new TgcSprite(); spriteVida.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "\\RenderMan\\sprites\\cruzRoja.png"); Size texturaSizeVida = spriteVida.Texture.Size; spriteVidaPosX = texturaSizeVida.Width; spriteVida.Scaling = new Vector2(ajustarTexturaAPantalla(divicionEntera(screenSize.Width, 35), textureSize.Width), ajustarTexturaAPantalla(divicionEntera(screenSize.Height, 3), textureSize.Height)); spriteVida.Position = new Vector2(5, 15); }
private ArmaManager(EnemigosManager enemigosManager, TgcFpsMiCamara camara, EscenarioManager escenarioManager) { //this.enemigosManager = enemigosManager; this.soundManager = SoundManager.getInstance(); this.camara = camara; this.escenarioManager = escenarioManager; this.enemigosManager = enemigosManager; pickingRay = new TgcPickingRay(); //Crear Sprite spriteArma = new TgcSprite(); spriteMira = new TgcSprite(); setInitialValues(); }
internal override void Init() { select = false; selectedText = 0; GuiController.Instance.BackgroundColor = Color.White; logo = new TgcSprite(); TgcTexture texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "Los_Borbotones\\Sprites\\logo.png"); logo.Texture = texture; float ScreenWidth = GuiController.Instance.D3dDevice.Viewport.Width; float ScreenHeight = GuiController.Instance.D3dDevice.Viewport.Height; Size tamaño = logo.Texture.Size; float scale = ScreenWidth * (1) / tamaño.Width; logo.Scaling = new Vector2(scale, scale); logo.Position = new Vector2((ScreenWidth - (tamaño.Width * scale)), (ScreenHeight - (tamaño.Height * scale)) / 10); }
public GameOver() { indacadorGameOver = new Indicadores(); textoFin = new TgcText2d(); textoFin.Color = Color.Black; textoFin.Align = TgcText2d.TextAlign.CENTER; textoFin.Position = new Point(0, 0); textoFin.Size = new Size(650, 300); textoFin.changeFont(new System.Drawing.Font("Arial", 16f, FontStyle.Bold)); textoFin.Text = "GAME OVER!!"; //cargo el sprite del gameover spriteGameOver = new TgcSprite(); spriteGameOver.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "\\RenderMan\\sprites\\Game-Over.png"); Size textureSize = spriteGameOver.Texture.Size; spriteGameOver.Scaling = new Vector2(indacadorGameOver.ajustarTexturaAPantalla(screenSize.Width, textureSize.Width),indacadorGameOver.ajustarTexturaAPantalla(screenSize.Height, textureSize.Height)); spriteGameOver.Position = new Vector2(0, 0); //sonido.playSonidoFin(); }
public Barco(Vector3 posicionInicial, EjemploAlumno oceano, string pathEscena) { TgcSceneLoader loader = new TgcSceneLoader(); TgcScene escenaCanion = loader.loadSceneFromFile(pathEscena); // escena del cañon this.barco = escenaCanion.Meshes[0]; this.setPosicion(posicionInicial); this.setAgua(oceano); //this.cargarCaniones(); posicionAnterior = posicionInicial; sentido = new Vector3(0, 0, -1); estoyYendoParaAtras = false; vidita = 5; seAcabo = false; sprite = new TgcSprite(); sprite.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "\\Textures\\boom.png"); sprite.Position = new Vector2(0, 0); misilAnterior = null; }
public MenuCreditos() { //Crear Sprite sprite = new TgcSprite(); sprite.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "menu\\creditos.jpg"); //Ubicarlo centrado en la pantalla Size screenSize = GuiController.Instance.Panel3d.Size; Size textureSize = sprite.Texture.Size; sprite.Position = new Vector2(0, 0); sprite.Scaling = new Vector2((float)screenSize.Width / textureSize.Width, (float)screenSize.Height / textureSize.Height + 0.01f); //Crear Text menuLineas = new TgcText2d[] { new TgcText2d(), new TgcText2d(), new TgcText2d() }; //Cargar Textos menuLineas[0].Text = "DESARROLLADO POR"; menuLineas[0].Position = new Point(0, posCreditos - (2 * distEntreLineas)); menuLineas[0].changeFont(new System.Drawing.Font("TimesNewRoman", 23, FontStyle.Bold | FontStyle.Bold)); menuLineas[1].Text = "DI PRINZIO AGUSTIN"; menuLineas[1].Position = new Point(0, posCreditos - (distEntreLineas)); menuLineas[1].changeFont(new System.Drawing.Font("TimesNewRoman", 23, FontStyle.Bold | FontStyle.Bold)); menuLineas[2].Text = "VARELA FRANCO"; menuLineas[2].Position = new Point(0, posCreditos); menuLineas[2].changeFont(new System.Drawing.Font("TimesNewRoman", 23, FontStyle.Bold | FontStyle.Bold)); foreach (TgcText2d linea in menuLineas) { linea.Color = Color.Blue; } //Inicializa el d3dInput input = GuiController.Instance.D3dInput; }
public Game() { Fuentes.cargarFuentes(); //sprites if (!inicializo) { mapita = new TgcSprite(); mapita.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "\\sprites\\preview.png"); motoSprite = new TgcSprite(); motoSprite.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "\\sprites\\dirtbike.png"); timer = new TgcSprite(); timer.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "\\sprites\\gate.png"); //Ubicarlo centrado en la pantalla screenSize = GuiController.Instance.Panel3d.Size; textureSize = mapita.Texture.Size; motoTextureSize = motoSprite.Texture.Size; mapita.Scaling = (new Vector2(0.7f, 0.7f)); motoSprite.Scaling = (new Vector2(0.5f, 0.5f)); mapita.Position = new Vector2(FastMath.Max(screenSize.Width / 2 - textureSize.Width * 0.7f / 2, 0), 16); motoSprite.Position = new Vector2(FastMath.Max(screenSize.Width / 2 - motoTextureSize.Width * 0.5f / 2 - textureSize.Width * 0.7f / 2, 0), 8); timer.Position = new Vector2(screenSize.Width - 250, screenSize.Height - 125); timer.Scaling = new Vector2(0.9f, 0.8f); posMotoInicial = motoSprite.Position; inicializo = true; } d3dDevice = GuiController.Instance.D3dDevice; d3dDevice.Transform.Projection = Matrix.PerspectiveFovLH(Geometry.DegreeToRadian(45.0f), TgcD3dDevice.aspectRatio, 1f, 5000000f); string texturesPath = GuiController.Instance.AlumnoEjemplosMediaDir + "skybox\\"; TgcSceneLoader loader = new TgcSceneLoader(); collisionManager = new ElipsoidCollisionManager(); collisionManager.GravityEnabled = false; tiempoAcelerando = 0f; tiempoDescelerando = 0f; velIni = 0f; tocandoPiso = false; saltando = true; ultimoMov = new Vector3(0, 0, 0); //skybox inicializarSkybox(texturesPath); //checkpoints int posCP = -150; foreach (TgcBoundingBox bb in checkpoints) { bb.setExtremes(new Vector3(-200, -100, posCP), new Vector3(200, 1000, posCP - 10)); posCP -= 1300; } //carga la ciudad scene = loader.loadSceneFromFile(GuiController.Instance.AlumnoEjemplosMediaDir + "pistaDesierto\\pistaDesierto2-TgcScene.xml"); //cargo la moto motorcycle = loader.loadSceneFromFile(GuiController.Instance.AlumnoEjemplosMediaDir + "moto\\Moto2-TgcScene.xml").Meshes[0]; motorcycle.move(-40, 100, -150); //cargo la piramide piramid = loader.loadSceneFromFile(GuiController.Instance.AlumnoEjemplosMediaDir + "piramide\\piramide-TgcScene.xml").Meshes[0]; piramid.Scale = new Vector3(5, 5, 5); piramid.move(-265, -45, -13750); //cargo texto ganaste textGanaste = new TgcText2d(); textGanaste2 = new TgcText2d(); //Cargar Textos textGanaste.Text = "FELICIDADES, HAS GANADO"; textGanaste2.Text = "APRETE Q PARA VOLVER AL MENU"; textGanaste.Position = new Point(0, 50); textGanaste2.Position = new Point(0, 100); textGanaste.changeFont(new System.Drawing.Font("TimesNewRoman", 23, FontStyle.Bold | FontStyle.Bold)); textGanaste2.changeFont(new System.Drawing.Font("TimesNewRoman", 23, FontStyle.Bold | FontStyle.Bold)); textGanaste.Color = Color.White; textGanaste2.Color = Color.White; // Creo texto contador de tiempo textoContadorTiempo = new TgcText2d(); textoContadorTiempo.Color = Color.Black; textoContadorTiempo.Align = TgcText2d.TextAlign.RIGHT; textoContadorTiempo.Position = new Point(630, 400); //(680, 400) textoContadorTiempo.Size = new Size(300, 100); textoContadorTiempo.changeFont(new System.Drawing.Font(Fuentes.fuente.Families[0], 25, FontStyle.Regular)); // Creo texto mejor tiempo textoMejorTiempo = new TgcText2d(); textoMejorTiempo.Color = Color.Black; textoMejorTiempo.Align = TgcText2d.TextAlign.RIGHT; textoMejorTiempo.Position = new Point(630, 430); //(680, 430) textoMejorTiempo.Size = new Size(300, 100); textoMejorTiempo.changeFont(new System.Drawing.Font(Fuentes.fuente.Families[0], 25, FontStyle.Regular)); //Texto para mostrar fps textFPS = new TgcText2d(); textFPS.Position = new Point((screenSize.Width / (-2)), 0); textFPS.Text = "FPS: "; textFPS.Color = Color.Yellow; //camara GuiController.Instance.ThirdPersonCamera.Enable = true; GuiController.Instance.ThirdPersonCamera.setCamera(motorcycle.Position + new Vector3(0,0,-100), 10, 200); GuiController.Instance.ThirdPersonCamera.rotateY(-0.7f); //creo la bounding elipsoid motorcycle.Scale = new Vector3(0.5f, 0.5f, 0.5f); // motorcycle.AutoUpdateBoundingBox = false; characterElipsoid = new TgcElipsoid(motorcycle.BoundingBox.calculateBoxCenter() + new Vector3(0, 0, 0), new Vector3(23, 23, 23) * 0.5f); //cargo los colliders objetosColisionables.Clear(); foreach (TgcMesh mesh in scene.Meshes) { //Los objetos del layer "TriangleCollision" son colisiones a nivel de triangulo if (mesh.Layer == "TriangleCollision") { objetosColisionables.Add(TriangleMeshCollider.fromMesh(mesh)); } //El resto de los objetos son colisiones de BoundingBox. Las colisiones a nivel de triangulo son muy costosas asi que deben utilizarse solo //donde es extremadamente necesario (por ejemplo en el piso). El resto se simplifica con un BoundingBox else { objetosColisionables.Add(BoundingBoxCollider.fromBoundingBox(mesh.BoundingBox)); } } //agrego Piramide Como objeto Colisionable objetosColisionables.Add(BoundingBoxCollider.fromBoundingBox(piramid.BoundingBox)); //Cargo lineaInicio lineaInicio = new TgcBox(); lineaInicio.Position = new Vector3(-7, 30, -50); lineaInicio.Size = new Vector3(200, 2000, 1); lineaInicio.updateValues(); //Cargo lineaFin lineaFin = new TgcBox(); lineaFin.Size = new Vector3(100, 1000, 1); lineaFin.Position = new Vector3(0, 15, -13250); lineaFin.Color = Color.White; lineaFin.updateValues(); //La agrego como objeto colisionable objetosColisionables.Add(BoundingBoxCollider.fromBoundingBox(lineaInicio.BoundingBox)); showBB = false; //iluminacion ojalaQueAnde = new ShadowMap(scene, motorcycle); //DEBUG //Crear linea para mostrar la direccion del movimiento del personaje directionArrow = new TgcArrow(); directionArrow.BodyColor = Color.Red; directionArrow.HeadColor = Color.Green; directionArrow.Thickness = 0.4f; directionArrow.HeadSize = new Vector2(5, 10); //Linea para normal de colision collisionNormalArrow = new TgcArrow(); collisionNormalArrow.BodyColor = Color.Blue; collisionNormalArrow.HeadColor = Color.Yellow; collisionNormalArrow.Thickness = 0.4f; collisionNormalArrow.HeadSize = new Vector2(2, 5); //Caja para marcar punto de colision collisionPoint = TgcBox.fromSize(new Vector3(4, 4, 4), Color.Red); //TERMINA DEBUG }
private void drawSceneToRenderTarget(Microsoft.DirectX.Direct3D.Device d3dDevice, float elapsedTime) { //Arrancamos el renderizado. Esto lo tenemos que hacer nosotros a mano porque estamos en modo CustomRenderEnabled = true d3dDevice.BeginScene(); //Como estamos en modo CustomRenderEnabled, tenemos que dibujar todo nosotros, incluso el contador de FPS GuiController.Instance.Text3d.drawText("FPS: " + HighResolutionTimer.Instance.FramesPerSecond, 0, 60, Color.Yellow); //GuiController.Instance.Text3d.drawText(GuiController.Instance.Shaders.getTgcMeshTechnique(barcoPrincipal.Mesh.RenderType), 200, 200, Color.Black); //GuiController.Instance.Text3d.drawText("Posicion Z:" + barcoPrincipal.Mesh.Position.Z, 250, 250, Color.Black); //Tambien hay que dibujar el indicador de los ejes cartesianos GuiController.Instance.AxisLines.render(); GuiController.Instance.Drawer2D.beginDrawSprite(); if (terminoJuego) { spriteTermino.render(); } if (barcoPrincipal.Vida > 0) { sprVidaLLena.Scaling = new Vector2(barcoPrincipal.Vida/150f, 1); sprVidaLLena.render(); } Size screenSize = GuiController.Instance.Panel3d.Size; spriteMinimapa.RotationCenter = new Vector2(103f , 103f ); spriteMinimapa.Rotation += elapsedTime * 3.14159f; spriteMinimapa.render(); //spritesBarcosBot = new List<TgcSprite>(); float centroMapaX = spriteMinimapa.Position.X+105f; float centroMapaY = spriteMinimapa.Position.Y+95f; foreach (Barco barco in enemigos) { if (barco.Vida > 0) { TgcSprite spritebarco = new TgcSprite(); spritebarco.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "quicksort\\buttonred.png"); spritebarco.Position = new Vector2(centroMapaX + barco.Mesh.Position.X / 35, centroMapaY + barco.Mesh.Position.Z / 35); spritebarco.Scaling = new Vector2(0.08f, 0.08f); spritebarco.render(); } //spritesBarcosBot.Add(spritebarco); } float ratioW = spriteMinimapa.Texture.Size.Width / screenSize.Width; float ratioH = spriteMinimapa.Texture.Size.Height / screenSize.Height; spriteBarcoPrincipal.Position = new Vector2(centroMapaX + barcoPrincipal.Mesh.Position.X / 35, centroMapaY + barcoPrincipal.Mesh.Position.Z / 35); spriteBarcoPrincipal.render(); sprBarraVida.render(); GuiController.Instance.Drawer2D.endDrawSprite(); //Viejo render aqui /// /* //Obtener valor de UserVar (hay que castear) int valor = (int)GuiController.Instance.UserVars.getValue("variablePrueba"); //Obtener valores de Modifiers float valorFloat = (float)GuiController.Instance.Modifiers["valorFloat"]; string opcionElegida = (string)GuiController.Instance.Modifiers["valorIntervalo"]; Vector3 valorVertice = (Vector3)GuiController.Instance.Modifiers["valorVertice"]; */ alfa_sol = 1.5f; g_LightPos = new Vector3(2000f * (float)Math.Cos(alfa_sol), 2000f * (float)Math.Sin(alfa_sol), 0f); g_LightDir = -g_LightPos; g_LightDir.Normalize(); //Actualzar posición de la luz Vector3 lightPos = new Vector3(-300, 1500, 3000); //sol.Position = lightPos; Vector3 eyePosition = GuiController.Instance.ThirdPersonCamera.getPosition(); if (g_pCubeMapAgua != null) { //CrearEnvMapAgua(); efectosAguaIluminacion.SetValue("g_txCubeMapAgua", g_pCubeMapAgua); efectosAguaIluminacion.SetValue("texCubeMap", g_pCubeMapAgua); } efectosAguaIluminacion.SetValue("g_vLightPos", new Vector4(g_LightPos.X, g_LightPos.Y, g_LightPos.Z, 1)); efectosAguaIluminacion.SetValue("g_vLightDir", new Vector4(g_LightDir.X, g_LightDir.Y, g_LightDir.Z, 1)); g_LightView = Matrix.LookAtLH(g_LightPos, g_LightPos + g_LightDir, new Vector3(0, 0, 1)); efectosAguaIluminacion.SetValue("g_mViewLightProj", g_LightView); efectosAguaIluminacion.SetValue("time", time); efectosAguaIluminacion.SetValue("aux_Tex", textura); efectosAguaIluminacion.SetValue("texDiffuseMap", diffuseMapTexture); efectosAguaIluminacion.SetValue("lightColor", ColorValue.FromColor((Color)GuiController.Instance.Modifiers["lightColor"])); efectosAguaIluminacion.SetValue("lightPosition", TgcParserUtils.vector3ToFloat4Array(lightPos)); if (!activar_efecto) { efectosAguaIluminacion.SetValue("lightIntensity", (float)GuiController.Instance.Modifiers["lightIntensity"]); } else { efectosAguaIluminacion.SetValue("lightIntensity", 75f); } efectosAguaIluminacion.SetValue("eyePosition", TgcParserUtils.vector3ToFloat4Array(eyePosition)); //barcoPrincipal.Mesh.Effect.SetValue("bumpiness", (float)GuiController.Instance.Modifiers["bumpiness"]); efectosAguaIluminacion.SetValue("lightAttenuation", (float)GuiController.Instance.Modifiers["lightAttenuation"]); //barcoPrincipal.Mesh.Effect.SetValue("reflection", (float)GuiController.Instance.Modifiers["reflection"]); efectosAguaIluminacion.SetValue("eyePosition", TgcParserUtils.vector3ToFloat4Array(GuiController.Instance.ThirdPersonCamera.getPosition())); efectosAguaIluminacion.SetValue("lightPosition", TgcParserUtils.vector3ToFloat4Array(lightPos)); //cd relampago + Xf es var rnd = new Random(); if (!relampagoOn) { if (cooldownRelampago + rnd.Next(2, 4) < time) { effectlluvia.SetValue("relampagoOn", true); cooldownRelampago = time; relampagoOn = true; } else { effectlluvia.SetValue("relampagoOn", false); } } else { if (cooldownRelampago + ((float)rnd.Next(4, 7))/20 < time) { effectlluvia.SetValue("relampagoOn", true); relampagoOn = false; } else { effectlluvia.SetValue("relampagoOn", false); } } efectosAguaIluminacion.SetValue("materialEmissiveColor", ColorValue.FromColor((Color)GuiController.Instance.Modifiers["mEmissive"])); efectosAguaIluminacion.SetValue("materialAmbientColor", ColorValue.FromColor((Color)GuiController.Instance.Modifiers["mAmbient"])); efectosAguaIluminacion.SetValue("materialDiffuseColor", ColorValue.FromColor((Color)GuiController.Instance.Modifiers["mDiffuse"])); efectosAguaIluminacion.SetValue("materialSpecularColor", ColorValue.FromColor((Color)GuiController.Instance.Modifiers["mSpecular"])); efectosAguaIluminacion.SetValue("materialSpecularExp", (float)GuiController.Instance.Modifiers["specularEx"]); //Hacer que la camara siga al personaje en su nueva posicion GuiController.Instance.ThirdPersonCamera.Target = barcoPrincipal.Mesh.Position; oceano.render(); //Dibujar objeto principal //Siempre primero hacer todos los cálculos de lógica e input y luego al final dibujar todo (ciclo update-render) barcoPrincipal.colocarAltura(time); foreach (BarcoBot barcoEnem in enemigos) { barcoEnem.colocarAltura(time); } if (barcoPrincipal.Vida > 0) { barcoPrincipal.Movimiento(elapsedTime); } else { barcoPrincipal.hundir(elapsedTime); terminoJuego = true; } foreach (BarcoBot barcoenem in enemigos) { if (barcoenem.Vida > 0) { barcoenem.Movimiento(elapsedTime); } else { barcoenem.hundir(elapsedTime); } } barcoPrincipal.Mesh.Effect.SetValue("lightColor", ColorValue.FromColor((Color)GuiController.Instance.Modifiers["lightColor"])); barcoPrincipal.Mesh.Effect.SetValue("lightPosition", TgcParserUtils.vector3ToFloat4Array(lightPos)); barcoPrincipal.Mesh.Effect.SetValue("eyePosition", TgcParserUtils.vector3ToFloat4Array(eyePosition)); barcoPrincipal.Mesh.Effect.SetValue("lightIntensity", (float)GuiController.Instance.Modifiers["lightIntensity"]); //barcoPrincipal.Mesh.Effect.SetValue("bumpiness", (float)GuiController.Instance.Modifiers["bumpiness"]); barcoPrincipal.Mesh.Effect.SetValue("lightAttenuation", (float)GuiController.Instance.Modifiers["lightAttenuation"]); //barcoPrincipal.Mesh.Effect.SetValue("reflection", (float)GuiController.Instance.Modifiers["reflection"]); barcoPrincipal.Mesh.Effect.SetValue("eyePosition", TgcParserUtils.vector3ToFloat4Array(GuiController.Instance.ThirdPersonCamera.getPosition())); barcoPrincipal.Mesh.Effect.SetValue("lightPosition", TgcParserUtils.vector3ToFloat4Array(lightPos)); barcoPrincipal.Mesh.Effect.SetValue("materialEmissiveColor", ColorValue.FromColor((Color)GuiController.Instance.Modifiers["mEmissive"])); barcoPrincipal.Mesh.Effect.SetValue("materialAmbientColor", ColorValue.FromColor((Color)GuiController.Instance.Modifiers["mAmbient"])); barcoPrincipal.Mesh.Effect.SetValue("materialDiffuseColor", ColorValue.FromColor((Color)GuiController.Instance.Modifiers["mDiffuse"])); barcoPrincipal.Mesh.Effect.SetValue("materialSpecularColor", ColorValue.FromColor((Color)GuiController.Instance.Modifiers["mSpecular"])); barcoPrincipal.Mesh.Effect.SetValue("materialSpecularExp", (float)GuiController.Instance.Modifiers["specularEx"]); barcoPrincipal.Mesh.Effect.SetValue("daniado", barcoPrincipal.daniado ? 1 : 0); barcoPrincipal.Mesh.Effect.SetValue("time", time); barcoPrincipal.Mesh.Effect.SetValue("terminoJuego", terminoJuego); barcoPrincipal.Mesh.render(); if (barcoPrincipal.timerDaniado != null) { if (barcoPrincipal.timerDaniado.ElapsedMilliseconds >= 2000) { barcoPrincipal.daniado = false; } } foreach (BarcoBot barcoEnem in enemigos) { barcoEnem.Mesh.Effect.SetValue("lightColor", ColorValue.FromColor((Color)GuiController.Instance.Modifiers["lightColor"])); barcoEnem.Mesh.Effect.SetValue("lightPosition", TgcParserUtils.vector3ToFloat4Array(lightPos)); barcoEnem.Mesh.Effect.SetValue("eyePosition", TgcParserUtils.vector3ToFloat4Array(eyePosition)); barcoEnem.Mesh.Effect.SetValue("lightIntensity", (float)GuiController.Instance.Modifiers["lightIntensity"]); barcoEnem.Mesh.Effect.SetValue("lightAttenuation", (float)GuiController.Instance.Modifiers["lightAttenuation"]); barcoEnem.Mesh.Effect.SetValue("eyePosition", TgcParserUtils.vector3ToFloat4Array(GuiController.Instance.ThirdPersonCamera.getPosition())); barcoEnem.Mesh.Effect.SetValue("lightPosition", TgcParserUtils.vector3ToFloat4Array(lightPos)); barcoEnem.Mesh.Effect.SetValue("materialEmissiveColor", ColorValue.FromColor((Color)GuiController.Instance.Modifiers["mEmissive"])); barcoEnem.Mesh.Effect.SetValue("materialAmbientColor", ColorValue.FromColor((Color)GuiController.Instance.Modifiers["mAmbient"])); barcoEnem.Mesh.Effect.SetValue("materialDiffuseColor", ColorValue.FromColor((Color)GuiController.Instance.Modifiers["mDiffuse"])); barcoEnem.Mesh.Effect.SetValue("materialSpecularColor", ColorValue.FromColor((Color)GuiController.Instance.Modifiers["mSpecular"])); barcoEnem.Mesh.Effect.SetValue("materialSpecularExp", (float)GuiController.Instance.Modifiers["specularEx"]); barcoEnem.Mesh.Effect.SetValue("time", time); barcoEnem.Mesh.Effect.SetValue("terminoJuego", false); if (barcoEnem.daniado) { barcoEnem.Mesh.Effect.SetValue("daniado", 1); } else { barcoEnem.Mesh.Effect.SetValue("daniado", 0); } barcoEnem.Mesh.render(); barcoEnem.volverAltura(time); if (barcoEnem.timerDaniado != null) { if (barcoEnem.timerDaniado.ElapsedMilliseconds >= 2000) { barcoEnem.daniado = false; } } } barcoPrincipal.volverAltura(time); foreach (var bala in barcoPrincipal.balas) { if (bala.Mesh.Position.Y > 0) { bala.Mover(elapsedTime); bala.Mesh.render(); } } foreach (BarcoBot barco in enemigos) { foreach (var bala in barco.balas) { if (bala.Mesh.Position.Y > 0) { if (!bala.col) { bala.Mover(elapsedTime); bala.Mesh.render(); } } } } //sol.render(); skyBox.render(); //Terminamos manualmente el renderizado de esta escena. Esto manda todo a dibujar al GPU al Render Target que cargamos antes d3dDevice.EndScene(); }
public override void init() { //GuiController.Instance: acceso principal a todas las herramientas del Framework enemigos = new List<Barco>(); terminoJuego = false; //Device de DirectX para crear primitivas Microsoft.DirectX.Direct3D.Device d3dDevice = GuiController.Instance.D3dDevice; //Activamos el renderizado customizado. De esta forma el framework nos delega control total sobre como dibujar en pantalla //La responsabilidad cae toda de nuestro lado GuiController.Instance.CustomRenderEnabled = true; g_pCubeMapAgua = TextureLoader.FromCubeFile(d3dDevice, GuiController.Instance.ExamplesMediaDir + "Shaders\\CubeMap.dds"); //sol = TgcBox.fromSize(new Vector3(50, 50, 50), Color.LightYellow); //Cargo la escena completa que tendria que ser la del escenario con el cielo / la del agua //PROXIMAMENTE, ahora cargo otro escenario //Pruebo postprocess lluvia CustomVertex.PositionTextured[] screenQuadVertices = new CustomVertex.PositionTextured[] { new CustomVertex.PositionTextured( -1, 1, 1, 0,0), new CustomVertex.PositionTextured(1, 1, 1, 1,0), new CustomVertex.PositionTextured(-1, -1, 1, 0,1), new CustomVertex.PositionTextured(1,-1, 1, 1,1) }; //vertex buffer de los triangulos screenQuadVB = new VertexBuffer(typeof(CustomVertex.PositionTextured), 4, d3dDevice, Usage.Dynamic | Usage.WriteOnly, CustomVertex.PositionTextured.Format, Pool.Default); screenQuadVB.SetData(screenQuadVertices, 0, LockFlags.None); //Creamos un Render Targer sobre el cual se va a dibujar la pantalla renderTarget2D = new Texture(d3dDevice, d3dDevice.PresentationParameters.BackBufferWidth , d3dDevice.PresentationParameters.BackBufferHeight, 1, Usage.RenderTarget, Format.X8R8G8B8, Pool.Default); //Cargar shader con efectos de Post-Procesado effectlluvia = TgcShaders.loadEffect(GuiController.Instance.AlumnoEjemplosMediaDir + "quicksort\\PostProcess.fx"); //Configurar Technique dentro del shader effectlluvia.Technique = "AlarmaTechnique"; //Cargar textura que se va a dibujar arriba de la escena del Render Target alarmTexture = TgcTexture.createTexture(d3dDevice, GuiController.Instance.AlumnoEjemplosMediaDir + "quicksort\\rain.png"); //Interpolador para efecto de variar la intensidad de la textura de alarma intVaivenAlarm = new InterpoladorVaiven(); intVaivenAlarm.Min = 0; intVaivenAlarm.Max = 2; intVaivenAlarm.Speed = 10; intVaivenAlarm.reset(); //Modifier para activar/desactivar efecto de alarma GuiController.Instance.Modifiers.addBoolean("activar_efecto", "Activar efecto", true); //termina post process //inicio// spriteFondo = new TgcSprite(); spriteFondo.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "quicksort\\MenuPrincipal.jpg"); Size screenSize = GuiController.Instance.Panel3d.Size; Size textureSize = spriteFondo.Texture.Size; spriteFondo.Scaling = new Vector2(1f, 0.8f); spriteFondo.Position = new Vector2(FastMath.Max(screenSize.Width / 2 - textureSize.Width / 2, 0), FastMath.Max(screenSize.Height / 2 - textureSize.Height / 2, 0)); spriteLetras = new TgcSprite(); spriteLetras.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "quicksort\\Texto.png"); spriteInicio = new TgcSprite(); spriteInicio.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "quicksort\\inicio.png"); spriteLetras.Scaling = new Vector2(0.4f*1.65f, 0.3f*1.65f); Size textureSize2 = spriteLetras.Texture.Size; spriteInicio.Scaling = new Vector2(0.4f, 0.3f); Size textureSize3 = spriteInicio.Texture.Size; spriteTermino = new TgcSprite(); spriteTermino.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "quicksort\\termino.png"); //spriteTermino.Scaling = new Vector2(0.5f,0.5f); spriteTermino.Position = new Vector2(screenSize.Width / 4, screenSize.Height / 2); spriteLetras.Position = new Vector2(FastMath.Max(screenSize.Width / 2 - textureSize2.Width / 2, 0), FastMath.Max(screenSize.Height / 2 - textureSize2.Height / 2, 0)); spriteLetras.Position = new Vector2(spriteLetras.Position.X + 110, spriteLetras.Position.Y); spriteInicio.Position = new Vector2(FastMath.Max(screenSize.Width / 2 - textureSize3.Width / 2, 0), FastMath.Max(screenSize.Height / 2 - textureSize3.Height / 2, 0)); spriteInicio.Position = new Vector2(spriteInicio.Position.X + 210, spriteLetras.Position.Y+95); spriteMinimapa = new TgcSprite(); spriteMinimapa.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "quicksort\\minimapa.png"); spriteMinimapa.Scaling = new Vector2(0.2f, 0.2f); Size minimapSize = spriteMinimapa.Texture.Size; spriteMinimapa.Position = new Vector2(FastMath.Max(screenSize.Width - 210, 0), FastMath.Max(screenSize.Height - minimapSize.Height , 0)); spriteBarcoPrincipal = new TgcSprite(); spriteBarcoPrincipal.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "quicksort\\pointgreen.png"); spriteBarcoPrincipal.Scaling = new Vector2(0.5f,0.5f); //inicio// //ui sprBarraVida = new TgcSprite(); sprBarraVida.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "quicksort\\BarraVacia.png"); Size textureSize4 = sprBarraVida.Texture.Size; sprBarraVida.Scaling = new Vector2(1f, 1f); sprBarraVida.Position = new Vector2(1, 1); sprVidaLLena = new TgcSprite(); sprVidaLLena.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "quicksort\\vidallena.png"); Size textureSize5 = sprVidaLLena.Texture.Size; sprVidaLLena.Scaling = new Vector2(1f, 1f); sprVidaLLena.Position = new Vector2(1, 15); //ui Bitmap b = (Bitmap)Bitmap.FromFile(GuiController.Instance.AlumnoEjemplosMediaDir + "quicksort\\wallhaven-276951.jpg"); //"water_water_0056_01_preview.jpg"); b.RotateFlip(RotateFlipType.Rotate90FlipX); textura = Texture.FromBitmap(d3dDevice, b, Usage.None, Pool.Managed); b = (Bitmap)Bitmap.FromFile(GuiController.Instance.ExamplesMediaDir + "Shaders\\BumpMapping_DiffuseMap.jpg"); diffuseMapTexture = Texture.FromBitmap(d3dDevice, b, Usage.None, Pool.Managed); oceano = new SmartTerrain(); //oceano.loadHeightmap(GuiController.Instance.ExamplesMediaDir + "Heighmaps\\" + "TerrainTexture1-256x256.jpg", 30.00f, 1.0f, new Vector3(0, 0, 0)); oceano.loadPlainHeightmap(256, 256, 0, 50.0f, 1.0f, new Vector3(0, 0, 0)); oceano.loadTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "quicksort\\water_water_0056_01_preview.jpg"); TgcSceneLoader loader = new TgcSceneLoader(); //escena = loader.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir + "MeshCreator\\Scenes\\Isla\\Isla-TgcScene.xml"); //Textura del skybox string texturesPath = GuiController.Instance.ExamplesMediaDir + "Texturas\\Quake\\SkyBox LostAtSeaDay\\"; //Crear SkyBox skyBox = new TgcSkyBox(); skyBox.Center = new Vector3(0, 0, 0); skyBox.Size = new Vector3(10000, 10000, 10000); //Configurar color //skyBox.Color = Color.OrangeRed; //Configurar las texturas para cada una de las 6 caras skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Up, texturesPath + "lostatseaday_up.jpg"); skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Down, texturesPath + "lostatseaday_dn.jpg"); skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Left, texturesPath + "lostatseaday_lf.jpg"); skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Right, texturesPath + "lostatseaday_rt.jpg"); //Hay veces es necesario invertir las texturas Front y Back si se pasa de un sistema RightHanded a uno LeftHanded skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Front, texturesPath + "lostatseaday_bk.jpg"); skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Back, texturesPath + "lostatseaday_ft.jpg"); //Actualizar todos los valores para crear el SkyBox skyBox.updateValues(); //Cargo el mesh del/los barco/s -> porque se carga como escena y no cargo el mesh directamente? TgcScene scene2 = loader.loadSceneFromFile(GuiController.Instance.AlumnoEjemplosMediaDir + "quicksort\\Boteconcañon\\BoteConCanion-TgcScene.xml"); mainMesh = scene2.Meshes[0]; mainMesh.Position = new Vector3(-200f,0f, 200f); mainMesh.Scale = new Vector3(2f,2f,2f); TgcScene scene4 = loader.loadSceneFromFile(GuiController.Instance.AlumnoEjemplosMediaDir + "quicksort\\Boteconcañon\\BoteConCanion-TgcScene.xml"); meshBot = scene4.Meshes[0]; meshBot.Position = new Vector3(-200f,0f,200f); meshBot.Scale = new Vector3(1.8f, 1.8f, 1.8f); TgcScene scene3 = loader.loadSceneFromFile(GuiController.Instance.AlumnoEjemplosMediaDir + "quicksort\\Hacha\\Bala-TgcScene.xml"); balaMesh1 = scene3.Meshes[0]; TgcScene scene5 = loader.loadSceneFromFile(GuiController.Instance.AlumnoEjemplosMediaDir + "quicksort\\Hacha\\Hacha-TgcScene.xml"); balaMesh2 = scene5.Meshes[0]; barcoPrincipal = new BarcoPlayer(150, 50, VELOCIDAD_MOVIMIENTO, ACELERACION, VELOCIDAD_ROTACION, mainMesh, 0.06, loader,balaMesh2); //pongo enemigos int rows = 12; float offset = 3000; for (int i = 0; i < rows; i++) { //Crear instancia de modelo TgcMesh instance = meshBot.createMeshInstance(meshBot.Name + i + "_" ); //Desplazarlo instance.move(offset * (FastMath.Cos((float)i * 0.523599f)),0,offset * FastMath.Sin((float)i * 0.523599f)); instance.Scale = new Vector3(1.5f, 1.5f, 1.5f); var barcoenem = new BarcoBot(100, 10, 100, ACELERACION, 18, instance, 0.05, barcoPrincipal, loader,balaMesh1); barcoenem.Mesh.Effect = TgcShaders.loadEffect(GuiController.Instance.AlumnoEjemplosMediaDir + "quicksort\\shader_bote.fx"); //efectosAguaIluminacion; barcoenem.Mesh.Technique = GuiController.Instance.Shaders.getTgcMeshTechnique(barcoenem.Mesh.RenderType);//"EnvironmentMapTechnique"; barcoenem.BarcosEnemigos = new List<Barco>(); barcoenem.BarcosEnemigos.Add(barcoPrincipal); enemigos.Add(barcoenem); } //TgcScene scene3 = loader.loadSceneFromFile(GuiController.Instance.ExamplesDir + "Shaders\\WorkshopShaders\\Media\\Piso\\Agua-TgcScene.xml"); //agua = scene3.Meshes[0]; //agua.Scale = new Vector3(25f, 1f, 25f); //agua.Position = new Vector3(0f, 0f, 0f); efectosAguaIluminacion = TgcShaders.loadEffect(GuiController.Instance.AlumnoEjemplosMediaDir + "quicksort\\shader_agua.fx"); oceano.Effect = efectosAguaIluminacion; oceano.Technique = "RenderAgua";//"EnvironmentMapTechnique"; //"RenderAgua"; oceano.AlphaBlendEnable = true; //barcoEnemigo = new BarcoBot(100, 35,100, ACELERACION, 18, meshBot, 0.05,barcoPrincipal,loader); barcoPrincipal.BarcosEnemigos = enemigos; // iluminacion en los barcos barcoPrincipal.Mesh.Effect = TgcShaders.loadEffect(GuiController.Instance.AlumnoEjemplosMediaDir + "quicksort\\shader_bote.fx");//GuiController.Instance.Shaders.TgcMeshPointLightShader;// efectosAguaIluminacion; //GuiController.Instance.Shaders.TgcMeshPointLightShader;// efectosAguaIluminacion; barcoPrincipal.Mesh.Technique = GuiController.Instance.Shaders.getTgcMeshTechnique(barcoPrincipal.Mesh.RenderType); //"EnvironmentMapTechnique"; //barcoEnemigo.Mesh.Effect = GuiController.Instance.Shaders.TgcMeshPointLightShader; //efectosAguaIluminacion; //barcoEnemigo.Mesh.Technique = GuiController.Instance.Shaders.getTgcMeshTechnique(barcoEnemigo.Mesh.RenderType);//"EnvironmentMapTechnique"; //Camara en tercera persona focuseada en el barco (canoa) //PARA DESARROLLO DEL ESCENARIO ES MEJOR MOVERSE CON ESTA CAMARA GuiController.Instance.FpsCamera.Enable = true; GuiController.Instance.FpsCamera.Velocity = new Vector3(0.0f,0.0f,0.0f); GuiController.Instance.FpsCamera.JumpSpeed = 0f; GuiController.Instance.FpsCamera.setCamera(new Vector3(0f,700f,-2300f), new Vector3(900f, 100f, -300f)); GuiController.Instance.ThirdPersonCamera.rotateY(Geometry.DegreeToRadian(180)); ////GuiController.Instance.Fog.Enabled = true; //GuiController.Instance.Modifiers.addFloat("reflection", 0, 1, 0.35f); //GuiController.Instance.Modifiers.addVertex3f("lightPos", new Vector3(-3000, 0, -3000), new Vector3(3000, 3000, 3000), new Vector3(-300, 1500, 3000)); GuiController.Instance.Modifiers.addColor("lightColor", Color.LightYellow); //GuiController.Instance.Modifiers.addFloat("bumpiness", 0, 1, 1f); GuiController.Instance.Modifiers.addFloat("lightIntensity", 0, 500, 150); GuiController.Instance.Modifiers.addFloat("lightAttenuation", 0.1f, 2, 0.1f); GuiController.Instance.Modifiers.addFloat("specularEx", 0, 100, 20f); GuiController.Instance.Modifiers.addColor("mEmissive", Color.Black); GuiController.Instance.Modifiers.addColor("mAmbient", Color.White); GuiController.Instance.Modifiers.addColor("mDiffuse", Color.White); GuiController.Instance.Modifiers.addColor("mSpecular", Color.White); //Carpeta de archivos Media del alumno //string alumnoMediaFolder = GuiController.Instance.AlumnoEjemplosMediaDir; Mapa.oceano_mesh = oceano; }
//Metodos para el menú y el marcador private void initMenu() { Imagen_Menu = new TgcSprite(); Imagen_Menu.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "Jet_Pilot\\Menu\\JP4.jpg"); float factor_ancho = (float)anchoPantalla / (float)Imagen_Menu.Texture.Width; float factor_alto = (float)altoPantalla / (float)Imagen_Menu.Texture.Height; Imagen_Menu.Position = new Vector2(0, 0); Imagen_Menu.Scaling = new Vector2(factor_ancho, factor_alto); Texto_Start = new TgcText2d(); Texto_Titulo = new TgcText2d(); Texto_Start.Color = Color.Green; Texto_Titulo.Color = Color.LightGray; Texto_Start.Text = "Presione enter para iniciar"; Texto_Titulo.Text = "JET PILOT"; Texto_Start.changeFont(new System.Drawing.Font("Cataclysmic", 25.0f)); Texto_Titulo.changeFont(new System.Drawing.Font("Chiller", 50.0f)); Texto_Start.Size = new Size(0, 0); Texto_Titulo.Size = new Size(0, 0); Texto_Start.Position = new Point(anchoPantalla / 2 + Texto_Start.Text.Length / 2, altoPantalla * 9 / 10); Texto_Titulo.Position = new Point(anchoPantalla / 6, 0); sound = GuiController.Instance.Mp3Player; sound.FileName = GuiController.Instance.AlumnoEjemplosMediaDir + "Jet_Pilot\\Sonido\\102_prologue.mp3"; }
public Player() { TgcSceneLoader loaderSniper = new TgcSceneLoader(); string media = GuiController.Instance.AlumnoEjemplosMediaDir; TgcScene sniperRifle = loaderSniper.loadSceneFromFile(media + "CEGA\\Sniper-TgcScene.xml"); rifle = sniperRifle.Meshes[0]; rifle.AlphaBlendEnable = true; rifle.AutoTransformEnable = false; rifleBaseTransforms = Matrix.Scaling(new Vector3(0.01f, 0.01f, 0.01f)) * Matrix.RotationY(FastMath.PI - 0.03f) * Matrix.Translation(new Vector3(0.5f, -1.0f, 2.0f)); // Configuracion de la camara // GuiController.Instance.CurrentCamera.Enable = false; camera = new FpsCamera(); GuiController.Instance.CurrentCamera = camera; camera.MovementSpeed = WALKING_SPEED; camera.RotationSpeed = ROTATION_SPEED_NO_SCOPE; posicionSegura = camera.getPosition(); posicionInicial = camera.getPosition(); lookAtInicial = camera.getLookAt(); // Configuracion del stencil para el modo scope // scope_stencil = new TgcSprite(); scope_stencil.Texture = TgcTexture.createTexture(media + @"CEGA\Textures\scope.png"); Size screenSize = GuiController.Instance.Panel3d.Size; Size textureSize = scope_stencil.Texture.Size; float scope_scale = FastMath.Min( (float)screenSize.Width / textureSize.Width, (float)screenSize.Height / textureSize.Height) * 0.9f; scope_stencil.Scaling = new Vector2(scope_scale, scope_scale); scope_stencil.Position = new Vector2( FastMath.Max(screenSize.Width / 2 - textureSize.Width * scope_scale / 2, 0), FastMath.Max(screenSize.Height / 2 - textureSize.Height * scope_scale / 2, 0)); // El radio, ajustado a -1% para cubrir el borde scope_radius = (textureSize.Height * scope_scale / 2.0f) * 0.99f; LoadSounds(media); //Inicializo vidas , balas y puntos. this.vidas = 5; this.ammo = -1; //Por ahora son infinitas this.puntos = 0; //Configuracion de la mira sin scope. float mira_scale = 0.08f; mira = new TgcSprite(); mira.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "CEGA\\Textures\\Mira.png"); mira.Scaling = new Vector2(mira_scale, mira_scale); Size miraSize = mira.Texture.Size; miraSize.Height = (int)(miraSize.Height * mira_scale); miraSize.Width = (int)(miraSize.Width * mira_scale); mira.Position = new Vector2(FastMath.Max(screenSize.Width / 2 - miraSize.Width / 2, 0), FastMath.Max(screenSize.Height / 2 - miraSize.Height / 2, 0)); //Inicialización UI (Texto) LoadUI(screenSize); }
/// <summary> /// Renderizar Sprite /// </summary> /// <param name="sprite">Sprite a dibujar</param> public void drawSprite(TgcSprite sprite) { dxSprite.Transform = sprite.TransformationMatrix; dxSprite.Draw(sprite.Texture.D3dTexture, sprite.SrcRect, Vector3.Empty, Vector3.Empty, sprite.Color); }
public void Init() { GAME_OVER = false; TEXT_DELAY = 0; time = 0; ScreenWidth = GuiController.Instance.D3dDevice.Viewport.Width; ScreenHeight = GuiController.Instance.D3dDevice.Viewport.Height; d3dDevice = GuiController.Instance.D3dDevice; //-------------User Interface------------ //Textos para los Kills specialKillText = new TgcText2d(); specialKillText.Color = Color.Crimson; specialKillText.Align = TgcText2d.TextAlign.CENTER; specialKillText.Position = new Point(0, 100); specialKillText.changeFont(new System.Drawing.Font("TimesNewRoman", 25, FontStyle.Bold)); //texto para el score //cambia de color segun el score scoreText = new TgcText2d(); scoreText.Text = GameManager.Instance.score.ToString(); scoreText.Color = Color.LightBlue; scoreText.changeFont(new System.Drawing.Font("Arial", 20, FontStyle.Bold)); //texto para el capturas captureText = new TgcText2d(); captureText.Text = GameManager.Instance.capturas.ToString() + "/11"; captureText.Color = Color.FloralWhite; captureText.Position = new Point(450,0); captureText.changeFont(new System.Drawing.Font("Arial", 20, FontStyle.Bold)); // cargamos los sprites screenCovered = SMALL_SCOPE; cross = new TgcSprite(); normalScope = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "Los_Borbotones\\Sprites\\normalScope.png"); zoomedScope = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "Los_Borbotones\\Sprites\\zoomedScope.png"); cross.Texture = normalScope; refreshScopeTexture(); HudFront = new TgcSprite(); HudFront.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "Los_Borbotones\\Sprites\\HudFront.png"); initHudFront(); healthSprite = new TgcSprite(); healthSprite.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "Los_Borbotones\\Sprites\\HealthStencil.png"); healthInit(); hudWeapon = new TgcSprite(); sniperTexture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "Los_Borbotones\\Sprites\\sniperHUD.png"); launcherTexture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "Los_Borbotones\\Sprites\\launcherHUD.png"); refreshMainWeapon(); hudWeaponInit(); scoreSprite = new TgcSprite(); scoreSprite.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "Los_Borbotones\\Sprites\\Score.png"); initScoreSprite(); mapBaseSprite = new TgcSprite(); mapBaseSprite.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "Los_Borbotones\\Sprites\\MapBase.png"); initMapBase(); playerPointerSprite = new TgcSprite(); playerPointerSprite.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "Los_Borbotones\\Sprites\\playerPointer.png"); initPlayerPointer(); highScoreSprite = new TgcSprite(); highScoreSprite.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "Los_Borbotones\\Sprites\\highScore.png"); initHighScore(); //inicializo audio sound = new TgcStaticSound(); ambient = new TgcStaticSound(); string dir = GuiController.Instance.AlumnoEjemplosMediaDir + "Los_Borbotones\\Audio/Ambiente/Deep_space.wav"; ambient.loadSound(dir, -1500); ambient.play(true); reachedHighScore = false; }
public override void Init() { mesh.AutoTransformEnable = false; //seteamos la posicion inicial del enemigo mesh.Transform = CreatorMatrixPosition(); mesh.BoundingBox.transform(CreatorMatrixPosition()); Matrix matt = Matrix.Translation(new Vector3(mesh.Transform.M41, mesh.Transform.M42, mesh.Transform.M43)); Matrix matScale = Matrix.Scaling(MESH_SCALE, MESH_SCALE, MESH_SCALE); this.posicionActual = matScale * giroInicial * matt; posicionAnterior = posicionActual; pointer = new TgcSprite(); pointer.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "Los_Borbotones\\Sprites\\EnemyPointer.png"); initPointer(); }
private void crearSprites() { boton1 = new TgcSprite(); boton1.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "RenderGroup\\texturas\\boton.png"); Size textureSize = boton1.Texture.Size; boton1.Position = new Vector2(screenSize.Width - textureSize.Width, screenSize.Height - textureSize.Height); boton2 = new TgcSprite(); boton2.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "RenderGroup\\texturas\\boton2.png"); textureSize = boton2.Texture.Size; boton2.Position = new Vector2((screenSize.Width - boton1.Texture.Size.Width) - textureSize.Width, screenSize.Height - textureSize.Height); timon = new TgcSprite(); timon.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "RenderGroup\\texturas\\timon.png"); textureSize = timon.Texture.Size; timon.Position = new Vector2(0, screenSize.Height - textureSize.Height); barra = new TgcSprite(); barra.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "RenderGroup\\texturas\\barra.png"); textureSize = barra.Texture.Size; barra.Position = new Vector2(0, screenSize.Height - textureSize.Height); //Crear Sprite animado para la lluvia animatedSprite = new TgcAnimatedSprite( GuiController.Instance.AlumnoEjemplosMediaDir + "RenderGroup\\texturas\\LLUVIA2.png", //Textura de 512 X 512 new Size(128, 128), //Tamaño de un frame (128x128px en este caso) 16, //Cantidad de frames, (son 16 de 128x128px) 20 //Velocidad de animacion, en cuadros x segundo ); animatedSprite.Position = new Vector2(-10, 0); animatedSprite.Scaling = new Vector2(8, 4); //Crear Sprite animado para la gaviota animatedSprite2 = new TgcAnimatedSprite( GuiController.Instance.AlumnoEjemplosMediaDir + "RenderGroup\\texturas\\gaviotas2.png", //Textura de 1024 X 1024 new Size(256, 256), //Tamaño de un frame (128x128px en este caso) 16, //Cantidad de frames, (son 16 de 128x128px) 1 //Velocidad de animacion, en cuadros x segundo ); }
public void crearSprite() { this.sprite = new TgcSprite(); this.sprite.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "barra.jpg"); }
internal void Init() { Device d3dDevice = GuiController.Instance.D3dDevice; score = 0; //lleva el score del jugador capturas = 0; WINNER = false; killMultiTracker = 0; KILL_DELAY = 0; SPAWN_TIME_COUNTER = 0f; time = 0; // creo meshes de modelo para clonar y asi optimizar TgcSceneLoader loader2 = new TgcSceneLoader(); TgcScene scene = loader2.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir + "ModelosTgc\\Robot\\Robot-TgcScene.xml"); this.ModeloRobot = scene.Meshes[0]; TgcScene scene2 = loader2.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir + "MeshCreator\\Meshes\\Vehiculos\\StarWars-Speeder\\StarWars-Speeder-TgcScene.xml"); this.ModeloNave = scene2.Meshes[0]; TgcScene scene3 = loader2.loadSceneFromFile(GuiController.Instance.AlumnoEjemplosMediaDir + "Los_Borbotones\\Meshes\\proyectiles\\EnergyBall-TgcScene.xml"); this.ModeloProyectil = scene3.Meshes[0]; //Cargar textura de CubeMap para Environment Map cubeMap = TextureLoader.FromCubeFile(d3dDevice, GuiController.Instance.AlumnoEjemplosMediaDir + "Los_Borbotones\\Shaders\\CubemapRobot.dds"); //Cargar Shader de DynamicLights envMap = TgcShaders.loadEffect(GuiController.Instance.ExamplesMediaDir + "Shaders\\EnvironmentMap.fx"); envMap.Technique = "SimpleEnvironmentMapTechnique"; skeletalEnvMap = TgcShaders.loadEffect(GuiController.Instance.AlumnoEjemplosMediaDir + "Los_Borbotones\\Shaders\\" + "SkeletalEnvMap.fx"); //Creo skybox skyBox = new CustomSkyBox(); skyBox.Center = new Vector3(0, 0, 0); float farplane = CustomFpsCamera.FAR_PLANE; skyBox.Size = new Vector3(farplane, farplane, farplane); string texturesPath = GuiController.Instance.ExamplesMediaDir + "Texturas\\Quake\\SkyBox1\\"; skyBox.setFaceTexture(CustomSkyBox.SkyFaces.Up, texturesPath + "phobos_up.jpg"); skyBox.setFaceTexture(CustomSkyBox.SkyFaces.Down, texturesPath + "phobos_dn.jpg"); skyBox.setFaceTexture(CustomSkyBox.SkyFaces.Left, texturesPath + "phobos_lf.jpg"); skyBox.setFaceTexture(CustomSkyBox.SkyFaces.Right, texturesPath + "phobos_rt.jpg"); skyBox.setFaceTexture(CustomSkyBox.SkyFaces.Front, texturesPath + "phobos_bk.jpg"); skyBox.setFaceTexture(CustomSkyBox.SkyFaces.Back, texturesPath + "phobos_ft.jpg"); skyBox.updateValues(); //Creacion del terreno currentHeightmap = GuiController.Instance.AlumnoEjemplosMediaDir + "Los_Borbotones\\Mapas\\" + "experimento-editando4_3.jpg"; //Seteo de la resolucion del jpg de heightmap para la interpolacion de altura, como es cuadrado se usa una sola variable heightmapResolution = 800; textureResolution = 1600; Vector3 posInicial = new Vector3(0, 0, 0); currentTexture = GuiController.Instance.AlumnoEjemplosMediaDir + "Los_Borbotones\\Mapas\\" + "grunge.jpg"; terrain = new CustomTerrain(); terrain.loadHeightmap(currentHeightmap, currentScaleXZ, currentScaleY, posInicial, cantidadFilasColumnas); terrain.loadTexture(currentTexture); terrain.Effect = TgcShaders.loadEffect(GuiController.Instance.AlumnoEjemplosMediaDir + "Los_Borbotones\\Shaders\\RenderTerrain.fx"); terrain.Technique = "RenderTerrain"; //Creacion del shader de viento windShader = TgcShaders.loadEffect(GuiController.Instance.AlumnoEjemplosMediaDir + "Los_Borbotones\\Shaders\\WindTree.fx"); //Creacion de la Vegetacion this.vegetation = new List<TgcMesh>(); TgcSceneLoader loader = new TgcSceneLoader(); Vegetation = loader.loadSceneFromFile(GuiController.Instance.AlumnoEjemplosMediaDir + "Los_Borbotones\\Mapas\\100x8 v4-TgcScene.xml"); vegetation = Vegetation.Meshes; int i; for (i = 1; i < vegetation.Count; i++) { float randScaleXZ = (float)random.Next(85, 115) / 100; float randScaleY = (float)random.Next(70, 130) / 100; Matrix scale = Matrix.Scaling(new Vector3(0.06f * randScaleXZ, 0.4f * randScaleY, 0.06f * randScaleXZ)); vegetation[i].setColor(Color.Purple); vegetation[i].Effect = windShader; vegetation[i].Technique = "WindTree"; vegetation[i].Scale = new Vector3(randScaleXZ, randScaleY, randScaleXZ); Vector3 center = vegetation[i].BoundingBox.calculateBoxCenter(); float y; interpoledHeight(center.X, center.Z, out y); center.Y = y; Matrix trans = Matrix.Translation(center + new Vector3(-4f, 0, 0)); vegetation[i].BoundingBox.transform(scale * trans); } //Creacion de la Arbustos this.arbustos = new List<TgcMesh>(); TgcSceneLoader loader6 = new TgcSceneLoader(); Arbustos = loader6.loadSceneFromFile(GuiController.Instance.AlumnoEjemplosMediaDir + "Los_Borbotones\\Mapas\\Arbustos-TgcScene.xml"); arbustos = Arbustos.Meshes; for (i = 1; i < arbustos.Count; i++) { float randScaleXZ = (float)random.Next(90, 110) / 100; float randScaleY = (float)random.Next(75, 125) / 100; arbustos[i].Effect = windShader; arbustos[i].Technique = "WindTree"; arbustos[i].setColor(Color.DarkOrange); arbustos[i].Scale = new Vector3(randScaleXZ, randScaleY, randScaleXZ); } //Creacion de la Tesoros this.tesoros = new List<TgcMesh>(); TgcSceneLoader loader5 = new TgcSceneLoader(); Tesoros = loader5.loadSceneFromFile(GuiController.Instance.AlumnoEjemplosMediaDir + "Los_Borbotones\\Mapas\\Tesoros-TgcScene.xml"); tesoros = Tesoros.Meshes; pointerTexture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "Los_Borbotones\\Sprites\\TreasurePointer.png"); initPointer(); int k; for (k = 1; k < tesoros.Count; k++) { TgcSprite pointer = new TgcSprite(); pointer.Texture = pointerTexture; pointer.Scaling = pointerScaling; pointers.Add(pointer); } //Creacion de barriles this.meshesBarril = new List<TgcMesh>(); TgcSceneLoader loader4 = new TgcSceneLoader(); Barriles = loader4.loadSceneFromFile(GuiController.Instance.AlumnoEjemplosMediaDir + "Los_Borbotones\\Mapas\\Barriles2-TgcScene.xml"); Barriles.setMeshesEnabled(true); meshesBarril = Barriles.Meshes; int j; //Matrix scale = Matrix.Scaling(new Vector3(0.06f, 0.4f, 0.06f)); for (j = 1; j < meshesBarril.Count; j++) { Barril barril = new Barril(); meshesBarril[j].Scale = new Vector3(0.3f, 0.3f, 0.3f); barril.mesh = meshesBarril[j]; barril.Init(); barriles.Add(barril); //vegetation[i].setColor(Color.SkyBlue); //Vector3 center = vegetation[i].BoundingBox.calculateBoxCenter(); //float y; //interpoledHeight(center.X, center.Z, out y); //center.Y = y; //Matrix trans = Matrix.Translation(center + new Vector3(-4f, 0, 0)); //vegetation[i].BoundingBox.transform(scale * trans); } //inicializamos al player player1.Init(); enemies = new List<Enemy>(); proyectiles = new List<Proyectil>(); ScreenWidth = GuiController.Instance.D3dDevice.Viewport.Width; ScreenHeight = GuiController.Instance.D3dDevice.Viewport.Height; obstaculos = new List<TgcMesh>(); obstaculos.AddRange(vegetation); obstaculos.AddRange(meshesBarril); obstaculos.AddRange(arbustos); quadTree = new Quadtree(); quadTree.create(obstaculos, Vegetation.BoundingBox); quadTree.createDebugQuadtreeMeshes(); //seteamos niebla //d3dDevice.RenderState.FogTableMode = FogMode.Linear; d3dDevice.RenderState.FogTableMode = FogMode.Exp2; d3dDevice.RenderState.FogVertexMode = FogMode.None; d3dDevice.RenderState.FogColor = Color.MediumPurple; //d3dDevice.RenderState.FogStart = 3000f; //d3dDevice.RenderState.FogEnd = farplane; d3dDevice.RenderState.FogDensity = 0.00006f; d3dDevice.RenderState.FogEnable = true; initPastos(); int secuense = 0; int part = 0; Pasto pasto = new Pasto(); foreach (Vector3 pastoCoord in pastosCoords) { pasto.crearPasto(d3dDevice, secuense, pastoCoord); if (part == 5) { pastos.Add(pasto); pasto = new Pasto(); } secuense++; part++; if (secuense > 2) secuense = 0; if (part > 5) part = 0; } }
/// <summary> /// Método que se llama una sola vez, al principio cuando se ejecuta el ejemplo. /// Escribir aquí todo el código de inicialización: cargar modelos, texturas, modifiers, uservars, etc. /// Borrar todo lo que no haga falta /// </summary> public override void init() { //GuiController.Instance: acceso principal a todas las herramientas del Framework //Device de DirectX para crear primitivas d3dDevice = GuiController.Instance.D3dDevice; rand = new Random(); //Carpeta de archivos Media del alumno alumnoMediaFolder = GuiController.Instance.AlumnoEjemplosMediaDir; effect = TgcShaders.loadEffect(alumnoMediaFolder + "Shaders\\viento.fx"); Control focusWindows = GuiController.Instance.D3dDevice.CreationParameters.FocusWindow; mouseCenter = focusWindows.PointToScreen( new Point( focusWindows.Width / 2, focusWindows.Height / 2) ); inicializarTerreno(); pathMusica = GuiController.Instance.AlumnoEjemplosMediaDir + "Sonidos\\Stayin_alive.mp3"; GuiController.Instance.Mp3Player.closeFile(); GuiController.Instance.Mp3Player.FileName = pathMusica; player = GuiController.Instance.Mp3Player; //player.play(true); //Crear Sprite mira = new TgcSprite(); mira.Texture = TgcTexture.createTexture(alumnoMediaFolder + "\\mira.png"); miraActivada = false; mira_zoom = new TgcSprite(); mira_zoom.Texture = TgcTexture.createTexture(alumnoMediaFolder + "\\mira_zoom3.png"); arma = new TgcSprite(); arma.Texture = TgcTexture.createTexture(alumnoMediaFolder + "\\arma.png"); fuegoArma = new TgcAnimatedSprite( GuiController.Instance.ExamplesMediaDir + "\\Texturas\\Sprites\\Explosion.png", //Textura de 256x256 new Size(64, 64), //Tamaño de un frame (64x64px en este caso) 16, //Cantidad de frames, (son 16 de 64x64px) 10 //Velocidad de animacion, en cuadros x segundo ); //Sonidos disparo = new TgcStaticSound(); disparo.loadSound(alumnoMediaFolder + "\\Sonidos\\disparo.wav"); headshot = new TgcStaticSound(); headshot.loadSound(alumnoMediaFolder + "\\Sonidos\\Headshot.wav"); golpe = new TgcStaticSound(); golpe.loadSound(alumnoMediaFolder + "\\Sonidos\\punch.wav"); explosion = new TgcStaticSound(); explosion.loadSound(alumnoMediaFolder + "\\Sonidos\\explosion.wav"); muerte = new TgcStaticSound(); muerte.loadSound(alumnoMediaFolder + "\\Sonidos\\gameover.wav"); ganador = new TgcStaticSound(); ganador.loadSound(alumnoMediaFolder + "\\Sonidos\\ganador.wav"); sorpresa = new TgcStaticSound(); sorpresa.loadSound(alumnoMediaFolder + "\\Sonidos\\sorpresa.wav"); //Ubicarlo centrado en la pantalla screenSize = GuiController.Instance.Panel3d.Size; Size textureSize = mira.Texture.Size; mira.Scaling = new Vector2(0.6f, 0.6f); mira.Position = new Vector2(FastMath.Max(screenSize.Width / 2 - (textureSize.Width * 0.6f) / 2, 0), FastMath.Max(screenSize.Height / 2 - (textureSize.Height * 0.6f) / 2, 0)); mira_zoom.Scaling = new Vector2((float)screenSize.Width / mira_zoom.Texture.Size.Width, (float)screenSize.Height / mira_zoom.Texture.Size.Height); mira_zoom.Position = new Vector2(0, 0); Size armaSize = arma.Texture.Size; float escalaAncho = (screenSize.Width / 2f) / armaSize.Width; arma.Scaling = new Vector2(escalaAncho, escalaAncho); arma.Position = new Vector2(screenSize.Width - (armaSize.Width * escalaAncho), screenSize.Height - (armaSize.Height * escalaAncho)); posicionArmaDisparo = new Vector2(arma.Position.X + 5f, arma.Position.Y + 5f); posicionArmaOriginal = arma.Position; fuegoArma.Position = arma.Position + new Vector2(22f,28f); inicializarArboles(); inicializarPasto(); inicializarPiedras(); totales = new List<TgcMesh>(); totales.AddRange(arboles); totales.AddRange(pasto); totales.AddRange(piedras); qt = new Quadtree(); qt.create(totales, bbSkyBox); qt.createDebugQuadtreeMeshes(); //Crear texto vida, básico vida = new TgcText2d(); vida.Text = "100"; vida.Color = Color.White; vida.Size = new Size(300, 100); vida.changeFont(new System.Drawing.Font("BankGothic Md BT", 25, FontStyle.Bold)); vida.Position = new Point(-60, 0); barraVida = new TgcSprite(); barraVida.Texture = TgcTexture.createTexture(alumnoMediaFolder + "\\barra_vida.png"); barraVida.Position = new Vector2((float)vida.Position.X + 175f, (float)vida.Position.Y); barraVida.Scaling = new Vector2(0.3f, 0.3f); textoPuntaje = new TgcText2d(); textoPuntaje.Text = "Puntos: 0"; textoPuntaje.Color = Color.White; textoPuntaje.Size = new Size(300, 100); textoPuntaje.changeFont(new System.Drawing.Font("BankGothic Md BT", 25, FontStyle.Bold)); textoPuntaje.Position = new Point(screenSize.Width - 300, 0); TgcSceneLoader loaderLogo = new TgcSceneLoader(); logoTgc = loaderLogo.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir + "ModelosTgc\\LogoTGC\\LogoTGC-TgcScene.xml").Meshes[0]; logoTgc.move(new Vector3(0f, 1900f, 0f)); logoTgc.Scale = new Vector3(14f, 14f, 14f); //Cargar Shader de PhongShading logoTgc.Effect = GuiController.Instance.Shaders.TgcMeshPhongShader; logoTgc.Technique = GuiController.Instance.Shaders.getTgcMeshTechnique(logoTgc.RenderType); //Cargar variables shader logoTgc.Effect.SetValue("ambientColor", ColorValue.FromColor(Color.Gray)); logoTgc.Effect.SetValue("diffuseColor", ColorValue.FromColor(Color.LightBlue)); logoTgc.Effect.SetValue("specularColor", ColorValue.FromColor(Color.White)); logoTgc.Effect.SetValue("specularExp", 20f); logoTgc.Effect.SetValue("lightPosition", lightPos); reproducirSorpresa = false; //////VARIABLES DE FRUSTUM aspectRatio = (float)GuiController.Instance.Panel3d.Width / GuiController.Instance.Panel3d.Height; ruedita = 0f; //Inicializo angulo de FOV anguloFov = FastMath.ToRad(45.0f); GuiController.Instance.D3dDevice.Transform.Projection = Matrix.PerspectiveFovLH(anguloFov, aspectRatio, 1f, 50000f); ///////////////USER VARS////////////////// /* //Crear una UserVar GuiController.Instance.UserVars.addVar("variablePrueba"); //Cargar valor en UserVar GuiController.Instance.UserVars.setValue("variablePrueba", 5451); */ ///////////////MODIFIERS////////////////// /* //Crear un modifier para un valor FLOAT GuiController.Instance.Modifiers.addFloat("valorFloat", -50f, 200f, 0f); //Crear un modifier para un ComboBox con opciones string[] opciones = new string[] { "opcion1", "opcion2", "opcion3" }; GuiController.Instance.Modifiers.addInterval("valorIntervalo", opciones, 0); //Crear un modifier para modificar un vértice GuiController.Instance.Modifiers.addVertex3f("valorVertice", new Vector3(-100, -100, -100), new Vector3(50, 50, 50), new Vector3(0, 0, 0)); */ ///////////////CONFIGURAR CAMARA ROTACIONAL////////////////// //Es la camara que viene por default, asi que no hace falta hacerlo siempre //GuiController.Instance.RotCamera.Enable = true; //Configurar centro al que se mira y distancia desde la que se mira //GuiController.Instance.RotCamera.setCamera(new Vector3(0, 0, 0), 300); Vector3 posicion = new Vector3(0f, 150f, 0f); /*GuiController.Instance.FpsCamera.Enable = true; GuiController.Instance.FpsCamera.setCamera(new Vector3(0,120,0), new Vector3(1, 0, 1)); //GuiController.Instance.FpsCamera.LookAt(new Vector3(0,120,0)); GuiController.Instance.FpsCamera.JumpSpeed = 0; GuiController.Instance.FpsCamera.MovementSpeed *= 10;*/ GuiController.Instance.FpsCamera.Enable = false; GuiController.Instance.RotCamera.Enable = false; camaraQ3 = new Q3FpsCamera(); camaraQ3.setCamera(posicion, posicion + new Vector3(1.0f, 0.0f, 0.0f)); camaraQ3.RotationSpeed = velocidadAngular; camaraQ3.MovementSpeed = velocidadMov; camaraQ3.LockCam = false; ultimaPosCamara = camaraQ3.getPosition(); Vector3 posBound = new Vector3(camaraQ3.getPosition().X, camaraQ3.getPosition().Y + 30, camaraQ3.getPosition().Z); boundingCamara = new TgcBoundingBox(); boundingCamScale = new Vector3(1f, 1f, 1f); boundingCamara.scaleTranslate(posBound, boundingCamScale); personaje = TgcBox.fromSize(new Vector3(30f, 60f, 30f), Color.Red); personaje.Position = camaraQ3.getPosition(); personaje.move(new Vector3(0f, -30f, 0f)); //ENEMIGOS instanciasEnemigos = new List<Enemigo>(); //El ultimo parametro es el radio inicializarEnemigos(4, 4, instanciasEnemigos, 3.4f, 200.0f); crearEsferaExplosion(); inicializarBarriles(); //Para disparo col = new Vector3(0f, 0f, 0f); huboDisparo = false; disparoBarril = false; unaBala = new Bala(); puntoDisparo = TgcBox.fromSize(new Vector3(10f, 10f, 10f), Color.Red); #region menu //Defino el estado inicial como menu estadoJuego = estado.menu; //Sprites para menu fondoMenu = new TgcSprite(); fondoMenu.Texture = TgcTexture.createTexture(alumnoMediaFolder + "\\fondo_menu.jpg"); titulo = new TgcSprite(); titulo.Texture = TgcTexture.createTexture(alumnoMediaFolder + "\\Menu\\titulo.png"); titulo.Scaling = new Vector2(0.5f, 0.5f); titulo.Position = new Vector2((screenSize.Width / 2) - titulo.Texture.Width / 4, (titulo.Texture.Height / 2)-50f); instrucciones = new TgcSprite(); instrucciones.Texture = TgcTexture.createTexture(alumnoMediaFolder + "\\Menu\\instrucciones.png"); instrucciones.Scaling = new Vector2(0.4f, 0.5f); instrucciones.Position = new Vector2((screenSize.Width / 2) - (instrucciones.Texture.Width*0.4f) / 2, (instrucciones.Texture.Height / 2) - instrucciones.Texture.Height / 2); creditos = new TgcSprite(); creditos.Texture = TgcTexture.createTexture(alumnoMediaFolder + "\\Menu\\creditos.png"); creditos.Scaling = new Vector2(0.5f, 0.5f); creditos.Position = new Vector2((screenSize.Width / 2) - creditos.Texture.Width / 4, (creditos.Texture.Height / 2) - creditos.Texture.Height / 2); botonJugar = new TgcSprite(); botonJugar.Texture = TgcTexture.createTexture(alumnoMediaFolder + "\\Menu\\boton_jugar.png"); botonJugar.Scaling = new Vector2(0.5f, 0.5f); sizeJugar = botonJugar.Texture.Size; // sizeJugar.Width = sizeJugar.Width / 2; botonJugar.Position = new Vector2((screenSize.Width / 2)-sizeJugar.Width/4, (screenSize.Height / 2)-sizeJugar.Height/4); botonInstrucciones = new TgcSprite(); botonInstrucciones.Texture = TgcTexture.createTexture(alumnoMediaFolder + "\\Menu\\boton_instrucciones.png"); botonInstrucciones.Scaling = new Vector2(0.5f, 0.5f); sizeInstrucciones = botonInstrucciones.Texture.Size; //sizeInstrucciones.Width = sizeInstrucciones.Width / 2; botonInstrucciones.Position = new Vector2((screenSize.Width / 2) - sizeInstrucciones.Width / 4, (screenSize.Height / 2) - sizeInstrucciones.Height / 4 + 85f); botonCreditos = new TgcSprite(); botonCreditos.Texture = TgcTexture.createTexture(alumnoMediaFolder + "\\Menu\\boton_creditos.png"); botonCreditos.Scaling = new Vector2(0.5f, 0.5f); sizeCreditos = botonCreditos.Texture.Size; //sizeCreditos.Width = sizeCreditos.Width / 2; botonCreditos.Position = new Vector2((screenSize.Width / 2) - sizeCreditos.Width / 4, (screenSize.Height / 2) - sizeCreditos.Height / 4 + sizeInstrucciones.Height + 50f); textoPerdiste = new TgcText2d(); textoPerdiste.Text = "Game over"; textoPerdiste.Align = TgcText2d.TextAlign.CENTER; textoPerdiste.Color = Color.Black; textoPerdiste.Size = new Size(600, 100); textoPerdiste.Position = new Point((screenSize.Width / 2) - textoPerdiste.Size.Width / 2, (screenSize.Height / 2) - textoPerdiste.Size.Height / 2); textoPerdiste.changeFont(new System.Drawing.Font("BankGothic Md BT", 50, FontStyle.Bold)); textoGanaste = new TgcText2d(); textoGanaste.Text = "Ganaste!"; textoGanaste.Align = TgcText2d.TextAlign.CENTER; textoGanaste.Color = Color.Black; textoGanaste.Size = new Size(600, 100); textoGanaste.Position = new Point((screenSize.Width / 2) - textoGanaste.Size.Width / 2, (screenSize.Height / 2) - textoGanaste.Size.Height / 2); textoGanaste.changeFont(new System.Drawing.Font("BankGothic Md BT", 50, FontStyle.Bold)); textoPuntajeFinal = new TgcText2d(); textoPuntajeFinal.Color = Color.Black; textoPuntajeFinal.changeFont(new System.Drawing.Font("BankGothic Md BT", 25, FontStyle.Bold)); textoPuntajeFinal.Size = new Size(800, 100); textoPuntajeFinal.Position = new Point((screenSize.Width / 2) - textoPuntajeFinal.Size.Width / 2, (screenSize.Height / 2) - textoPuntajeFinal.Size.Height/2 + textoGanaste.Size.Height); textoPuntajeRecord = new TgcText2d(); textoPuntajeRecord.Color = Color.Black; textoPuntajeRecord.Size = new Size(400, 60); textoPuntajeRecord.changeFont(new System.Drawing.Font("BankGothic Md BT", 15, FontStyle.Bold)); textoPuntajeRecord.Position = new Point((screenSize.Width - textoPuntajeRecord.Size.Width),(screenSize.Height-textoPuntajeRecord.Size.Height/2)); puntajeRecord = Int32.Parse(System.IO.File.ReadAllText(alumnoMediaFolder + "\\record.txt")); textoPuntajeRecord.Text = "Tu puntaje record es: " + puntajeRecord.ToString(); primeraVez = true; #endregion menu }
private bool obtenerColisionConBoton(TgcSprite boton,Size tam) { Point mouse = Control.MousePosition; return mouse.X > boton.Position.X && mouse.X < (boton.Position.X + (tam.Width*0.5f)) && mouse.Y > boton.Position.Y && mouse.Y < (boton.Position.Y + (tam.Height*0.5f)); }
public void activar(float elapsedTime,TgcText2d textGanaste, TgcText2d textGanaste2,TgcText2d textoContadorTiempo,TgcText2d textoMejorTiempo,TgcMesh piramid, TgcSkyBox skyBox, bool terminoJuego,TgcSprite tablero,TgcText2d textFPS) { Device device = GuiController.Instance.D3dDevice; Control panel3d = GuiController.Instance.Panel3d; float aspectRatio = (float)panel3d.Width / (float)panel3d.Height; time += elapsedTime; // animo la pos del avion if (!terminoJuego) { g_LightPos = motorcycle.Position + 2f*(new Vector3(100, 60, 0)); g_LightDir = motorcycle.Position + (new Vector3(0, 0, 0)) - g_LightPos; g_LightDir.Normalize(); } // Shadow maps: device.EndScene(); // termino el thread anterior GuiController.Instance.RotCamera.CameraCenter = new Vector3(0, 0, 0); GuiController.Instance.RotCamera.CameraDistance = 100; GuiController.Instance.RotCamera.RotationSpeed = 2f; GuiController.Instance.CurrentCamera.updateCamera(); device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0); //Genero el shadow map RenderShadowMap(); device.BeginScene(); // dibujo la escena pp dicha device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0); RenderScene(false); if (terminoJuego) { textGanaste.render(); textGanaste2.render(); } GuiController.Instance.Drawer2D.beginDrawSprite(); //Dibujar sprite (si hubiese mas, deberian ir todos aquí) tablero.render(); //Finalizar el dibujado de Sprites GuiController.Instance.Drawer2D.endDrawSprite(); textFPS.Text = " FPS: " + HighResolutionTimer.Instance.FramesPerSecond.ToString(); textFPS.render(); textoContadorTiempo.render(); textoMejorTiempo.render(); piramid.render(); renderEscena(elapsedTime); device.Transform.Projection = Matrix.PerspectiveFovLH(Geometry.DegreeToRadian(45.0f), TgcD3dDevice.aspectRatio, 1f, 20000f); skyBox.render(); }
public Imagen(string ruta) { sprite = new TgcSprite(); sprite.Texture = TgcTexture.createTexture(ruta); }