using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using System;
|
using System.Linq;
|
using LitJson;
|
|
|
public partial class BeautyMMManager : GameSystemManager<BeautyMMManager>
|
{
|
public int m_Energy; //剩余体力
|
public uint m_EnergyTime; //上次恢复体力时间戳
|
public uint m_TravelCnt; //累计游历次数
|
public byte m_SceneryType; //景观类型
|
public byte m_SceneryRow; //景观左上角所在行,从1开始
|
public byte m_SceneryCol; //景观左上角所在列,从1开始
|
public uint m_SceneryLVInfo; //景观升级信息:0-还未处理景观升级;个位数-第1次升级成功与否,1-成功,2-失败;十位-第2次 ...
|
public byte m_Result; //后端处理:0-无;1-常规;2-马车炸弹;3-传送门;4-景观;5-重置开始;!!!重登会变成0,只做即时判断用
|
|
Dictionary<Int2, TravelGrid> m_GridDict = new Dictionary<Int2, TravelGrid>();
|
public List<Int2> openChangeGridList = new List<Int2>(); // 前后对比,有变化的格子 ,打开前面前需清理
|
public event Action<int> OnTravelInfoUpdate;
|
|
public int addEnergyItemID;
|
public int addEnergyValue;
|
public int maxGirds = 0;
|
public Int2 clickGirdPos = new Int2();
|
public bool isClickDoor = false; // 是否点击过门,用于帮玩家自动重置
|
|
public void UpdateTravelInfo(HB040_tagSCTravelInfo netPack)
|
{
|
m_Energy = (int)netPack.Energy;
|
m_EnergyTime = netPack.EnergyTime;
|
m_TravelCnt = netPack.TravelCnt;
|
m_SceneryType = netPack.SceneryType;
|
m_SceneryRow = netPack.SceneryRow;
|
m_SceneryCol = netPack.SceneryCol;
|
m_SceneryLVInfo = netPack.SceneryLVInfo;
|
m_Result = netPack.Result;
|
openChangeGridList.Clear();
|
|
if (m_Result == 5)
|
{
|
isClickDoor = false; //不需要帮玩家自动重置了
|
}
|
|
for (int i = 0; i < netPack.GridCnt; i++)
|
{
|
var grid = netPack.GridList[i];
|
var key = new Int2(grid.Row, grid.Col);
|
if (m_GridDict.ContainsKey(key))
|
{
|
if (m_GridDict[key].State != grid.State)
|
{
|
openChangeGridList.Add(key);
|
}
|
m_GridDict[key].State = grid.State;
|
m_GridDict[key].Multi = grid.Multi;
|
m_GridDict[key].EventID = grid.EventID;
|
}
|
else
|
{
|
if (grid.State != 0)
|
{
|
openChangeGridList.Add(key);
|
}
|
m_GridDict.Add(key, new TravelGrid() { State = grid.State, Multi = grid.Multi, EventID = grid.EventID });
|
}
|
}
|
OnTravelInfoUpdate?.Invoke(m_Result);
|
UpdateTravelRedpoint();
|
}
|
|
//index从0开始,转格子坐标(1,1)开始
|
public Int2 ChangeIndexToGrid(int index)
|
{
|
int row = index / travelRowCol[1] + 1;
|
int col = index % travelRowCol[1] + 1;
|
return new Int2(row, col);
|
}
|
|
public TravelGrid GetGrid(Int2 gridPos)
|
{
|
if (m_GridDict.ContainsKey(gridPos))
|
{
|
return m_GridDict[gridPos];
|
}
|
return null;
|
}
|
|
public bool CanOpenBuild()
|
{
|
if (m_SceneryType == 0)
|
{
|
return false;
|
}
|
//判断建筑格子是否全开,计算数量
|
int cnt = 0;
|
foreach (var grid in m_GridDict)
|
{
|
if (grid.Value.State == 1 && grid.Value.EventID > 0 && grid.Value.EventID < (int)GirdEventType.Door)
|
{
|
cnt++;
|
}
|
}
|
return cnt >= m_SceneryType;
|
}
|
|
public bool HasDoor()
|
{
|
if (m_SceneryType == 0)
|
{
|
return false;
|
}
|
foreach (var grid in m_GridDict)
|
{
|
if (grid.Value.EventID == (int)GirdEventType.Door)
|
{
|
return true;
|
}
|
}
|
return false;
|
}
|
|
|
|
//游历体力
|
public int GetMaxEnergy()
|
{
|
return baseTravelEnergy + GetTalentEffectByType(TalentEffectType.Travel) + InvestModel.Instance.GetTravelAddEnergyMax();
|
}
|
|
|
Redpoint redpointTravel = new Redpoint(MainRedDot.Redpoint_BeautyMM, MainRedDot.Redpoint_BeautyMM * 10 + 2);
|
void UpdateTravelRedpoint()
|
{
|
if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.BeautyMM))
|
{
|
return;
|
}
|
redpointTravel.state = m_Energy > 0 ? RedPointState.Simple : RedPointState.None;
|
}
|
|
|
}
|
|
|
public class TravelGrid
|
{
|
public byte State; //状态:0-未点击;1-已开启;2-裂纹
|
public byte Multi; //奖励倍值: 默认1倍;2-双倍;...
|
public ushort EventID; //事件ID
|
}
|
|
//低于99的为建筑格子 大于200的为物品格子
|
public enum GirdEventType
|
{
|
None = 0,
|
Door = 99, // 门
|
Empty = 100, // 空格子
|
Horse = 101, // 马匹
|
}
|