Beispiel #1
0
 public static Unit CollideCheck(Unit unit, PointF vector)
 {
     for (int i = 0; i < _units.Count; i++)
     {
         if (_units[i] != unit)
         {
             double length    = GameMath.Distance(_units[i].Position, GameMath.Add(unit.Position, vector));
             double radiusAnd = _units[i].Radius + unit.Radius;
             if (length <= radiusAnd)
             {
                 return(_units[i]);
             }
         }
     }
     return(null);
 }
Beispiel #2
0
        private PointF GetMoveDirection(PointF vector, PointF destination)
        {
            Unit frontUnit = Map.CollideCheck(this, vector);

            if (frontUnit == null)
            {
                return(vector);
            }
            else
            {
                PointF vectorLeft    = new PointF(vector.Y, -vector.X);
                PointF vectorRight   = new PointF(-vector.Y, vector.X);
                Unit   LeftUnit      = Map.CollideCheck(this, vectorLeft);
                Unit   RightUnit     = Map.CollideCheck(this, vectorRight);
                float  distanceLeft  = GameMath.Distance(GameMath.Add(_position, vectorLeft), destination);
                float  distanceRight = GameMath.Distance(GameMath.Add(_position, vectorRight), destination);
                if (LeftUnit == null && RightUnit == null)
                {
                    if (distanceLeft <= distanceRight)
                    {
                        return(vectorLeft);
                    }
                    else
                    {
                        return(vectorRight);
                    }
                }
                else if (LeftUnit == null)
                {
                    return(vectorLeft);
                }
                else if (RightUnit == null)
                {
                    return(vectorRight);
                }
                else
                {
                    return(PointF.Empty);
                }
            }
        }
Beispiel #3
0
        /*public void Move(PointF destination)
         * {
         *  float distance = GameMath.Distance(_position, destination);
         *  if (distance < _moveSpeed || distance > _oldDistance)
         *      Stop();
         *  //_oldDistance = distance;
         *  PointF vector = GameMath.Normalize(new PointF(destination.X - _position.X, destination.Y - _position.Y));
         *  vector = GameMath.Multiply(vector, _moveSpeed);
         *  Translate(vector);
         * }*/

        public void Translate(PointF vector)
        {
            _position = GameMath.Add(_position, vector);
        }
Beispiel #4
0
 public Point ScreenToPoint(Point point)
 {
     point = GameMath.Add(point, _position);
     return(point);
 }