예제 #1
0
    /// <summary>
    /// adds the order to the registry.
    /// (orders should be checked for "validness" - check if cmder is full before recruiting, for example -
    /// before being added)
    /// </summary>
    /// <param name="orderType"></param>
    /// <param name="orderedActorID"></param>
    /// <param name="zoneTargetID"></param>
    public void RegisterOrder(RegisteredCmderOrder.OrderType orderType, int orderedActorID = -1, int zoneTargetID = -1, bool addVisualFeedbackNow = false)
    {
        RegisteredCmderOrder newOrder = new RegisteredCmderOrder(orderType, orderedActorID, zoneTargetID);

        registeredOrders.Add(newOrder);
        if (addVisualFeedbackNow)
        {
            AddFeedbackForOrder(newOrder);
        }
    }
예제 #2
0
    public void AddFeedbackForOrder(RegisteredCmderOrder order)
    {
        if (order.orderType == RegisteredCmderOrder.OrderType.createCmder ||
            order.orderType == RegisteredCmderOrder.OrderType.move)
        {
            Zone targetZone = null;
            if (order.zoneTargetID != -1)
            {
                targetZone = GameController.GetZoneByID(order.zoneTargetID);
                if (targetZone == null)
                {
                    return;
                }
            }

            if (order.orderType == RegisteredCmderOrder.OrderType.createCmder)
            {
                WorldVisualFeedbacks.instance.createCmderFBCycler.PlaceObjAt(targetZone.MyZoneSpot.transform);
            }
            else
            {
                Commander targetCmder = GameController.GetCmderByID(order.orderedActorID);
                if (targetCmder == null)
                {
                    return;
                }

                Faction ownerFac = GameController.GetFactionByID(targetCmder.ownerFaction);
                if (ownerFac == null)
                {
                    return;
                }

                LinkLine line = WorldVisualFeedbacks.instance.moveFBCycler.GetAnObj().GetComponent <LinkLine>();
                line.SetLink(targetCmder.MeIn3d, targetZone.MyZoneSpot, ownerFac.color, 0.3f);
            }
        }
        else
        {
            Commander targetCmder = GameController.GetCmderByID(order.orderedActorID);
            if (targetCmder == null)
            {
                return;
            }

            if (order.orderType == RegisteredCmderOrder.OrderType.recruit)
            {
                WorldVisualFeedbacks.instance.recruitFBCycler.PlaceObjAt(targetCmder.MeIn3d.transform);
            }
            else
            {
                WorldVisualFeedbacks.instance.trainingFBCycler.PlaceObjAt(targetCmder.MeIn3d.transform);
            }
        }
    }
예제 #3
0
    /// <summary>
    /// if an order was given to the target cmder, removes it and returns true; if no order is found, returns false.
    /// does not affect order visual feedbacks; they should be refreshed manually afterwards!
    /// </summary>
    /// <param name="orderedCmderID"></param>
    /// <returns></returns>
    public bool RemoveAnyOrderGivenToCmder(int orderedCmderID)
    {
        RegisteredCmderOrder cmderOrder = null;

        foreach (RegisteredCmderOrder order in registeredOrders)
        {
            if (order.orderType != RegisteredCmderOrder.OrderType.createCmder &&
                order.orderedActorID == orderedCmderID)
            {
                cmderOrder = order;
            }
        }

        if (cmderOrder != null)
        {
            registeredOrders.Remove(cmderOrder);
        }

        return(cmderOrder != null);
    }