private static Commando getDefault(XmlNode commandoNode, ITerrain terrain)
        {
            float[] pos = TgcViewer.Utils.TgcSceneLoader.TgcParserUtils.parseFloat2Array(commandoNode.InnerText);

            Commando commando  = new Commando(terrain.getPosition(pos[0], pos[1]));
            XmlNode pic = commandoNode.Attributes.GetNamedItem("picture");
            if (pic != null)
            {
                commando.Picture = new CharacterPicture(CommandosUI.Instance.MediaDir + pic.InnerText);

            }
            return commando;
        }
        public override void init()
        {


            Microsoft.DirectX.Direct3D.Device d3dDevice = GuiController.Instance.D3dDevice;
            String mediaDir = CommandosUI.Instance.MediaDir;
            Terrain terrain = new Terrain(
                mediaDir+"Heightmaps\\"+"HeightmapParedes.jpg",
                mediaDir + "Heightmaps\\"+"TexturaParedes.jpg",
                10f,
                0.4f);

            nivel = new Level(terrain);
           

            commando = new Commando(terrain.getPosition(200, 200));
            nivel.add(commando);
            commando.Life.Infinite = true;


           
            Vector3[] waitpoints = new Vector3[1];
            terrain.heightmapCoordsToXYZ(new Vector2(60, 60), out waitpoints[0]);
            //terrain.heightmapCoordsToXYZ(new Vector2(22, 80), out waitpoints[1]);
            //terrain.heightmapCoordsToXYZ(new Vector2(10, 37), out waitpoints[2]);

            
            enemigo = new Enemy(new Vector3(0,0,0));
            nivel.add(enemigo);
            

            //Seleccion multiple
            selection = new Selection(nivel.Characters, nivel.Terrain);

            //Movimiento por picking
            picking = new MovementPicking(nivel.Terrain);

            GuiController.Instance.Modifiers.addFloat("RadioVision", 0, 500, 100);
            GuiController.Instance.Modifiers.addFloat("AnguloVision", 0, 90, 45);
            GuiController.Instance.Modifiers.addBoolean("Direccion", "Mostrar", false);
            GuiController.Instance.Modifiers.addVertex3f("posicionEnemigo", new Vector3(-1000, -1000, -1000), new Vector3(1000, 1000, 1000), new Vector3(400, 0, 100));
            GuiController.Instance.Modifiers.addFloat("RotacionEnemigo", 0, 360, 0);



            previousAngle = 0;

            new StandardCamera();
            nivel.CullingEnabled = false;
        }
        public override void init(){
        

            Microsoft.DirectX.Direct3D.Device d3dDevice = GuiController.Instance.D3dDevice;
            String mediaDir = GuiController.Instance.AlumnoEjemplosMediaDir;
            nivel = new Level(
                new Terrain(CommandosUI.Instance.MediaDir + "Heightmaps\\HeightmapPlano.jpg",
                    GuiController.Instance.ExamplesMediaDir + "Texturas\\tierra.jpg",
                    10f,
                    1f
                    )
                 );
            pared = new Wall(new Vector3(0,0,0), new Vector3(200, 50, 10));
                        
            pj = new Commando(new Vector3(0, 0, -40));
            pj.Representation.AutoTransformEnable = true;


            enemigo = new Enemy(new Vector3(0, 0, 40));
            enemigo.ShowConeDirection = true;
            nivel.add(pared);
            nivel.add(enemigo);
            nivel.add(pj);

            GuiController.Instance.Modifiers.addFloat("AlturaPared", 10, 60, 10);
            GuiController.Instance.Modifiers.addFloat("RadioVision", 0, 500,100);
            GuiController.Instance.Modifiers.addFloat("AnguloVision", 0, 90, 45);
            GuiController.Instance.Modifiers.addBoolean("Direccion","Mostrar",false);
            //GuiController.Instance.RotCamera.targetObject(enemigo.BoundingBox);
            GuiController.Instance.RotCamera.CameraDistance = 200;
            GuiController.Instance.Modifiers.addVertex3f("posicionTarget", new Vector3(-100, -100, -100), new Vector3(100, 100, 100), new Vector3(0, 0, -20));

            Modifiers.initialize();


            GuiController.Instance.Modifiers.addBoolean("Cilindros", "Ver cilindros", false);
            Modifiers.Instance.bind("Cilindros", typeof(Character), "RenderCylinder");
            GuiController.Instance.Modifiers.addBoolean("Agachado", "Sí", false);
            Modifiers.Instance.bind("Agachado", this, "Crouch");
            Modifiers.Instance.bind("RadioVision", enemigo,"VisionRadius");
            Modifiers.Instance.bind("Direccion", enemigo, "ShowConeDirection");
            Modifiers.Instance.bind("posicionTarget", pj, "Position");







        }
 public void add(Commando commando)
 {
     addCharacter(commando);
     commandos.Add(commando);
     if (commandos.Count > 1)
     {
         Commando last = commandos[commandos.IndexOf(commando) - 1];
         commando.Life.Position = last.Life.Position + new Vector2(commando.Life.Width + 5, 0);
     }
     else commando.Life.Position = new Vector2(commando.Life.Width + 10, 2);
 }
        /*public bool canSeeACommando(out Commando commando)
        {
            Commando closest = null;
           foreach(Commando c in this.level.Commandos){
               if (this.canSee(c))
               {
                   commando = c;
                   
                   return true;  
               }
           }
           commando = closest;
           return false;
        }
        */
        public bool canSeeACommando(out Commando commando)
        {
            Commando closest = null;
            foreach (Commando c in this.level.Commandos)
            {
                if (this.canSee(c))
                {
                    if (closest == null || Vector3.LengthSq(this.Position - c.Position) < Vector3.LengthSq(this.Position - closest.Position))
                        closest = c;


                }
            }
            commando = closest;
            return commando != null;
        }