private void EngageDivision(ControlledDivision Host) { var rememberedTarget = GetRememberedDivisionFromHost(Host, RememberedTargetId); //if the target has been destroyed do nothing and to end the order if (rememberedTarget.HasBeenDestroyed) { OngoingOrder = new EmptyOrder(); Canceled = true; return; } if (Host.FindVisibleDivision(RememberedTargetId, out ControlledDivision division)) { var distanceToTarget = (division.Controller.transform.position - Host.Controller.transform.position).magnitude; //need to move closer if (distanceToTarget > Host.MaxHitRange) { StartOrder(Host, new Move(Host, CommanderSendingOrderId, division.Position, Host.MaxHitRange * .5f)); } else { //if the target is within range attack StartOrder(Host, new AttackOrder(Host, CommanderSendingOrderId, division.DivisionId, Host.MaxHitRange)); } } else { //else go find him again StartOrder(Host, new FindDivision(Host, CommanderSendingOrderId, RememberedTargetId, Host.MaxSightDistance)); } }
public override void Init() { possibleOrders.Add(new Move(this, LocalPlayerController.instance.generalDivision, new Vector3())); possibleOrders.Add(new SplitDivision(this, null)); GameManager.instance.RefreshAllDivisons(); ongoingOrder = new EmptyOrder(); divisionId = divisionCounter++; name = "division : " + divisionId; }