public Vector2 Calcularpursuit(Arma arma, float secs)
        {
            Vector2 toTarget = alvo.getPosition() - arma.getPosition();
            float   relative = Vector2.Dot(arma.getDirecao(), alvo.getDirecao());

            if (Vector2.Dot(toTarget, arma.getDirecao()) > 0 &&
                relative < -0.95)
            {
                return(new BehaviorSeek(alvo.getPosition()).Calculate(arma, secs));
            }

            float lookAheadTime = toTarget.Length() / (arma.getMaxVelocidade() + alvo.getVelocidade().Length());

            return(new BehaviorSeek(alvo.getPosition() + alvo.getVelocidade() * lookAheadTime).Calculate(arma, secs));
        }
示例#2
0
 public void ativarantiRocket()
 {
     zerarantiRocket();
     antiRocketAtivo = true;
     setImagem(owner.getImagemHidden());
     setPosition(owner.getPosition());
     direcao_ = owner.getDirecao();
 }
        public bool ocorreuColisaoNaveMeteoro(Nave nave, bool especial = false)
        {
            Rectangle antiRocketRec = new Rectangle((int)nave.getPosition().X - ((int)nave.getImagem().Width / 2),
                                                    (int)nave.getPosition().Y - ((int)nave.getImagem().Height / 2),
                                                    (int)nave.getImagem().Width, (int)nave.getImagem().Height);

            // Trata a colisao da nave com os Meteoros
            List <Obstaculo> Meteoros = recuperaComponentesObstaculos();

            foreach (Obstaculo prime in Meteoros)
            {
                Rectangle obstaculo = new Rectangle((int)prime.getPosition().X - ((int)prime.getImagem().Width / 2),
                                                    (int)prime.getPosition().Y - ((int)prime.getImagem().Height / 2),
                                                    (int)prime.getImagem().Width, (int)prime.getImagem().Height);
                if (obstaculo.Intersects(antiRocketRec))
                {
                    prime.Dispose();
                    return(true);
                }
            }
            return(false);
        }