彻底换一下
This commit is contained in:
8
Assets/Scripts/Character.meta
Normal file
8
Assets/Scripts/Character.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a3b6ed6e938fd67438540d9912bae0bf
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
256
Assets/Scripts/Character/AnimParserComponent.cs
Normal file
256
Assets/Scripts/Character/AnimParserComponent.cs
Normal 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("================================");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ed1f933c66c6af746b6505845d26f827
|
||||
guid: d9048c68984c4c04ebb19b971ba86023
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -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");
|
||||
|
||||
@@ -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>뾶
|
||||
|
||||
@@ -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()
|
||||
|
||||
19
Assets/Scripts/UI/UIBaseItem.cs
Normal file
19
Assets/Scripts/UI/UIBaseItem.cs
Normal 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()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
11
Assets/Scripts/UI/UIBaseItem.cs.meta
Normal file
11
Assets/Scripts/UI/UIBaseItem.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ae2e696246ef50f458dcc38070841e4d
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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>뾶
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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>뾶
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user