Ejemplo n.º 1
0
 public override RAIN.Action.Action.ActionResult Execute(RAIN.Core.Agent agent, float deltaTime)
 {
     OrderData data = new OrderData(leader,leader);
     data.SetOrder(Order.attack,true);
     data.SetTarget(unitTarget.transform);
     leader.RecieveOrder(data);
     return RAIN.Action.Action.ActionResult.SUCCESS;
 }
Ejemplo n.º 2
0
 public virtual void RegisterLeader(Leader newLeader)
 {
     if (newLeader == null)
         return;
     leader = newLeader;
     if (!leader.IsOwnedByPlayer())
         Destroy(label);
     Deselect();
     ResetTarget();
     lastOrderer = null;
     aBase = leader.aBase;
     teamColor = leader.teamColor;
     leader.RegisterUnit(this);
     renderer.material.color = teamColor;
     SetOutlineColor(outlineColor);
     float distanceFromLeader = Vector3.Distance(transform.position, leader.transform.position);
     if (leader != (Leader)Commander.player && distanceFromLeader >= MOVE_TO_LEADER_DISTANCE)
     {
         OrderData supportLeader = new OrderData(leader, this);
         supportLeader.SetOrder(Order.move, false);
         supportLeader.SetMoveType(MoveType.DefendSelf);
         supportLeader.SetTarget(leader.transform);
         RecieveOrder(supportLeader);
     }
     else
     {
         leader.UnitRequestOrders(this);
     }
     if (IsOwnedByPlayer() && !IsLedByPlayer())
         MessageList.Instance.AddMessage(uName + ", acknowledging " + leader.name + " as my new leader.");
 }
Ejemplo n.º 3
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.");
     }
 }
Ejemplo n.º 4
0
 public void GiveOrder(Order order, Transform target, Unit unit)
 {
     if (!IsPlayer() && unit.GetOrder() != Order.stop && unit.GetLastOrderer() == Commander.player || unit == this)
         return;
     //Debug.Log("Giving "+order+" order.");
     OrderData data = new OrderData(this, unit);
     data.SetOrder(order, true);
     data.SetTarget(target);
     unit.RecieveOrder(data);
     if (unitCommands.ContainsKey(unit))
     {
         unitCommands[unit] = data;
     }
     else
     {
         unitCommands.Add(unit, data);
     }
 }
 private void ChooseCommanderObjective()
 {
     if (defendObjectives.Length == 1)
     {
         if (commander.GetHealthPercent() <= 0.5f || attackObjectives.Length == 0)
         {
             Objective objective = defendObjectives[0];
             OrderData data = new OrderData(commander, commander);
             data.SetOrder(Order.defend, true);
             data.SetTarget(objective.transform);
             commander.RecieveOrder(data);
             commander.defendObjective = objective;
             commander.currentObjective = objective;
         }
     }
     if (attackObjectives.Length == 1 && defendObjectives.Length == 0)
     {
         Objective objective = attackObjectives[0];
         OrderData data = new OrderData(commander, commander);
         data.SetOrder(Order.attack, true);
         data.SetTarget(objective.transform);
         commander.RecieveOrder(data);
         commander.attackObjective = objective;
         commander.currentObjective = objective;
     }
     else if (attackObjectives.Length == 1 && defendObjectives.Length == 1)
     {
         if (Random.value * 4 < 1)
         {
             Objective objective = defendObjectives[0];
             OrderData data = new OrderData(commander, commander);
             data.SetOrder(Order.defend, true);
             data.SetTarget(objective.transform);
             commander.RecieveOrder(data);
             commander.defendObjective = objective;
             commander.currentObjective = objective;
         }
         else
         {
             Objective objective = attackObjectives[0];
             OrderData data = new OrderData(commander, commander);
             data.SetOrder(Order.attack, true);
             data.SetTarget(objective.transform);
             commander.RecieveOrder(data);
             commander.attackObjective = objective;
             commander.currentObjective = objective;
         }
     }
 }