hch
昨天 5f531573714a504132c9b84811f33e430df21281
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
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,    // 马匹
}