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; }
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."); }
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 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; } } }