You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
165 lines
4.6 KiB
165 lines
4.6 KiB
using System;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
public partial class DispatchView : View
|
|
{
|
|
[SerializeField] GameObject mapPanel;
|
|
[SerializeField] ExtendText levelFormatText;
|
|
|
|
[SerializeField] DispatchSettingView settingView;
|
|
|
|
[SerializeField] AreaUI[] areaUIs;
|
|
|
|
public override void Show()
|
|
{
|
|
GameUIMgr.SSetMainUiOn(false);
|
|
|
|
ResetPosition();
|
|
mapPanel?.SetActive(true);
|
|
viewState = ViewState.Shown;
|
|
|
|
RefreshMap();
|
|
|
|
LocalizationText.OnLanguageChange += HandleLangChange;
|
|
}
|
|
|
|
private void HandleLangChange()
|
|
{
|
|
levelFormatText?.SetText(FormatString.StringFormat("[dispatch] Lv. {0}", DispatchDataGroup.Instance.DispatchData.DispatchLevel));
|
|
}
|
|
|
|
public override void Hide()
|
|
{
|
|
LocalizationText.OnLanguageChange -= HandleLangChange;
|
|
|
|
viewState = ViewState.Hidden;
|
|
mapPanel?.SetActive(false);
|
|
|
|
GameUIMgr.SSetMainUiOn(true);
|
|
}
|
|
|
|
private void LateUpdate()
|
|
{
|
|
if (viewState != ViewState.Shown) return;
|
|
|
|
for (int i = 0; i < areaUIs.Length; ++i)
|
|
{
|
|
areaUIs[i].Update();
|
|
}
|
|
}
|
|
|
|
private void RefreshMap()
|
|
{
|
|
for(int i = 0; i < areaUIs.Length; ++i)
|
|
{
|
|
var targetUI = areaUIs[i];
|
|
|
|
if(DispatchDataGroup.Instance.DispatchData.TryGetArea(targetUI.areaType, out var area))
|
|
targetUI.SetArea(area, OnClickMissionButton);
|
|
}
|
|
}
|
|
|
|
private void OnClickMissionButton(AreaUI clickedArea)
|
|
{
|
|
if (settingView is null) return;
|
|
|
|
var now = TimeUtils.Now();
|
|
|
|
if(clickedArea.area.Mission.IsAvailableGetReward(now))
|
|
{
|
|
clickedArea.area.Mission.GetReward();
|
|
clickedArea.area.StartRefreshTime(now);
|
|
}
|
|
else if(!clickedArea.area.IsInRefreshTime(now))
|
|
{
|
|
settingView.SetArea(clickedArea.area);
|
|
settingView.Show();
|
|
}
|
|
else
|
|
{
|
|
GameUIMgr.SOpenToast(LocalizationText.GetText("try_and_failed_1"));
|
|
}
|
|
}
|
|
}
|
|
|
|
public partial class DispatchView : View
|
|
{
|
|
[Serializable]
|
|
class AreaUI
|
|
{
|
|
public AreaType areaType;
|
|
public Button missionBtn;
|
|
public ExtendImage missionIconImage;
|
|
public DispatchersController dispatcherCtrl;
|
|
public RectTransform[] missionPositions;
|
|
public DispatchData.Area area { get; private set; }
|
|
|
|
bool prevCanGetRewardState;
|
|
bool prevDispatchingState;
|
|
|
|
public void SetArea(DispatchData.Area area, Action<AreaUI> onClickMissionBtn)
|
|
{
|
|
this.area = area;
|
|
|
|
missionBtn.onClick.RemoveAllListeners();
|
|
missionBtn.onClick.AddListener(() => onClickMissionBtn?.Invoke(this));
|
|
|
|
if(area.MissionPositionIndex >= 0 && area.MissionPositionIndex < missionPositions.Length)
|
|
{
|
|
missionBtn.transform.position = missionPositions[area.MissionPositionIndex].position;
|
|
missionBtn.gameObject.SetActive(true);
|
|
}
|
|
else
|
|
{
|
|
missionBtn.transform.position = missionPositions[missionPositions.Length - 1].position;
|
|
missionBtn.gameObject.SetActive(true);
|
|
}
|
|
|
|
prevCanGetRewardState = area.Mission.IsAvailableGetReward(TimeUtils.Now());
|
|
SetMissionIconImage(prevCanGetRewardState);
|
|
|
|
prevDispatchingState = area.Mission.InProgress(TimeUtils.Now());
|
|
SetDispatchersController(prevDispatchingState);
|
|
}
|
|
|
|
public void Update()
|
|
{
|
|
if(area is null) return;
|
|
|
|
var now = TimeUtils.Now();
|
|
|
|
bool canGetReward = area.Mission.IsAvailableGetReward(now);
|
|
|
|
if (prevCanGetRewardState != canGetReward)
|
|
{
|
|
SetMissionIconImage(canGetReward);
|
|
prevCanGetRewardState = canGetReward;
|
|
}
|
|
|
|
bool dispatching = area.Mission.InProgress(now);
|
|
|
|
if (prevDispatchingState != dispatching)
|
|
{
|
|
SetDispatchersController(dispatching);
|
|
prevDispatchingState = dispatching;
|
|
}
|
|
}
|
|
|
|
private void SetMissionIconImage(bool isCompleted)
|
|
{
|
|
if (isCompleted)
|
|
missionIconImage?.SetImageInAtlasAsync("atlasMateSD", "0");
|
|
else
|
|
missionIconImage?.SetImageInAtlasAsync("atlasMateSD", "1");
|
|
}
|
|
|
|
private void SetDispatchersController(bool activate)
|
|
{
|
|
dispatcherCtrl?.gameObject.SetActive(activate);
|
|
|
|
if (activate)
|
|
dispatcherCtrl?.StartDispatch(missionBtn.transform as RectTransform, area);
|
|
}
|
|
}
|
|
}
|