public void OnClickUnitDefinitionGui(UnitDefinitionGui unitDefinitionGui, int relatedCreatableUnitsIndex)
    {
        if (creatableUnits[relatedCreatableUnitsIndex].remainCoolTime != 0f)
        {
            Debug.Log("Still cooling.");
        }
        else if (currentCost < creatableUnits[relatedCreatableUnitsIndex].cost)
        {
            Debug.Log("Not enough cost.");
        }
        else
        {
            GameObject unitGo = Instantiate <GameObject>(creatableUnits[relatedCreatableUnitsIndex].prefab, gameStartPosition.transform.position, Quaternion.identity);
            unitGo.name = "Unit" + unitSeqNum++;
            MyBotAi myBotAi = unitGo.GetComponent <MyBotAi>();
            myBotAi.destroyOperationTarget = enemyBarrack;

            currentCost -= creatableUnits[relatedCreatableUnitsIndex].cost;
            creatableUnits[relatedCreatableUnitsIndex].remainCoolTime = creatableUnits[relatedCreatableUnitsIndex].coolTime;

            UpdateGuisAboutCost();

            StartCoroutine(CoolTimeReductionCoroutine(relatedCreatableUnitsIndex));
            unitDefinitionGui.StartCoolTimeDisplayUpdate();
        }
    }
    public void Initialize(int numOfItem)
    {
        foreach (var unitDefGui in unitDefinitionGuis)
        {
            Destroy(unitDefGui.gameObject);
        }
        unitDefinitionGuis.Clear();

        for (int i = 0; i < numOfItem; i++)
        {
            GameObject        unitDefGuiGo  = Instantiate <GameObject>(unitDefinitionGuiPrefab, scrollViewContent);
            RectTransform     rectTransform = unitDefGuiGo.GetComponent <RectTransform>();
            UnitDefinitionGui unitDefGui    = unitDefGuiGo.GetComponent <UnitDefinitionGui>();

            //Positioning
            rectTransform.anchoredPosition = new Vector2(rectTransform.sizeDelta.x * i, 0);

            unitDefinitionGuis.Add(unitDefGui);
        }

        gameObject.SetActive(true);
    }
 void UnitDefinitionGui.IGameRule.OnClick(UnitDefinitionGui unitDefinitionGui)
 {
     gameMode.OnClickUnitDefinitionGui(unitDefinitionGui, creatableUnitIndex);
 }
 float UnitDefinitionGui.IGameRule.GetRemainCoolTime(UnitDefinitionGui unitDefinitionGui)
 {
     return(gameMode.creatableUnits[creatableUnitIndex].remainCoolTime);
 }