private void ActualizarRelojInterno(float elapsedTime, SuvirvalCraft contexto) { //Si el elapsedTime es mayor de 0.5 segundos, solo tenemos en cuenta 0,5 segundos sino el reloj se torna inestable //Esto viene muy bien en la etapa de configuración, que viene un elapsedTime muy grande. if (elapsedTime > 0.5f) { //El reloj interno lo interpretamos en segundos relojInterno += 0.5f * velocidadTiempo; } else { //El reloj interno lo interpretamos en segundos relojInterno += elapsedTime * velocidadTiempo; } //Si pasaron mas de 86400 segundos quiere decir que el dia termino. if (relojInterno > 86400) { relojInterno = 0; tiempo.CalcularTemperaturaDeDia(); lluvia.Actualizar(contexto); if (lluvia.EstaLloviendo()) { sol.ActualizarIntensidadMaximaLuz(500f); } else { sol.ActualizarIntensidadMaximaLuz(1000f); } } }
public void Ejecutar(SuvirvalCraft contexto, float elapsedTime) { Vector3 direccion; float velocidad; if (tipoSalto.Equals(Adelante)) { //TODO. Tener en cuenta que la direccion se esta calculando mas arriba, aunque aqui se calcula la direccion si el perosnaje esta quieto. Analizar!!! //Lo hacemos negativo para invertir hacia donde apunta el vector en 180 grados var z = -(float)Math.Cos(contexto.personaje.mesh.Rotation.Y) * 50; var x = -(float)Math.Sin(contexto.personaje.mesh.Rotation.Y) * 50; //Direccion donde apunta el personaje, sumamos las coordenadas obtenidas a la posición del personaje para que //el vector salga del personaje. direccion = contexto.personaje.mesh.Position + new Vector3(x, 75, z); velocidad = 6; } else { //Por defecto el salto es en el lugar!!! direccion = contexto.personaje.mesh.Position + new Vector3(0, 1, 0); velocidad = 4; } Movimiento = new MovimientoParabolico(contexto.personaje.mesh.Position, direccion, velocidad, new MallaEnvoltura(contexto.personaje.mesh)); contexto.movimientoPersonaje = Movimiento; }
public void Ejecutar(SuvirvalCraft contexto, float elapsedTime) { if (!contexto.personaje.TieneAntorchaSeleccionada()) { //Seleccionamos la antorcha, sabemos que esta en la posicion 2 de las armas (eso esta muy feo) contexto.personaje.seleccionarInstrumentoManoDerecha(2); contexto.personaje.antorcha.Activar(); contexto.efectoTerreno.AgregarElementoDeIluminacion(new ElementoIluminacion( contexto.personaje.antorcha, 1500)); contexto.efectoLuz.AgregarElementoDeIluminacion(new ElementoIluminacion(contexto.personaje.antorcha, 1500)); contexto.efectoAlgas.AgregarElementoDeIluminacion(new ElementoIluminacion(contexto.personaje.antorcha, 1500)); contexto.efectoAlgas2.AgregarElementoDeIluminacion(new ElementoIluminacion(contexto.personaje.antorcha, 1500)); contexto.efectoBotes.AgregarElementoDeIluminacion(new ElementoIluminacion(contexto.personaje.antorcha, 1500)); contexto.efectoArbol.AgregarElementoDeIluminacion(new ElementoIluminacion(contexto.personaje.antorcha, 1500)); contexto.efectoArbol2.AgregarElementoDeIluminacion(new ElementoIluminacion(contexto.personaje.antorcha, 1500)); contexto.efectoLuz2.AgregarElementoDeIluminacion(new ElementoIluminacion(contexto.personaje.antorcha, 1500)); } }
public override void procesarInteraccion(string accion, SuvirvalCraft contexto, float elapsedTime) { mensajeInformativo = "Juntar (J), Consumir (C)"; base.procesarInteraccion(accion, contexto, elapsedTime); if (accion.Equals("Juntar")) { //TODO. Esta validacion es porque se ejecuta muchas veces al presionar la tecla. Se deberia solucioanr cuando implementemos los comandos if (!contexto.personaje.ContieneElementoEnMochila(this)) { try { contexto.personaje.juntar(this); contexto.elementos.Remove(this); contexto.optimizador.ForzarActualizacionElementosColision(); } catch (Exception ex) { mensajeInformativo = ex.Message; } } } if (accion.Equals("Consumir")) { contexto.personaje.ConsumirAlimento(nutricion); liberar(); contexto.elementos.Remove(this); contexto.optimizador.ForzarActualizacionElementosColision(); } }
public virtual void Actualizar(SuvirvalCraft contexto, float elapsedTime) { if (hayInteraccion) { if (barraEstado != null) { barraEstado.ActualizarEstado(Resistencia); } } else { if (barraEstado != null) { barraEstado.Liberar(); barraEstado = null; } } //Preguntamos por el tiempo del ultimo golpe porque queremos que la barra de estado se muestre durante 5 segudos despues de cada golpe, //independientemente de que no haya interaccion if (SuperoTiempoGolpe(contexto.tiempo)) { //Esto maneja la sincronización, ya que siempre se ejecuta primero las colisiones e interacciones y luego las actualizaciones. hayInteraccion = false; } }
public override void Actualizar(SuvirvalCraft contexto, float elapsedTime) { if (EstaCocinando()) { tiempoCoccion += elapsedTime; if (tiempoCoccion > TiempoCoccionElementos()) { if (elementoCoccion != null) { EliminarElemento(elementoCoccion); tiempoCoccion = 0; progresoCoccion.Liberar(); progresoCoccion = null; var contenido = elementoCoccion.DestruirSolo(); foreach (var cont in contenido) { cont.posicion(elementoCoccion.posicion()); } //this.AgregarElementos(contenido); contexto.elementos.Remove(elementoCoccion); elementoCoccion = null; contexto.elementos.AddRange(contenido); contexto.optimizador.ForzarActualizacionElementosColision(); } } else { progresoCoccion.ActualizarEstado(tiempoCoccion); } } }
public void Ejecutar(SuvirvalCraft contexto, float elapsedTime) { contexto.personaje.mesh.playAnimation("Parado", true); //Simulamos el descanso del personaje contexto.personaje.incrementoResistenciaFisica(elapsedTime); ObstaculosInteractuar.Clear(); foreach (var elem in contexto.optimizador.ElementosColision) { //TODO. Optimizar esto para solo objetos cernanos!!!!!!!! if (ControladorColisiones.EsferaColisionaCuadrado(contexto.personaje.GetAlcanceInteraccionEsfera(), elem.BoundingBox())) { ObstaculosInteractuar.Add(elem); if (!elem.AdmiteMultipleColision()) { break; } } } foreach (var elem in ObstaculosInteractuar) { elem.procesarInteraccion(Accion, contexto, elapsedTime); contexto.informativo.Text = elem.getAcciones(); } }
/// <summary> /// Inicio todos los objetos necesarios para cargar el ejemplo y directx /// </summary> public void InitGraphics() { //Se inicio la aplicacion ApplicationRunning = true; //Inicio Device D3DDevice.Instance.InitializeD3DDevice(panel3D); //Inicio inputs Input = new TgcD3dInput(); Input.Initialize(this, panel3D); //Inicio sonido DirectSound = new TgcDirectSound(); DirectSound.InitializeD3DDevice(panel3D); //Directorio actual de ejecucion var currentDirectory = Environment.CurrentDirectory + "\\"; //Cargar shaders del framework TgcShaders.Instance.loadCommonShaders(currentDirectory + Game.Default.ShadersDirectory); //Juego a ejecutar Modelo = new SuvirvalCraft(currentDirectory + Game.Default.MediaDirectory, currentDirectory + Game.Default.ShadersDirectory); //Cargar juego ExecuteModel(); }
public override void Actualizar(SuvirvalCraft contexto, float elapsedTime) { base.Actualizar(contexto, elapsedTime); if (estaCreando) { tiempoCreacion += elapsedTime; if (tiempoCreacion > TiempoTotalCreacion()) { progresoCreacion.Liberar(); progresoCreacion = null; tiempoCreacion = 0; estaCreando = false; tieneQueCrear = false; Mesh = Mesh1; } else { progresoCreacion.ActualizarEstado(tiempoCreacion); } } else { if (tieneQueCrear && elementosQueContiene().Count > 0) { progresoCreacion = new BarraEstado(new Vector3(BoundingBox().PMin.X, BoundingBox().PMax.Y, BoundingBox().PMax.Z), BoundingBox().PMax, TiempoTotalCreacion()); estaCreando = true; tieneQueCrear = false; } } }
public virtual ElementoIluminacion IluminadorMasCercanoA(Vector3 posicion, SuvirvalCraft contexto) { var elemIlumActual = elementosIluminacion[0]; var aux = new List <ElementoIluminacion>(); foreach (var elem in elementosIluminacion) { if (contexto.optimizador.ElementosRenderizacion.Contains(elem.Elemento)) { aux.Add(elem); } } if (aux.Count != 0) { elemIlumActual = aux[0]; foreach (var elem in aux) { if (elem.Elemento.distanciaA(posicion) < elemIlumActual.Elemento.distanciaA(posicion)) { elemIlumActual = elem; } } } return(elemIlumActual); }
public void Ejecutar(SuvirvalCraft contexto, float elapsedTime) { if (tipo.Equals(Mochila)) { contexto.mostrarMenuMochila = true; } }
public override void ActualizarRenderizar(SuvirvalCraft contexto, Arma arma) { if (HayQueIluminarConElementos(contexto)) { //Porque el arma no tiene posicion, tiene matriz de translación. De todas formas siempre esta al lado del personaje. var iluminador = AlguienIluminaAElemento(contexto.personaje.mesh.Position); if (iluminador != null) { //Setea primero aquellos parámetros que son propios del efecto en cuestión. iluminador.Iluminar(this, contexto.personaje.mesh.Position, arma.ColorEmisor(), arma.ColorAmbiente(), arma.ColorDifuso(), arma.ColorEspecular(), arma.EspecularEx()); arma.mesh.render(); } else { contexto.dia.GetSol() .Iluminar(contexto.personaje.mesh.Position, this, arma.ColorEmisor(), arma.ColorAmbiente(), arma.ColorDifuso(), arma.ColorEspecular(), arma.EspecularEx()); arma.mesh.render(); } } else { contexto.dia.GetSol() .Iluminar(contexto.personaje.mesh.Position, this, arma.ColorEmisor(), arma.ColorAmbiente(), arma.ColorDifuso(), arma.ColorEspecular(), arma.EspecularEx()); arma.mesh.render(); } }
public override void ActualizarRenderizar(SuvirvalCraft contexto, float elapsedTime) { if (HayQueIluminarConElementos(contexto)) { var iluminador = AlguienIluminaAElemento(contexto.personaje.mesh.Position); if (iluminador != null) { //Setea primero aquellos parámetros que son propios del efecto en cuestión. iluminador.Iluminar(this, contexto.personaje.mesh.Position, contexto.personaje.ColorEmisor(), contexto.personaje.ColorAmbiente(), contexto.personaje.ColorDifuso(), contexto.personaje.ColorEspecular(), contexto.personaje.EspecularEx()); contexto.personaje.mesh.animateAndRender(elapsedTime); } else { contexto.dia.GetSol() .Iluminar(contexto.personaje.mesh.Position, this, contexto.personaje.ColorEmisor(), contexto.personaje.ColorAmbiente(), contexto.personaje.ColorDifuso(), contexto.personaje.ColorEspecular(), contexto.personaje.EspecularEx()); contexto.personaje.mesh.animateAndRender(elapsedTime); } } else { contexto.dia.GetSol() .Iluminar(contexto.personaje.mesh.Position, this, contexto.personaje.ColorEmisor(), contexto.personaje.ColorAmbiente(), contexto.personaje.ColorDifuso(), contexto.personaje.ColorEspecular(), contexto.personaje.EspecularEx()); contexto.personaje.mesh.animateAndRender(elapsedTime); } }
public override void ActualizarRenderizar(SuvirvalCraft contexto, Elemento elemento) { if (HayQueIluminarConElementos(contexto)) { var iluminador = AlguienIluminaAElemento(elemento); if (iluminador != null) { //this.Tecnica(GuiController.Instance.Shaders.getTgcMeshTechnique(elemento.Mesh.RenderType)); //this.Aplicar(elemento.Mesh); //Setea primero aquellos parámetros que son propios del efecto en cuestión. iluminador.Iluminar(this, contexto.personaje.mesh.Position, elemento.ColorEmisor(), elemento.ColorAmbiente(), elemento.ColorDifuso(), elemento.ColorEspecular(), elemento.EspecularEx()); elemento.Mesh.render(); } else { contexto.dia.GetSol() .Iluminar(contexto.personaje.mesh.Position, this, elemento.ColorEmisor(), elemento.ColorAmbiente(), elemento.ColorDifuso(), elemento.ColorEspecular(), elemento.EspecularEx()); elemento.Mesh.render(); } } else { //this.Tecnica(GuiController.Instance.Shaders.getTgcMeshTechnique(elemento.Mesh.RenderType)); //this.Aplicar(elemento.Mesh); contexto.dia.GetSol() .Iluminar(contexto.personaje.mesh.Position, this, elemento.ColorEmisor(), elemento.ColorAmbiente(), elemento.ColorDifuso(), elemento.ColorEspecular(), elemento.EspecularEx()); elemento.Mesh.render(); } }
/// <summary> /// //TODO. Refactorizar los parametros que recibe!!!! /// </summary> /// <param name="contexto"></param> /// <param name="elemento"></param> public override void ActualizarRenderizar(SuvirvalCraft contexto, Elemento elemento) { if (HayQueIluminarConElementos(contexto)) { var iluminador = AlguienIluminaAElemento(elemento); if (iluminador != null) { //Setea primero aquellos parámetros que son propios del efecto en cuestión. GetEfectoShader().SetValue("time", contexto.tiempo); iluminador.Iluminar(this, contexto.personaje.mesh.Position, elemento.ColorEmisor(), elemento.ColorAmbiente(), elemento.ColorDifuso(), elemento.ColorEspecular(), elemento.EspecularEx()); elemento.Mesh.render(); } else { GetEfectoShader().SetValue("time", contexto.tiempo); contexto.dia.GetSol() .Iluminar(contexto.personaje.mesh.Position, this, elemento.ColorEmisor(), elemento.ColorAmbiente(), elemento.ColorDifuso(), elemento.ColorEspecular(), elemento.EspecularEx()); elemento.Mesh.render(); } } else { GetEfectoShader().SetValue("time", contexto.tiempo); contexto.dia.GetSol() .Iluminar(contexto.personaje.mesh.Position, this, elemento.ColorEmisor(), elemento.ColorAmbiente(), elemento.ColorDifuso(), elemento.ColorEspecular(), elemento.EspecularEx()); elemento.Mesh.render(); } }
/// <summary> /// Renderiza el objeto /// </summary> public override void renderizar(SuvirvalCraft contexto) { base.renderizar(contexto); if (SeEstaAbriendo()) { progresoApertura.Render(); } }
/// <summary> /// Renderiza el objeto /// </summary> public override void renderizar(SuvirvalCraft contexto) { base.renderizar(contexto); if (EstaCocinando()) { progresoCoccion.Render(); } }
/// <summary> /// Renderiza el objeto /// </summary> public override void renderizar(SuvirvalCraft contexto) { base.renderizar(contexto); if (estaCreando) { progresoCreacion.Render(); } }
public override void Actualizar(SuvirvalCraft contexto) { GetEfectoShader().SetValue("time", contexto.tiempo); GetEfectoShader().SetValue("lightIntensityRelitive", contexto.dia.GetSol().IntensidadRelativa()); //Necesitamos rojo y verde para formar el rojo en si mismo y tambien el amarillo GetEfectoShader().SetValue("colorCielo", contexto.dia.GetSol().GetColorAmanecerAnochecer()); GetEfectoShader().SetValue("intendidadRayo", contexto.dia.GetLluvia().GetIntensidadRayo(contexto.tiempo)); }
public virtual void procesarInteraccion(string accion, SuvirvalCraft contexto, float elapsedTime) { if (barraEstado == null) { barraEstado = new BarraEstado(Mesh.BoundingBox.PMin, new Vector3(BoundingBox().PMin.X, BoundingBox().PMax.Y, BoundingBox().PMin.Z), resistenciaTotal); } hayInteraccion = true; }
public override void procesarInteraccion(string accion, SuvirvalCraft contexto, float elapsedTime) { //En el fuego no queremos que se muestre barra de estado. if (accion.Equals("Parado")) { //Cerca del fuego se genera un anmbiente de 24 grados. contexto.personaje.IncrementarTemperaturaCorporalPorTiempo(24, elapsedTime); } }
public void Actualizar(Vector3 posicionActual, SuvirvalCraft contexto) { cicloActual++; if (cicloActual > referenciaActualizacion) { cicloActual = 0; ActualizarElementosColision(posicionActual); } ActualizarElementosRenderizacion(contexto); }
public void Render(Personaje personaje, SuvirvalCraft contexto) { d3dDevice.Transform.View = Matrix.LookAtLH(personaje.PosicionAlturaCabeza(), personaje.DireccionAlturaCabeza(150), new Vector3(0, 1, 0)); //Actualizar volumen del Frustum con nuevos valores de camara frustum.updateVolume(d3dDevice.Transform.View, d3dDevice.Transform.Projection); //El personaje no debe animarse cuando se esta en primera persona personaje.RenderizarPrimeraPersona(contexto); }
private void ActualizarElementosRenderizacion(SuvirvalCraft contexto) { ElementosRenderizacion.Clear(); foreach (var elem in Elementos) { if (ControladorColisiones.FrustumColisionaCuadrado(contexto.Frustum, elem.BoundingBox())) { ElementosRenderizacion.Add(elem); } } }
public void Ejecutar(SuvirvalCraft contexto, float elapsedTime) { if (camaraElegida.Equals(PrimeraPersona)) { contexto.camara = new CamaraPrimeraPersona(contexto.Frustum, D3DDevice.Instance.Device); } if (camaraElegida.Equals(TerceraPersona)) { //contexto.camara = new CamaraTerceraPersona(GuiController.Instance.ThirdPersonCamera, contexto.personaje.mesh.Position, contexto.Frustum, D3DDevice.Instance.Device); } }
public void renderizar(SuvirvalCraft contexto) { if (Efecto() != null) { //Delego en el efecto la responsabilidad del renderizado. Efecto().ActualizarRenderizar(contexto, this); } else { mesh.render(); } }
public void Renderizar(SuvirvalCraft contexto) { if (GetEfecto() != null) { //Si tiene un efecto delegamos en este la responsabilidad de renderizar el terreno GetEfecto().ActualizarRenderizar(contexto, this); } else { render(); } }
public override void procesarInteraccion(string accion, SuvirvalCraft contexto, float elapsedTime) { base.procesarInteraccion(accion, contexto, elapsedTime); mensajeInformativo = "Juntar(J), Encender(E)"; if (accion.Equals("Juntar")) { //TODO. Esta validacion es porque se ejecuta muchas veces al presionar la tecla. Se deberia solucioanr cuando implementemos los comandos if (!contexto.personaje.ContieneElementoEnMochila(this)) { try { contexto.personaje.juntar(this); contexto.elementos.Remove(this); contexto.optimizador.ForzarActualizacionElementosColision(); } catch (Exception ex) { mensajeInformativo = ex.Message; } } } if (accion.Equals("Encender")) { if (contexto.personaje.TieneAntorchaSeleccionada()) { foreach (var elem in elementosQueContiene()) { elem.posicion(posicion()); elem.Activar(); elem.Mesh.BoundingBox.scaleTranslate(posicion(), new Vector3(2f, 0.25f, 2f)); contexto.elementos.Add(elem); //TODO. ver si es la mejor forma de manejar los elementos de iluminacion contexto.efectoTerreno.AgregarElementoDeIluminacion(new ElementoIluminacion(elem, 1000)); contexto.efectoLuz.AgregarElementoDeIluminacion(new ElementoIluminacion(elem, 1000)); contexto.efectoAlgas.AgregarElementoDeIluminacion(new ElementoIluminacion(elem, 1000)); contexto.efectoAlgas2.AgregarElementoDeIluminacion(new ElementoIluminacion(elem, 1000)); contexto.efectoBotes.AgregarElementoDeIluminacion(new ElementoIluminacion(elem, 1000)); contexto.efectoArbol.AgregarElementoDeIluminacion(new ElementoIluminacion(elem, 1000)); contexto.efectoArbol2.AgregarElementoDeIluminacion(new ElementoIluminacion(elem, 1000)); contexto.efectoLuz2.AgregarElementoDeIluminacion(new ElementoIluminacion(elem, 1000)); //TODO+++++++++++++++++++++++++++++++++ } liberar(); contexto.elementos.Remove(this); contexto.optimizador.ForzarActualizacionElementosColision(); } else { mensajeInformativo = "Debe Utilizar Fuego"; } } }
public void Render(Personaje personaje, SuvirvalCraft contexto) { //Hacer que la camara siga al personaje en su nueva posicion. Sumamos 100 en el posición de Y porque queremos que la cámara este un poco más alta. camaraTgc.Target = personaje.mesh.Position + new Vector3(0, 100, 0); //Actualizamos la rotacion si es que hubo camaraTgc.RotationY = personaje.mesh.Rotation.Y; //Porque el personaje esta rotado 180 grados respecto de la camara. camaraTgc.rotateY(Geometry.DegreeToRadian(180f)); //Actualizar volumen del Frustum con nuevos valores de camara frustum.updateVolume(d3dDevice.Transform.View, d3dDevice.Transform.Projection); personaje.RenderizarTerceraPersona(contexto); }
public void Ejecutar(SuvirvalCraft contexto, float elapsedTime) { if (contexto.personaje.TieneAntorchaSeleccionada()) { contexto.personaje.antorcha.Desactivar(); contexto.efectoTerreno.EliminarElementoDeIluminacion(contexto.personaje.antorcha); contexto.efectoLuz.EliminarElementoDeIluminacion(contexto.personaje.antorcha); contexto.efectoAlgas.EliminarElementoDeIluminacion(contexto.personaje.antorcha); contexto.efectoAlgas2.EliminarElementoDeIluminacion(contexto.personaje.antorcha); contexto.efectoBotes.EliminarElementoDeIluminacion(contexto.personaje.antorcha); contexto.efectoArbol.EliminarElementoDeIluminacion(contexto.personaje.antorcha); contexto.efectoArbol2.EliminarElementoDeIluminacion(contexto.personaje.antorcha); contexto.efectoLuz2.EliminarElementoDeIluminacion(contexto.personaje.antorcha); } }