Beispiel #1
0
 public XwingEnemigo(TGCVector3 posicionInicial, Xwing target, float velocidadInicial, CoordenadaEsferica direccionInicial)
 {
     posicion         = posicionInicial;
     velocidadGeneral = velocidadInicial;
     //Por defecto, se encuentra mirando hacia el z+
     this.coordenadaEsferica = direccionInicial;
     nave = new TgcSceneLoader().loadSceneFromFile(VariablesGlobales.mediaDir + "XWing\\X-Wing-TgcScene.xml");//@ésta deberia ser nuestra nave, no la enemiga!
     nave.Meshes.ForEach(mesh => {
         mesh.AutoTransformEnable = false;
         mesh.Transform           = TGCMatrix.Scaling(scale) *
                                    TGCMatrix.RotationYawPitchRoll(coordenadaEsferica.GetRotation().Y, coordenadaEsferica.GetRotation().X, coordenadaEsferica.GetRotation().Z) *
                                    TGCMatrix.Translation(posicion);
         //Shader
         if (VariablesGlobales.SHADERS)
         {
             Effect shader = VariablesGlobales.shaderManager.AskForEffect(ShaderManager.MESH_TYPE.SHADOW);
             if (shader != null)
             {
                 nave.Meshes.ForEach(m => m.Effect = shader);
             }
             VariablesGlobales.shaderManager.AddObject(this);
         }
     });
     this.target = target;
     //Calcula inicialmente en que direccion esta el xwing principal
     vectorDistancia  = CommonHelper.SumarVectores(target.GetPosition(), -posicion);
     coordenadaAXwing = new CoordenadaEsferica(vectorDistancia.X, vectorDistancia.Y, vectorDistancia.Z);
 }
        public void Update()
        {
            DistanciaAXwing = target.GetPosition() - posicion - origenDeDisparos;
            float distanciaLength = DistanciaAXwing.Length();

            isVisible = TGCVector3.Dot(-DistanciaAXwing, target.coordenadaDireccionCartesiana) > 0 &&
                        distanciaLength < distanciaMinimaAVisible;
            tiempoDesdeUltimoDisparo += VariablesGlobales.elapsedTime;
            if (tiempoDesdeUltimoDisparo > tiempoEntreDisparos)
            {
                tiempoDesdeUltimoDisparo = 0f;
                if (this.vida > 0 && distanciaLength < distanciaMinimaATarget)
                {
                    isActive = true;
                    CoordenadaEsferica direccionXwing = new CoordenadaEsferica(DistanciaAXwing.X,
                                                                               DistanciaAXwing.Y, DistanciaAXwing.Z);
                    VariablesGlobales.managerElementosTemporales.AgregarElemento(new Misil(
                                                                                     posicion + origenDeDisparos, direccionXwing, direccionXwing.GetRotation()
                                                                                     , "Misil\\misil_torreta.xml", Misil.OrigenMisil.ENEMIGO));
                }
                else
                {
                    isActive = false;
                }
            }
        }
Beispiel #3
0
        /**
         * Chequea dado el radio de apertura y la direccion en que mira la nave enemigo, si esta viendo al xwing
         * principal.
         **/
        public bool XwingSeEncuentraEnRadioDeVisibilidad()
        {
            vectorDistancia = CommonHelper.SumarVectores(target.GetPosition(), -posicion);
            float largoDistancia = vectorDistancia.Length();

            visible = TGCVector3.Dot(-vectorDistancia, target.coordenadaDireccionCartesiana) > 0 &&
                      largoDistancia < 2000;
            if (largoDistancia > DistanciaMinimaPersecucion && target.GetPosition().Y > AlturaMinimaChequeoXwing)
            {
                coordenadaAXwing = new CoordenadaEsferica(vectorDistancia.X, vectorDistancia.Y, vectorDistancia.Z);
                CoordenadaEsferica dif = this.coordenadaEsferica.Diferencia(coordenadaAXwing);
                return(dif.acimutal < radioAperturaVisibilidad && dif.polar < radioAperturaVisibilidad &&
                       vectorDistancia.Length() < distanciaLejanaVisibilidad);
            }
            else
            {
                return(false);
            }
        }
Beispiel #4
0
 public override void Update()
 {
     //@hacer que se mueva con el xwing
     worldsphere.Position  = pivot.GetPosition();
     worldsphere.Rotation += new TGCVector3(.00001f, .00001f, .00001f);//creo que agregar elapsedtime no es necesario
 }