彻底换一下

This commit is contained in:
tangbin
2025-07-18 22:28:40 +08:00
parent 66ed22e5e5
commit 95aec74d37
2275 changed files with 3034 additions and 140925 deletions

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: a3b6ed6e938fd67438540d9912bae0bf
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,256 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using UnityEngine;
namespace Game.HotFix
{
public enum AnimEnum
{
Anim_cloth,
Anim_weapon,
}
// ֡<><D6A1><EFBFBD>ݽṹ
public struct FrameData
{
public int frameID;
public int startX;
public int startY;
public int width;
public int height;
public int offsetX;
public int offsetY;
public int sourceWidth;
public int sourceHeight;
public override string ToString()
{
return $"Frame {frameID}: ({startX},{startY}) {width}x{height} offset:({offsetX},{offsetY})";
}
}
public class AnimParserComponent : MonoBehaviour
{
public static AnimParserComponent instance;
// <20><EFBFBD><E6B4A2><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: [<5B><><EFBFBD><EFBFBD>ID][<5B><><EFBFBD><EFBFBD>][֡]
private Dictionary<string, Dictionary<int, List<FrameData>>> clothAnimData =
new Dictionary<string, Dictionary<int, List<FrameData>>>();
private Dictionary<string, Dictionary<int, List<FrameData>>> weaponAnimData =
new Dictionary<string, Dictionary<int, List<FrameData>>>();
private void Awake()
{
instance = this;
System.Diagnostics.Stopwatch stopwatch = System.Diagnostics.Stopwatch.StartNew();
LoadAndParseCSV("cloth.biz.csv", clothAnimData);
stopwatch.Stop();
Debug.Log($"<22><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>CSV {clothAnimData.Count} <20><>ʱ {stopwatch.Elapsed.Milliseconds} ms");
stopwatch.Start();
LoadAndParseCSV("weapon.biz.csv", weaponAnimData);
stopwatch.Stop();
Debug.Log($"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CSV {weaponAnimData.Count} <20><>ʱ {stopwatch.Elapsed.Milliseconds} ms");
}
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD><EFBFBD>CSV<53>ļ<EFBFBD>
public void LoadAndParseCSV(string file, Dictionary<string, Dictionary<int, List<FrameData>>> AnimData)
{
string filePath = Path.Combine(Application.dataPath, "GameAssets/CSV", file);
if (!File.Exists(filePath))
{
Debug.LogError($"CSV file not found: {filePath}");
return;
}
string csvContent = File.ReadAllText(filePath);
ParseCSVContent(csvContent, AnimData);
}
// <20><><EFBFBD><EFBFBD>CSV<53>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD>
public void ParseCSVContent(string csvContent, Dictionary<string, Dictionary<int, List<FrameData>>> AnimData)
{
// <20><><EFBFBD>зָ<D0B7>
var lines = csvContent.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
int lineCount = 0;
foreach (var line in lines)
{
lineCount++;
if (string.IsNullOrWhiteSpace(line) || line.StartsWith(","))
continue;
try
{
// <20>ָ<EFBFBD><D6B8><EFBFBD>
var parts = line.Trim().Split(',');
if (parts.Length < 7)
{
Debug.LogWarning($"Skipping line {lineCount}: insufficient parts ({parts.Length})");
continue;
}
string partID = parts[0];
int texWidth = ParseInt(parts[1]);
int texHeight = ParseInt(parts[2]);
int frameCount = ParseInt(parts[3]); //<2F>ܹ<EFBFBD>֡<EFBFBD><D6A1>
int totalDirections = ParseInt(parts[4]); //<2F>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD><EFBFBD>
int framesPerDirection = ParseInt(parts[5]); //ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD>б<EFBFBD>
// <20><><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>
for (int i = 6; i < 6 + frameCount; i++)
{
// <20><><EFBFBD>㵱ǰ<E3B5B1><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD><D1B4>ڵķ<DAB5><C4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int directionIndex = (i - 6) / framesPerDirection;
if (i >= parts.Length)
{
Debug.LogWarning($"Part {partID} direction {directionIndex}: expected {frameCount} frames, got {i - 6}");
break;
}
if (string.IsNullOrWhiteSpace(parts[i]))
continue;
var frameData = parts[i].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
if (frameData.Length < 10)
{
Debug.LogWarning($"Skipping frame data: insufficient values ({frameData.Length})");
continue;
}
FrameData frame = new FrameData
{
frameID = ParseInt(frameData[0]),
startX = ParseInt(frameData[1]),
startY = ParseInt(frameData[2]),
width = ParseInt(frameData[3]),
height = ParseInt(frameData[4]),
offsetX = ParseInt(frameData[5]),
offsetY = ParseInt(frameData[6]),
sourceWidth = ParseInt(frameData[7]),
sourceHeight = ParseInt(frameData[8])
};
if (!AnimData.ContainsKey(partID))
{
AnimData[partID] = new Dictionary<int, List<FrameData>>();
}
if (!AnimData[partID].ContainsKey(directionIndex))
{
AnimData[partID][frame.frameID / 10000] = new List<FrameData>();
}
AnimData[partID][frame.frameID / 10000].Add(frame);
}
}
catch (Exception e)
{
//Debug.LogError($"Error parsing line {lineCount}: {line}\n{e}");
}
}
}
// <20><>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>
public List<FrameData> GetFramesForPartAndDirection(Dictionary<string, Dictionary<int, List<FrameData>>> AnimData, string partID, int direction)
{
if (AnimData.TryGetValue(partID, out var directions) &&
directions.TryGetValue(direction, out var frames))
{
return frames;
}
Debug.LogWarning($"No frames found for part {partID}, direction {direction}");
return null;
}
public List<FrameData> GetFramesForPartAndDirection(AnimEnum animEnum,string partId,int direction)
{
switch (animEnum)
{
case AnimEnum.Anim_cloth:
return GetFramesForPartAndDirection(clothAnimData,partId,direction);
case AnimEnum.Anim_weapon:
return GetFramesForPartAndDirection(weaponAnimData, partId, direction);
}
return null;
}
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õķ<C3B5><C4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public int GetDirectionCountForPart(string partID)
{
if (clothAnimData.TryGetValue(partID, out var directions))
{
return directions.Count;
}
return 0;
}
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>в<EFBFBD><D0B2><EFBFBD>ID
public List<string> GetAllPartIDs()
{
return clothAnimData.Keys.ToList();
}
// <20><>ȡ<EFBFBD>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><D0B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public Dictionary<int, List<FrameData>> GetPartData(string partID)
{
if (clothAnimData.TryGetValue(partID, out var directions))
{
return directions;
}
return null;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public void ClearAllData()
{
clothAnimData.Clear();
Debug.Log("Cleared all animation data");
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
private int ParseInt(string value)
{
if (int.TryParse(value, out int result))
{
return result;
}
Debug.LogWarning($"Failed to parse integer: {value}");
return 0;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
private int GetDirectionIndex(string partID)
{
if (clothAnimData.TryGetValue(partID, out var directions))
{
return directions.Count;
}
return 0;
}
// <20><><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD><D3A1><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
[ContextMenu("Print Animation Data")]
public void PrintAnimationData()
{
Debug.Log("==== Animation Data Summary ====");
Debug.Log($"Total parts: {clothAnimData.Count}");
foreach (var part in clothAnimData)
{
Debug.Log($"Part: {part.Key}");
foreach (var direction in part.Value)
{
Debug.Log($" Direction {direction.Key}: {direction.Value.Count} frames");
// <20><>ӡǰ3֡<33><D6A1><EFBFBD><EFBFBD>
for (int i = 0; i < Mathf.Min(3, direction.Value.Count); i++)
{
Debug.Log($" {direction.Value[i]}");
}
if (direction.Value.Count > 3)
{
Debug.Log($" ... and {direction.Value.Count - 3} more");
}
}
}
Debug.Log("================================");
}
}
}

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: ed1f933c66c6af746b6505845d26f827
guid: d9048c68984c4c04ebb19b971ba86023
MonoImporter:
externalObjects: {}
serializedVersion: 2

View File

@@ -71,12 +71,12 @@ public class AreaColor
}
public class CellTypeColors
{
public static Color None = new Color(0xb0 / 255f, 0xb0 / 255f, 0xb0 / 255f,0); // dz<><C7B3>ɫ (#b0b0b0)
public static Color Move = new Color(0x00 / 255f, 0xff / 255f, 0x00 / 255f); // <20><><EFBFBD><EFBFBD>ɫ (#00ff00)
public static Color Obstacle = new Color(0xff / 255f, 0x00 / 255f, 0x00 / 255f); // <20>ʺ<EFBFBD>ɫ (#ff0000)
public static Color Hide = new Color(0x80 / 255f, 0x00 / 255f, 0xff / 255f); // <20><><EFBFBD><EFBFBD>ɫ (#8000ff)
public static Color Safe = new Color(0x00 / 255f, 0xff / 255f, 0xff / 255f); // <20><><EFBFBD><EFBFBD>ɫ (#00ffff)
public static Color Stall = new Color(0xff / 255f, 0x80 / 255f, 0x00 / 255f); // <20>ʳ<EFBFBD>ɫ (#ff8000)
public static Color None = new Color(0xb0 / 255f, 0xb0 / 255f, 0xb0 / 255f,0.5f); // dz<><C7B3>ɫ (#b0b0b0)
public static Color Move = new Color(0x00 / 255f, 0xff / 255f, 0x00 / 255f,0.5f); // <20><><EFBFBD><EFBFBD>ɫ (#00ff00)
public static Color Obstacle = new Color(0xff / 255f, 0x00 / 255f, 0x00 / 255f,0.5f); // <20>ʺ<EFBFBD>ɫ (#ff0000)
public static Color Hide = new Color(0x80 / 255f, 0x00 / 255f, 0xff / 255f,0.5f); // <20><><EFBFBD><EFBFBD>ɫ (#8000ff)
public static Color Safe = new Color(0x00 / 255f, 0xff / 255f, 0xff / 255f, 0.5f); // <20><><EFBFBD><EFBFBD>ɫ (#00ffff)
public static Color Stall = new Color(0xff / 255f, 0x80 / 255f, 0x00 / 255f, 0.5f); // <20>ʳ<EFBFBD>ɫ (#ff8000)
public static Color GetColor(CellType cellType)
{
@@ -102,7 +102,7 @@ public class CellTypeColors
color.r = Mathf.Clamp01(color.r);
color.g = Mathf.Clamp01(color.g);
color.b = Mathf.Clamp01(color.b);
color.a = 1f; // ȷ<><C8B7><EFBFBD><EFBFBD>͸<EFBFBD><CDB8>
color.a = 0.5f; // ȷ<><C8B7><EFBFBD><EFBFBD>͸<EFBFBD><CDB8>
return color;
}
public static string GetAreaStr(int barrier)

View File

@@ -50,6 +50,13 @@ public partial class MapManager : MonoBehaviour
public int num; //ˢ<><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
public struct NpcPoint
{
public int areaIdx;
public int id;
public int dir;
}
//<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;
@@ -67,10 +74,6 @@ public partial class MapManager : MonoBehaviour
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>
@@ -79,7 +82,7 @@ public partial class MapManager : MonoBehaviour
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>
private NpcPoint _curNpcPoint = new NpcPoint(); //Npc<70><63><EFBFBD><EFBFBD>
public CellNode[] cellsNode;
private Dictionary<CellType, List<GameObject>> _layCellsMap = new Dictionary<CellType, List<GameObject>>();
@@ -110,17 +113,6 @@ public partial class MapManager : MonoBehaviour
{
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;
@@ -219,19 +211,17 @@ public partial class MapManager : MonoBehaviour
_curMonsterPoint.num = num;
}
public void SetNpcPoint(int idx,int id,int dir)
{
_curNpcPoint.areaIdx= idx;
_curNpcPoint.id = id;
_curNpcPoint.dir = dir;
}
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)
@@ -270,53 +260,6 @@ public partial class MapManager : MonoBehaviour
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)
{
@@ -472,129 +415,14 @@ public partial class MapManager : MonoBehaviour
DestroyImmediate(parentArea.Find(cellName).gameObject);
}
}
public void CreateSpecialPoint(int x, int y, EditCellType cellType)
public void CreateSpecialPoint(Vector2Int pos,UIBaseItem uIBaseItem)
{
if (_curOpenMapId <= 0)
return;
UnityEngine.Object obj = null;
Transform parentArea = mapAreaParent;
if (cellType < EditCellType.AudioTrigger)
obj = null;
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)
{
obj = Resources.Load("Prefabs/reliveCenterPoint");
parentArea = mapReliveArea;
}
else if (cellType == EditCellType.MonsterArea)
{
obj = Resources.Load("Prefabs/monsterPoint");
parentArea = mapMonsterArea;
}
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;
int Idx = 0;
switch (cellType)
{
case EditCellType.ReturnCell:
cellName = "<22>سǵ<D8B3>";
break;
case EditCellType.TeleportCell:
cellName = $"<22><><EFBFBD>͵<EFBFBD>{_curTeleportPointIdx}";
Idx = _curTeleportPointIdx;
break;
case EditCellType.NpcCell:
cellName = $"Npc{_curNpcPointIdx}";
Idx = _curNpcPointIdx;
break;
case EditCellType.PathNodeCell:
cellName = $"PathNode{_curPathNodePointIdx}";
Idx = _curPathNodePointIdx;
break;
case EditCellType.AudioTrigger:
cellName = $"<22><>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>{_curAudioTriggerCenterPoint.areaIdx}";
Idx = _curAudioTriggerCenterPoint.areaIdx;
break;
case EditCellType.TriggerCell:
cellName = $"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{_curTriggerCenterPoint.areaIdx}";
Idx = _curTriggerCenterPoint.areaIdx;
break;
case EditCellType.ReliveCell:
cellName = $"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{_curReliveCenterPoint.areaIdx}";
Idx = _curReliveCenterPoint.areaIdx;
break;
case EditCellType.MonsterArea:
cellName = $"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{_curMonsterPoint.areaIdx}";
Idx = _curMonsterPoint.areaIdx;
if (Idx < 0) return;
break;
case EditCellType.FuBenArea:
cellName = $"<22><><EFBFBD><EFBFBD>ˢ<EFBFBD><CBA2>{_curFuBenPoint.areaIdx}";
Idx = _curMonsterPoint.areaIdx;
break;
case EditCellType.JuBaoArea:
cellName = $"<22>۱<EFBFBD><DBB1><EFBFBD>{_curJuBaoPoint.areaIdx}";
Idx = _curJuBaoPoint.areaIdx;
break;
case EditCellType.NpcPath:
cellName = $"NpcPath{_curNpcPointIdx}{GetCurNpcPathIdx()}";
Idx = _curNpcPointIdx;
break;
case EditCellType.MonsterPath:
cellName = $"MonsterPath{_curMonsterPoint.areaIdx}{GetCurMonsterPathIdx()}";
Idx = _curMonsterPoint.areaIdx;
break;
}
GameObject go = null;
if (parentArea.Find(cellName))
{
go = parentArea.Find(cellName).gameObject;
}
else
{
go = Instantiate(obj) as GameObject;
go.transform.SetParent(parentArea, false);
}
var sceneArea = go.GetComponent<SceneArea>();
sceneArea.SetSceneAreaData(cellType, Idx);
sceneArea.SetAreaPos(new Vector2Int(x, y));
go.name = cellName;
if(cellType == EditCellType.MonsterArea)
{
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);
}
else if (cellType == EditCellType.FuBenArea)
{
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();
}
else if (cellType == EditCellType.JuBaoArea)
{
go.transform.Find("ID").GetComponent<TextMeshPro>().text = "ID:" + _curJuBaoPoint.id.ToString();
}
else if(cellType == EditCellType.TriggerCell)
{
go.transform.GetChild(0).GetComponent<TextMeshPro>().text = _curTriggerCenterPoint.text;
}
if (uIBaseItem.sceneArea != null) return;
var sceneArea = SceneArea.CreateSceneArea(uIBaseItem);
if (sceneArea == null) return;
sceneArea.SetAreaPos(pos);
}
public int GetLayCellCount(CellType lay)

