hch
5 天以前 18fe79ffe26f3591c322701001a73d4270e9d931
Main/System/InternalAffairs/GoldRushWorkCell.cs
@@ -6,12 +6,164 @@
//淘金中信息列表显示
public class GoldRushWorkCell : CellView
{
    [SerializeField] Transform _cell;
    [SerializeField] ItemCell itemCell;
    [SerializeField] Text nameText;
    [SerializeField] Text timeText;
    [SerializeField] Slider slider;
    [SerializeField] UIHeroController[] heroModels;
    [SerializeField] CountControler countControler;
    [SerializeField] Button awardBtn;
    GoldRushItemConfig config;
    int campID;
    //派遣中的队列 + 完成的队列,动态变化的
    //ID组成
    // 派遣中类型1*100000 + campid*100 + 0
    // 完成类型2*100000 + goldid*100 + 索引
    public void Display(int missionID)
    {
        if (missionID == -1)
        {
            _cell.SetActive(false);
            return;
        }
        _cell.SetActive(true);
        int type = missionID / 100000;
        int targetID = missionID / 100 % 1000;
        int index = missionID % 100;
        campID = 0;
        int goldID = targetID;
        if (type == 1)
        {
            campID = targetID;
            goldID = GoldRushManager.Instance.GetCampGoldID(campID);
        }
        if (goldID == 0)
        {
            this.SetActive(false);
            return;
        }
        config = GoldRushItemConfig.Get(goldID);
        int itemID = config.ItemID;
        itemCell.Init(new ItemCellModel(itemID, false, config.ItemCount));
        itemCell.button.AddListener(()=>
        {
            ItemTipUtility.Show(itemID);
        });
        nameText.text = GoldRushManager.Instance.GetCampItemName(config);
        var endTime = GoldRushManager.Instance.GetCampEndTime(campID);
        if (type == 1)
        {
            if (endTime != 0)
            {
                timeText.text = TimeUtility.SecondsToMS(endTime - TimeUtility.AllSeconds);
                //按原总时长当进度条
                slider.value = (config.NeedSeconds - (endTime - TimeUtility.AllSeconds)) / (float)config.NeedSeconds;
            }
            countControler.SetActive(true);//此处调整+/-会实时发包
            countControler.Init(ChangeWorkerCount, config.WorkerMax, GoldRushManager.Instance.GetCampWorkerCnt(campID), AddWorker, DecWorker);
            awardBtn.SetActive(false);
            var workCnt = GoldRushManager.Instance.GetCampWorkerCnt(campID);
            int skinCnt = GoldRushManager.Instance.skinIDs.Count;
            for (int i = 0; i < heroModels.Length; i++)
            {
                if (i < workCnt)
                {
                    heroModels[i].SetActive(true);
                    var skinID = GoldRushManager.Instance.skinIDs[(goldID % skinCnt + i) % skinCnt];
                    heroModels[i].Create(skinID, 0.4f);
                }
                else
                {
                    heroModels[i].SetActive(false);
                }
            }
        }
        else if (type == 2)
        {
            countControler.SetActive(false);
            awardBtn.SetActive(true);
            timeText.text = Language.Get("L1036");
            slider.value = slider.maxValue;
            awardBtn.AddListener(() =>
            {
                GoldRushManager.Instance.SendGoldRushWarehouseAward(index, 0);
            });
        }
    }
    void ChangeWorkerCount(int count)
    {
        //重新调整监工
        AssignWorker(count);
    }
    bool AddWorker(int count)
    {
        if (count >= config.WorkerMax)
        {
            return false;
        }
        //可派遣的监工: 空闲监工数+当前监工数
        if (count + 1 > GoldRushManager.Instance.GetEmptyWorkerCount() + GoldRushManager.Instance.GetCampWorkerCnt(campID))
        {
            SysNotifyMgr.Instance.ShowTip("GoldRush2");
            return false;
        }
        return true;
    }
    bool DecWorker(int count)
    {
        if (count <= 1)
        {
            ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"),
            Language.Get("GoldRush38"), (bool isOK) =>
                {
                    if (isOK)
                    {
                        //撤回监工
                        GoldRushManager.Instance.SendGoldRushOP(3, campID, 0);
                    }
                });
            return false;
        }
        return true;
    }
    void AssignWorker(int workerCount)
    {
        if (workerCount == 0)
        {
            return;
        }
        if (workerCount > config.WorkerMax)
        {
            return;
        }
        if (workerCount == GoldRushManager.Instance.GetCampWorkerCnt(campID))
        {
            return;
        }
        GoldRushManager.Instance.SendGoldRushOP(2, campID, workerCount);
        SysNotifyMgr.Instance.ShowTip("GoldRush1");
    }
}