using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
|
|
namespace Snxxz.UI
|
{
|
[XLua.LuaCallCSharp]
|
[XLua.Hotfix]
|
public class SkyTowerModel : Model, IPlayerLoginOk, ISwitchAccount
|
{
|
public const int DATA_MAPID = 31370;
|
readonly static int REDPOINTID_01 = 21501;
|
readonly static int REDPOINTID_02 = 215;
|
readonly static int REDPOINTID_03 = 21503;
|
readonly static int FUNCTIONID = 164;
|
|
public bool allPassed {
|
get {
|
return IsTopFloor(highestPassFloor);
|
}
|
}
|
|
public int highestPassFloor { get; private set; }
|
public int currentFloor {
|
get {
|
if (IsTopFloor(highestPassFloor))
|
{
|
return highestPassFloor;
|
}
|
else
|
{
|
return highestPassFloor + 1;
|
}
|
}
|
}
|
|
bool redpointConfirm_01 = false;
|
bool redpointConfirm_02 = false;
|
bool redpointConfirm_03 = false;
|
|
Redpoint redpoint01 = new Redpoint(37, REDPOINTID_01);
|
Redpoint redpoint02 = new Redpoint(REDPOINTID_02);
|
Redpoint redpoint03 = new Redpoint(REDPOINTID_03);
|
|
List<int> sortedFloors = new List<int>();
|
|
DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
|
|
public override void Init()
|
{
|
ParseConfig();
|
}
|
|
public override void UnInit()
|
{
|
}
|
|
public void RequestChallenge()
|
{
|
var error = GetErrorOfChallenge();
|
if (error == 0)
|
{
|
dungeonModel.RequestChallangeDungeon(DATA_MAPID, 0);
|
}
|
else
|
{
|
switch (error)
|
{
|
case 1:
|
break;
|
case 3:
|
SysNotifyMgr.Instance.ShowTip("FbLV", DATA_MAPID);
|
break;
|
default:
|
break;
|
}
|
}
|
}
|
|
public bool IsChallengable()
|
{
|
return GetErrorOfChallenge() == 0;
|
}
|
|
private int GetErrorOfChallenge()
|
{
|
if (!FuncOpen.Instance.IsFuncOpen(FUNCTIONID))
|
{
|
return 1;
|
}
|
|
if (allPassed)
|
{
|
return 2;
|
}
|
|
var config = SkyTowerConfig.Get(currentFloor);
|
if (PlayerDatas.Instance.baseData.LV < config.levelLimit)
|
{
|
return 3;
|
}
|
|
return 0;
|
}
|
|
public void RequestRefreshMonster()
|
{
|
var sendInfo = new CA508_tagCMDoFBAction();
|
sendInfo.ActionType = 0;
|
sendInfo.ActionInfo = (uint)currentFloor;
|
GameNetSystem.Instance.SendInfo(sendInfo);
|
}
|
|
public List<int> GetShowFloors()
|
{
|
var currentIndex = sortedFloors.IndexOf(currentFloor);
|
var floors = new List<int>();
|
|
if (currentIndex < 2)
|
{
|
for (var i = 0; i <= 4; i++)
|
{
|
floors.Add(sortedFloors[i]);
|
}
|
}
|
else if (currentIndex >= sortedFloors.Count - 2)
|
{
|
for (var i = sortedFloors.Count - 3; i <= sortedFloors.Count - 1; i++)
|
{
|
floors.Add(sortedFloors[i]);
|
}
|
}
|
else
|
{
|
for (var i = currentIndex - 2; i <= currentIndex + 2; i++)
|
{
|
floors.Add(sortedFloors[i]);
|
}
|
}
|
|
return floors;
|
}
|
|
public bool IsTopFloor(int floor)
|
{
|
return floor == sortedFloors[sortedFloors.Count - 1];
|
}
|
|
public bool IsBottomFloor(int floor)
|
{
|
return floor == sortedFloors[0];
|
}
|
|
public void UpdateHighestPassFloor(HB213_tagMCSkyTowerInfo info)
|
{
|
highestPassFloor = (int)info.Floor;
|
}
|
|
public void ConfirmRedpoint01()
|
{
|
redpointConfirm_01 = true;
|
UpateRedpoint();
|
}
|
|
public void ConfirmRedpoint02()
|
{
|
redpointConfirm_02 = true;
|
UpateRedpoint();
|
}
|
|
public void ConfirmRedpoint03()
|
{
|
redpointConfirm_03 = true;
|
UpateRedpoint();
|
}
|
|
public void OnPlayerLoginOk()
|
{
|
UpateRedpoint();
|
}
|
|
public void OnSwitchAccount()
|
{
|
redpointConfirm_01 = false;
|
redpointConfirm_02 = false;
|
redpointConfirm_03 = false;
|
}
|
|
private void UpateRedpoint()
|
{
|
var config = SkyTowerConfig.Get(currentFloor);
|
var challengable = IsChallengable() && PlayerDatas.Instance.baseData.FightPoint >= config.fightPower;
|
|
if (!redpointConfirm_01)
|
{
|
redpoint01.state = challengable ? RedPointState.Simple : RedPointState.None;
|
}
|
else
|
{
|
redpoint01.state = RedPointState.None;
|
}
|
|
if (!redpointConfirm_02)
|
{
|
redpoint02.state = challengable ? RedPointState.Simple : RedPointState.None;
|
}
|
else
|
{
|
redpoint02.state = RedPointState.None;
|
}
|
|
if (!redpointConfirm_03)
|
{
|
redpoint03.state = challengable ? RedPointState.Simple : RedPointState.None;
|
}
|
else
|
{
|
redpoint03.state = RedPointState.None;
|
}
|
}
|
|
private void ParseConfig()
|
{
|
var configs = SkyTowerConfig.GetKeys();
|
foreach (var item in configs)
|
{
|
sortedFloors.Add(int.Parse(item));
|
}
|
}
|
|
|
}
|
}
|