Пример #1
0
        public void IncluirRetaNoFinal(Local local)
        {
            local.donoGrupo = this.donoGrupo;
            local.donoAcft  = this;
            if (!locais.Contains(local))
            {
                locais.Add(local);
            }

            //if (retas[retas.Count - 1].Fim.X != 0 && retas[retas.Count - 1].Fim.Y != 0)

            //if (retas[retas.Count - 1].Ini == retas[retas.Count - 1].Fim)
            if ((retas[retas.Count - 1].Ini.X == retas[retas.Count - 1].Fim.X) && (retas[retas.Count - 1].Ini.Y == retas[retas.Count - 1].Fim.Y))
            {
                retas[retas.Count - 1].Fim = local;
                this.Trafegar(local);
            }
            else
            {
                Reta reta = new Reta();
                ////reta.Ini = new Local();
                //reta.Ini.X = retas[retas.Count - 1].Fim.X;
                //reta.Ini.Y = retas[retas.Count - 1].Fim.Y;
                reta.Ini = retas[retas.Count - 1].Fim;
                reta.Fim = local;
                retas.Add(reta);
            }
        }
Пример #2
0
        private void VerificarTrocarRumo()
        {
            Reta retaAtual = retas[indiceRetaAtual];

            if (Math.Abs(retaAtual.Fim.X - retaAtual.Ini.X) > Math.Abs(retaAtual.Fim.Y - retaAtual.Ini.Y))
            {
                if (direita)
                {
                    if (this.X > retaAtual.Fim.X)
                    {
                        this.AtualizarRumo();
                    }
                }
                else
                if (this.X < retaAtual.Fim.X)
                {
                    this.AtualizarRumo();
                }
            }
            else
            {
                if (descer)
                {
                    if (this.Y > retaAtual.Fim.Y)
                    {
                        this.AtualizarRumo();
                    }
                }
                else
                if (this.Y < retaAtual.Fim.Y)
                {
                    this.AtualizarRumo();
                }
            }
        }
Пример #3
0
        private void AtualizarRumo()
        {
            if (indiceRetaAtual < retas.Count - 1)
            {
                indiceRetaAtual++;
                Reta retaAtual = retas[indiceRetaAtual];

                this.Trafegar(retaAtual.Fim);
            }
            else
            {
                timer.Enabled = false;
            }
        }
Пример #4
0
        public void Mover(int X, int Y)
        {
            Reta retaAtual = retas[indiceRetaAtual];

            retaAtual.Ini.X = X;
            retaAtual.Ini.Y = Y;
            this.X          = X;
            this.Y          = Y;

            //if (acfts[i].timer != null)
            //    acfts[i].timer.Dispose();
            if ((retaAtual.Fim.X != 0) && (retaAtual.Fim.Y != 0))
            {
                this.Trafegar(retaAtual.Fim);
            }

            this.AtualizarDadosAltitude();

            //this.VerificarDistanciaEntreACFTs(10, 200);
        }
Пример #5
0
        //

        public void Trafegar(Local local)
        {
            Reta retaAtual = retas[indiceRetaAtual];

            retaAtual.Ini.X = this.X;
            retaAtual.Ini.Y = this.Y;

            retaAtual.Fim = local;

            espaco = Math.Sqrt(Math.Abs(retaAtual.Fim.X - retaAtual.Ini.X) + Math.Abs(retaAtual.Fim.Y - retaAtual.Ini.Y));
            tempo  = espaco / Velocidade;

            //dados da equacao da reta
            retaAtual.a = retaAtual.Ini.Y - retaAtual.Fim.Y;
            retaAtual.b = retaAtual.Fim.X - retaAtual.Ini.X;
            retaAtual.c = (retaAtual.Ini.X * retaAtual.Fim.Y) - (retaAtual.Fim.X * retaAtual.Ini.Y);
            //------------------------

            direita = (retaAtual.Ini.X < retaAtual.Fim.X);
            descer  = (retaAtual.Ini.Y < retaAtual.Fim.Y);

            if (timer != null)
            {
                timer.Dispose();
            }

            timer          = new Timer();
            timer.Enabled  = true;
            timer.Interval = this.GerarTimer(Velocidade);
            //timer.Tag = this.Id;

            timer.Tick -= new EventHandler(timer_Tick);
            timer.Tick += new EventHandler(timer_Tick);

            //indiceSelecionado = -1;
            //this.mudarFundo(Color.White);
        }
Пример #6
0
        private void timer_Tick(object sender, EventArgs e)
        {
            //int i = Int32.Parse((sender as Timer).Tag.ToString());

            Reta retaAtual = retas[indiceRetaAtual];

            if (Math.Abs(retaAtual.Fim.X - retaAtual.Ini.X) > Math.Abs(retaAtual.Fim.Y - retaAtual.Ini.Y))
            {
                if (direita)
                {
                    this.X = this.X + this.Incremento;     //Int32.Parse(Math.Round(acft.velocidade / 100).ToString())
                }
                else
                {
                    this.X = this.X - this.Incremento;     //Int32.Parse(Math.Round(acft.velocidade / 100).ToString())
                }
                if (retaAtual.b != 0)
                {
                    this.Y = -(retaAtual.a * this.X + retaAtual.c) / retaAtual.b;
                }
                //else
                //    label.BackColor = Color.Red;
            }
            else
            {
                if (descer)
                {
                    this.Y = this.Y + this.Incremento;     //Int32.Parse(Math.Round(acft.velocidade / 100).ToString())
                }
                else
                {
                    this.Y = this.Y - this.Incremento;     //Int32.Parse(Math.Round(acft.velocidade / 100).ToString())
                }
                if (retaAtual.b != 0)
                {
                    this.X = -(retaAtual.b * this.Y + retaAtual.c) / retaAtual.a;
                }
                //else
                //    label.BackColor = Color.Yellow;
            }

            if (piscarFundo)
            {
                if (lblMatricula.BackColor == Color.Gray)
                {
                    lblMatricula.BackColor = Color.White;
                }
                else
                {
                    lblMatricula.BackColor = Color.Gray;
                }
            }
            else
            {
                lblMatricula.BackColor = Color.White;
            }

            if (piscarFundoAlerta)
            {
                if (lblMatricula.BackColor == Color.Yellow)
                {
                    lblMatricula.BackColor = Color.White;
                }
                else
                {
                    lblMatricula.BackColor = Color.Yellow;
                }
            }

            //preserva a cor de fundo da acft selecionada
            if (selecionado && lblMatricula.BackColor == Color.White)
            {
                lblMatricula.BackColor = Color.Cyan;
            }

            this.VerificarTrocarRumo();

            this.AtualizarDadosAltitude();

            this.listaACFTs_parent.imgCarta.Refresh();

            //this.VerificarDistanciaEntreACFTs(10, 200);

            //distancia = Math.Sqrt(Math.Abs(acft.xFin - acft.xIni) + Math.Abs(acft.yFin - acft.yIni));
        }