Beispiel #1
0
 private void CheckRemainingDistance()
 {
     if (Vector3.Distance(transform.position, agent.destination) <= REPORT_REACHED_DISTANCE)
     {
         OnReachDestination?.Invoke();
     }
 }
Beispiel #2
0
 public override void OnTurn()
 {
     base.OnTurn();
     if (moving && !fighting)
     {
         Queue <Unit> queue;
         if (!Game.UnitPositionQueues.ContainsKey(blockingPos))
         {
             queue = new Queue <Unit>();
             Game.UnitPositionQueues[blockingPos] = queue;
         }
         else
         {
             queue = Game.UnitPositionQueues[blockingPos];
         }
         if (!queue.Contains(this))
         {
             queue.Enqueue(this);
         }
         if (Game.UnitBlockedPositions.Contains(blockingPos) || queue.Peek() != this)
         {
             OnIdle?.Invoke();
             idle = true;
             Game.UnitBlockedPositions.Add(blockingPos - areaRangeDelta);
             return;
         }
         if (idle)
         {
             Game.UnitBlockedPositions.Remove(blockingPos - areaRangeDelta);
         }
         Position += moveDelta;
         if (Position == blockingPos)
         {
             queue.Dequeue();
             blockingPos += areaRangeDelta;
         }
         if (Position == destination)
         {
             moving = false;
             OnReachDestination?.Invoke();
             if (Position == Game.Map.Bounds.LeftDown && Owner == Game.RightPlayer ||
                 Position == Game.Map.Bounds.RightDown && Owner == Game.LeftPlayer)
             {
                 Game.EndGame(Owner);
             }
         }
     }
 }
        public override void Update()
        {
            if (!direction.HasValue)
            {
                GetDirection();
            }

            Vec2D nextPoint = gameObject.transform.position;

            nextPoint += direction.Value * Speed * GameEngine.Instance.DeltaTime;

            gameObject.transform.LookAt(nextPoint);

            gameObject.transform.position = nextPoint;

            if (OnReachDestination != null && gameObject.transform.position > Destination)
            {
                OnReachDestination?.Invoke();
            }
        }