public override void init() { Device d3dDevice = GuiController.Instance.D3dDevice; //Crear suelo TgcTexture pisoTexture = TgcTexture.createTexture(d3dDevice, GuiController.Instance.ExamplesMediaDir + "Texturas\\Quake\\TexturePack2\\rock_floor1.jpg"); suelo = TgcBox.fromSize(new Vector3(500, 0, 500), new Vector3(2000, 0, 2000), pisoTexture); //Cargar malla original TgcSkeletalLoader loader = new TgcSkeletalLoader(); string pathMesh = GuiController.Instance.ExamplesMediaDir + "SkeletalAnimations\\Robot\\Robot-TgcSkeletalMesh.xml"; string mediaPath = GuiController.Instance.ExamplesMediaDir + "SkeletalAnimations\\Robot\\"; original = loader.loadMeshFromFile(pathMesh, mediaPath); //Agregar animación a original loader.loadAnimationFromFile(original, mediaPath + "Patear-TgcSkeletalAnim.xml"); //Agregar attachment a original TgcSkeletalBoneAttach attachment = new TgcSkeletalBoneAttach(); TgcBox attachmentBox = TgcBox.fromSize(new Vector3(3, 60, 3), Color.Green); attachment.Mesh = attachmentBox.toMesh("attachment"); attachment.Bone = original.getBoneByName("Bip01 L Hand"); attachment.Offset = Matrix.Translation(10, -40, 0); attachment.updateValues(); original.Attachments.Add(attachment); //Crear 9 instancias mas de este modelo, pero sin volver a cargar el modelo entero cada vez float offset = 200; int cantInstancias = 4; instances = new List<TgcSkeletalMesh>(); for (int i = 0; i < cantInstancias; i++) { TgcSkeletalMesh instance = original.createMeshInstance(original.Name + i); instance.move(i * offset, 0, 0); instances.Add(instance); } //Especificar la animación actual para todos los modelos original.playAnimation("Patear"); foreach (TgcSkeletalMesh instance in instances) { instance.playAnimation("Patear"); } //Camara en primera persona GuiController.Instance.FpsCamera.Enable = true; GuiController.Instance.FpsCamera.MovementSpeed = 400; GuiController.Instance.FpsCamera.JumpSpeed = 400; GuiController.Instance.FpsCamera.setCamera(new Vector3(293.201f, 291.0797f, -604.6647f), new Vector3(299.1028f, -63.9185f, 330.1836f)); }
public void inicializarEnemigos(int columnas, int filas, List<Enemigo> lista, float scale, float radio) { //Cargar malla original loader = new TgcSkeletalLoader(); string pathMesh = GuiController.Instance.ExamplesMediaDir + "SkeletalAnimations\\BasicHuman\\CS_Arctic-TgcSkeletalMesh.xml"; mediaPath = GuiController.Instance.ExamplesMediaDir + "SkeletalAnimations\\BasicHuman\\"; originalEnemigo = loader.loadMeshFromFile(pathMesh, mediaPath); originalEnemigo.Scale = new Vector3(3.4f, 3.4f, 3.4f); //Agregar animación a original loader.loadAnimationFromFile(originalEnemigo, mediaPath + "\\Animations\\Walk-TgcSkeletalAnim.xml"); //Cargar Shader personalizado //meshOriginal.Effect = enemigoEffect; //meshOriginal.Technique = "RenderScene"; float x = 0f; float z = 0f; //instanciasMalos = new List<TgcSkeletalMesh>(); //int rowsRobot = 3; //int colsRobot = 3; for (int k = 0; k < filas; k++) { for (int q = 0; q < columnas; q++) { //Crear instancia de modelo TgcSkeletalMesh instance = originalEnemigo.createMeshInstance(originalEnemigo.Name + k + "_" + q); do { x = rand.Next(-5000, 5000); z = rand.Next(-5000, 5000); } while (FastMath.Sqrt(x * x + z * z) <= radio); //Achico el bounding box del arbol //instance.BoundingBox.scaleTranslate(new Vector3(0f, 0f, 0f), new Vector3(0.5f, 0.5f, 0.5f)); //instance.rotateY(FastMath.Atan(3f)); //Desplazarlo instance.move(x, 0, z); //Roto el mesh rotarMesh(instance); Effect fx = TgcShaders.loadEffect(GuiController.Instance.AlumnoEjemplosMediaDir + "Shaders\\e.fx"); instance.Scale = new Vector3(scale, scale, scale); instance.AlphaBlendEnable = true; Enemigo e = new Enemigo(instance, instance.Position); e.efecto = fx; lista.Add(e); } } //originalEnemigo.playAnimation("Walk"); foreach (Enemigo enemigo in lista) { enemigo.meshEnemigo.playAnimation("Walk"); } }