Files
HX_MapEditor/Assets/Scripts/Map/MapManager.Cell.cs

811 lines
25 KiB
C#
Raw Normal View History

2025-06-14 13:46:24 +08:00
using HxGame;
using HxGame.Data;
using System;
using System.Collections;
using System.Collections.Generic;
2025-06-22 15:21:25 +08:00
using TMPro;
using UnityEditor;
2025-06-14 13:46:24 +08:00
using UnityEngine;
2025-06-22 15:21:25 +08:00
using UnityEngine.EventSystems;
2025-06-14 13:46:24 +08:00
using UnityEngine.UI;
public partial class MapManager : MonoBehaviour
{
public enum EditCellType
{
None,
ReturnCell, //<2F>سǵ<D8B3>
TeleportCell, //<2F><><EFBFBD>͵<EFBFBD>
NpcCell, //NPC
PathNodeCell, //·<><C2B7>
NpcPath, //npcѲ<63><D1B2>·<EFBFBD><C2B7>
MonsterPath, //<2F><><EFBFBD><EFBFBD>Ѳ<EFBFBD><D1B2>·<EFBFBD><C2B7>
AudioTrigger, //<2F><>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>
TriggerCell, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ReliveCell, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SellArea, //<2F><>̯<EFBFBD><CCAF>
MonsterArea, //<2F><><EFBFBD><EFBFBD>
FuBenArea, //<2F><><EFBFBD><EFBFBD>
JuBaoArea, //<2F>۱<EFBFBD>
}
public struct CenterPoint
{
public int areaIdx;
public int radius; //<2F>
}
public struct TriggerPoint
{
public int areaIdx;
public int radius; //<2F>
public string text;
}
public struct MonsterPoint
{
public int areaIdx;
public int radius; //<2F>
public int id; //ˢ<><CBA2>ID
public int num; //ˢ<><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
//<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>ɵĵ<C9B5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
private List<string> _activeTerrainCells = new List<string>();
private const int IGNORECELLSIZE = 15;
private EditCellType _curEditCellType = EditCellType.None;
private int _teleportPointSize = 0; //<2F><><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
private int _curTeleportPointIdx = 0; //<2F><>ǰ<EFBFBD><EFBFBD><E0BCAD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
private int _npcPointSize = 0; //npc<70><63><EFBFBD><EFBFBD>
private int _curNpcPointIdx = 0; //<2F><>ǰ<EFBFBD>༭npc<70><63><EFBFBD><EFBFBD>
private int _pathNodePointSize = 0; //·<><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
private int _curPathNodePointIdx = 0; //<2F><>ǰ<EFBFBD>༭·<E0BCAD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
private int _triggerPointSize = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
private int _curTriggerPointIdx = 0; //<2F><>ǰ<EFBFBD><EFBFBD><E0BCAD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//npc·<63><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>map
private Dictionary<int, int> _dicNpcPathPointSize = new Dictionary<int, int>();
//<2F><><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>map
private Dictionary<int, int> _dicMonsterPathPointSize = new Dictionary<int, int>();
private CenterPoint _curAudioTriggerCenterPoint = new CenterPoint(); //<2F><>ǰ<EFBFBD><EFBFBD><E0BCAD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
private TriggerPoint _curTriggerCenterPoint = new TriggerPoint(); //<2F><>ǰ<EFBFBD><EFBFBD><E0BCAD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
private CenterPoint _curReliveCenterPoint = new CenterPoint(); //<2F><>ǰ<EFBFBD><EFBFBD><E0BCAD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
private CenterPoint _curSellAreaCenterPoint = new CenterPoint(); //<2F><>ǰ<EFBFBD><EFBFBD><E0BCAD>̯<EFBFBD><CCAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
private MonsterPoint _curMonsterPoint = new MonsterPoint(); //ˢ<><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
private MonsterPoint _curFuBenPoint = new MonsterPoint(); //<2F><><EFBFBD><EFBFBD>ˢ<EFBFBD><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
private MonsterPoint _curJuBaoPoint = new MonsterPoint(); //<2F>۱<EFBFBD><DBB1><EFBFBD><EFBFBD><EFBFBD>
public CellNode[] cellsNode;
2025-06-19 01:31:00 +08:00
private Dictionary<CellType, List<GameObject>> _layCellsMap = new Dictionary<CellType, List<GameObject>>();
2025-06-14 13:46:24 +08:00
public void SetEditCellType(EditCellType type)
{
_curEditCellType = type;
}
//<2F><><EFBFBD>͵<EFBFBD>
public int AddTeleportPointSize()
{
return ++_teleportPointSize;
}
public void RemoveTeleportPointSize(int idx)
{
_curTeleportPointIdx = idx;
RemoveSpecialPoint(EditCellType.TeleportCell);
}
public void SetCurTeleportPointIdx(int idx)
{
_curTeleportPointIdx = idx;
}
//NPC
public int AddNpcPointSize()
{
return ++_npcPointSize;
}
public void RemoveNpcPointSize(int idx)
{
_curNpcPointIdx = idx;
RemoveSpecialPoint(EditCellType.NpcCell);
//<2F><>Ҫɾ<D2AA><C9BE><EFBFBD><EFBFBD>npc·<63><C2B7>
int size = _dicNpcPathPointSize[_curNpcPointIdx];
for (int i = 1; i <= size; i++)
{
RemoveSpecialPoint(EditCellType.NpcPath, i);
}
}
public void SetCurNpcPointIdx(int idx)
{
_curNpcPointIdx = idx;
}
//·<><C2B7>
public void ZeroNodePathSize()
{
_pathNodePointSize = 0;
}
public int AddPathNodePointSize()
{
return ++_pathNodePointSize;
}
public void RemovePathNodePointSize(int idx)
{
_curPathNodePointIdx = idx;
RemoveSpecialPoint(EditCellType.PathNodeCell);
}
public void SetCurPathNodePointIdx(int idx)
{
_curPathNodePointIdx = idx;
}
2025-06-22 15:21:25 +08:00
2025-06-14 13:46:24 +08:00
//<2F><>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>
public void SetCurAudioTriggerCenterPoint(int idx, int radius)
{
_curAudioTriggerCenterPoint.areaIdx = idx;
_curAudioTriggerCenterPoint.radius = radius;
}
public void RemoveAudioTriggerCenterPoint(int idx)
{
_curAudioTriggerCenterPoint.areaIdx = idx;
RemoveSpecialPoint(EditCellType.AudioTrigger);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public void SetCurTriggerCenterPoint(int idx, int radius, TriggerMode mode)
{
_curTriggerCenterPoint.areaIdx = idx;
_curTriggerCenterPoint.radius = radius;
switch(mode)
{
case TriggerMode.KillMonster:
_curTriggerCenterPoint.text = <>ִ<EFBFBD><D6B4><EFBFBD>";
break;
case TriggerMode.UseItem:
_curTriggerCenterPoint.text = "<22><><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD>";
break;
case TriggerMode.Task:
_curTriggerCenterPoint.text = "<22><><EFBFBD>񴥷<EFBFBD>";
break;
case TriggerMode.Npc:
_curTriggerCenterPoint.text = "NPC<50><43><EFBFBD><EFBFBD>";
break;
}
}
public void RemoveTriggerCenterPoint(int idx)
{
_curTriggerCenterPoint.areaIdx = idx;
RemoveSpecialPoint(EditCellType.TriggerCell);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public void SetReliveCenterPoint(int idx, int radius)
{
_curReliveCenterPoint.areaIdx = idx;
_curReliveCenterPoint.radius = radius;
}
public void RemoveReliveCenterPoint(int idx)
{
_curReliveCenterPoint.areaIdx = idx;
RemoveSpecialPoint(EditCellType.ReliveCell);
}
//<2F><>̯<EFBFBD><CCAF>
public void SetCurSellCenterPoint(int idx, int radius)
{
_curSellAreaCenterPoint.areaIdx = idx;
_curSellAreaCenterPoint.radius = radius;
}
public void RemoveSellCenterPoint(int idx)
{
_curSellAreaCenterPoint.areaIdx = idx;
RemoveSpecialPoint(EditCellType.SellArea);
}
//<2F><><EFBFBD><EFBFBD>
public void SetMonsterPoint(int idx, int radius, int id, int num)
{
_curMonsterPoint.areaIdx = idx;
_curMonsterPoint.radius = radius;
_curMonsterPoint.id = id;
_curMonsterPoint.num = num;
}
public void RemoveMonsterPoint(int idx)
{
_curMonsterPoint.areaIdx = idx;
RemoveSpecialPoint(EditCellType.MonsterArea);
//<2F><>Ҫɾ<D2AA><C9BE><EFBFBD><EFBFBD>npc·<63><C2B7>
if (!_dicMonsterPathPointSize.ContainsKey(_curMonsterPoint.areaIdx))
return;
int size = _dicMonsterPathPointSize[_curMonsterPoint.areaIdx];
for (int i = 1; i <= size; i++)
{
RemoveSpecialPoint(EditCellType.MonsterPath, i);
}
}
public void ShowMonsterPoint(int idx)
{
Transform cellsTrans = UIWindow.Instance.mapTrans.Find("CellsNode");
if (cellsTrans == null)
{
UIWindow.Instance.ShowMessage(<><C3BB><EFBFBD>ҵ<EFBFBD>CellsNode<64>ڵ<EFBFBD>");
return;
}
string cellName = $"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{idx}";
var t = cellsTrans.Find(cellName);
if (t == null)
return;
t.gameObject.SetActive(true);
}
public void HideMonsterPoint(int idx)
{
Transform cellsTrans = UIWindow.Instance.mapTrans.Find("CellsNode");
if (cellsTrans == null)
{
UIWindow.Instance.ShowMessage(<><C3BB><EFBFBD>ҵ<EFBFBD>CellsNode<64>ڵ<EFBFBD>");
return;
}
string cellName = $"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{idx}";
var t = cellsTrans.Find(cellName);
if (t == null)
return;
t.gameObject.SetActive(false);
}
//npcѲ<63><D1B2>·<EFBFBD><C2B7>
public int AddNpcPathSize()
{
if (!_dicNpcPathPointSize.ContainsKey(_curNpcPointIdx))
return 1;
return _dicNpcPathPointSize[_curNpcPointIdx]++;
}
public void SetCurNpcPathIdx(int idx)
{
if (_dicNpcPathPointSize.ContainsKey(_curNpcPointIdx))
return;
_dicNpcPathPointSize.Add(_curNpcPointIdx, idx);
}
public int GetCurNpcPathIdx()
{
if (!_dicNpcPathPointSize.ContainsKey(_curNpcPointIdx))
return 0;
return _dicNpcPathPointSize[_curNpcPointIdx];
}
//monsterѲ<72><D1B2>·<EFBFBD><C2B7>
public int AddMonsterPathSize()
{
if (!_dicMonsterPathPointSize.ContainsKey(_curMonsterPoint.areaIdx))
return 1;
return _dicMonsterPathPointSize[_curMonsterPoint.areaIdx]++;
}
public void SetCurMonsterPathIdx(int idx)
{
if (_dicMonsterPathPointSize.ContainsKey(_curMonsterPoint.areaIdx))
return;
_dicMonsterPathPointSize.Add(_curMonsterPoint.areaIdx, idx);
}
public int GetCurMonsterPathIdx()
{
if (!_dicMonsterPathPointSize.ContainsKey(_curMonsterPoint.areaIdx))
return 0;
return _dicMonsterPathPointSize[_curMonsterPoint.areaIdx];
}
//<2F><><EFBFBD><EFBFBD>ˢ<EFBFBD><CBA2><EFBFBD><EFBFBD>
public void SetCurFuBenCenterPoint(int idx, int radius, int id, int num)
{
_curFuBenPoint.areaIdx = idx;
_curFuBenPoint.radius = radius;
_curFuBenPoint.id = id;
_curFuBenPoint.num = num;
}
public void RemoveFuBenCenterPoint(int idx)
{
_curFuBenPoint.areaIdx = idx;
RemoveSpecialPoint(EditCellType.FuBenArea);
}
//<2F>۱<EFBFBD><DBB1><EFBFBD>
//public void SetCurJuBaoCenterPoint(int idx, int radius, int id, int num)
public void SetCurJuBaoCenterPoint(int idx, int radius, int id)
{
_curJuBaoPoint.areaIdx = idx;
_curJuBaoPoint.radius = radius;
_curJuBaoPoint.id = id;
}
public void RemoveJuBaoCenterPoint(int idx)
{
_curJuBaoPoint.areaIdx = idx;
RemoveSpecialPoint(EditCellType.JuBaoArea);
}
private string GetSpecialName(EditCellType cellType, out int size)
{
size = 0;
string cellName = string.Empty;
switch (cellType)
{
case EditCellType.TeleportCell:
cellName = "<22><><EFBFBD>͵<EFBFBD>";
size = _teleportPointSize;
break;
case EditCellType.NpcCell:
cellName = "Npc";
size = _npcPointSize;
break;
case EditCellType.PathNodeCell:
cellName = "PathNode";
size = _pathNodePointSize;
break;
case EditCellType.ReliveCell:
cellName = "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
size = UIWindow.Instance.uiRelivesPanel.itemParent.childCount;
break;
case EditCellType.AudioTrigger:
cellName = "<22><>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>";
size = UIWindow.Instance.uiAudioTriggerPanel.itemParent.childCount;
break;
case EditCellType.TriggerCell:
cellName = "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
size = UIWindow.Instance.uiTriggersPanel.itemParent.childCount;
break;
case EditCellType.SellArea:
cellName = "<22><>̯<EFBFBD><CCAF>";
size = UIWindow.Instance.uiSellAreasPanel.itemParent.childCount;
break;
case EditCellType.MonsterArea:
cellName = "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
//size = UIWindow.Instance.uiMonstersPanel_old.itemParent.childCount;
break;
case EditCellType.FuBenArea:
cellName = "<22><><EFBFBD><EFBFBD>ˢ<EFBFBD><CBA2>";
size = UIWindow.Instance.uiFuBensPanel.itemParent.childCount;
break;
case EditCellType.JuBaoArea:
cellName = "<22>۱<EFBFBD><DBB1><EFBFBD>";
size = UIWindow.Instance.uiFuBensPanel.itemParent.childCount;
break;
default:
return null;
}
return cellName;
}
2025-06-22 15:21:25 +08:00
2025-06-14 13:46:24 +08:00
public void ShowSpecialPoint(EditCellType cellType)
{
int size = 0;
string cellName = GetSpecialName(cellType, out size);
2025-06-22 15:21:25 +08:00
//TODO tb <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SetEditCellType(cellType);
if (cellType == EditCellType.MonsterArea)
2025-06-14 13:46:24 +08:00
{
}
}
public void HideSpecialPoint(EditCellType cellType)
{
int size = 0;
string cellName = GetSpecialName(cellType, out size);
}
public void RemoveSpecialPoint(EditCellType cellType, int idx = 0)
{
2025-06-22 18:23:47 +08:00
Transform parentArea = mapAreaParent;
2025-06-14 13:46:24 +08:00
string cellName = string.Empty;
switch (cellType)
{
case EditCellType.ReturnCell:
cellName = "<22>سǵ<D8B3>";
break;
case EditCellType.TeleportCell:
cellName = $"<22><><EFBFBD>͵<EFBFBD>{_curTeleportPointIdx}";
break;
case EditCellType.NpcCell:
cellName = $"Npc{_curNpcPointIdx}";
break;
case EditCellType.PathNodeCell:
cellName = $"PathNode{_curPathNodePointIdx}";
break;
case EditCellType.ReliveCell:
cellName = $"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{_curReliveCenterPoint.areaIdx}";
2025-06-22 18:23:47 +08:00
parentArea = mapReliveArea;
2025-06-14 13:46:24 +08:00
break;
case EditCellType.AudioTrigger:
cellName = $"<22><>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>{_curAudioTriggerCenterPoint.areaIdx}";
break;
case EditCellType.TriggerCell:
cellName = $"Trigger{_curTriggerPointIdx}";
break;
case EditCellType.SellArea:
cellName = $"<22><>̯<EFBFBD><CCAF>{_curSellAreaCenterPoint.areaIdx}";
break;
case EditCellType.MonsterArea:
cellName = $"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{_curMonsterPoint.areaIdx}";
2025-06-22 18:23:47 +08:00
parentArea = mapMonsterArea;
2025-06-14 13:46:24 +08:00
break;
case EditCellType.FuBenArea:
cellName = $"<22><><EFBFBD><EFBFBD>ˢ<EFBFBD><CBA2>{_curFuBenPoint.areaIdx}";
break;
case EditCellType.JuBaoArea:
cellName = $"<22>۱<EFBFBD><DBB1><EFBFBD>{_curJuBaoPoint.areaIdx}";
break;
case EditCellType.NpcPath:
cellName = $"NpcPath{_curNpcPointIdx}{idx}";
break;
case EditCellType.MonsterPath:
cellName = $"MonsterPath{_curMonsterPoint .areaIdx}{idx}";
break;
default:
return;
}
2025-06-22 18:23:47 +08:00
if (parentArea.Find(cellName))
2025-06-14 13:46:24 +08:00
{
2025-06-22 18:23:47 +08:00
DestroyImmediate(parentArea.Find(cellName).gameObject);
2025-06-14 13:46:24 +08:00
}
}
public void CreateSpecialPoint(int x, int y, EditCellType cellType)
{
if (_curOpenMapId <= 0)
return;
UnityEngine.Object obj = null;
2025-06-22 18:23:47 +08:00
Transform parentArea = mapAreaParent;
2025-06-14 13:46:24 +08:00
if (cellType < EditCellType.AudioTrigger)
2025-06-16 00:15:41 +08:00
obj = null;
2025-06-14 13:46:24 +08:00
else if (cellType == EditCellType.AudioTrigger)
obj = Resources.Load("Prefabs/audioTriggerCenterPoint");
else if (cellType == EditCellType.TriggerCell)
obj = Resources.Load("Prefabs/triggerCenterPoint");
else if (cellType == EditCellType.ReliveCell)
2025-06-22 18:23:47 +08:00
{
2025-06-14 13:46:24 +08:00
obj = Resources.Load("Prefabs/reliveCenterPoint");
2025-06-22 18:23:47 +08:00
parentArea = mapReliveArea;
}
2025-06-14 13:46:24 +08:00
else if (cellType == EditCellType.MonsterArea)
2025-06-22 18:23:47 +08:00
{
2025-06-14 13:46:24 +08:00
obj = Resources.Load("Prefabs/monsterPoint");
2025-06-22 18:23:47 +08:00
parentArea = mapMonsterArea;
}
2025-06-14 13:46:24 +08:00
else if (cellType == EditCellType.FuBenArea)
obj = Resources.Load("Prefabs/fubenPoint");
else if (cellType == EditCellType.JuBaoArea)
obj = Resources.Load("Prefabs/jubaoPoint");
if (obj == null)
{
UIWindow.Instance.ShowMessage("<22><><EFBFBD><EFBFBD>cell.prefabʧ<62><CAA7>");
return;
}
string cellName = string.Empty;
Vector3 localScale = Vector3.zero;
2025-06-22 15:21:25 +08:00
int Idx = 0;
2025-06-14 13:46:24 +08:00
switch (cellType)
{
case EditCellType.ReturnCell:
cellName = "<22>سǵ<D8B3>";
break;
case EditCellType.TeleportCell:
cellName = $"<22><><EFBFBD>͵<EFBFBD>{_curTeleportPointIdx}";
2025-06-22 15:21:25 +08:00
Idx = _curTeleportPointIdx;
2025-06-14 13:46:24 +08:00
break;
case EditCellType.NpcCell:
cellName = $"Npc{_curNpcPointIdx}";
2025-06-22 15:21:25 +08:00
Idx = _curNpcPointIdx;
2025-06-14 13:46:24 +08:00
break;
case EditCellType.PathNodeCell:
cellName = $"PathNode{_curPathNodePointIdx}";
2025-06-22 15:21:25 +08:00
Idx = _curPathNodePointIdx;
2025-06-14 13:46:24 +08:00
break;
case EditCellType.AudioTrigger:
cellName = $"<22><>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>{_curAudioTriggerCenterPoint.areaIdx}";
2025-06-22 15:21:25 +08:00
Idx = _curAudioTriggerCenterPoint.areaIdx;
2025-06-14 13:46:24 +08:00
break;
case EditCellType.TriggerCell:
cellName = $"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{_curTriggerCenterPoint.areaIdx}";
2025-06-22 15:21:25 +08:00
Idx = _curTriggerCenterPoint.areaIdx;
2025-06-14 13:46:24 +08:00
break;
case EditCellType.ReliveCell:
cellName = $"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{_curReliveCenterPoint.areaIdx}";
2025-06-22 15:21:25 +08:00
Idx = _curReliveCenterPoint.areaIdx;
2025-06-14 13:46:24 +08:00
break;
case EditCellType.MonsterArea:
cellName = $"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{_curMonsterPoint.areaIdx}";
2025-06-22 15:21:25 +08:00
Idx = _curMonsterPoint.areaIdx;
2025-06-22 18:23:47 +08:00
if (Idx < 0) return;
2025-06-14 13:46:24 +08:00
break;
case EditCellType.FuBenArea:
cellName = $"<22><><EFBFBD><EFBFBD>ˢ<EFBFBD><CBA2>{_curFuBenPoint.areaIdx}";
2025-06-22 15:21:25 +08:00
Idx = _curMonsterPoint.areaIdx;
2025-06-14 13:46:24 +08:00
break;
case EditCellType.JuBaoArea:
cellName = $"<22>۱<EFBFBD><DBB1><EFBFBD>{_curJuBaoPoint.areaIdx}";
2025-06-22 15:21:25 +08:00
Idx = _curJuBaoPoint.areaIdx;
2025-06-14 13:46:24 +08:00
break;
case EditCellType.NpcPath:
cellName = $"NpcPath{_curNpcPointIdx}{GetCurNpcPathIdx()}";
2025-06-22 15:21:25 +08:00
Idx = _curNpcPointIdx;
2025-06-14 13:46:24 +08:00
break;
case EditCellType.MonsterPath:
cellName = $"MonsterPath{_curMonsterPoint.areaIdx}{GetCurMonsterPathIdx()}";
2025-06-22 15:21:25 +08:00
Idx = _curMonsterPoint.areaIdx;
2025-06-14 13:46:24 +08:00
break;
}
GameObject go = null;
2025-06-22 18:23:47 +08:00
if (parentArea.Find(cellName))
2025-06-14 13:46:24 +08:00
{
2025-06-22 18:23:47 +08:00
go = parentArea.Find(cellName).gameObject;
2025-06-14 13:46:24 +08:00
}
else
{
go = Instantiate(obj) as GameObject;
2025-06-22 18:23:47 +08:00
go.transform.SetParent(parentArea, false);
2025-06-14 13:46:24 +08:00
}
2025-06-22 15:21:25 +08:00
var sceneArea = go.GetComponent<SceneArea>();
sceneArea.SetSceneAreaData(cellType, Idx);
sceneArea.SetAreaPos(new Vector2Int(x, y));
2025-06-14 13:46:24 +08:00
go.name = cellName;
if(cellType == EditCellType.MonsterArea)
{
2025-06-22 15:21:25 +08:00
go.transform.Find("Name").GetComponent<TextMeshPro>().text = $"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{_curMonsterPoint.areaIdx}";
go.transform.Find("ID").GetComponent<TextMeshPro>().text = "ID:" + _curMonsterPoint.id.ToString();
go.transform.Find("Num").GetComponent<TextMeshPro>().text = "Num:" + _curMonsterPoint.num.ToString();
float scaleX = MapManager.Instance.map.sideWidth * _curMonsterPoint.radius * 2;
float scaleY = MapManager.Instance.map.sideHeight * _curMonsterPoint.radius * 2;
go.transform.localScale = new Vector3(scaleX,scaleY,1);
2025-06-14 13:46:24 +08:00
}
else if (cellType == EditCellType.FuBenArea)
{
2025-06-22 15:21:25 +08:00
go.transform.Find("Order").GetComponent<TextMeshPro>().text = _curFuBenPoint.areaIdx.ToString();
go.transform.Find("ID").GetComponent<TextMeshPro>().text = "ID:" + _curFuBenPoint.id.ToString();
go.transform.Find("Num").GetComponent<TextMeshPro>().text = "Num:" + _curFuBenPoint.num.ToString();
2025-06-14 13:46:24 +08:00
}
else if (cellType == EditCellType.JuBaoArea)
{
2025-06-22 15:21:25 +08:00
go.transform.Find("ID").GetComponent<TextMeshPro>().text = "ID:" + _curJuBaoPoint.id.ToString();
2025-06-14 13:46:24 +08:00
}
else if(cellType == EditCellType.TriggerCell)
{
2025-06-22 15:21:25 +08:00
go.transform.GetChild(0).GetComponent<TextMeshPro>().text = _curTriggerCenterPoint.text;
2025-06-14 13:46:24 +08:00
}
}
2025-06-19 01:31:00 +08:00
public int GetLayCellCount(CellType lay)
2025-06-14 13:46:24 +08:00
{
if(!_layCellsMap.ContainsKey(lay))
return 0;
return _layCellsMap[lay].Count;
}
public void CreateCells()
{
foreach (var key in _layCellsMap.Keys)
_layCellsMap[key].Clear();
Transform cellsTrans = UIWindow.Instance.mapTrans.Find("CellsNode");
if(cellsTrans == null)
{
UIWindow.Instance.ShowMessage(<><C3BB><EFBFBD>ҵ<EFBFBD>CellsNode<64>ڵ<EFBFBD>");
return;
}
//<2F>п<EFBFBD><D0BF>ܴ<EFBFBD><DCB4><EFBFBD><EFBFBD>˻سǵ<D8B3><C7B5><EFBFBD>
if (cellsTrans.childCount > IGNORECELLSIZE)
{
SetGameObjectActiveWithAllChild(cellsTrans, true);
return;
}
}
public void HideCells()
{
Transform cellsTrans = UIWindow.Instance.mapTrans.Find("CellsNode");
if (cellsTrans == null)
{
UIWindow.Instance.ShowMessage(<><C3BB><EFBFBD>ҵ<EFBFBD>CellsNode<64>ڵ<EFBFBD>");
return;
}
SetGameObjectActiveWithAllChild(cellsTrans, false);
}
public void ShowCells()
{
Transform cellsTrans = UIWindow.Instance.mapTrans.Find("CellsNode");
if (cellsTrans == null)
{
UIWindow.Instance.ShowMessage(<><C3BB><EFBFBD>ҵ<EFBFBD>CellsNode<64>ڵ<EFBFBD>");
return;
}
SetGameObjectActiveWithAllChild(cellsTrans, true);
}
void SetGameObjectActiveWithAllChild(Transform parentTrans, bool bActive)
{
for (int i = 0; i < parentTrans.childCount; i++)
{
Transform trans = parentTrans.GetChild(i);
if (trans == null)
continue;
trans.gameObject.SetActive(bActive);
}
}
public void RemoveAllCells()
{
Transform trans = UIWindow.Instance.mapTrans.Find("CellsNode");
if (trans == null)
return;
int count = trans.childCount;
for (int i = 0; i < count; i++)
{
DestroyImmediate(trans.GetChild(0).gameObject);
}
Cleanup();
}
public CellNode GetCell(int x, int y)
{
if (x < 0 || y < 0)
return null;
if (y >= _cellRows || x >= _cellCols)
return null;
int index = y * _cellCols + x;
return cellsNode[index];
}
public CellNode GetCell(int index)
{
if (index < 0)
return null;
if (index >= cellsNode.Length)
return null;
return cellsNode[index];
}
public CellNode GetCell(Vector3 pos)
{
int x = (int)pos.x / _cellWidth;
int y = (int)pos.z / _cellHeight;
return GetCell(x, y);
}
private CellType GetCellType(string cellName)
{
string[] tmp = cellName.Split('_');
if (tmp.Length != 2)
return CellType.None;
int x, y;
x = Convert.ToInt32(tmp[0]);
y = Convert.ToInt32(tmp[1]);
int index = y * _cellCols + x;
return cellsNode[index].cellType;
}
private CellType SetCellType(string cellName, CellType type)
{
string[] tmp = cellName.Split('_');
if (tmp.Length != 2)
return CellType.None;
int indexX, indexY;
indexX = Convert.ToInt32(tmp[0]);
indexY = Convert.ToInt32(tmp[1]);
return SetCellType(indexX, indexY, type);
}
private CellType SetCellType(int indexX, int indexY, CellType type)
{
CellNode cell = GetCell(indexX, indexY);
if (cell == null)
return CellType.None;
if (type == CellType.Safe)
cell.cellType |= CellType.Safe;
else
cell.cellType = type;
return cell.cellType;
}
2025-06-22 15:21:25 +08:00
public bool isDragging = false;
public Vector3 downPos;
public SceneArea currentComponent;
private void UpdateCellPos()
{
if (Input.GetMouseButtonDown(0))
{
if (EventSystem.current.IsPointerOverGameObject())
return;
int hitLayer = (1 << LayerMask.NameToLayer("MapCell"));
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
Vector2 rayOrigin = ray.origin;
Vector2 rayDirection = ray.direction;
RaycastHit2D hit = Physics2D.Raycast(rayOrigin, rayDirection, Mathf.Infinity, hitLayer);
if (hit.collider != null)
{
var mouseComponent = hit.collider.transform.GetComponent<SceneArea>();
if (mouseComponent != null)
{
if (mouseComponent.editCellType != _curEditCellType)
return;
mouseComponent.OnPointerClick();
currentComponent = mouseComponent;
}
downPos = Input.mousePosition;
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ק
if (Input.GetMouseButton(0))
{
if (Input.mousePosition != downPos || isDragging)
{
isDragging = true;
// <20><><EFBFBD><EFBFBD> AreaComponent <20><><EFBFBD><EFBFBD>ק<EFBFBD><D7A7><EFBFBD><EFBFBD>
currentComponent?.OnPointerDrag(Input.mousePosition);
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>
if (Input.GetMouseButtonUp(0))
{
currentComponent?.OnPointerUp();
isDragging = false;
currentComponent = null;
}
}
2025-06-23 00:30:11 +08:00
public void ResetCell()
{
if (MapManager.Instance.map == null) return;
int cellTotal = MapManager.Instance.map.selector.horizontalNumber * MapManager.Instance.map.selector.verticalNumber;
cellsNode = new CellNode[cellTotal];
for (int row = 0; row < MapManager.Instance.map.selector.horizontalNumber; row++)
for (int col = 0; col < MapManager.Instance.map.selector.verticalNumber; col++)
{
int index = row * MapManager.Instance.map.selector.verticalNumber + col;
cellsNode[index] = new CellNode(row,col,index, MapManager.Instance.map.selector.getCellType(index));
}
}
2025-06-14 13:46:24 +08:00
}