Ejemplo n.º 1
0
    public static ProduceUnitTask CreateTask(CombatUnitType unitType, int unitAmount, OnProduceUnitComplete completeCallBack = null,
                                             OnTimeLeftToComplete timeLeftCallBack = null, int duration = 1)
    {
        ProduceUnitTask task = new ProduceUnitTask();

        task.InitTask(unitType, unitAmount, completeCallBack, timeLeftCallBack, duration);

        return(task);
    }
Ejemplo n.º 2
0
    /*
     * bool IsTaskComplete()
     * {
     *      CombatUnitManagerMetaData data = CombatUnitManagerMetaData.Load ();
     *
     *      return data.IsProduceUnitComplete ();
     * }
     *
     * IEnumerator CompleteTask()
     * {
     *      while(!IsTaskComplete())
     *      {
     *              Debug.Log("Wait for server task complete");
     *
     *              yield return new WaitForSeconds(1f);
     *      }
     *
     *      UITimePopupController.Instance.HideTimePopup (transform);
     *
     *      UpdateCombatUnitManager ();
     *
     *      Architecture archi = GetComponent<Architecture> ();
     *
     *      if(archi.isSelected)
     *      {
     *              UIArchitectureMenuController.Instance.GetMenu(transform, ArchitectureMenuType.Normal);
     *      }
     *
     * }
     */

    /// <summary>
    /// Handle producing unit complete event.
    /// </summary>
    /// <param name="task">Task.</param>
    /// <param name="unitType">Unit type.</param>
    /// <param name="amount">Amount.</param>
    void OnProducingUnitComplete(ProduceUnitTask task, CombatUnitType unitType, int amount)
    {
        //StartCoroutine (CompleteTask());

        _task = null;

        UITimePopupController.Instance.HideTimePopup(transform);

        UpdateCombatUnitManager();

        EventManager.GetInstance().ExecuteEvent <EventProduceCombatUnitComplete> (new EventProduceCombatUnitComplete(this));
    }
Ejemplo n.º 3
0
    /// <summary>
    /// Updates combat unit manager.
    /// </summary>
    void UpdateCombatUnitManager()
    {
        CombatUnitManagerMetaData data = CombatUnitManagerMetaData.Load(true);

        maxCombatUnit      = data.maxCombatUnit;
        currentCombatUnit  = data.CurrentCombatUnit;
        _unitTypeAndNumber = data.GetAllUnit();

        if ((data.producingUnit) && (_task == null))
        {
            _task = ProduceUnitTask.CreateTask(data.producingUnitType, data.producingAmount, OnProducingUnitComplete, OnTimeLeftToComplete, data.producingDuration);

            TaskManager.Instance.AddTask(_task);
        }
        else
        {
            _task = null;
        }
    }
Ejemplo n.º 4
0
    /// <summary>
    /// Produces combat unit.
    /// </summary>
    /// <returns><c>true</c>, if combat unit was produced, <c>false</c> otherwise.</returns>
    /// <param name="unitType">Unit type.</param>
    /// <param name="produceAmount">Produce amount.</param>
    public bool ProduceCombatUnit(CombatUnitType unitType, int produceAmount)
    {
        if ((combatUnitInfo != null) && (_task == null))
        {
            CombatUnitManagerMetaData data = CombatUnitManagerMetaData.Load();

            CombatUnit unitInfo = null;

            for (int i = 0; i < combatUnitInfo.Count; i++)
            {
                if (unitType == combatUnitInfo[i].unitType)
                {
                    unitInfo = combatUnitInfo[i];

                    break;
                }
            }

            if (unitInfo != null)
            {
                //todo:check if resource is enough
                bool canProduceUnit = true;

                for (int i = 0; i < unitInfo.costResourceTypes.Count; i++)
                {
                    if (!Player.Instance.IsResourceEnough(unitInfo.costResourceTypes[i], unitInfo.costResources[i] * produceAmount))
                    {
                        EventManager.GetInstance().ExecuteEvent <EventAlert>(new EventAlert("Warning", "Not enough resources"));

                        canProduceUnit = false;

                        break;
                    }
                }

                if (canProduceUnit)
                {
                    Dictionary <ResourceType, float> resourceCost = new Dictionary <ResourceType, float>();

                    for (int i = 0; i < unitInfo.costResourceTypes.Count; i++)
                    {
                        resourceCost.Add(unitInfo.costResourceTypes[i], unitInfo.costResources[i]);
                    }

                    if (data.ProduceCombatUnit(unitInfo.unitType, produceAmount, unitInfo.generateDuration * produceAmount, resourceCost))
                    {
                        _task = ProduceUnitTask.CreateTask(unitInfo.unitType, produceAmount, OnProducingUnitComplete, OnTimeLeftToComplete, unitInfo.generateDuration * produceAmount);

                        TaskManager.Instance.AddTask(_task);

                        //todo:post produce unit event
                        List <ResourceType> costType = new List <ResourceType>();
                        foreach (ResourceType type in resourceCost.Keys)
                        {
                            costType.Add(type);
                        }

                        Architecture archi = GetComponent <Architecture> ();

                        if (archi.isSelected)
                        {
                            UIArchitectureMenuController.Instance.GetMenu(transform, ArchitectureMenuType.OnTask);
                        }

                        EventManager.GetInstance().ExecuteEvent <EventProduceCombatUnit>(new EventProduceCombatUnit(costType));

                        return(true);
                    }
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                Debug.LogError(gameObject.name + " unable to produce combat unit, no unit definition");
            }
        }

        return(false);
    }