Exemplo n.º 1
0
        public override void Update(double time)
        {
            DoublePoint fp;
            double mag = Speed;
            bool b = true;
            while (b && ((fp = _decisionTree.GetGoal()) != null && !(Math.Abs(fp.X - _pos.X) < double.Epsilon && Math.Abs(fp.Y - _pos.Y) < double.Epsilon)))
            {
                fp = _decisionTree.GetGoal ();
                if (fp == null || (Math.Abs(fp.X - _pos.X) < double.Epsilon && Math.Abs(fp.Y - _pos.Y) < double.Epsilon))
                {
                    State = 0;
                    break;
                }

                DoublePoint v = new DoublePoint(fp.X - _pos.X, fp.Y - _pos.Y);
                b = v.SetToLessOrEqualMag(mag);
                _moveDirectionUp = fp.Y - _pos.Y > 0;
                if (b)
                {
                    _pos.Set(v);
                }
                else
                {
                    _pos.Add(v);
                }
                if (Math.Abs(v.X) <= Math.Abs(v.Y))
                {
                    if (v.Y == 0)
                    {
                        State = 0;
                    }
                    else if (v.Y > 0)
                    {
                        State = 1;
                    }
                    else
                    {
                        State = 2;
                    }
                }
                else
                {
                    if (v.X < 0)
                    {
                        State = 3;
                    }
                    else
                    {
                        State = 4;
                    }
                }
            }

            base.Update(time);
        }