View File

@@ -45,9 +45,6 @@ public partial class MapManager : MonoBehaviour
CellNode cell = GetCell(route[i]);
size = AddPathNodePointSize();
SetCurPathNodePointIdx(size);
CreateSpecialPoint(cell.X, cell.Y, EditCellType.PathNodeCell);
Debug.Log("<22><><EFBFBD><EFBFBD> <20><>" + route[i]);
}
}

View File

@@ -30,6 +30,7 @@ public partial class MapManager : MonoBehaviour
public Transform mapNPCArea;
public Transform mapTeleportArea;
public Transform mapReliveArea;
public Transform mapAudioTrigger;
public Dictionary<string, (int maxRow, int maxCol)> allMaps = new Dictionary<string, (int maxRow, int maxCol)>();
/// <summary>

View File

@@ -20,7 +20,7 @@ public partial class MapManager : MonoBehaviour
map = new Map(width, height, sideWidth, sideHeight);
map.SetMapId(mapid);
//默认设置半透明0.3
map.ChangeGridAlpha(0.4f);
map.ChangeGridAlpha(0.25f);
onMapCreated?.Invoke();
return map;
}

View File

@@ -21,7 +21,7 @@ public partial class MapManager : MonoBehaviour
//<2F><><EFBFBD>Ӹ<EFBFBD><D3B8><EFBFBD><EFBFBD><EFBFBD>
public const int heightPixel = 32;
//<2F><><EFBFBD>ŵ<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>
public const int PicMapPixel = 512;
public const int PicMapPixel = 1000;
public delegate void LoadFinishedCallback();
public LoadFinishedCallback onLoadFinishedCallback;

