public override void Init() { //seteamos atributos particulares de las naves health = 50; score = 2; tiempoMuerte = 5f; Device d3dDevice = GuiController.Instance.D3dDevice; MESH_SCALE = 0.5f; attackDamage = 50; MOVEMENT_SPEED = 225f; //cargamos el mesh //las naves no tienen skeletalMesh this.mesh = GameManager.Instance.ModeloNave.clone("Nave"); SPAWN_HEIGHT = 1000f; giroInicial = Matrix.RotationY(0); //realizamos el init() comun a todos los enemigos base.Init(); mesh.Effect = GameManager.Instance.envMap; mesh.Technique = "SimpleEnvironmentMapTechnique"; mesh.Effect.SetValue("lightColor", ColorValue.FromColor(Color.White)); mesh.Effect.SetValue("lightPosition", TgcParserUtils.vector3ToFloat4Array(new Vector3(0,1400,0))); mesh.Effect.SetValue("eyePosition", TgcParserUtils.vector3ToFloat4Array(CustomFpsCamera.Instance.getPosition())); mesh.Effect.SetValue("lightIntensity", 0.3f); mesh.Effect.SetValue("lightAttenuation", 1.0f); mesh.Effect.SetValue("reflection", 0.65f); //Cargar variables de shader de Material. El Material en realidad deberia ser propio de cada mesh. Pero en este ejemplo se simplifica con uno comun para todos mesh.Effect.SetValue("materialEmissiveColor", ColorValue.FromColor(Color.Black)); mesh.Effect.SetValue("materialAmbientColor", ColorValue.FromColor(Color.White)); mesh.Effect.SetValue("materialDiffuseColor", ColorValue.FromColor(Color.White)); mesh.Effect.SetValue("materialSpecularColor", ColorValue.FromColor(Color.White)); mesh.Effect.SetValue("materialSpecularExp", 9); mesh.Effect.SetValue("texCubeMap", GameManager.Instance.cubeMap); //creamos las boundingbox //a pesar de que las naves no tienen legs ni head, le seteamos boxes "vacias" para no tener problemas con Excepciones de null HEADSHOT_BOUNDINGBOX = new TgcBoundingBox(); CHEST_BOUNDINGBOX = this.mesh.BoundingBox.clone(); LEGS_BOUNDINGBOX = new TgcBoundingBox(); //carga de sonido SonidoMovimiento = new Tgc3dSound(GuiController.Instance.AlumnoEjemplosMediaDir + "Los_Borbotones\\Audio\\Robot\\ufoHum.wav", getPosicionActual()); SonidoMovimiento.MinDistance = 130f; SonidoMovimiento.play(true); }
public override void init() { Microsoft.DirectX.Direct3D.Device d3dDevice = GuiController.Instance.D3dDevice; //Crear piso TgcTexture pisoTexture = TgcTexture.createTexture(d3dDevice, GuiController.Instance.ExamplesMediaDir + "Texturas\\tierra.jpg"); piso = TgcBox.fromSize(new Vector3(0, -60, 0), new Vector3(5000, 5, 5000), pisoTexture); //Cargar obstaculos y posicionarlos. Los obstáculos se crean con TgcBox en lugar de cargar un modelo. obstaculos = new List<TgcBox>(); sonidos = new List<Tgc3dSound>(); TgcBox obstaculo; Tgc3dSound sound; //Obstaculo 1 obstaculo = TgcBox.fromSize( new Vector3(-200, 0, 0), new Vector3(80, 150, 80), TgcTexture.createTexture(d3dDevice, GuiController.Instance.ExamplesMediaDir + "Texturas\\Quake\\TexturePack3\\goo2.jpg")); obstaculos.Add(obstaculo); //Sondio obstaculo 1 //OJO, solo funcionan sonidos WAV Mono (No stereo). Hacer boton der => Propiedades sobre el archivo //y tiene que decir "1 Channel". sound = new Tgc3dSound(GuiController.Instance.ExamplesMediaDir + "Sound\\armonía, continuo.wav", obstaculo.Position); //Hay que configurar la mínima distancia a partir de la cual se empieza a atenuar el sonido 3D sound.MinDistance = 50f; sonidos.Add(sound); //Obstaculo 2 obstaculo = TgcBox.fromSize( new Vector3(200, 0, 800), new Vector3(80, 300, 80), TgcTexture.createTexture(d3dDevice, GuiController.Instance.ExamplesMediaDir + "Texturas\\Quake\\TexturePack3\\lun_dirt.jpg")); obstaculos.Add(obstaculo); //Sondio obstaculo 2 sound = new Tgc3dSound(GuiController.Instance.ExamplesMediaDir + "Sound\\viento helado.wav", obstaculo.Position); sound.MinDistance = 50f; sonidos.Add(sound); //Obstaculo 3 obstaculo = TgcBox.fromSize( new Vector3(600, 0, 400), new Vector3(80, 100, 150), TgcTexture.createTexture(d3dDevice, GuiController.Instance.ExamplesMediaDir + "Texturas\\Quake\\TexturePack3\\Metal2_1.jpg")); obstaculos.Add(obstaculo); //Sondio obstaculo 3 sound = new Tgc3dSound(GuiController.Instance.ExamplesMediaDir + "Sound\\risa de maníaco.wav", obstaculo.Position); sound.MinDistance = 50f; sonidos.Add(sound); //Cargar personaje principal TgcSceneLoader loader = new TgcSceneLoader(); TgcScene scene = loader.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir + "MeshCreator\\Meshes\\Vehiculos\\Hummer\\Hummer-TgcScene.xml"); personaje = scene.Meshes[0]; personaje.Position = new Vector3(0,-50,0); //Hacer que el Listener del sonido 3D siga al personaje GuiController.Instance.DirectSound.ListenerTracking = personaje; //Configurar camara en Tercer Persona GuiController.Instance.ThirdPersonCamera.Enable = true; GuiController.Instance.ThirdPersonCamera.setCamera(personaje.Position, 200, 300); GuiController.Instance.ThirdPersonCamera.TargetDisplacement = new Vector3(0, 100, 0); //Ejecutar en loop los sonidos foreach (Tgc3dSound s in sonidos) { s.play(true); } }
public override void Init() { //seteamos atributos particulares del robot health = 100; score = 1; Device d3dDevice = GuiController.Instance.D3dDevice; MESH_SCALE = 0.5f; tiempoMuerte = 5f; attackDamage = 25; //cargamos el mesh //Despues de agregar el skeletalMesh dejamos de renderizar este mesh, pero igual lo utilizamos para calcular muchas cosas this.mesh = GameManager.Instance.ModeloRobot.clone("robot"); giroInicial = Matrix.RotationY(-(float)Math.PI / 2); //carga de animaciones TgcSkeletalLoader skeletalLoader = new TgcSkeletalLoader(); skeletalMesh = skeletalLoader.loadMeshAndAnimationsFromFile( GuiController.Instance.ExamplesMediaDir + "SkeletalAnimations\\Robot\\" + "Robot-TgcSkeletalMesh.xml", new string[] { GuiController.Instance.ExamplesMediaDir + "SkeletalAnimations\\Robot\\" + "Caminando-TgcSkeletalAnim.xml", GuiController.Instance.ExamplesMediaDir + "SkeletalAnimations\\Robot\\" + "Patear-TgcSkeletalAnim.xml", GuiController.Instance.ExamplesMediaDir + "SkeletalAnimations\\Robot\\" + "Arrojar-TgcSkeletalAnim.xml", }); skeletalMesh.playAnimation("Caminando", true); skeletalMesh.AnimationEnds += this.onAnimationEnds; skeletalMesh.Effect = GameManager.Instance.skeletalEnvMap; //skeletalMesh.Technique = "SkeletalEnvMap"; skeletalMesh.Effect.SetValue("lightColor", ColorValue.FromColor(Color.White)); skeletalMesh.Effect.SetValue("lightPosition", TgcParserUtils.vector3ToFloat4Array(new Vector3(0,1400,0))); skeletalMesh.Effect.SetValue("eyePosition", TgcParserUtils.vector3ToFloat4Array(CustomFpsCamera.Instance.getPosition())); skeletalMesh.Effect.SetValue("lightIntensity", 0.3f); skeletalMesh.Effect.SetValue("lightAttenuation", 0.3f); skeletalMesh.Effect.SetValue("reflection", 0.65f); //Cargar variables de shader de Material. El Material en realidad deberia ser propio de cada mesh. Pero en este ejemplo se simplifica con uno comun para todos skeletalMesh.Effect.SetValue("materialEmissiveColor", ColorValue.FromColor(Color.Black)); skeletalMesh.Effect.SetValue("materialAmbientColor", ColorValue.FromColor(Color.White)); skeletalMesh.Effect.SetValue("materialDiffuseColor", ColorValue.FromColor(Color.White)); skeletalMesh.Effect.SetValue("materialSpecularColor", ColorValue.FromColor(Color.White)); skeletalMesh.Effect.SetValue("materialSpecularExp", 7); skeletalMesh.Effect.SetValue("texCubeMap", GameManager.Instance.cubeMap); skeletalMesh.setColor(Color.Peru); //realizamos el init() comun a todos los enemigos base.Init(); //Creamos boundingBox nuevas para la cabeza, pecho y piernas del robot HEADSHOT_BOUNDINGBOX = this.mesh.BoundingBox.clone(); CHEST_BOUNDINGBOX = this.mesh.BoundingBox.clone(); LEGS_BOUNDINGBOX = this.mesh.BoundingBox.clone(); Matrix escalabox = Matrix.Scaling(new Vector3(0.43f, 0.3f, 0.43f)); Matrix traslationbox = Matrix.Translation(new Vector3(0, 90f, 0)); HEADSHOT_BOUNDINGBOX.transform(escalabox * traslationbox); posicionActualHeadshot = escalabox * traslationbox * posicionActual; Matrix escalabox2 = Matrix.Scaling(new Vector3(0.6f, 0.3f, 0.6f)); Matrix traslationbox2 = Matrix.Translation(new Vector3(0, 50f, 0)); CHEST_BOUNDINGBOX.transform(escalabox2 * traslationbox2); posicionActualChest = escalabox2 * traslationbox2 * posicionActual; Matrix escalabox3 = Matrix.Scaling(new Vector3(0.4f, 0.38f, 0.4f)); Matrix traslationbox3 = Matrix.Translation(new Vector3(0, 0f, 0)); LEGS_BOUNDINGBOX.transform(escalabox3 * traslationbox3); posicionActualLegs = escalabox3 * traslationbox3 * posicionActual; skeletalMesh.AutoTransformEnable = false; //carga de sonido SonidoMovimiento = new Tgc3dSound(GuiController.Instance.AlumnoEjemplosMediaDir + "Los_Borbotones\\Audio\\Robot\\servomotor.wav", getPosicionActual()); SonidoMovimiento.MinDistance = 70f; SonidoMovimiento.play(true); //setBaseEffect(); skeletalMesh.computeNormals(); }