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."); } }
public Transform RequestTarget() { orderData = leader.UnitRequestOrders(this); if (orderData == null) return null; Transform moveTarget = orderData.GetOrderTarget(); if (moveTarget == null) { if (!movable) return null; ResetTarget(true); return null; } orderData.SetMoveTarget(motor.MakeMoveTarget(moveTarget), this); return orderData.GetMoveTarget(); }
public override void RecieveOrder(OrderData data) { //Debug.Log ("Recieved order from "+giver+": "+order.ToString()+" "+target.position); if (!(this is Commander)) base.RecieveOrder(data); GiveOrder(data.GetOrder(), data.GetOrderTarget()); }