View File

@@ -1,16 +1,12 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using TMPro;
using UnityEngine;
using static MapManager;
using static UnityEditor.PlayerSettings;
public class SceneArea : MonoBehaviour
{
public EditCellType editCellType;
public int Idx;
public UIBaseItem baseItem { get; set; }
public EditCellType editCellType { get; set; }
public void SetSceneAreaData(EditCellType editCellType,int idx)
{
this.editCellType = editCellType;
@@ -19,24 +15,13 @@ public class SceneArea : MonoBehaviour
public void OnPointerClick()
{
Debug.Log($"ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...");
switch (editCellType)
{
case EditCellType.MonsterArea:
UIWindow.Instance.uiMonstersPanel.SelectMonsterPos(Idx);
break;
}
baseItem?.SetSelectPosItem();
}
public void OnPointerDrag(Vector3 mousePosition)
{
Vector2Int pos = MapManager.Instance.map.selector.GetMouseByCell();
SetAreaPos(pos);
switch (editCellType)
{
case EditCellType.MonsterArea:
UIWindow.Instance.uiMonstersPanel.UpdateMonsterPos(Idx,pos);
break;
}
baseItem?.SetItemPos(pos);
}
public void OnPointerUp()
@@ -48,4 +33,91 @@ public class SceneArea : MonoBehaviour
Vector3 realpos = MapManager.Instance.map.selector.getPosByGrid(pos);
transform.position = realpos;
}
public void SetAreaSize(int radius)
{
float scaleX = MapManager.Instance.map.sideWidth * radius * 2;
float scaleY = MapManager.Instance.map.sideHeight * radius * 2;
transform.localScale = new Vector3(scaleX, scaleY, 1);
}
public static SceneArea CreateSceneArea(UIBaseItem baseItem)
{
UnityEngine.GameObject obj = null;
Transform parentTrans = null;
switch (baseItem.editCellType)
{
case EditCellType.AudioTrigger:
obj = Resources.Load<GameObject>("Prefabs/audioTriggerCenterPoint");
parentTrans = MapManager.Instance.mapAudioTrigger;
break;
case EditCellType.MonsterArea:
obj = Resources.Load<GameObject>("Prefabs/monsterPoint");
parentTrans = MapManager.Instance.mapMonsterArea;
break;
case EditCellType.TriggerCell:
obj = Resources.Load<GameObject>("Prefabs/audioTriggerCenterPoint");
parentTrans = MapManager.Instance.mapAudioTrigger;
break;
case EditCellType.NpcCell:
obj = Resources.Load<GameObject>("Prefabs/npcPoint");
parentTrans = MapManager.Instance.mapNPCArea;
break;
case EditCellType.ReliveCell:
obj = Resources.Load<GameObject>("Prefabs/reliveCenterPoint");
parentTrans = MapManager.Instance.mapReliveArea;
break;
case EditCellType.TeleportCell:
obj = Resources.Load<GameObject>("Prefabs/teleportPoint");
parentTrans = MapManager.Instance.mapTeleportArea;
break;
}
if (obj == null) return null;
GameObject cellObj = GameObject.Instantiate(obj,parentTrans);
var area = cellObj.GetComponent<SceneArea>();
area.editCellType = baseItem.editCellType;
area.baseItem = baseItem;
baseItem.sceneArea = area;
area.RefSAreaInfo();
return area;
}
/// <summary>
/// ˢ<><CBA2><EFBFBD><EFBFBD>Ϣ
/// </summary>
public void RefSAreaInfo()
{
if (baseItem == null)
{
Debug.LogError($"SceneArea Error {editCellType}");
return;
}
switch (editCellType)
{
case EditCellType.AudioTrigger:
break;
case EditCellType.MonsterArea:
if (baseItem is UIMonsterItem monsterItem)
{
transform.Find("Name").GetComponent<TextMeshPro>().text = $"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{monsterItem.monster.id}";
transform.Find("ID").GetComponent<TextMeshPro>().text = "ID:" + monsterItem.monster.id;
transform.Find("Num").GetComponent<TextMeshPro>().text = "Num:" + monsterItem.monster.num;
SetAreaSize(monsterItem.monster.radius);
}
break;
case EditCellType.TriggerCell:
break;
case EditCellType.NpcCell:
if (baseItem is UINpcItem npcItem)
{
transform.Find("ID").GetComponent<TextMeshPro>().text = "ID:" + npcItem.txtID.text;
}
break;
case EditCellType.ReliveCell:
break;
case EditCellType.TeleportCell:
break;
}
}
}

