예제 #1
0
 public virtual void RecieveOrder(OrderData data)
 {
     if (!isSelectable || movable && (motor == null || !motor.enabled) || IsPlayer())
         return;
     Order order = data.GetOrder();
     if (data.MoveTypeWasChanged())
     {
         movementType = data.GetMoveType();
     }
     Transform target = data.GetOrderTarget();
     if ((order == Order.stop || target == null) && movable)
     {
         motor.StopNavigation(uName + " recieved a stop order from its OrderData.", false);
         return;
     }
     if (target == transform || orderData != null && order == orderData.GetOrder() && target == orderData.GetOrderTarget())
         return;
     //Debug.Log (this+" has recieved "+order);
     ResetTarget();
     orderData = data;
     lastOrderer = orderData.GetLeader();
     Objective objective = target.GetComponent<Objective>();
     if (objective != null)
     {
         currentObjective = objective;
         if (order == Order.attack)
             attackObjective = objective;
         else if (order == Order.defend)
             defendObjective = objective;
     }
     if (movable)
     {
         if (target.GetComponent<Unit>() == null)
         {
             target = motor.MakeMoveTarget(target);
         }
         else
         {
             target = motor.MakeMoveTarget(target.gameObject, uName + "'s Attack Target", true, false);
         }
         if (Vector3.Distance(target.position, transform.position) < UnitMotor.MOVE_CLOSE_ENOUGH_DISTANCE)
         {
             if (order != Order.defend)
             {
                 orderData.SetTarget(null);
                 orderData.SetOrder(Order.stop, true);
                 orderData.UpdatedByUnit();
                 ResetTarget();
                 motor.OnTargetReached();
             }
             return;
         }
         orderData.SetMoveTarget(target, this);
         MoveTo(target, movementType, uName + " is moving due to order recieved by " + lastOrderer, false);
     }
     // This is a quick-and-dirty way for players to see that the unit has recieved orders correctly.
     if (lastOrderer == (Leader)Commander.player)
     {
         Debug.Log(this + " is moving to " + target);
         MessageList.Instance.AddMessage(uName + ", acknowledging " + order.ToString() + " order.");
     }
 }