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

362 lines
12 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 Games.Mission;
using GCGame.Table;
using Module.Log;
using UnityEngine;
using UnityEngine.UI;
public class FunctionPreviewCtr : MonoBehaviour
{
private const string effectName = "effect";
public static FunctionPreviewCtr Instance;
private int _LastShowFuncViewId = -1;
private int curNeedShowFuncViewId = -1;
private int curViewId = -1;
private int initFuncViewId = -1;
private int lastCompleteMainMissionId = -1;
private readonly Dictionary<int, MissionInterval> missionIntervalDic = new Dictionary<int, MissionInterval>();
private void Awake()
{
Instance = this;
modelCamera.isPreview = true;
GetFuncMissionIntervalDic();
}
private void OnEnable()
{
OptionShowPanel();
}
private void OnDestroy()
{
Instance = null;
}
public void GetFuncMissionIntervalDic()
{
var tabDic = TableManager.GetFunctionPreview().Values;
foreach (var info in tabDic)
if (!missionIntervalDic.ContainsKey(info.Id))
{
var missionInterval = new MissionInterval(info.OpenFuncMissionId,
info.CloseFuncMissionId, info.OpenNeedLevel,
info.CloseNeedLevel);
missionIntervalDic.Add(info.Id, missionInterval);
}
}
public void OnMissionComplteOver(int missionId = -1, int nextMissionID = -1)
{
if (missionId != -1) SetLastCompleteMainMissionId(missionId);
var missionBase = TableManager.GetMissionBaseByID(missionId, 0);
if(missionBase != null
&& (missionBase.MissionType != (int)MISSIONTYPE.MISSION_DAILY || missionBase.MissionType != (int)MISSIONTYPE.MISSION_BRANCH))
{
if (missionId != -1)
{
initFuncViewId = curNeedShowFuncViewId;
var viewTab = TableManager.GetFunctionPreviewByID(initFuncViewId, 0);
if (viewTab != null && missionId == viewTab.CloseFuncMissionId && viewTab.IsNeedPopActiveFunc != -1)
{
GuideLogic._isShowCompleteMissionGuide = true;
UIManager.ShowUI(UIInfo.PopAdvanceTip, delegate (bool bSucess, object param)
{
if (bSucess)
{
if (PopAdvanceTipCtr.Instance)
PopAdvanceTipCtr.Instance.InitFuncpreviewPanel(initFuncViewId, missionId, nextMissionID);
}
});
}
else
{
if (nextMissionID >= 0) //0为初始任务
{
var missionNext = TableManager.GetMissionNextByID(nextMissionID, 0);
if (missionNext != null)
{
nextMissionID = missionNext.GetMissionIDbyIndex(0);
if (GuideLogic.Instance())
{
GuideLogic.Instance().NextMissionID = nextMissionID;
GuideLogic.OnMissionComplateStatic(missionId, missionNext.GetMissionIDbyIndex(0));
}
else
{
GameManager.gameManager.MissionManager.MissionPathFinder(nextMissionID);
}
}
}
else
{
if (GuideLogic.Instance())
GuideLogic.OnMissionComplateStatic(missionId, -1);
}
}
}
}
//获取需要显示的ViewTabId必须放在后面
GetNeedShowFuncViewId();
OptionShowPanel();
}
public void OnLevelChange()
{
if (lastCompleteMainMissionId <= 0) GetLastCompleteMainMissionId();
GetNeedShowFuncViewId();
OptionShowPanel();
}
public void SetLastCompleteMainMissionId(int missionId)
{
var missionBase = TableManager.GetMissionBaseByID(missionId, 0);
if (missionBase != null && missionBase.MissionType == (int) MISSIONTYPE.MISSION_MAIN)
lastCompleteMainMissionId = lastCompleteMainMissionId >= missionId ? lastCompleteMainMissionId : missionId;
}
public void GetLastCompleteMainMissionId()
{
if (lastCompleteMainMissionId != -1) // = -1证明已经获取了后面只用在完成任务的时候赋值就可以了
return;
var missionDic = TableManager.GetMissionBase().Values;
foreach (var info in missionDic)
if (info.MissionType == (int) MISSIONTYPE.MISSION_MAIN)
{
if (GameManager.gameManager.MissionManager.IsMissionHaveDone(info.Id))
lastCompleteMainMissionId = lastCompleteMainMissionId > info.Id
? lastCompleteMainMissionId
: info.Id;
else
break;
}
}
public void GetNeedShowFuncViewId()
{
curNeedShowFuncViewId = -1;
var playerLevel = GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level;
foreach (var info in missionIntervalDic)
if (info.Value.openMissionId != -1)
{
if (lastCompleteMainMissionId >= info.Value.openMissionId &&
lastCompleteMainMissionId < info.Value.closeMissionId)
{
curNeedShowFuncViewId = info.Key;
break;
}
}
else
{
if (info.Value.openNeedLevel != -1)
if (playerLevel >= info.Value.openNeedLevel && playerLevel < info.Value.closeNeedLevel)
{
curNeedShowFuncViewId = info.Key;
break;
}
}
}
//是否要关闭对应的UI或者打开对应的UI
public void OptionShowPanel()
{
if (curNeedShowFuncViewId == -1)
{
ShowPanel.SetActive(false);
return;
}
ShowPanel.SetActive(true);
ShowFunctionPreviewPanelById();
}
public void ShowFunctionPreviewPanelById()
{
//if (_LastShowFuncViewId == curNeedShowFuncViewId) return;
_LastShowFuncViewId = curNeedShowFuncViewId;
curViewId = curNeedShowFuncViewId;
var viewTab = TableManager.GetFunctionPreviewByID(curNeedShowFuncViewId, 0);
if (viewTab == null)
{
ShowPanel.SetActive(false);
return;
}
ShowPanel.SetActive(true);
if (!viewTab.ShowCharModelId.Equals("-1"))
InitThreeDPanel(viewTab);
else if (!viewTab.ShowIconPath.Equals("-1"))
InitTwoDPanel(viewTab);
else
InitBundlePathPanel(viewTab);
InitNameIconAndFuncDesc(viewTab);
}
public void InitNameIconAndFuncDesc(Tab_FunctionPreview viewTab)
{
LoadAssetBundle.Instance.SetImageSprite(nameIcon, viewTab.NameIconPath, LoadImageOver);
funcDesc.text = viewTab.OpenFuncDesc;
}
public void LoadImageOver(bool isSucess, GameObject obj)
{
if (isSucess) obj.GetComponent<Image>().SetNativeSize();
}
public void InitTwoDPanel(Tab_FunctionPreview viewTab)
{
twoDPanel.SetActive(true);
threeDPanel.SetActive(false);
bundlePathPanel.SetActive(false);
LoadAssetBundle.Instance.SetImageSprite(funIcon, viewTab.ShowIconPath);
funIcon.rectTransform.sizeDelta = new Vector2(float.Parse(viewTab.ShowRecSize.Split('|')[0]),
float.Parse(viewTab.ShowRecSize.Split('|')[1]));
}
public void InitThreeDPanel(Tab_FunctionPreview viewTab)
{
twoDPanel.SetActive(false);
threeDPanel.SetActive(true);
bundlePathPanel.SetActive(false);
//是否需要解析
var neeShowCharModelId = -1;
var modelIdStr = viewTab.ShowCharModelId;
var isStr = false;
for (var index = 0; index < modelIdStr.Length; index++)
if (modelIdStr[index].Equals('|'))
{
neeShowCharModelId =
int.Parse(modelIdStr.Split('|')[GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Profession]);
isStr = true;
break;
}
if (!isStr) neeShowCharModelId = int.Parse(viewTab.ShowCharModelId);
var charModel = TableManager.GetCharModelByID(neeShowCharModelId, 0);
if (charModel == null)
{
Debug.LogErrorFormat("CharModel is null :{0}", viewTab.ShowCharModelId);
return;
}
modelCamera.InitModelPath(charModel.ResPath, charModel, LoadAssetBundle.BUNDLE_PATH_MODEL, true,
delegate { modelCamera.gameObject.SetActive(true); });
}
public void InitBundlePathPanel(Tab_FunctionPreview viewTab)
{
twoDPanel.SetActive(false);
threeDPanel.SetActive(false);
bundlePathPanel.SetActive(true);
var bundlePath = TableManager.GetBundlePathByID(viewTab.ShowBundelPathId, 0);
if (bundlePath == null)
{
LogModule.ErrorLog("BundlePath is null");
return;
}
var pos = bundlePath.Pos.Split(';');
var landPos = new Vector3(float.Parse(pos[0]), float.Parse(pos[1]), float.Parse(pos[2]));
LoadAssetBundle.Instance.LoadGameObject(LoadAssetBundle.BUNDLE_PATH_EFFECT, bundlePath.Name,
delegate(string assetName, GameObject resObj, Hashtable hashParam)
{
if (resObj != null)
{
var ani = Instantiate(resObj);
ani.gameObject.name = effectName;
//寻找父节点下是否有effect
var oldObj = bundlePathIconParent.Find(effectName);
if (oldObj == null)
{
ani.transform.SetParent(bundlePathIconParent);
ani.transform.localPosition = landPos;
ani.transform.localScale = Vector3.one;
ani.transform.localRotation = Quaternion.Euler(Vector3.zero);
ani.GetComponent<RectTransform>().sizeDelta = new Vector2(
ani.GetComponent<RectTransform>().sizeDelta.x * bundlePath.Scale,
ani.GetComponent<RectTransform>().sizeDelta.y * bundlePath.Scale);
}
else
{
ani.transform.SetParent(bundlePathIconParent);
ani.transform.localPosition = landPos;
ani.transform.localScale = Vector3.one;
ani.transform.localRotation = oldObj.localRotation;
ani.GetComponent<RectTransform>().sizeDelta = new Vector2(
ani.GetComponent<RectTransform>().sizeDelta.x * bundlePath.Scale,
ani.GetComponent<RectTransform>().sizeDelta.y * bundlePath.Scale);
Destroy(oldObj.gameObject);
}
}
},
new Hashtable());
}
public void OnMaskClick()
{
if (curViewId == -1)
{
gameObject.SetActive(false);
return;
}
UIManager.ShowUI(UIInfo.FuncPreviewTip, delegate(bool bSucess, object param)
{
if (bSucess) FuncPreviewTipCtr.Instance.InitTips(curViewId);
});
}
public class MissionInterval
{
public int closeMissionId;
public int closeNeedLevel;
public int openMissionId;
public int openNeedLevel;
public MissionInterval(int _OpenMissionId, int _CloseMissionId, int _OpenNeedLevel, int _CloseNeedLevel)
{
openMissionId = _OpenMissionId;
closeMissionId = _CloseMissionId;
openNeedLevel = _OpenNeedLevel;
closeNeedLevel = _CloseNeedLevel;
}
}
#region
public Image funIcon;
public UICameraTexture modelCamera;
public Image nameIcon;
public Text funcDesc;
public GameObject twoDPanel;
public GameObject threeDPanel;
public GameObject bundlePathPanel;
public Transform bundlePathIconParent;
public GameObject ShowPanel;
#endregion
}