Files
JJBB/Assets/Project/Script/GUI/CaptainWelfare/CaptainWelfareRoot.cs
2024-08-23 15:49:34 +08:00

507 lines
16 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using GCGame.Table;
using Module.Log;
public class CaptainWelfareRoot : MonoBehaviour {
public static CaptainWelfareRoot Instance;
private void Awake()
{
Instance = this;
}
private void OnDestroy()
{
Instance = null;
}
public UIContainerBase _missionListContainer;
public UIContainerBase _rewItemContainer;
public UIContainerBase _valRewItemContainer;
public Slider _captainerLevelSlider;
public Text _curLevelExpValText;
public Slider _weekProgressSlider;
public Text _curLevelTypeDesc;
public GameObject _mask;
public Text _costValText;
public Image _captainIcon;
//周奖励
public GameObject _weekRewItemPrefab;
public RectTransform _weekSliderBGRect;
//刮刮乐
public ScratchTicket _scratchRawImage;
public Text _curVal;
public Transform _captainWelfareWeekRewItemParant;
//特效
public GameObject _particalPanel;
private ParticleSystem _particle;
private int _costVal = -1; //刮一次需要的值
public GameObject captainWelfareRewPreviewPanel;
private void OnEnable()
{
_scratchRawImage.onCleanRatioUpdate += OnCleanDataChanged;
InitPanel();
//ResetScratchRawImage(); //遮挡初始化
}
private void OnDisable()
{
_scratchRawImage.onCleanRatioUpdate -= OnCleanDataChanged;
}
private void InitPanel()
{
//任务ListItem
if (_animItemList.Count <= 0 ||
_teamLeaderTabIdList.Count <= 0 ||
_animItemList.Count < _teamLeaderTabIdList.Count)
StartCoroutine(InitAnimItem());
else
ReqInfo();
InitWeekRewContainer();
}
private void ResetScratchRawImage()
{
_scratchRawImage.Reset();
}
private List<CaptainWelfareRewItemInfo> _rewDataIdList = new List<CaptainWelfareRewItemInfo>();
private Dictionary<int, int> _rewIdAndCountDic = new Dictionary<int, int>();
public struct CaptainWelfareRewItemInfo
{
public int _itemId;
public int _itemCout;
public CaptainWelfareRewItemInfo(int itemId, int itemCount)
{
_itemId = itemId;
_itemCout = itemCount;
}
}
private void InitWeekRewContainer()
{
if(_rewDataIdList.Count == 0)
{
foreach (var info in TableManager.GetTeamLeaderAwardItem().Values)
{
CaptainWelfareRewItemInfo _itemInfo = new CaptainWelfareRewItemInfo(info.AwardSubId, info.AwardCount);
_rewDataIdList.Add(_itemInfo);
}
}
if(_rewDataIdList.Count > 0)
_rewItemContainer.InitContentItem(_rewDataIdList);
}
private void ReqInfo()
{
ReqGetTeamLeaderAwardInfo req = new ReqGetTeamLeaderAwardInfo();
req.flag = 1;
req.SendMsg();
}
private List<int> _teamLeaderTabIdList = new List<int>();
IEnumerator InitAnimItem()
{
yield return new WaitForEndOfFrame();
_teamLeaderTabIdList.Clear();
foreach (var info in TableManager.GetTeamLeaderAwardActivity().Values)
{
_teamLeaderTabIdList.Add(info.GetId());
}
if (_teamLeaderTabIdList.Count > 0)
_missionListContainer.InitContentItem(_teamLeaderTabIdList);
ReqInfo();
yield break;
}
private List<CaptainWelfareAimItem> _animItemList = new List<CaptainWelfareAimItem>();
private int _CurSelectMissionType = -1;
public void OnAimItemClick(int missionType)
{
_CurSelectMissionType = missionType;
ShowMarkIcon();
}
public void ShowMarkIcon()
{
for(int index = 0; index < _animItemList.Count; index++)
{
_animItemList[index].ShowMarkIcon(_animItemList[index].MissionType == _CurSelectMissionType);
}
}
public RespGetTeamLeaderAwardInfo _packet = null;
private bool _canRefresh = false;
public void OnPacket(RespGetTeamLeaderAwardInfo packet)
{
_packet = packet;
RefreshMissionItemListState(); //刷新预设状态
InitSliderValAndDesc(); //刷新Slider
RefreshWeekRewState(); //周进度奖励
InitScratchState();
InitMaskState(); //队长值不够不能刮
InitCurVal();
StartCoroutine(CreateValRew());
}
private void InitCurVal()
{
_curVal.text = _packet.point.ToString();
}
private void InitMaskState()
{
var teamLeaderAwardLevelTab = TableManager.GetTeamLeaderAwardLevelByID(_packet.level, 0);
if(teamLeaderAwardLevelTab == null)
{
LogModule.ErrorLog("teamLeaderAwardLevelTab is null, level : " + _packet.level);
return;
}
//设置队长图标
LoadAssetBundle.Instance.SetImageSprite(_captainIcon, teamLeaderAwardLevelTab.IconPath);
_costVal = teamLeaderAwardLevelTab.PointCost;
_costValText.text = teamLeaderAwardLevelTab.PointCost.ToString();
_mask.SetActive(_packet.point < _costVal);
}
//创建活力奖励
IEnumerator CreateValRew()
{
yield return new WaitForEndOfFrame();
List<CaptainWelfareRewItemInfo> _rewIdList = new List<CaptainWelfareRewItemInfo>();
for (int index = 0; index < _packet.awardList.Count; index++)
{
_rewIdList.Add(new CaptainWelfareRewItemInfo(_packet.awardList[index].subId, _packet.awardList[index].count));
}
if (_rewIdList.Count > 0)
_valRewItemContainer.InitContentItem(_rewIdList);
yield break;
}
private void InitScratchState()
{
if (_scratchRawImage.gameObject.activeInHierarchy)
//没有奖励 清除区域为0
_canRefresh = _packet.awardList.Count <= 0 && _scratchRawImage.cleanRatio == 0 && _packet.exp_week >= _costVal;
else
_canRefresh = true;
}
public void OnCleanDataChanged(float _cleanData)
{
if(_cleanData > 0 && _packet.awardList.Count == 0) //生成一次奖励
{
ReqCreateTeamLeaderAward req = new ReqCreateTeamLeaderAward();
req.flag = 1;
req.SendMsg();
}
if (!_canRefresh)
{
InitScratchState(); //刷新当前能否刷新奖励的状态
}
if (_cleanData >= 0.5f)
{
_scratchRawImage.gameObject.SetActive(false);
InitScratchState();
//播放特效
if (_particle == null)
_particle = _particalPanel.GetComponentInChildren<ParticleSystem>();
if (_particle != null)
{
_particle.Stop();
_particle.Play();
}
//申请领奖
ReqCetTeamLeaderAward req = new ReqCetTeamLeaderAward();
req.flag = 1;
req.SendMsg();
}
}
private Dictionary<int, int> _weekRewStateDic;
private void RefreshWeekRewState()
{
if(_isInitWeekRewOver)
{
for(int index = 0; index < _packet.awardWeek.Count; index++)
{
for (int rewIndex = 0; rewIndex < _weekRewItemList.Count; rewIndex++)
{
if(_weekRewItemList[rewIndex]._curItemIndex == _packet.awardWeek[index].index)
{
_weekRewItemList[rewIndex].RefreshItemState(_packet.awardWeek[index].state);
}
}
}
}else
{
if (_weekRewStateDic == null)
_weekRewStateDic = new Dictionary<int, int>();
for(int index = 0; index < _packet.awardWeek.Count; index++)
{
if(_weekRewStateDic.ContainsKey(_packet.awardWeek[index].index))
{
_weekRewStateDic[_packet.awardWeek[index].index] = _packet.awardWeek[index].state;
}
else
{
_weekRewStateDic.Add(_packet.awardWeek[index].index, _packet.awardWeek[index].state);
}
}
}
}
private enum CAPTAINLEVELTYPE
{
LEVEL_0 = 1, //小白 对应ID是1
LEVEL_1,
LEVEL_2,
LEVEL_3,
LEVEL_4,
LEVEL_5,
}
//等级 经验
private Dictionary<int, int> _captainLevelExpDic = new Dictionary<int, int>();
private void InitSliderValAndDesc()
{
_curLevelTypeDesc.text = GetCurCaptainLevelDesc();
InitCurLevelExpAndVal();
InitWeekSliderVal();
}
private int _weekMaxExp = -1;
private void InitWeekSliderVal()
{
if(_weekMaxExp == -1)
{
foreach(var weekInfo in TableManager.GetTeamLeaderAwardWeek().Values)
{
if (weekInfo.WeekNeedExp > _weekMaxExp)
_weekMaxExp = weekInfo.WeekNeedExp;
}
}
//初始化进度值
_weekProgressSlider.value = Mathf.Clamp((float)_packet.exp_week / (float)_weekMaxExp, 0, 1);
//计算奖励应该出现的位置
StartCoroutine(CreateWeekRewAndSetPos());
}
private bool _isInitWeekRewOver = false;
private List<CaptainWelfareWeekRewItem> _weekRewItemList = new List<CaptainWelfareWeekRewItem>();
IEnumerator CreateWeekRewAndSetPos()
{
yield return new WaitForEndOfFrame();
if (_weekRewItemList.Count < TableManager.GetTeamLeaderAwardWeek().Count)
{
var _startIndex = _weekRewItemList.Count;
for (int index = _startIndex; _weekRewItemList.Count < TableManager.GetTeamLeaderAwardWeek().Count; index++)
{
var obj = GameObject.Instantiate(_weekRewItemPrefab);
obj.transform.SetParent(_captainWelfareWeekRewItemParant);
obj.transform.localScale = Vector3.one;
obj.transform.localRotation = Quaternion.Euler(Vector3.zero);
var teamWeekAwardTab = TableManager.GetTeamLeaderAwardWeekByID(index + 1, 0);
if(teamWeekAwardTab == null)
{
LogModule.ErrorLog("teamWeekAwardTab is null, id : " + index + 1);
yield break;
}
//pos cueExp / maxExp * rect.width
obj.transform.localPosition = new Vector3(
Mathf.Clamp((float)teamWeekAwardTab.WeekNeedExp / (float)_weekMaxExp * _weekSliderBGRect.rect.width, 0, _weekSliderBGRect.rect.width), 0, 0);
obj.GetComponent<CaptainWelfareWeekRewItem>().InitItem(index + 1);
_weekRewItemList.Add(obj.GetComponent<CaptainWelfareWeekRewItem>());
}
_isInitWeekRewOver = true;
}
if(_weekRewStateDic != null && _weekRewStateDic.Count > 0)
{
for (int index = 0; index < _packet.awardWeek.Count; index++)
{
for (int rewIndex = 0; rewIndex < _weekRewItemList.Count; rewIndex++)
{
if (_weekRewItemList[rewIndex]._curItemIndex == _packet.awardWeek[index].index)
{
_weekRewItemList[rewIndex].RefreshItemState(_packet.awardWeek[index].state);
}
}
}
}
yield break;
}
public void InitCurLevelExpAndVal()
{
var _nextLevel = -1; //初始化 后面判断用
_nextLevel = Mathf.Clamp(_packet.level + 1, 2, _maxLevel); //ID从1开始的话下个等级最低是2默认的是1
var _curLevelTotalExp = 0;
_curLevelTotalExp = _captainLevelExpDic[_nextLevel] - _captainLevelExpDic[_packet.level];
_captainerLevelSlider.value = Mathf.Clamp((float)_packet.exp / (float)_captainLevelExpDic[_nextLevel], 0, 1);
_curLevelExpValText.text = Mathf.Clamp(_packet.exp, 0, _captainLevelExpDic[_nextLevel]) + "/" + _captainLevelExpDic[_nextLevel];
}
public string GetCurCaptainLevelDesc()
{
if (_captainLevelExpDic.Count <= 0)
GetCaptainLevelExpDic();
Tab_TeamLeaderAwardLevel teamLevelTab = null;
if (_packet.exp == 0)
{
teamLevelTab = TableManager.GetTeamLeaderAwardLevelByID(1, 0); //最小
if (teamLevelTab != null)
return teamLevelTab.Name;
}
else
{
if(_packet.level == _maxLevel)
{
teamLevelTab = TableManager.GetTeamLeaderAwardLevelByID(_maxLevel, 0); //最大
if (teamLevelTab != null)
return teamLevelTab.Name;
}
foreach (var exp in _captainLevelExpDic)
{
if (_packet.exp < exp.Value)
{
teamLevelTab = TableManager.GetTeamLeaderAwardLevelByID(exp.Key - 1, 0);
if (teamLevelTab != null)
return teamLevelTab.Name;
}
}
}
return "WRONG";
}
private int _maxLevel = -1;
private int _maxExp = -1;
private void GetCaptainLevelExpDic()
{
var teamTab = TableManager.GetTeamLeaderAwardLevel().Values;
foreach(var info in teamTab)
{
if (!_captainLevelExpDic.ContainsKey(info.Level))
_captainLevelExpDic.Add(info.Level, info.Exp);
if (info.Level >= _maxLevel)
_maxLevel = info.Level;
if (info.Exp >= _maxExp)
_maxExp = info.Exp;
}
}
private void RefreshMissionItemListState()
{
//刷新当前次数
if (_packet.activityList.Count == 0)
{
List<int> _missiontypeList = new List<int>();
var missionDic = TableManager.GetTeamLeaderAwardActivity();
foreach (var mission in missionDic)
{
_missiontypeList.Add(mission.Key);
}
_missionListContainer.ForeachActiveItem<CaptainWelfareAimItem>((item) => {
for (int index = 0; index < _missiontypeList.Count; index++)
{
item.RefreshItemState(0);
}
});
}
else
{
_missionListContainer.ForeachActiveItem<CaptainWelfareAimItem>((item) => {
for (int index = 0; index < _packet.activityList.Count; index++)
{
if(item.MissionType == _packet.activityList[index].type)
{
item.RefreshItemState(_packet.activityList[index].count);
}
}
});
}
}
public void OnRefreshRewBtnClick()
{
if(!_canRefresh)
{
GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{68002}")); //未完成当前刮奖
return;
}
_scratchRawImage.gameObject.SetActive(true);
_scratchRawImage.Reset();
ReqCreateTeamLeaderAward req = new ReqCreateTeamLeaderAward();
req.flag = 1;
req.SendMsg();
}
public void OnHelpBtnClick()
{
MessageHelpLogic.ShowHelpMessage(41);
}
public void OnMaskBtnClick()
{
GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{68001}"));
return;
}
public void OnCloseBtnClick()
{
UIManager.CloseUI(UIInfo.CaptainWelfare);
}
public void OnCaptainNameClick()
{
MessageHelpLogic.ShowHelpMessage(42);
}
public void OnWeekItemClick(int weekId, int state)
{
captainWelfareRewPreviewPanel.SetActive(true);
if (CaptainWelfareRewPreviewCtr.Instance)
CaptainWelfareRewPreviewCtr.Instance.InitWelfareRewPreview(weekId, state);
}
}