public bool NaMira(GraphicsDevice graphicsDevice) { //Calcula a distância entre a base do canhão e o centro do disco voador InformacaoDiscoVoador inf = InformacaoDiscoVoador.GetInformacao(this); float x = Posicao.X + inf.distancia * (float)Math.Cos(RadianosCorrigido); float y = Posicao.Y - inf.distancia * (float)Math.Sin(RadianosCorrigido); return(Math.Abs(x - inf.xDiscoVoador) <= MARGEM_ERRO && Math.Abs(y - inf.yDiscoVoador) <= MARGEM_ERRO); }
public static InformacaoDiscoVoador GetInformacao(Canhao canhao) { InformacaoDiscoVoador inf = new InformacaoDiscoVoador(); DiscoVoador discoVoador = DiscoVoador.Instancia; inf.meiaLargura = discoVoador.Imagem.Height * 1.0f / 2; inf.meiaAltura = discoVoador.Imagem.Width * 1.0f / 2; inf.yDiscoVoador = discoVoador.Posicao.Y + inf.meiaLargura; inf.xDiscoVoador = discoVoador.Posicao.X + inf.meiaAltura; inf.catetoOposto = canhao.Posicao.Y - inf.yDiscoVoador; inf.catetoAdvacente = inf.xDiscoVoador - canhao.Posicao.X; inf.distancia = (float)Math.Sqrt(Math.Pow(inf.catetoOposto, 2) + Math.Pow(inf.catetoAdvacente, 2)); return(inf); }
internal void CorrigirCoordenada(GameTime gameTime) { if (gameTime.TotalGameTime.TotalMilliseconds - miliSegundoUltimaAcao > 200) { const float velocidade = 1.2f; InformacaoDiscoVoador inf = InformacaoDiscoVoador.GetInformacao(this); float seno = inf.catetoOposto / inf.distancia; float radiano = (float)Math.Asin(seno); if (radiano > RadianosCorrigido) { Angulo += velocidade; } else if (radiano < RadianosCorrigido) { Angulo -= velocidade; } miliSegundoUltimaAcao = gameTime.TotalGameTime.TotalMilliseconds; } }
public static InformacaoDiscoVoador GetInformacao(Canhao canhao) { InformacaoDiscoVoador inf = new InformacaoDiscoVoador(); DiscoVoador discoVoador = DiscoVoador.Instancia; inf.meiaLargura = discoVoador.Imagem.Height * 1.0f / 2; inf.meiaAltura = discoVoador.Imagem.Width * 1.0f / 2; inf.yDiscoVoador = discoVoador.Posicao.Y + inf.meiaLargura; inf.xDiscoVoador = discoVoador.Posicao.X + inf.meiaAltura; inf.catetoOposto = canhao.Posicao.Y - inf.yDiscoVoador; inf.catetoAdvacente = inf.xDiscoVoador - canhao.Posicao.X; inf.distancia = (float)Math.Sqrt(Math.Pow(inf.catetoOposto, 2) + Math.Pow(inf.catetoAdvacente, 2)); return inf; }