(client) feat:完成瓦片地图的资源初始化

This commit is contained in:
m0_75251201
2025-07-17 13:11:42 +08:00
parent f4d22af674
commit a4a0f11344
4 changed files with 83 additions and 10 deletions

View File

@ -109,6 +109,14 @@ namespace Data
public string packID;
public string packRootPath;
public string Name
{
get
{
return packAbout.name;
}
}
public bool LoadPack(string packPath)
{
packRootPath=System.IO.Path.GetFullPath(packPath);;

View File

@ -106,6 +106,10 @@ namespace Managers
return pack;
}
public string GetDefinePackageName(Define define)
{
return GetDefinePackage(define)?.Name;
}
public string GetPackagePath(string packID)
{
if (packs.TryGetValue(packID, out var pack))

View File

@ -72,5 +72,16 @@ namespace Managers
packagesImages.Clear();
Init();
}
public Sprite GetSprite(string name)
{
return sprites.GetValueOrDefault(name, null);
}
public Sprite GetSprite(string name, int index)
{
name += $"_{index}";
return GetSprite(name);
}
}
}

View File

@ -1,5 +1,6 @@
using System.Collections.Generic;
using System.Linq;
using Data;
using UnityEngine;
using UnityEngine.Tilemaps;
@ -36,27 +37,76 @@ namespace Map
public class TileManager:Utils.Singleton<TileManager>
{
public Dictionary<(int, int, int, int), TileBase> TileToTileBaseMapping = new();
public Dictionary<(int, int, int, int), TileBase> tileToTileBaseMapping = new();
public Dictionary<string, int> tileID = new();
public void Init()
{
if( TileToTileBaseMapping.Count>0||!Managers.DefineManager.Instance.defines.TryGetValue("TileDef",out var tileType))
{
if (tileToTileBaseMapping.Count > 0)
return;
}
Managers.PackagesImageManager.Instance.Init();
foreach (var tileDef in tileType.Values)
var imagePack = Managers.PackagesImageManager.Instance;
var tileType = Managers.DefineManager.Instance.QueryDefinesByType<TileDef>();
for (var i = 1; i < tileType.Length; i++)
{
var packPath= Managers.DefineManager.Instance.GetDefinePackage(tileDef)?.packRootPath;
if(packPath==null)
continue;
tileID.Add(tileType[i].name, i);
}
var tileTextureMappingDef=Managers.DefineManager.Instance.QueryDefinesByType<TileMappingTableDef>();
foreach (var mappingTableDef in tileTextureMappingDef)
{
foreach (var keyVal in mappingTableDef.tileDict)
{
var key = keyVal.Key;
var val=keyVal.Value;
var parts = key.Split('_');
if (parts.Length != 4)
{
var packName = Managers.DefineManager.Instance.GetDefinePackageName(mappingTableDef);
Debug.LogError($"来自{packName}定义的TileMappingTableDef键值{key}内容不合法!\n应该为[瓦片名称_瓦片名称_瓦片名称_瓦片名称]的格式");
continue;
}
if (!(tileID.TryGetValue(parts[0], out var k1) &&
tileID.TryGetValue(parts[1], out var k2) &&
tileID.TryGetValue(parts[2], out var k3) &&
tileID.TryGetValue(parts[3], out var k4)))
{
var packName = Managers.DefineManager.Instance.GetDefinePackageName(mappingTableDef);
Debug.LogError($"来自{packName}定义的TileMappingTableDef键值{key}中存在未定义的瓦片名称");
continue;
}
var sprite = imagePack.GetSprite(val);
if (sprite == null)
{
var packName = Managers.DefineManager.Instance.GetDefinePackageName(mappingTableDef);
Debug.LogError($"来自{packName}定义的TileMappingTableDef键值{val}中存在未定义的图片名称");
continue;
}
if (tileToTileBaseMapping.ContainsKey((k1, k2, k3, k4)))
{
var packName = Managers.DefineManager.Instance.GetDefinePackageName(mappingTableDef);
Debug.LogWarning($"来自{packName}定义的TileMappingTableDef键值{(k1, k2, k3, k4)}存在重复索引,将忽略重复项");
continue;
}
var tile = LoadTile(sprite);
tileToTileBaseMapping.Add((k1, k2, k3, k4), tile);
}
}
}
public void Reload()
{
TileToTileBaseMapping.Clear();
tileToTileBaseMapping.Clear();
Init();
}
public TileBase LoadTile(Sprite sprite)
{
var newTile = ScriptableObject.CreateInstance<Tile>();
newTile.sprite = sprite;
newTile.color = Color.white;
newTile.colliderType = Tile.ColliderType.Sprite;
return newTile;
}
}
}