/** * 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); }
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); } }