using System; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.UI; namespace vnxbqy.UI { //福地-管理 public class BlessedLandManageWin : Window { [SerializeField] ScrollerController itemScroller; [SerializeField] Slider slider; [SerializeField] RectTransform sliderRectTransform; [SerializeField] ButtonEx btnClose; [SerializeField] ButtonEx btnEmploy; [SerializeField] ButtonEx btnSeek; [SerializeField] ImageEx imgItem; [SerializeField] List imgWokerStateList; [SerializeField] TextEx txtFreeWorkerCount; [SerializeField] TextEx txtAllWorkerCount; [SerializeField] TextEx txtNeedAndHaveCount; [SerializeField] TextEx txtNoCollect; [SerializeField] TextEx txtMaxWorker; BlessedLandModel blessedLandModel { get { return ModelCenter.Instance.GetModel(); } } PackModel packModel { get { return ModelCenter.Instance.GetModelEx(); } } protected override void BindController() { } private void OnUpdateNewAreaData(List list) { Display(); CreateScroller(); } private void OnUpdateMineAreaData() { Display(); CreateScroller(); } protected override void AddListeners() { btnClose.SetListener(() => { WindowCenter.Instance.Close(); }); btnEmploy.SetListener(() => { //拥有的工人数大于表中配的最大数量 if (blessedLandModel.WorkerCount + 1 > blessedLandModel.hiredWorkerItemQuantityArr.Length) return; LimitedTimeLuxuryGiftModel.Instance.IsItemIdShow(28, blessedLandModel.hiredWorkerItemID, blessedLandModel.hiredWorkerItemQuantityArr[Mathf.Min(blessedLandModel.WorkerCount, blessedLandModel.hiredWorkerItemQuantityArr.Length - 1)], 1, 0); //雇佣工人所需的资源不够 if (packModel.GetItemCountByID(PackType.Item, blessedLandModel.hiredWorkerItemID) < blessedLandModel.hiredWorkerItemQuantityArr[blessedLandModel.WorkerCount]) { SysNotifyMgr.Instance.ShowTip("NotEnoughMaterial"); return; } blessedLandModel.SendCB032Pack(); }); btnSeek.SetListener(() => { blessedLandModel.SendCB033Pack(3); blessedLandModel.SendCB033Pack(2); }); } protected override void OnPreOpen() { itemScroller.OnRefreshCell += OnItemCellScrollerRefreshCell; blessedLandModel.UpdateNewAreaData += OnUpdateNewAreaData; blessedLandModel.UpdateMineAreaData += OnUpdateMineAreaData; blessedLandModel.UpdateFindAreaData += OnUpdateFindAreaData; blessedLandModel.UpdateFellowAndSurroundAreaData += OnUpdateFellowAndSurroundAreaData; DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize; Display(); } private void OnUpdateFindAreaData() { WindowJumpMgr.Instance.WindowJumpToEx("BlessedLandOtherWin"); } void Display() { PackModel packModel = ModelCenter.Instance.GetModel(); int allWorkerCount = blessedLandModel.WorkerCount; int freeWorkerCount = allWorkerCount - blessedLandModel.GetWorkingCount(); string iconKey = ItemConfig.Get(blessedLandModel.hiredWorkerItemID).IconKey; //计算文字在进度条的位置 float leftX = sliderRectTransform.anchoredPosition.x; float rightX = sliderRectTransform.sizeDelta.x; float gridSpacing = (float)Math.Round(rightX / 100, 1); int totalEnergy = blessedLandModel.GetTotalEnergy(); //元素的显隐 txtNoCollect.SetActive(blessedLandModel.GetWorkingCount() == 0); btnSeek.SetActive(blessedLandModel.GetWorkingCount() == 0); btnEmploy.SetActive(allWorkerCount < blessedLandModel.hiredWorkerItemQuantityArr.Length); txtMaxWorker.SetActive(allWorkerCount >= blessedLandModel.hiredWorkerItemQuantityArr.Length); txtNeedAndHaveCount.SetActive(allWorkerCount < blessedLandModel.hiredWorkerItemQuantityArr.Length); imgItem.SetActive(allWorkerCount < blessedLandModel.hiredWorkerItemQuantityArr.Length); //元素的变更 imgItem.SetSprite(IconConfig.Get(iconKey).id); txtFreeWorkerCount.text = freeWorkerCount.ToString(); txtAllWorkerCount.text = allWorkerCount.ToString(); int haveCount = packModel.GetItemCountByID(PackType.Item, blessedLandModel.hiredWorkerItemID); int needCount = allWorkerCount > blessedLandModel.hiredWorkerItemQuantityArr.Length - 1 ? blessedLandModel.hiredWorkerItemQuantityArr.Length - 1 : blessedLandModel.hiredWorkerItemQuantityArr[allWorkerCount]; txtNeedAndHaveCount.text = StringUtility.Contact(haveCount, " / ", needCount); txtNeedAndHaveCount.colorType = haveCount >= needCount ? TextColType.DarkGreen : TextColType.Red; int nowEnergy = 0; for (int i = 0; i < imgWokerStateList.Count; i++) { nowEnergy += blessedLandModel.workerFatigueStaminaArr[i]; float nowX = (float)nowEnergy / (float)totalEnergy * 100 * gridSpacing; imgWokerStateList[i].anchoredPosition = new Vector2(nowX, imgWokerStateList[i].anchoredPosition.y); } slider.value = 100 - (float)blessedLandModel.EnergyUsed / (float)totalEnergy * 100; } protected override void OnAfterOpen() { CreateScroller(); } void CreateScroller() { itemScroller.Refresh(); List keyList = blessedLandModel.newAreaDataDict.Keys.ToList(); for (int i = 0; i < keyList.Count; i++) { var newAreaDataDict = blessedLandModel.newAreaDataDict[keyList[i]]; if (newAreaDataDict.PlayerID == blessedLandModel.myPlayerId) { List keyItemsList = newAreaDataDict.MineItems.Keys.ToList(); for (int j = 0; j < keyItemsList.Count; j++) { var mineItems = newAreaDataDict.MineItems[keyItemsList[j]]; if (mineItems.WorkerCount > 0) { int combinedValue = (int)blessedLandModel.myPlayerId * 100; combinedValue += mineItems.Index; itemScroller.AddCell(ScrollerDataType.Header, combinedValue); } } } else { List keyItemsList = newAreaDataDict.MineItems.Keys.ToList(); for (int j = 0; j < keyItemsList.Count; j++) { var mineItems = newAreaDataDict.MineItems[keyItemsList[j]]; if (mineItems.RobPlayerID == blessedLandModel.myPlayerId) { int combinedValue = (int)newAreaDataDict.PlayerID * 100; combinedValue += mineItems.Index; itemScroller.AddCell(ScrollerDataType.Header, combinedValue); } } } } itemScroller.Restart(); } protected override void OnAfterClose() { } protected override void OnPreClose() { itemScroller.OnRefreshCell -= OnItemCellScrollerRefreshCell; blessedLandModel.UpdateNewAreaData -= OnUpdateNewAreaData; blessedLandModel.UpdateMineAreaData -= OnUpdateMineAreaData; blessedLandModel.UpdateFindAreaData -= OnUpdateFindAreaData; blessedLandModel.UpdateFellowAndSurroundAreaData -= OnUpdateFellowAndSurroundAreaData; DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitialize; } private void OnBeforePlayerDataInitialize() { if (WindowCenter.Instance.IsOpen()) { WindowJumpMgr.Instance.ClearJumpData(); WindowCenter.Instance.CloseAll(); } } private void OnUpdateFellowAndSurroundAreaData() { WindowJumpMgr.Instance.WindowJumpToEx("BlessedLandSeekWin"); } private void OnItemCellScrollerRefreshCell(ScrollerDataType type, CellView cell) { var _cell = cell as BlessedLandManageCell; _cell.Display(_cell.index); } } }