コード例 #1
0
    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));
        }
    }
コード例 #2
0
 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;
 }