public void travarAlvo(Nave naveAlvo) { pursuit = new BehaviorPursuit(naveAlvo); wander = new BehaviorWander(50, new Random().Next(20, 180), 100); flee = new BehaviorFlee(); }
public override void Update(GameTime gameTime) { float secs = (float)gameTime.ElapsedGameTime.TotalSeconds; // "Calcula movimento" Vector2 steering_force = new BehaviorWander(100.0f, 180.0f, 10.0f).Calculate(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() > maxVelocidade) { velocidade.Normalize(); velocidade *= maxVelocidade; } //Calcula a nova direcao if (velocidade.Length() < 0.001) { velocidade = new Vector2(); } else { direcao = Vector2.Normalize(velocidade); } // "Circula pela tela" int w = Game.Window.ClientBounds.Width; int h = Game.Window.ClientBounds.Height; int obs_w = imagem.Width; int obs_h = imagem.Height; Random randon = new Random(); Vector2 posicaoAux = getPosition(); if (getPosition().X < -obs_w) { posicaoAux.X = randon.Next(w); posicaoAux.Y = -obs_h + 1; } else if (getPosition().X > w + obs_w) { posicaoAux.X = randon.Next(w); posicaoAux.Y = -obs_h + 1; } if (getPosition().Y < -obs_h) { posicaoAux.Y = (float)randon.Next((int)(h + obs_h - 1)); } else if (getPosition().Y > h + obs_h) { posicaoAux.Y = -obs_h + 1; posicaoAux.X = randon.Next(w); } float radiano = MathHelper.ToRadians(angulo); this.setDirecao(new Vector2((float)Math.Cos(radiano), (float)Math.Sin(radiano))); setPosition(posicaoAux + velocidade * secs); base.Update(gameTime); }