/// <summary> /// Se llama en cada frame. /// Se debe escribir toda la lógica de computo del modelo, así como también verificar entradas del usuario y reacciones /// ante ellas. /// </summary> public override void Update() { PreUpdate(); if (disposing) { PostUpdate(); return; } time += ElapsedTime; effect.SetValue("health", Player.Health()); Hud.Update(Input); estaEnAlgunMenu = Hud.GetCurrentStatus() == Hud.Status.MainMenu || Hud.GetCurrentStatus() == Hud.Status.Instructions; //Que no se pueda hacer nada si estas en game over salvo dar enter if (Hud.GetCurrentStatus() == Hud.Status.GameOver || Hud.GetCurrentStatus() == Hud.Status.Win) { // si gano hay que hacer update del tiburon para verlo desaparecer if (Hud.GetCurrentStatus() == Hud.Status.Win) { shark.Update(ElapsedTime); } PostUpdate(); return; } if ((estadoAnterior == Hud.Status.MainMenu || estadoAnterior == Hud.Status.Instructions) && !estaEnAlgunMenu) { // me meto en la nave cuando paso del menu estaEnNave = true; Player.Update(ElapsedTime, ref estaEnNave, true); } estadoAnterior = Hud.GetCurrentStatus(); if (estaEnAlgunMenu && !disposing) { sonidoUnderwater.play(true); // update de elementos de agua nave.Update(); Oceano.Update(time); oceano.Update(); Particulas.Update(time); foreach (var pez in peces) { pez.Update(ElapsedTime); } foreach (var coral in corales) { coral.Update(ElapsedTime); } foreach (var metal in metales) { metal.Update(ElapsedTime); } foreach (var piedra in piedras) { piedra.Update(ElapsedTime); } fog.updateValues(); effect.SetValue("ColorFog", fog.Color.ToArgb()); effect.SetValue("CameraPos", TGCVector3.TGCVector3ToFloat4Array(Camera.Position)); effect.SetValue("StartFogDistance", fog.StartDistance); effect.SetValue("EndFogDistance", fog.EndDistance); effect.SetValue("Density", fog.Density); effect.SetValue("eyePos", TGCVector3.TGCVector3ToFloat3Array(Camera.Position)); } if (!estaEnAlgunMenu) { arma.Update(); if (estaEnNave) { interiorNave.Update(); sharkSound.stop(); sonidoUnderwater.stop(); efectoInterior.SetValue("eyePos", TGCVector3.TGCVector3ToFloat3Array(Camera.Position)); } else { sonidoUnderwater.play(true); // update de elementos de agua nave.Update(); Oceano.Update(time); oceano.Update(); Particulas.Update(time); DateTime actualTimestamp = DateTime.Now; // Mostrar Tiburon cada X cantidad de tiempo if (actualTimestamp.Subtract(timestamp).TotalSeconds > 15) { shark.Spawn(); timestamp = actualTimestamp; } shark.Update(ElapsedTime); foreach (var pez in peces) { pez.Update(ElapsedTime); } foreach (var coral in corales) { coral.Update(ElapsedTime); } foreach (var metal in metales) { metal.Update(ElapsedTime); } foreach (var piedra in piedras) { piedra.Update(ElapsedTime); } fog.updateValues(); effect.SetValue("ColorFog", fog.Color.ToArgb()); effect.SetValue("CameraPos", TGCVector3.TGCVector3ToFloat4Array(Camera.Position)); effect.SetValue("StartFogDistance", fog.StartDistance); effect.SetValue("EndFogDistance", fog.EndDistance); effect.SetValue("Density", fog.Density); effect.SetValue("eyePos", TGCVector3.TGCVector3ToFloat3Array(Camera.Position)); } //Camara y jugador FPSCamara.Update(ElapsedTime); Player.Update(ElapsedTime, ref estaEnNave); } // esto se hace siempre //Lockear mouse Cursor.Position = mousePosition; PostUpdate(); }
public override void Render() { ClearTextures(); D3DDevice.Instance.Device.BeginScene(); D3DDevice.Instance.Device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0); //Cargar valores de niebla var fogShader = fogShaderModifier.Value; fog.Enabled = !fogShaderModifier.Value; fog.StartDistance = startDistanceModifier.Value; fog.EndDistance = endDistanceModifier.Value; fog.Density = densityModifier.Value; fog.Color = colorModifier.Value; if (fog.Enabled) { fog.updateValues(); } if (fogShader) { // Cargamos las variables de shader, color del fog. effect.SetValue("ColorFog", fog.Color.ToArgb()); effect.SetValue("CameraPos", TGCVector3.Vector3ToFloat4Array(Camara.Position)); effect.SetValue("StartFogDistance", fog.StartDistance); effect.SetValue("EndFogDistance", fog.EndDistance); effect.SetValue("Density", fog.Density); } //Actualizar valores foreach (var mesh in skyBox.Faces) { if (fogShader) { mesh.Effect = effect; mesh.Technique = "RenderScene"; } else { mesh.Effect = TgcShaders.Instance.TgcMeshShader; mesh.Technique = "DIFFUSE_MAP"; } mesh.Render(); } //skyBox.render(); foreach (var mesh in scene.Meshes) { if (fogShader) { mesh.Effect = effect; mesh.Technique = "RenderScene"; } else { mesh.Effect = TgcShaders.Instance.TgcMeshShader; mesh.Technique = "DIFFUSE_MAP"; } mesh.UpdateMeshTransform(); mesh.Render(); } RenderAxis(); RenderFPS(); D3DDevice.Instance.Device.EndScene(); D3DDevice.Instance.Device.Present(); }