Files
JJBB/Assets/Project/Script/GUI/Other/FunctionPreviewCtr.cs

362 lines
12 KiB
C#
Raw Permalink Normal View History

2024-08-23 15:49:34 +08:00
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
}