Ejemplo n.º 1
0
        /**
         * Devuelve la posicion inicial desde donde sale el misil en funcion de la posicion y la rotacion de la nave.
         * */
        private TGCVector3 CalcularPosicionInicialMisil()
        {
            //Random de las 4 opciones posibles de caniones
            Random random         = new Random();
            int    canion         = (int)Math.Round(random.NextDouble() * 4);
            int    signo          = 0;
            bool   canionInferior = false;

            //Caniones izquierdos o derechos
            if (canion == 0 || canion == 2)
            {
                signo = 1;
            }
            else
            {
                signo = -1;
            }
            //Caniones inferiores o superiores
            if (canion == 2 || canion == 3)
            {
                canionInferior = true;
            }
            else
            {
                canionInferior = false;
            }
            //Delta en la direccion nave (para que no parezca que sale de atras)
            TGCVector3 deltaDireccionNave = new TGCVector3(coordenadaEsferica.GetXYZCoord() * DISTANCIA_ORIGEN_MISIL_DIRECCION_NAVE);

            //Delta en la direccion ortogonal a la direccion de la nave (para que salga desde alguna de las alas)
            //Caniones inferiores
            if (canionInferior)
            {
                CoordenadaEsferica direccionOrtogonal = new CoordenadaEsferica(coordenadaEsferica.acimutal + (FastMath.PI / 2) * signo, FastMath.PI / 2 + EXTRA_ANGULO_POLAR_CANION_ABAJO);
                TGCVector3         deltaOrtogonalNave =
                    new TGCVector3(direccionOrtogonal.GetXYZCoord() * DISTANCIA_ORIGEN_MISIL_DIRECCION_ORTOGONAL);
                return(CommonHelper.SumarVectores(CommonHelper.SumarVectores(GetPosition(), deltaDireccionNave), deltaOrtogonalNave));
            }
            else
            //Caniones superiores
            {
                CoordenadaEsferica direccionOrtogonal = new CoordenadaEsferica(coordenadaEsferica.acimutal + (FastMath.PI / 2) * signo, FastMath.PI / 2);
                TGCVector3         deltaOrtogonalNave =
                    new TGCVector3(direccionOrtogonal.GetXCoord() * DISTANCIA_ORIGEN_MISIL_DIRECCION_ORTOGONAL,
                                   direccionOrtogonal.GetYCoord() * DISTANCIA_ORIGEN_MISIL_DIRECCION_ORTOGONAL,
                                   direccionOrtogonal.GetZCoord() * DISTANCIA_ORIGEN_MISIL_DIRECCION_ORTOGONAL);
                return(CommonHelper.SumarVectores(CommonHelper.SumarVectores(GetPosition(), deltaDireccionNave), deltaOrtogonalNave));
            }
        }
        public void UpdateBullet()
        {
            coordenadaDireccionCartesiana = coordenadaEsferica.GetXYZCoord();
            position.X = position.X + velocidadGeneral * coordenadaDireccionCartesiana.X * VariablesGlobales.elapsedTime;
            position.Y = position.Y + velocidadGeneral * coordenadaDireccionCartesiana.Y * VariablesGlobales.elapsedTime;
            position.Z = position.Z + velocidadGeneral * coordenadaDireccionCartesiana.Z * VariablesGlobales.elapsedTime;
            TGCMatrix rotationTranslation = matrizInicialTransformacion * GetRotationMatrix() * TGCMatrix.Translation(position);

            for (int a = 0; a < meshs.Length; a++)
            {
                meshs[a].Transform = TGCMatrix.Scaling(scaleVector) * rotationTranslation;
            }
            collisionObject.CollisionShape.LocalScaling = scaleVector.ToBulletVector3();
            collisionObject.WorldTransform = CommonHelper.TgcToBulletMatrix(rotationTranslation);
        }
Ejemplo n.º 3
0
        public Bomba(TGCVector3 position, CoordenadaEsferica coordenadaEsferica)
        {
            bomba = VariablesGlobales.loader.loadSceneFromFile(VariablesGlobales.mediaDir + "Bomb\\bomb-TgcScene.xml").Meshes[0];
            bomba.AutoTransformEnable = false;

            this.posicion      = position;
            this.coordEsferica = coordenadaEsferica.GetXYZCoord();
            escala             = new TGCVector3(.05f, .05f, .05f);
            VariablesGlobales.managerSonido.ReproducirSonido(SoundManager.SONIDOS.XWING_BOMB);
            //@toy en seria duda de esto
            if (VariablesGlobales.SHADERS)
            {
                Effect shader = VariablesGlobales.shaderManager.AskForEffect(ShaderManager.MESH_TYPE.SHADOW);
                if (shader != null)
                {
                    bomba.Effect = shader;
                }
                VariablesGlobales.shaderManager.AddObject(this);
            }
        }