public override void Update(GameTime gameTime) { base.Update(gameTime); keyboardState = Keyboard.GetState(); if (configuranaves.navesSelecionadas != null && !carregou) { limpa = new Limpeza(this.game); carregou = true; int i = 0; foreach (TipoNave.Tipo tp in configuranaves.navesSelecionadas) { switch (tp) { case TipoNave.Tipo.defenseship: naves[i] = Game.Content.Load <Texture2D>("imagens/defenseship"); pShip = new defenseshipShip(this.game, i + 1); pShip.setBatch(spriteBatch); Components.Add(pShip); break; case TipoNave.Tipo.attackship: naves[i] = Game.Content.Load <Texture2D>("imagens/attackship"); sfShip = new attackshiperShip(this.game, i + 1); sfShip.setBatch(spriteBatch); Components.Add(sfShip); break; } i++; } // Gerencia os tiros e asteroides limpa.gerenciarObstaculos(this.spriteBatch); } limpa.Update(gameTime); // Gerencia o numero de asteroides na tela limpa.gerenciarObstaculos(this.spriteBatch); colisao.ocorreuColisaoTiroMeteoro(); foreach (TipoNave.Tipo tp in configuranaves.navesSelecionadas) { switch (tp) { case TipoNave.Tipo.defenseship: if (pShip != null) { if (!pShip.isAlive) { acabouJogo = true; } } break; case TipoNave.Tipo.attackship: if (sfShip != null) { if (!sfShip.isAlive) { acabouJogo = true; } } break; } } }
public override void Update(GameTime gameTime) { base.Update(gameTime); float secs = (float)gameTime.ElapsedGameTime.TotalSeconds; Vector2 posAntes = getPosition(); // Se o missil se tornar inativo, por colisao ou timeout não são feitos mais os calculos abaixo if (isMissilAlive(gameTime)) { Vector2 steering_force = new Vector2(); bool comportamentoPadrao = true; // se for defletor de tele-guiado if (naveAlvo is defenseshipShip) { defenseshipShip nave = (defenseshipShip)naveAlvo; if (nave.isantiRocketAtivo()) { Vector2 pos = naveAlvo.getantiRocket().getPosition(); steering_force = flee.Calculate(this, secs, pos); comportamentoPadrao = false; } } if (comportamentoPadrao) { steering_force = pursuit.Calcularpursuit(this, secs); } if (steering_force.Length() > maxForca) { steering_force.Normalize(); steering_force *= maxForca; } steering_force *= secs; Vector2 acceleration = steering_force / massa; velocidade += acceleration; if (velocidade.Length() > getMaxVelocidade()) { velocidade.Normalize(); velocidade *= getMaxVelocidade(); } if (velocidade.Length() < 0.001) { velocidade = new Vector2(); } else { this.setDirecao(Vector2.Normalize(velocidade)); } float radiano = MathHelper.ToRadians(angulo); this.setDirecao(new Vector2((float)Math.Cos(radiano), (float)Math.Sin(radiano))); setPosition(getPosition() + velocidade * secs); orientacao = (float)Math.Atan2(getPosition().Y - posAntes.Y, getPosition().X - posAntes.X); int w = 800; int h = 600; int missilw = getImagem().Width; int missilh = getImagem().Height; Vector2 posicaoAux = getPosition(); if (getPosition().X < -missilw) { posicaoAux.X = w + missilw - 1; } else if (getPosition().X > w + missilw) { posicaoAux.X = -missilw + 1; } if (getPosition().Y < -missilh) { posicaoAux.Y = h + missilh - 1; } else if (getPosition().Y > h + missilh) { posicaoAux.Y = -missilh + 1; } setPosition(posicaoAux); } else { if (missilAlive) { bool colisao = naveAlvo.ocorreuColisao(getImagem(), getPosition()); if (colisao) { naveAlvo.descontarDano(VALOR_DANO); } } missilAlive = false; } }