/// ///////////////////////////////////////////////////////////////////// /// ////////////////////////////INIT///////////////////////////////////// /// ///////////////////////////////////////////////////////////////////// public void init(string MediaDir, string shaderDir, TgcCamera camara) { var d3dDevice = D3DDevice.Instance.Device; resolucionX = d3dDevice.PresentationParameters.BackBufferWidth; resolucionY = d3dDevice.PresentationParameters.BackBufferHeight; var loader = new TgcSceneLoader(); scene = loader.loadSceneFromFile(MediaDir + "ParadigmasEscena\\nivelParadigmas-TgcScene.xml"); pathDeLaCancion = MediaDir + "Musica\\FeverTime.mp3"; var skeletalLoader = new TgcSkeletalLoader(); personajePrincipal = skeletalLoader.loadMeshAndAnimationsFromFile( MediaDir + "Robot\\Robot-TgcSkeletalMesh.xml", MediaDir + "Robot\\", new[] { MediaDir + "Robot\\Caminando-TgcSkeletalAnim.xml", MediaDir + "Robot\\Parado-TgcSkeletalAnim.xml", }); personajePrincipal.playAnimation("Parado", true); personajePrincipal.Position = new TGCVector3(210, 1, 310); personajePrincipal.RotateY(Geometry.DegreeToRadian(180)); camaraInterna = new TgcThirdPersonCamera(personajePrincipal.Position, 250, 500); camaraInterna.rotateY(Geometry.DegreeToRadian(180)); HUD = new Sprite(D3DDevice.Instance.Device); vida = TgcTexture.createTexture(MediaDir + "Textures\\vida.png"); mumuki = TgcTexture.createTexture(MediaDir + "Textures\\iconoMumuki.png"); coleccionablesAdquiridos = new Boton(cantidadColeccionablesAgarrados.ToString(), 0.9f, 0.88f, null); SetearListas(); AplicarShaders(shaderDir); scene.Meshes.Add(charcoEstatic1); scene.Meshes.Add(charcoEstatic2); scene.Meshes.Add(charcoEstatic3); reproductorMp3.FileName = pathDeLaCancion; reproductorMp3.play(true); AdministradorDeEscenarios.getSingleton().SetCamara(camaraInterna); }
///////////////////////////////////////////////////////////////////////// ////////////////////////////////UPDATE/////////////////////////////////// ///////////////////////////////////////////////////////////////////////// public void update(float deltaTime, TgcD3dInput input, TgcCamera camara) { reproducirMusica(input); velocidadCaminar = 350 * deltaTime; if (floorCollider != null) { lastColliderPos = floorCollider.Position; } if (Math.Abs(tiempoOlas) > 5) { cambiarSigno(); } if (signo < 0) { tiempoOlas -= deltaTime; } if (signo > 0) { tiempoOlas += deltaTime; } animarLibrosF1(deltaTime); animarPlataformas(deltaTime); animarBolasDeCanionYEmisoresDeParticulas(deltaTime); ChocarConBolasDeCanion(); var moveForward = 0f; float rotate = 0; moving = false; moveForward = MovimientoAbajo(input) - MovimientoArriba(input); rotate = RotacionDerecha(input) - RotacionIzquierda(input); if (floorCollider != null && plataformasMovibles.Contains(floorCollider) && floorCollider.BoundingBox.PMax.Y < personajePrincipal.BoundingBox.PMin.Y) { TGCVector3 res = floorCollider.Position; res.Subtract(lastColliderPos); personajePrincipal.Position = personajePrincipal.Position + res; } Salto(input); AplicarGravedad(deltaTime); if (rotating) { rotAngle = Geometry.DegreeToRadian(rotate * deltaTime); personajePrincipal.RotateY(rotAngle); camaraInterna.rotateY(rotAngle); } var Movimiento = TGCVector3.Empty; //Si hubo desplazamiento float scale = 1; if (!enElPiso) { scale = 0.7f; } if (moving) { personajePrincipal.playAnimation("Caminando", true); var lastPos = personajePrincipal.Position; var pminPersonaje = personajePrincipal.BoundingBox.PMin.Y; var pmaxPersonaje = personajePrincipal.BoundingBox.PMax.Y; Movimiento = new TGCVector3(FastMath.Sin(personajePrincipal.Rotation.Y) * moveForward, 0, FastMath.Cos(personajePrincipal.Rotation.Y) * moveForward); Movimiento.Scale(scale * sliderModifier); Movimiento.Y = jump * deltaTime; personajePrincipal.Move(Movimiento); DetectarColisiones(lastPos, pminPersonaje, pmaxPersonaje, deltaTime); } else { personajePrincipal.playAnimation("Parado", true); } //Hacer que la camara siga al personaje en su nueva posicion camaraInterna.Target = personajePrincipal.Position; ajustarPosicionDeCamara(); var Rot = TGCMatrix.RotationY(personajePrincipal.Rotation.Y); var T = TGCMatrix.Translation(personajePrincipal.Position); escalaBase = Rot * T; personajePrincipal.Transform = escalaBase; }
///////////////////////////////////////////////////////////////////////// ////////////////////////////////INIT///////////////////////////////////// ///////////////////////////////////////////////////////////////////////// public void init(string MediaDir, string shaderDir, TgcCamera camara) { var d3dDevice = D3DDevice.Instance.Device; resolucionX = d3dDevice.PresentationParameters.BackBufferWidth; resolucionY = d3dDevice.PresentationParameters.BackBufferHeight; D3DDevice.Instance.ParticlesEnabled = true; D3DDevice.Instance.EnableParticles(); var loader = new TgcSceneLoader(); scene = loader.loadSceneFromFile(MediaDir + "NivelFisica1\\EscenaSceneEditorFisica1-TgcScene.xml"); SetearAguas(); pathDeLaCancion = MediaDir + "Musica\\FeverTime.mp3"; meshesDeLaEscena = new List <TgcMesh>(); HUD = new Sprite(D3DDevice.Instance.Device); vida = TgcTexture.createTexture(MediaDir + "Textures\\vida.png"); fisicaLib = TgcTexture.createTexture(MediaDir + "NivelFisica1\\Textures\\TexturaTapaLibro.jpg"); var skeletalLoader = new TgcSkeletalLoader(); personajePrincipal = skeletalLoader.loadMeshAndAnimationsFromFile( MediaDir + "Robot\\Robot-TgcSkeletalMesh.xml", MediaDir + "Robot\\", new[] { MediaDir + "Robot\\Caminando-TgcSkeletalAnim.xml", MediaDir + "Robot\\Parado-TgcSkeletalAnim.xml", MediaDir + "Robot\\Empujar-TgcSkeletalAnim.xml", }); //Configurar animacion inicial personajePrincipal.playAnimation("Parado", true); personajePrincipal.Position = puntoCheckpointActual; personajePrincipal.RotateY(Geometry.DegreeToRadian(180)); camaraInterna = new TgcThirdPersonCamera(personajePrincipal.Position, 250, 500); // camara = camaraInterna; camaraInterna.rotateY(Geometry.DegreeToRadian(180)); librosAdquiridos = new Boton(cantidadLibrosAdquiridos.ToString(), resolucionX - (resolucionX / 9), resolucionY - (resolucionY / 7), null); plataforma1 = scene.Meshes[164]; plataforma2 = scene.Meshes[165]; plataformasMovibles.Add(plataforma1); plataformasMovibles.Add(plataforma2); bolaDeCanion1 = scene.Meshes[172]; bolaDeCanion2 = scene.Meshes[173]; bolaDeCanion3 = scene.Meshes[174]; posicionInicialBolaDeCanion1 = scene.Meshes[172].Position; posicionInicialBolaDeCanion2 = scene.Meshes[173].Position; posicionInicialBolaDeCanion3 = scene.Meshes[174].Position; bolasDeCanion.Add(bolaDeCanion1); bolasDeCanion.Add(bolaDeCanion2); bolasDeCanion.Add(bolaDeCanion3); pathTexturaEmisorDeParticulas = MediaDir + "Textures\\fuego.png"; cantidadDeParticulas = 10; emisorDeParticulas1 = new ParticleEmitter(pathTexturaEmisorDeParticulas, cantidadDeParticulas); emisorDeParticulas1.MinSizeParticle = 30f; emisorDeParticulas1.MaxSizeParticle = 30f; emisorDeParticulas1.ParticleTimeToLive = 1f; emisorDeParticulas1.CreationFrecuency = 1f; //0.25 emisorDeParticulas1.Dispersion = 500; emisorDeParticulas1.Speed = new TGCVector3(-25, 40, 50); posicionInicialEmisorDeParticulas1 = new TGCVector3(1935, 200, 4345); emisorDeParticulas1.Position = posicionInicialEmisorDeParticulas1; emisorDeParticulas2 = new ParticleEmitter(pathTexturaEmisorDeParticulas, cantidadDeParticulas); emisorDeParticulas2 = new ParticleEmitter(pathTexturaEmisorDeParticulas, cantidadDeParticulas); emisorDeParticulas2.MinSizeParticle = 30f; emisorDeParticulas2.MaxSizeParticle = 30f; emisorDeParticulas2.ParticleTimeToLive = 1f; emisorDeParticulas2.CreationFrecuency = 1f; emisorDeParticulas2.Dispersion = 500; emisorDeParticulas2.Speed = new TGCVector3(-25, 40, 50); posicionInicialEmisorDeParticulas2 = new TGCVector3(2205, 200, 4345); emisorDeParticulas2.Position = posicionInicialEmisorDeParticulas2; emisorDeParticulas3 = new ParticleEmitter(pathTexturaEmisorDeParticulas, cantidadDeParticulas); emisorDeParticulas3 = new ParticleEmitter(pathTexturaEmisorDeParticulas, cantidadDeParticulas); emisorDeParticulas3.MinSizeParticle = 30f; emisorDeParticulas3.MaxSizeParticle = 30f; emisorDeParticulas3.ParticleTimeToLive = 1f; emisorDeParticulas3.CreationFrecuency = 1f; emisorDeParticulas3.Dispersion = 500; emisorDeParticulas3.Speed = new TGCVector3(-25, 40, 50); posicionInicialEmisorDeParticulas3 = new TGCVector3(2495, 200, 4345); emisorDeParticulas3.Position = posicionInicialEmisorDeParticulas3; reproductorMp3.FileName = pathDeLaCancion; reproductorMp3.play(true); AdministradorDeEscenarios.getSingleton().SetCamara(camaraInterna); cantVidas = 3; effect = TgcShaders.loadEffect(shaderDir + "MultiDiffuseLights.fx"); for (var i = 224; i < 250; ++i) { lights.Add(scene.Meshes[i]); } scene.Meshes[4].D3dMesh.ComputeNormals(); scene.Meshes[48].D3dMesh.ComputeNormals(); var lightColors = new ColorValue[lights.Count]; var pointLightPositions = new Vector4[lights.Count]; var pointLightIntensity = new float[lights.Count]; var pointLightAttenuation = new float[lights.Count]; for (var i = 0; i < lights.Count; i++) { var lightMesh = lights[i]; lightColors[i] = ColorValue.FromColor(Color.White); pointLightPositions[i] = TGCVector3.Vector3ToVector4(lightMesh.BoundingBox.Position); pointLightIntensity[i] = 20; pointLightAttenuation[i] = 0.07f; } tecnicaNormal = scene.Meshes[0].Technique; sinEfectos = scene.Meshes[0].Effect; foreach (var mesh in scene.Meshes) { //if (mesh.Name.Contains("Box") || mesh.Name.Contains("Madera") || mesh.Name.Contains("East") || mesh.Name.Contains("South") || mesh.Name.Contains("North") || mesh.Name.Contains("West")) if (!mesh.Name.Contains("Floor")) { continue; } mesh.Effect = effect; mesh.Effect.SetValue("lightColor", lightColors); mesh.Effect.SetValue("lightPosition", pointLightPositions); mesh.Effect.SetValue("lightIntensity", pointLightIntensity); mesh.Effect.SetValue("lightAttenuation", pointLightAttenuation); mesh.Effect.SetValue("materialEmissiveColor", ColorValue.FromColor(Color.Black)); mesh.Effect.SetValue("materialDiffuseColor", ColorValue.FromColor(Color.White)); mesh.Technique = "MultiDiffuseLightsTechnique"; if (mesh.Name.Contains("Box") || mesh.Name.Contains("Madera")) { mesh.Effect.SetValue("lightAttenuation", pointLightAttenuation); mesh.D3dMesh.ComputeNormals(); } } AplicarShaders(shaderDir); }
/// ///////////////////////////////////////////////////////////////////// /// ////////////////////////////UPDATE/////////////////////////////////// /// ///////////////////////////////////////////////////////////////////// public void update(float deltaTime, TgcD3dInput input, TgcCamera camara) { //velocidadCaminar = 1000 * deltaTime; velocidadCaminar = 5; if (floorCollider != null) { lastColliderPos = floorCollider.Position; } var moveForward = 0f; float rotate = 0; moving = false; if (activarTeleport) { velocidadCaminar = 0; tiempoTeleport += deltaTime; if (Math.Sin(tiempoTeleport) > 0.999) { if (puertaCruzada == 1) { personajePrincipal.Position = puerta1; } if (puertaCruzada == 2) { personajePrincipal.Position = puerta2; } if (puertaCruzada == 3) { personajePrincipal.Position = puerta3; } } if (Math.Sin(tiempoTeleport) < 0) { tiempoTeleport = 0; desactivarTeleport = true; activarTeleport = false; } } if (Math.Abs(tiempoOlas) > 5) { cambiarSigno(); } if (signo < 0) { tiempoOlas -= deltaTime; } if (signo > 0) { tiempoOlas += deltaTime; } MoverColeccionables(deltaTime); moveForward = MovimientoAbajo(input) - MovimientoArriba(input); rotate = RotacionDerecha(input) - RotacionIzquierda(input); Salto(input, deltaTime); AplicarGravedad(deltaTime); if (rotating) { rotAngle = Geometry.DegreeToRadian(rotate * deltaTime); personajePrincipal.RotateY(rotAngle); camaraInterna.rotateY(rotAngle); } var Movimiento = TGCVector3.Empty; float scale = 1; if (!enElPiso) { scale = 0.4f; } if (moving) { personajePrincipal.playAnimation("Caminando", true); var lastPos = personajePrincipal.Position; var pminPersonaje = personajePrincipal.BoundingBox.PMin.Y; var pmaxPersonaje = personajePrincipal.BoundingBox.PMax.Y; Movimiento = new TGCVector3(FastMath.Sin(personajePrincipal.Rotation.Y) * moveForward, 0, FastMath.Cos(personajePrincipal.Rotation.Y) * moveForward); Movimiento.Scale(scale * sliderModifier); Movimiento.Y = jump; personajePrincipal.Move(Movimiento); DetectarColisiones(lastPos, pminPersonaje, pmaxPersonaje); } else { personajePrincipal.playAnimation("Parado", true); } camaraInterna.Target = personajePrincipal.Position; ajustarPosicionDeCamara(); var Rot = TGCMatrix.RotationY(personajePrincipal.Rotation.Y); var T = TGCMatrix.Translation(personajePrincipal.Position); escalaBase = Rot * T; personajePrincipal.Transform = escalaBase; }