//metodo de clase que construye un barco - necesario para poder instanciar barcos y que sean TgcMesh static public Barco ConstruirBarco(string path, Vector2 pos, float radioElipsoide, TipoElemento tipoBarco) { //cuando mergee tengo que sacar la altura del Oceano Vector3 posAlturaDelOceano = new Vector3(pos.X, Oceano.alturaEnPunto(pos.X, pos.Y), pos.Y); return((Barco)ConstruirElemento(path, posAlturaDelOceano, radioElipsoide, tipoBarco)); }
public override void update() { this.mover(); base.update(); //esto tambien if (Oceano.alturaEnPunto(this.Position.X, this.Position.Z) - 0.03f > this.Position.Y) { InteractionManager.Disparos.Remove(this); this.dispose(); } }
public static Vector3 normalEnPuntoXZ(float X, float Z /*, float momento*/) { float delta = 2f; float alturaN = Oceano.alturaEnPunto(X, Z + delta); float alturaS = Oceano.alturaEnPunto(X, Z - delta); float alturaE = Oceano.alturaEnPunto(X + delta, Z); float alturaO = Oceano.alturaEnPunto(X - delta, Z); Vector3 vector1 = new Vector3(delta * 2, alturaE - alturaO, 0); Vector3 vector2 = new Vector3(0, alturaN - alturaS, delta * 2); return(Vector3.Cross(vector2, vector1)); }
//mueve el barco y su boundingspehere en Y; hay que refactorearlo... //mueve el barco y su boundingspehere en Y; hay que refactorearlo... virtual public void flotar() { //normal del mar en el punto donde se encuentra el barco normal = Oceano.normalEnPuntoXZ(this.Position.X, this.Position.Z); //altura del mar en el punto de se encuentra el barco float Y = Oceano.alturaEnPunto(this.Position.X, this.Position.Z); //ponemos el bounding sphere a la altura donde esta el barco this.boundingSphere.moveCenter(new Vector3(0, Y - boundingSphere.Position.Y + 40, 0)); //ubicamos al barco... this.Position = new Vector3(this.Position.X, Y - 15, this.Position.Z); // ...en alto... this.rotation.Z = FastMath.Atan2(-normal.X * FastMath.Cos(this.rotation.Y), normal.Y) + FastMath.Atan2(normal.Z * FastMath.Sin(this.rotation.Y), normal.Y); // ...con rotacion en Z... this.rotation.X = FastMath.Atan2(normal.Z * FastMath.Cos(this.rotation.Y), normal.Y) + FastMath.Atan2(normal.X * FastMath.Sin(this.rotation.Y), normal.Y); // ...con rotacion en Y... }
public override void init() { #region INICIALIZACIONES ESCENARIO lightMesh = TgcBox.fromSize(new Vector3(10, 10, 10), Color.Red); oceano = new Oceano(currentScaleXZ, currentScaleY); isla = new Isla(currentScaleXZ, currentScaleY); skyBox = new PirateSkyBox(); #endregion #region INICIALIZACIONES PANTALLA crearModifiers(); crearUserVars(); crearSprites(); // Carga valores para el postprocesado Postproceso.Cargar(); #endregion #region INICIALIZACIONES BARCO barcoProtagonista = ConstructorDeElementos.ConstruirProtagonista(new Vector2(0, -930f)); b1 = ConstructorDeElementos.ConstruirEnemigo(new Vector2(500, 500)); b2 = ConstructorDeElementos.ConstruirEnemigo(new Vector2(-700, 960)); b3 = ConstructorDeElementos.ConstruirEnemigo(new Vector2(100, 880)); InteractionManager.Barcos.AddRange(new List <Barco> { b1, b2, b3, barcoProtagonista }); InteractionManager.Resto.AddRange(new List <IUpdateRender> { isla, oceano }); InputManager.Add(barcoProtagonista); #endregion }
public override void init() { #region INICIALIZACIONES ESCENARIO lightMesh = TgcBox.fromSize(new Vector3(10, 10, 10), Color.Red); oceano = new Oceano(currentScaleXZ, currentScaleY); isla = new Isla(currentScaleXZ, currentScaleY); skyBox = new PirateSkyBox(); #endregion #region INICIALIZACIONES PANTALLA crearModifiers(); crearUserVars(); crearSprites(); // Carga valores para el postprocesado Postproceso.Cargar(); #endregion #region INICIALIZACIONES BARCO barcoProtagonista = ConstructorDeElementos.ConstruirProtagonista(new Vector2(0, -930f)); b1 = ConstructorDeElementos.ConstruirEnemigo(new Vector2(500, 500)); b2 = ConstructorDeElementos.ConstruirEnemigo(new Vector2(-700, 960)); b3 = ConstructorDeElementos.ConstruirEnemigo(new Vector2(100, 880)); InteractionManager.Barcos.AddRange(new List<Barco> { b1, b2, b3, barcoProtagonista }); InteractionManager.Resto.AddRange(new List<IUpdateRender> { isla, oceano }); InputManager.Add(barcoProtagonista); #endregion }