mergemilitary/Assets/MMOModule/Scripts/MMOModule.cs

287 lines
7.6 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using MMO;
public partial class MMOModule : MonoBehaviour
{
public event Action OnExit;
public event Action<int> OnDiamondUpdate;
public event Action OnWatchAd;
public event Action OnOpenMoreGames;
public event Action<string, string, string> OnEvengLog;
private Action mDelInitOver;
private Action mDelCheckOver;
private bool mIsOn = false;
private int mStartDiamond = 0;
private int mStartLevel = 0;
public bool IsGuideFinished => MMOUserData.Instance.IsGuideFinished;
private static MMOModule mInstance = null;
public static MMOModule Instance
{
get
{
if (mInstance == null)
{
GameObject tMMOGO = Instantiate(Resources.Load(nameof(MMOModule))) as GameObject;
mInstance = tMMOGO.AddComponent<MMOModule>();
tMMOGO.SetActive(false);
DontDestroyOnLoad(tMMOGO);
}
return mInstance;
}
}
private MMOUIManager mUIMgr;
public MMOUIManager UIMgr
{
get
{
if (mUIMgr == null)
{
mUIMgr = GetComponentInChildren<MMOUIManager>(true);
}
return mUIMgr;
}
}
private bool mIsMMOUser
{
get => PlayerPrefs.GetInt(nameof(mIsMMOUser), 0) == 1;
set => PlayerPrefs.SetInt(nameof(mIsMMOUser), value ? 1 : 0);
}
public void Init(Action pDelInitDone)
{
if (MMOUserData.Instance.TaskRecordList.Count <= 0)
{
MMOUserData.Instance.GenerateTaskRecord(101);
MMOUserData.Instance.GenerateTaskRecord(201);
}
MMOUserData.Instance.CheckTask();
mDelInitOver = pDelInitDone;
gameObject.SetActive(true);
MMOUILoading tUILoading = UIMgr.OpenUI<MMOUILoading>();
tUILoading.DelInitOver = mDelInitOver;
tUILoading.DelLoadOver = OnLoadOver;
}
public void StartGame(Action pDelCheckOver, bool pIsMMOUser, int pDiamond, int pLevel)
{
mIsMMOUser = pIsMMOUser;
OnEvengLog?.Invoke("Robux_" + mIsMMOUser, "Robux", mIsMMOUser.ToString());
mDelCheckOver = pDelCheckOver;
mStartDiamond = pDiamond;
mStartLevel = pLevel;
if (UIMgr.GetUI<MMOUILoading>().IsOpened)
{
UIMgr.GetUI<MMOUILoading>().FinishRest();
}
else
{
CheckGuide();
}
}
private void OnLoadOver()
{
UIMgr.CloseUI<MMOUILoading>();
gameObject.SetActive(false);
MMOUserData.Instance.FinishLoading();
CheckGuide();
}
private void CheckGuide()
{
if (mIsMMOUser && !MMOUserData.Instance.IsGuideFinished)
{
Enter(mStartDiamond, mStartLevel);
}
else
{
mDelCheckOver?.Invoke();
}
}
private void OnGuideOver()
{
mDelCheckOver?.Invoke();
Exit();
}
public void Enter(int pDiamond, int pGameLevel)
{
gameObject.SetActive(true);
MMOUserData.Instance.DelUpdateDiamond = UpdateDiamond;
MMOUserData.Instance.Diamond = pDiamond;
MMOUserData.Instance.DelUpdateLevel = UpdateLevel;
MMOUserData.Instance.GameLevel = pGameLevel;
UIMgr.OpenUI<MMOUITop>().DelOpenMoreGames = OpenMoreGames;
UIMgr.OpenUI<MMOUIMain>().DelWatchAd = WatchAd;
if (!MMOUserData.Instance.IsGuideFinished)
{
UIMgr.OpenUI<MMOUIGuide>().DelGuideOver = OnGuideOver;
}
mIsOn = true;
LogEvent(MMOEvent.EnterMMO);
}
public void Exit()
{
mIsOn = false;
UIMgr.CloseAll();
gameObject.SetActive(false);
OnExit?.Invoke();
}
public void ShowTip(string pTipString)
{
if (mIsOn)
{
UIMgr.OpenUI<MMOUITip>().SetTip(pTipString);
}
}
public void LogEvent(string pEvent)
{
OnEvengLog?.Invoke("Robux_Action", "Robux", pEvent);
}
public void PassLevel()
{
for (int i = 0; i < MMOUserData.Instance.TaskRecordList.Count; i++)
{
MMOTaskRecord tRecord = MMOUserData.Instance.TaskRecordList[i];
if (tRecord.TaskType == MMOTaskType.DailyLevel)
{
int tValue = MMOUserData.Instance.GetTaskValue(tRecord.RecordKey);
MMOUserData.Instance.SetTaskValue(tRecord.RecordKey, tValue + 1);
}
}
}
public void WatchAdSuccessfully()
{
for (int i = 0; i < MMOUserData.Instance.TaskRecordList.Count; i++)
{
MMOTaskRecord tRecord = MMOUserData.Instance.TaskRecordList[i];
if (tRecord.TaskType == MMOTaskType.WatchAds || tRecord.TaskType == MMOTaskType.DailyAds)
{
int tValue = MMOUserData.Instance.GetTaskValue(tRecord.RecordKey);
MMOUserData.Instance.SetTaskValue(tRecord.RecordKey, tValue + 1);
}
else if (tRecord.TaskType == MMOTaskType.RiseRank)
{
int tValue = MMOUserData.Instance.GetTaskValue(tRecord.RecordKey);
MMOUserData.Instance.SetTaskValue(tRecord.RecordKey, tValue + 50);
}
}
UIMgr.GetUI<MMOUIMain>().RefreshTaskList();
}
public int GetRewardDiamondOfLevel(int pDiamond, int pLevel)
{
int tTarget = 0;
for (int i = 0; i < MMOUserData.Instance.TaskRecordList.Count; i++)
{
if (MMOUserData.Instance.TaskRecordList[i].TaskType == MMOTaskType.GetDiamond)
{
if (!MMOUserData.Instance.TaskRecordList[i].IsFinished)
{
tTarget = MMOUserData.Instance.TaskRecordList[i].TargetNum;
}
}
}
if (tTarget == 0)
{
return 1000;
}
int tFinalDiamond = 1;
int tStuckDiamond = 500;
int tStuckLevel = 100;
int tLeftDiamond = tTarget - pDiamond;
int tLeftLevel = Mathf.Max(tStuckLevel - pLevel, 1);
if (tLeftDiamond <= tStuckDiamond && pLevel <= tStuckLevel)
{
tFinalDiamond = Mathf.Max(tLeftDiamond / tLeftLevel / 3, 1);
}
else
{
MMODataLevelDiamond tData = MMOTableLevelDiamond.Instance.GetData(pLevel);
if (tData != null)
{
tFinalDiamond = tData.Diamond;
}
}
return Mathf.Max(tFinalDiamond, 1);
}
private void UpdateDiamond(int pDiamond)
{
OnDiamondUpdate?.Invoke(pDiamond);
UIMgr.GetUI<MMOUITop>().RefreshDiomand();
for (int i = 0; i < MMOUserData.Instance.TaskRecordList.Count; i++)
{
MMOTaskRecord tRecord = MMOUserData.Instance.TaskRecordList[i];
if (tRecord.TaskType == MMOTaskType.GetDiamond)
{
MMOUserData.Instance.SetTaskValue(tRecord.RecordKey, pDiamond);
if (tRecord.IsFinished)
{
LogEvent(MMOEvent.TaskDiamondReach);
}
}
}
}
private void UpdateLevel(int pLevel)
{
for (int i = 0; i < MMOUserData.Instance.TaskRecordList.Count; i++)
{
MMOTaskRecord tRecord = MMOUserData.Instance.TaskRecordList[i];
if (tRecord.TaskType == MMOTaskType.PassLevel)
{
MMOUserData.Instance.SetTaskValue(tRecord.RecordKey, pLevel);
}
}
}
private void OpenMoreGames()
{
OnOpenMoreGames?.Invoke();
}
private void WatchAd()
{
OnWatchAd?.Invoke();
}
}