View File

@@ -1,4 +1,3 @@
#if UNITY_EDITOR
using System.Collections;
using System.Collections.Generic;
using System.Text.RegularExpressions;
@@ -29,5 +28,4 @@ public static class UtilityClass
}
return Vector2Int.zero;
}
}
#endif
}

View File

@@ -47,6 +47,10 @@ namespace HxGame.Data
public List<MonsterConfig> monsterConfigs = new List<MonsterConfig>();
public void ClearAll()
{
monsterConfigs.Clear();
}
public void SaveXML(int mapId)
{
string path = PathUtil.GetXmlPath(mapId, "MonstersConfig");

View File

@@ -6,7 +6,7 @@ using UnityEngine.Events;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class UIAudioTriggerItem : MonoBehaviour
public class UIAudioTriggerItem : UIBaseItem
{
public InputField txtPos; //<2F><><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>
public InputField txtRadius; //<2F>

View File

@@ -49,7 +49,7 @@ public class UIAudioTriggerPanel : MonoBehaviour
item.txtPos.text = $"{pos.x},{pos.y}";
item.txtRadius.text = radius.ToString();
item.txtName.text = name;
MapManager.Instance.CreateSpecialPoint(pos.x, pos.y, MapManager.EditCellType.AudioTrigger);
MapManager.Instance.CreateSpecialPoint(pos, item);
}
public void RemoveAll()

View File

@@ -0,0 +1,19 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using static MapManager;
public class UIBaseItem : MonoBehaviour
{
public SceneArea sceneArea { get; set; }
public EditCellType editCellType { get; set; }
public virtual void SetItemPos(Vector2Int pos) {
}
internal virtual void SetSelectPosItem()
{
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: ae2e696246ef50f458dcc38070841e4d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -7,7 +7,7 @@ using UnityEngine.Events;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class UIFuBenItem : MonoBehaviour
public class UIFuBenItem : UIBaseItem
{
public InputField txtOrder; //<2F><><EFBFBD><EFBFBD><EFB2A8>
public InputField txtID; //<2F><><EFBFBD><EFBFBD>ID

View File

@@ -58,7 +58,7 @@ public class UIFuBensPanel : MonoBehaviour
item.txtTime.text = monster.delayTime.ToString();
MapManager.Instance.SetCurFuBenCenterPoint(monster.order, monster.radius, monster.monsterId, monster.num);
MapManager.Instance.CreateSpecialPoint(monster.pos.x, monster.pos.y, MapManager.EditCellType.FuBenArea);
MapManager.Instance.CreateSpecialPoint(monster.pos, item);
}

View File

@@ -7,7 +7,7 @@ using UnityEngine.Events;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class UIJuBaoItem : MonoBehaviour
public class UIJuBaoItem : UIBaseItem
{
public InputField txtID; //<2F><><EFBFBD><EFBFBD>ID
public InputField txtKillCount; //<2F><>ɱ<EFBFBD><C9B1><EFBFBD><EFBFBD>

View File

@@ -59,7 +59,7 @@ public class UIJuBaoPanel : MonoBehaviour
MapManager.Instance.SetCurJuBaoCenterPoint(item.itemIdx, jubao.radius, jubao.id);
MapManager.Instance.CreateSpecialPoint(jubao.pos.x, jubao.pos.y, MapManager.EditCellType.JuBaoArea);
MapManager.Instance.CreateSpecialPoint(jubao.pos, item);
}

View File

@@ -2,13 +2,15 @@ using HxGame.Data;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using static HxGame.Data.MonstersConfig;
using static MapManager;
public class UIMonsterItem : MonoBehaviour
public class UIMonsterItem : UIBaseItem
{
public delegate void ClickItemEvent(UIMonsterItem item);
public ClickItemEvent OnClick;
@@ -57,31 +59,36 @@ public class UIMonsterItem : MonoBehaviour
return;
}
monster.pos = UtilityClass.GetVector2Pos(arg0);
MapManager.Instance.CreateSpecialPoint(monster.pos.x, monster.pos.y, MapManager.EditCellType.MonsterArea);
MapManager.Instance.CreateSpecialPoint(monster.pos, this);
}
//public void SetItem(int idx, MonstersConfig.MonsterConfig m)
public void SetItem(MonstersConfig.MonsterConfig m)
{
//itemIdx = idx;
txtID.text = m.itemIdx.ToString();
txtMonsterID.text = m.id.ToString();
txtName.text = m.id.ToString();
txtPos.text = m.pos.ToString();
paths = m.paths;
monster = m;
txtID.gameObject.SetActive(m.itemIdx != -1);
if (m.groupId > 0)
return;
MapManager.Instance.SetMonsterPoint(m.itemIdx, monster.radius, monster.id, monster.num);
MapManager.Instance.CreateSpecialPoint(monster.pos.x, monster.pos.y, MapManager.EditCellType.MonsterArea);
MapManager.Instance.SetCurMonsterPathIdx(pathIdx);
MapManager.Instance.CreateSpecialPoint(monster.pos, this);
}
public void RefreshPos(Vector2Int newPos)
internal override void SetSelectPosItem()
{
monster.pos = newPos;
txtPos.text = newPos.ToString() ;
base.SetSelectPosItem();
btnClickSelf.Select();
UIWindow.Instance.uiMonstersPanel.OnClickItem(this);
}
public override void SetItemPos(Vector2Int pos)
{
base.SetItemPos(pos);
monster.pos = pos;
txtPos.text = pos.ToString();
btnClickSelf.Select();
}
public void RefreshItem()
{
@@ -91,7 +98,7 @@ public class UIMonsterItem : MonoBehaviour
txtPos.text = monster.pos.ToString();
//ˢ<>³<EFBFBD><C2B3><EFBFBD><EFBFBD>еĶ<D0B5><C4B6><EFBFBD>
MapManager.Instance.SetMonsterPoint(monster.itemIdx, monster.radius, monster.id, monster.num);
MapManager.Instance.CreateSpecialPoint(monster.pos.x, monster.pos.y, EditCellType.MonsterArea);
MapManager.Instance.CreateSpecialPoint(monster.pos, this);
}
public void SetGroup(int group)
@@ -145,14 +152,28 @@ public class UIMonsterItem : MonoBehaviour
{
UIWindow.Instance.uiMonstersPanel.curActiveInput = data.selectedObject.GetComponent<InputField>();
UIWindow.Instance.uiMonstersPanel.curActiveList = paths;
MapManager.Instance.SetCurMonsterPathIdx(pathIdx);
MapManager.Instance.SetEditCellType(MapManager.EditCellType.MonsterPath);
}
private void RemoveSelf()
{
DestroyImmediate(transform.parent.gameObject);
MapManager.Instance.RemoveMonsterPoint(monster.itemIdx);
UIWindow.Instance.uiMonstersPanel.monstersConfig.monsterConfigs.Remove(monster);
if (monster.itemIdx != -1)
{
UIWindow.Instance.uiMonstersPanel.RemoveAllGrop(monster);
}
}
public void DestoryGrop()
{
if (monster.itemIdx != -1) return;
UIWindow.Instance.uiMonstersPanel.monstersConfig.monsterConfigs.Remove(monster);
DestroyImmediate(transform.parent.gameObject);
}
private void OnDestroy()
{
if (sceneArea == null) return;
DestroyImmediate(sceneArea.gameObject);
}
public bool CheckValid()
@@ -242,8 +263,6 @@ public class UIMonsterItem : MonoBehaviour
{
if (OnCopyItem == null)
return;
//OnCopyItem(monster);
OnCopyItem(this);
}

View File

@@ -1,158 +0,0 @@
using HxGame.Data;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class UIMonsterItem_old : MonoBehaviour
{
public InputField txtID; //<2F><><EFBFBD><EFBFBD>ID
public Dropdown dropType; //ˢ<><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public InputField txtPos; //<2F><><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>
public InputField txtRadius; //<2F>
public InputField txtNum; //ˢ<><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public InputField txtTime; //ˢ<><CBA2>ʱ<EFBFBD><EFBFBD><E4A3A8><EFBFBD>
public Dropdown dropPatrol; //Ѳ<><D1B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public InputField txtPath; //NPC·<43><C2B7>
public Button btnDel; //ɾ<><C9BE>
public List<string> paths;
public int itemIdx;
public int pathIdx;
// Start is called before the first frame update
void Awake()
{
AddInputNameClickEvent(txtPos);
AddInputNameClickEvent(txtPath, true);
btnDel.onClick.AddListener(RemoveSelf);
itemIdx = 0;
paths = new List<string>();
}
private void AddInputNameClickEvent(InputField input, bool isPath = false) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Awake<6B>е<EFBFBD><D0B5><EFBFBD>
{
var eventTrigger = input.gameObject.AddComponent<EventTrigger>();
UnityAction<BaseEventData> selectEvent = null;
if (isPath)
selectEvent = OnPathInputFieldClicked;
else
selectEvent = OnInputFieldClicked;
EventTrigger.Entry onClick = new EventTrigger.Entry()
{
eventID = EventTriggerType.PointerClick
};
onClick.callback.AddListener(selectEvent);
eventTrigger.triggers.Add(onClick);
}
private void OnInputFieldClicked(BaseEventData data)
{
if (string.IsNullOrEmpty(txtID.text))
return;
if (string.IsNullOrEmpty(txtRadius.text))
return;
if (string.IsNullOrEmpty(txtNum.text))
return;
//UIWindow.Instance.uiMonstersPanel_old.curActiveInput = data.selectedObject.GetComponent<InputField>();
MapManager.Instance.SetMonsterPoint(itemIdx, Convert.ToInt32(txtRadius.text), Convert.ToInt32(txtID.text), Convert.ToInt32(txtNum.text));
MapManager.Instance.SetEditCellType(MapManager.EditCellType.MonsterArea);
}
private void OnPathInputFieldClicked(BaseEventData data)
{
//UIWindow.Instance.uiMonstersPanel_old.curActiveInput = data.selectedObject.GetComponent<InputField>();
//UIWindow.Instance.uiMonstersPanel_old.curActiveList = paths;
MapManager.Instance.SetCurMonsterPathIdx(pathIdx);
MapManager.Instance.SetEditCellType(MapManager.EditCellType.MonsterPath);
}
private void RemoveSelf()
{
DestroyImmediate(gameObject);
MapManager.Instance.RemoveMonsterPoint(itemIdx);
}
public bool CheckValid()
{
if (string.IsNullOrEmpty(txtID.text))
{
UIWindow.Instance.ShowMessage("<22><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ID");
return false;
}
if (string.IsNullOrEmpty(txtPos.text))
{
UIWindow.Instance.ShowMessage("<22><><EFBFBD><EFBFBD>дˢ<D0B4><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
return false;
}
if (string.IsNullOrEmpty(txtRadius.text))
{
UIWindow.Instance.ShowMessage("<22><><EFBFBD><EFBFBD>дˢ<D0B4>ְ뾶");
return false;
}
if (string.IsNullOrEmpty(txtNum.text))
{
UIWindow.Instance.ShowMessage("<22><><EFBFBD><EFBFBD>дˢ<D0B4><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
return false;
}
if (string.IsNullOrEmpty(txtTime.text))
{
UIWindow.Instance.ShowMessage("<22><><EFBFBD><EFBFBD>дˢ<D0B4><CBA2>ʱ<EFBFBD><CAB1>");
return false;
}
if (dropType.value == (int)CreateMonsterMode.Death)
{
if(!APIs.IsUInt(txtTime.text))
{
UIWindow.Instance.ShowMessage(<><CBA2>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
return false;
}
}
else if(dropType.value == (int)CreateMonsterMode.FixedTime)
{
string[] tmp = txtTime.text.Split(',');
if (tmp.Length != 2)
{
UIWindow.Instance.ShowMessage(<><CBA2>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>");
return false;
}
if(!APIs.IsUInt(tmp[0]))
{
UIWindow.Instance.ShowMessage(<><CBA2>ʱ<EFBFBD><CAB1>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
return false;
}
string[] strTime = tmp[1].Split(':');
if (strTime.Length != 2)
{
UIWindow.Instance.ShowMessage(<><CBA2>ʱ<EFBFBD><CAB1><><CAB1><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>");
return false;
}
for (int i = 0; i < strTime.Length; i++)
{
if (!APIs.IsUInt(strTime[i]))
{
UIWindow.Instance.ShowMessage(<><CBA2>ʱ<EFBFBD><CAB1><><CAB1><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>");
return false;
}
}
}
return true;
}
}

View File

@@ -2,9 +2,11 @@ using HxGame.Data;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using UnityEngine;
using UnityEngine.UI;
using static HxGame.Data.MonstersConfig;
using static System.Net.Mime.MediaTypeNames;
/*
@@ -40,18 +42,14 @@ public class UIMonsterPanel : MonoBehaviour
public ScrollRect svMonsters;
public Transform itemParent;
public int itemIdx;
private UIMonsterItem _curMonsterItem;
//private Dictionary<int, List<UIMonsterItem>> _dicGroupItem;
private Dictionary<int, UIMonsterItem> _dicGroupItem = new(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>item
private Dictionary<int, UIMonsterItem> _dicAllItem = new(); //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>item
public MonstersConfig monstersConfig = new();
private void Awake()
{
itemIdx = 0;
btnClose.onClick.AddListener(OnClickClose);
btnAddGroup.onClick.AddListener(OnAddGroup);
btnDeleteGroup.onClick.AddListener(OnDeleteGroup);
txtMonsterID.onEndEdit.AddListener(OnEditorMonsterId);
txtName.onEndEdit.AddListener(OnEditorMonsterName);
txtRadius.onEndEdit.AddListener(OnEditorMonsterRadius);
@@ -124,190 +122,73 @@ public class UIMonsterPanel : MonoBehaviour
UIWindow.Instance.ShowMessage("<22><><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD>ҳ<EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD>ҳ");
return;
}
_curMonsterItem.transform.parent.GetComponent<RectTransform>().sizeDelta += Vector2Int.up * 30;
UnityEngine.Object obj = Resources.Load("Prefabs/monsterSubItem");
if (obj == null)
var gropcfg = monstersConfig.monsterConfigs.Find((monster) => monster.itemIdx == _curMonsterItem.monster.itemIdx);
if (gropcfg == null) return;
int index = monstersConfig.monsterConfigs.IndexOf(gropcfg);
MonstersConfig.MonsterConfig newmonster = new MonstersConfig.MonsterConfig();
monstersConfig.monsterConfigs.Insert(index + 1, newmonster);
foreach (var prop in typeof(MonsterConfig).GetFields())
{
UIWindow.Instance.ShowMessage("monsterSubItem.prefabʧ<62><CAA7>");
return;
prop.SetValue(newmonster, prop.GetValue(gropcfg));
}
GameObject go = Instantiate(obj) as GameObject; ;
go.transform.SetParent(_curMonsterItem.transform.parent, false);
UIMonsterItem item = go.GetComponent<UIMonsterItem>();
item.SetGroup(_curMonsterItem.monster.itemIdx); //<2F><>item<65><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪgroupId
MonstersConfig.MonsterConfig monster = new MonstersConfig.MonsterConfig();
monster.groupId = _curMonsterItem.monster.itemIdx;
monster.itemIdx = -1;
item.SetItem(monster);
item.OnClick = OnClickItem;
item.OnCopyItem = OnCopyItem;
item.btnClickSelf.Select();
AddGroupMap(_curMonsterItem.monster.itemIdx, _curMonsterItem);
newmonster.itemIdx = -1;
newmonster.groupId = gropcfg.itemIdx;
AddItem(newmonster);
}
private void OnAddGroup(MonstersConfig.MonsterConfig monster)
{
if (_curMonsterItem == null)
return;
_curMonsterItem.transform.parent.GetComponent<RectTransform>().sizeDelta += Vector2Int.up * 30;
UnityEngine.Object obj = Resources.Load("Prefabs/monsterSubItem");
if (obj == null)
{
UIWindow.Instance.ShowMessage("monsterSubItem.prefabʧ<62><CAA7>");
return;
}
GameObject go = Instantiate(obj) as GameObject; ;
go.transform.SetParent(_curMonsterItem.transform.parent, false);
UIMonsterItem item = go.GetComponent<UIMonsterItem>();
item.SetGroup(_curMonsterItem.monster.itemIdx); //<2F><>item<65><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪgroupId
monster.groupId = _curMonsterItem.monster.itemIdx;
item.SetItem(monster);
item.OnClick = OnClickItem;
item.OnCopyItem = OnCopyItem;
AddGroupMap(_curMonsterItem.monster.itemIdx, _curMonsterItem);
}
private void OnDeleteGroup()
{
if (_curMonsterItem == null)
return;
_curMonsterItem.transform.parent.GetComponent<RectTransform>().sizeDelta -= Vector2Int.up * 30;
DestroyImmediate(_curMonsterItem.gameObject);
MapManager.Instance.RemoveMonsterPoint(_curMonsterItem.monster.itemIdx);
_curMonsterItem = null;
}
public void AddItem()
{
Cleanup();
UnityEngine.Object obj = Resources.Load("Prefabs/monsterItem");
if (obj == null)
{
UIWindow.Instance.ShowMessage("monsterItem.prefabʧ<62><CAA7>");
return;
}
GameObject go = Instantiate(obj) as GameObject; ;
go.transform.SetParent(itemParent, false);
UIMonsterItem item = go.transform.Find("monsterSubItem").GetComponent<UIMonsterItem>();
MonstersConfig.MonsterConfig monster = new MonstersConfig.MonsterConfig();
monster.itemIdx = ++itemIdx;
monster.radius = 1;
monster.id = 0;
monster.num = 0;
monster.pos = MapManager.Instance.map.selector.getMapGrid(Camera.main.transform.position);
item.SetItem(monster);
item.OnClick = OnClickItem;
item.OnCopyItem = OnCopyItem;
_curMonsterItem = item;
item.btnClickSelf.Select();
_dicAllItem.Add(monster.itemIdx, item);
monster.groupId = -1;
monstersConfig.monsterConfigs.Insert(0, monster);
AddItem(monster);
}
public void LoadMonsterConfig(int mapId)
{
MonstersConfig mc = new MonstersConfig();
if (!mc.LoadXML(mapId))
monstersConfig.ClearAll();
if (!monstersConfig.LoadXML(mapId))
return;
//<2F><><EFBFBD><EFBFBD>
for (int i = 0; i < mc.monsterConfigs.Count; i++)
for (int i = 0; i < monstersConfig.monsterConfigs.Count; i++)
{
MonstersConfig.MonsterConfig monster = mc.monsterConfigs[i];
if (_curMonsterItem != null && monster.groupId >= 0 && monster.groupId == _curMonsterItem.monster.itemIdx)
OnAddGroup(monster);
else
AddItem(monster);
MonstersConfig.MonsterConfig monster = monstersConfig.monsterConfigs[i];
if (monster.itemIdx == -1) continue;
var itemMonster = AddItem(monster);
if (itemMonster == null) continue;
var groupList = monstersConfig.monsterConfigs.Where(item => item.groupId == monster.itemIdx).ToList();
foreach (var item in groupList)
{
AddItem(item);
}
}
}
public void AddItem(MonstersConfig.MonsterConfig monster)
public UIMonsterItem AddItem(MonstersConfig.MonsterConfig monster)
{
UnityEngine.Object obj = Resources.Load("Prefabs/monsterItem");
if (obj == null)
{
UIWindow.Instance.ShowMessage("monsterItem.prefabʧ<62><CAA7>");
return;
return null;
}
if (monster.itemIdx < 0)
monster.itemIdx = itemIdx++;
else
itemIdx = monster.itemIdx;
var cfgindex = monstersConfig.monsterConfigs.IndexOf(monster);
itemIdx = Math.Max(monster.itemIdx, itemIdx);
GameObject go = Instantiate(obj) as GameObject; ;
go.transform.SetParent(itemParent, false);
go.transform.SetSiblingIndex(cfgindex);
UIMonsterItem item = go.transform.Find("monsterSubItem").GetComponent<UIMonsterItem>();
//item.SetItem(itemIdx++, monster);
item.editCellType = MapManager.EditCellType.MonsterArea;
item.SetItem(monster);
item.OnClick = OnClickItem;
item.OnCopyItem = OnCopyItem;
_curMonsterItem = item;
_dicAllItem.Add(monster.itemIdx, item);
return item;
}
private void SaveItem()
{
if (_curMonsterItem == null)
return;
if (string.IsNullOrEmpty(txtMonsterID.text))
return;
//<2F><><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
if(_curMonsterItem.groupId < 0)
{
string[] tmp = _curMonsterItem.txtPos.text.Split(',');
if (tmp.Length != 2)
return;
int x = Convert.ToInt32(tmp[0]);
int y = Convert.ToInt32(tmp[1]);
_curMonsterItem.monster.pos = new Vector2Int(x, y);
}
else
{
if(_dicGroupItem.ContainsKey(_curMonsterItem.groupId))
{
string[] tmp = _dicGroupItem[_curMonsterItem.groupId].txtPos.text.Split(',');
if (tmp.Length != 2)
return;
int x = Convert.ToInt32(tmp[0]);
int y = Convert.ToInt32(tmp[1]);
_curMonsterItem.monster.pos = new Vector2Int(x, y);
}
}
_curMonsterItem.monster.id = Convert.ToInt32(txtMonsterID.text);
_curMonsterItem.monster.createMode = (CreateMonsterMode)dropRefreshType.value;
if (_curMonsterItem.monster.createMode == CreateMonsterMode.Death)
_curMonsterItem.monster.delayTime = Convert.ToInt32(txtRefreshTime.text);
else
_curMonsterItem.monster.strTime = txtRefreshTime.text;
_curMonsterItem.monster.num = Convert.ToInt32(txtCount.text);
_curMonsterItem.monster.radius = Convert.ToInt32(txtRadius.text);
_curMonsterItem.monster.patrolMode = (PatrolMode)dropPatrol.value;
_curMonsterItem.RefreshItem();
}
public void OnClickItem(UIMonsterItem item)
{
//<2F>ȱ<EFBFBD><C8B1><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ϣ
SaveItem();
Cleanup();
_curMonsterItem = item;
MonstersConfig.MonsterConfig monster = _curMonsterItem.monster;
txtMonsterID.text = monster.id.ToString();
@@ -319,117 +200,70 @@ public class UIMonsterPanel : MonoBehaviour
txtCount.text = monster.num.ToString();
txtRadius.text = monster.radius.ToString();
dropPatrol.value = (int)monster.patrolMode;
for (int i = 0; i < monster.paths.Count; i++)
{
string[] pos = monster.paths[i].Split('_');
int x = Convert.ToInt32(pos[0]);
int y = Convert.ToInt32(pos[1]);
txtPath.text += $"[{monster.paths[i].Replace('_', ',')}]";
MapManager.Instance.AddMonsterPathSize();
MapManager.Instance.CreateSpecialPoint(x, y, MapManager.EditCellType.MonsterPath);
}
}
private void CopyItem(MonstersConfig.MonsterConfig monster)
{
MonstersConfig.MonsterConfig m = new MonstersConfig.MonsterConfig();
m.itemIdx = ++itemIdx;
m.id = monster.id;
m.num = monster.num;
m.radius = monster.radius;
m.pos = monster.pos;
m.createMode = monster.createMode;
m.delayTime = monster.delayTime;
m.strTime = monster.strTime;
m.patrolMode = monster.patrolMode;
m.paths = monster.paths;
AddItem(m);
}
//public void OnCopyItem(MonstersConfig.MonsterConfig monster)
public void OnCopyItem(UIMonsterItem item)
{
SaveItem();
CopyItem(item.monster);
if (!_dicGroupItem.ContainsKey(item.monster.itemIdx))
return;
var count = item.transform.parent.childCount;
if (count == 1)
return;
//<2F><><EFBFBD>Ե<EFBFBD>һ<EFBFBD><D2BB>
for (int i = 1; i < count; i++)
var gropcfg = monstersConfig.monsterConfigs.Find((monster) => monster.itemIdx == item.monster.itemIdx);
if (gropcfg == null) return;
int index = monstersConfig.monsterConfigs.IndexOf(gropcfg);
if (item.monster.itemIdx == -1)
{
var tf = item.transform.parent.GetChild(i);
UIMonsterItem item_new = tf.GetComponent<UIMonsterItem>();
MonstersConfig.MonsterConfig m = new MonstersConfig.MonsterConfig();
m.itemIdx = -1;
m.id = item_new.monster.id;
m.num = item_new.monster.num;
m.radius = item_new.monster.radius;
m.pos = item_new.monster.pos;
m.createMode = item_new.monster.createMode;
m.delayTime = item_new.monster.delayTime;
m.strTime = item_new.monster.strTime;
m.patrolMode = item_new.monster.patrolMode;
m.paths = item_new.monster.paths;
//<2F><><EFBFBD><EFBFBD>
OnAddGroup(m);
MonstersConfig.MonsterConfig newmonster = new MonstersConfig.MonsterConfig();
monstersConfig.monsterConfigs.Insert(index + 1, newmonster);
foreach (var prop in typeof(MonsterConfig).GetFields())
{
prop.SetValue(newmonster, prop.GetValue(gropcfg));
}
newmonster.itemIdx = -1;
newmonster.groupId = gropcfg.itemIdx;
AddItem(newmonster);
}
else {
//<2F>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>ٿ<EFBFBD><D9BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MonstersConfig.MonsterConfig newmonster = new MonstersConfig.MonsterConfig();
monstersConfig.monsterConfigs.Insert(index,newmonster);
foreach (var prop in typeof(MonsterConfig).GetFields())
{
prop.SetValue(newmonster, prop.GetValue(item.monster));
}
newmonster.itemIdx = ++itemIdx;
newmonster.groupId = -1;
AddItem(newmonster);
var grops = monstersConfig.monsterConfigs.FindAll((tt) => tt.groupId == item.monster.itemIdx);
foreach (var gropItem in grops)
{
MonsterConfig config = new MonsterConfig();
monstersConfig.monsterConfigs.Insert(++index, config);
foreach (var prop in typeof(MonsterConfig).GetFields())
{
prop.SetValue(config, prop.GetValue(gropItem));
}
config.groupId = gropItem.itemIdx;
config.itemIdx = -1;
AddItem(config);
}
}
}
public void SaveMonsterConfig()
{
if(_curMonsterItem != null)
OnClickItem(_curMonsterItem);
//ˢ<><CBA2>
int x, y;
MonstersConfig mc = new MonstersConfig();
for (int i = 0; i < itemParent.childCount; i++)
{
var tf = itemParent.GetChild(i);
for(int j=0; j<tf.childCount; j++)
{
UIMonsterItem item = tf.GetChild(j).GetComponent<UIMonsterItem>();
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>item<65><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>pos
if(item.groupId > 0)
{
if (_dicGroupItem.ContainsKey(item.groupId))
{
string[] tmp = _dicGroupItem[item.groupId].txtPos.text.Split(',');
if (tmp.Length != 2)
return;
x = Convert.ToInt32(tmp[0]);
y = Convert.ToInt32(tmp[1]);
item.monster.pos = new Vector2Int(x, y);
}
}
mc.monsterConfigs.Add(item.monster);
}
}
int mapId = MapManager.Instance._curOpenMapId;
mc.SaveXML(mapId);
}
private void AddGroupMap(int groupId, UIMonsterItem item)
public void RemoveAllGrop(MonsterConfig config)
{
if (_dicGroupItem.ContainsKey(groupId))
if (config.itemIdx == -1)
return;
_dicGroupItem.Add(groupId, item);
foreach (Transform child in svMonsters.content)
{
UIMonsterItem item = child.GetComponentInChildren<UIMonsterItem>();
if (item != null && item.monster.groupId == config.itemIdx)
{
item.DestoryGrop();
}
}
}
public void RemoveAll()
@@ -439,24 +273,6 @@ public class UIMonsterPanel : MonoBehaviour
{
DestroyImmediate(itemParent.GetChild(0).gameObject);
}
_dicGroupItem?.Clear();
_dicAllItem?.Clear();
itemIdx = 0;
}
public void SelectMonsterPos(int Idx)
{
if (_dicAllItem.TryGetValue(Idx, out var monsterItem))
{
monsterItem.btnClickSelf.Select();
OnClickItem(monsterItem);
}
}
public void UpdateMonsterPos(int Idx, Vector2Int newPos)
{
if (_dicAllItem.TryGetValue(Idx, out var monsterItem))
{
monsterItem.RefreshPos(newPos);
monsterItem.btnClickSelf.Select();
}
}
}

View File

@@ -6,7 +6,7 @@ using UnityEngine.Events;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class UINpcItem : MonoBehaviour
public class UINpcItem : UIBaseItem
{
public InputField txtPos; //NPC<50><43><EFBFBD><EFBFBD>
public InputField txtID; //NPCID
@@ -58,15 +58,17 @@ public class UINpcItem : MonoBehaviour
{
UIWindow.Instance.uiNpcsPanel.curActiveInput = data.selectedObject.GetComponent<InputField>();
UIWindow.Instance.uiNpcsPanel.curActiveList = paths;
MapManager.Instance.SetCurNpcPathIdx(pathIdx);
MapManager.Instance.SetEditCellType(MapManager.EditCellType.NpcPath);
}
public override void SetItemPos(Vector2Int pos)
{
base.SetItemPos(pos);
txtPos.text = pos.ToString();
}
private void RemoveSelf()
{
DestroyImmediate(gameObject);
MapManager.Instance.RemoveNpcPointSize(itemIdx);
}
public bool CheckValid()

View File

@@ -58,19 +58,9 @@ public class UINpcsPanel : MonoBehaviour
item.txtPos.text = $"{nc.pos.x},{nc.pos.y}";
item.dropDir.value = (int)nc.dir - 1;
item.paths = nc.paths;
MapManager.Instance.CreateSpecialPoint(nc.pos.x, nc.pos.y, MapManager.EditCellType.NpcCell);
MapManager.Instance.SetCurNpcPathIdx(item.pathIdx);
for (int i=0; i<item.paths.Count; i++)
{
string[] pos = item.paths[i].Split('_');
int x = Convert.ToInt32(pos[0]);
int y = Convert.ToInt32(pos[1]);
item.txtPath.text += $"[{item.paths[i].Replace('_', ',')}]";
MapManager.Instance.AddNpcPathSize();
MapManager.Instance.CreateSpecialPoint(x, y, MapManager.EditCellType.NpcPath);
}
item.editCellType = MapManager.EditCellType.NpcCell;
MapManager.Instance.SetNpcPoint(item.itemIdx,nc.id,(int)nc.dir);
MapManager.Instance.CreateSpecialPoint(nc.pos, item);
}

View File

@@ -6,7 +6,7 @@ using UnityEngine.Events;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class UIReliveItem : MonoBehaviour
public class UIReliveItem : UIBaseItem
{
public Dropdown dropType;
public InputField txtMapId; //<2F><>ͼID

View File

@@ -54,7 +54,7 @@ public class UIRelivesPanel : MonoBehaviour
return;
MapManager.Instance.SetReliveCenterPoint(item.reliveIdx, radius);
MapManager.Instance.CreateSpecialPoint(pos.x, pos.y, MapManager.EditCellType.ReliveCell);
MapManager.Instance.CreateSpecialPoint(pos, item);
}
public void RemoveAll()

View File

@@ -6,7 +6,7 @@ using UnityEngine.Events;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class UISellAreaItem : MonoBehaviour
public class UISellAreaItem : UIBaseItem
{
public InputField txtPos; //<2F><><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>
public InputField txtRadius; //<2F>

View File

@@ -48,7 +48,7 @@ public class UISellAreasPanel : MonoBehaviour
MapManager.Instance.SetCurSellCenterPoint(item.itemIdx, radius);
item.txtPos.text = $"{pos.x},{pos.y}";
item.txtRadius.text = radius.ToString();
MapManager.Instance.CreateSpecialPoint(pos.x, pos.y, MapManager.EditCellType.SellArea);
MapManager.Instance.CreateSpecialPoint(pos, item);
}
public void RemoveAll()

View File

@@ -5,7 +5,7 @@ using UnityEngine.Events;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class UITeleportItem : MonoBehaviour
public class UITeleportItem : UIBaseItem
{
public InputField txtPos; //<2F><><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
public InputField txtNextMapID; //<2F>¼<EFBFBD><C2BC><EFBFBD>ͼID

View File

@@ -1,8 +1,5 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using static UnityEditor.PlayerSettings;
public class UITeleportPanel : MonoBehaviour
{
@@ -34,7 +31,7 @@ public class UITeleportPanel : MonoBehaviour
UITeleportItem item = go.GetComponent<UITeleportItem>();
item.itemIdx = size;
var gridPos = MapManager.Instance.map.selector.getMapGrid(Camera.main.transform.position);
MapManager.Instance.CreateSpecialPoint(gridPos.x, gridPos.y, MapManager.EditCellType.TeleportCell);
MapManager.Instance.CreateSpecialPoint(gridPos, item);
}
public void AddItem(Vector2Int pos, int nextMapId, Vector2Int newMapPos)
@@ -55,7 +52,7 @@ public class UITeleportPanel : MonoBehaviour
item.txtPos.text = $"{pos.x},{pos.y}";
item.txtNextMapID.text = nextMapId.ToString();
item.txtNextMapPos.text = $"{newMapPos.x},{newMapPos.y}";
MapManager.Instance.CreateSpecialPoint(pos.x, pos.y, MapManager.EditCellType.TeleportCell);
MapManager.Instance.CreateSpecialPoint(pos, item);
}
public void RemoveAll()

View File

@@ -7,7 +7,7 @@ using UnityEngine.Events;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class UITriggerItem : MonoBehaviour
public class UITriggerItem : UIBaseItem
{
public InputField txtPos; //<2F><><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>
public InputField txtRadius; //<2F>

View File

@@ -53,7 +53,7 @@ public class UITriggerPanel : MonoBehaviour
item.txtRadius.text = t.radius.ToString();
item.txtEvent.text = t.eventId.ToString();
item.dropMode.value = (int)t.mode;
MapManager.Instance.CreateSpecialPoint(t.pos.x, t.pos.y, MapManager.EditCellType.TriggerCell);
MapManager.Instance.CreateSpecialPoint(t.pos, item);
}
public void SaveTriggersConfig()