(client) chore:修改了角色的身体结构的定义方式,现在图片资源统一使用ImageDef加载,使用了更节省资源的初始化方式;fix:修复了定义加载数组时只能初始化数组而不能初始化列表的问题

This commit is contained in:
m0_75251201
2025-08-22 20:43:55 +08:00
parent 3e099137a1
commit 8916440e7e
28 changed files with 1411 additions and 954 deletions

View File

@ -1,3 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Data;
@ -9,17 +10,37 @@ namespace Map
{
public class DoubleMap : MonoBehaviour
{
public List<List<int>> mapData = new List<List<int>>();
public List<List<int>> mapData = new();
public Tilemap textureLevel;
public Vector2Int dataOffset = Vector2Int.zero; // 数据起始点偏移变量
private void Start()
{
var size = 100;
InitializeData(size, size);
for (var i = 0; i < size; i++)
{
for (var j = 0; j < size; j++)
{
var dx = i - size / 2;
var dy = j - size / 2;
mapData[i][j] = (int)(Math.Sqrt(dx * dx + dy * dy) / 5) & 1;
}
}
RefreshAllTiles();
CameraControl.CameraControl.Instance.SetPosition(new Vector3(size * 0.5f, size * 0.5f, -10));
}
// 初始化地图数据大小
public void InitializeData(int width, int height, int defaultValue = 0)
{
mapData.Clear();
for (int x = 0; x < width; x++)
for (var x = 0; x < width; x++)
{
List<int> column = new List<int>();
for (int y = 0; y < height; y++)
var column = new List<int>();
for (var y = 0; y < height; y++)
{
column.Add(defaultValue);
}
@ -59,7 +80,7 @@ namespace Map
public void RefreshTile(int dataX, int dataY)
{
// 计算该数据点影响的四个瓦片位置(该点作为四个角)
Vector2Int[] affectedTiles = new Vector2Int[]
var affectedTiles = new Vector2Int[]
{
new Vector2Int(dataX - 1, dataY - 1), // 作为右下角
new Vector2Int(dataX - 1, dataY), // 作为右上角
@ -79,15 +100,15 @@ namespace Map
if (mapData.Count == 0 || mapData[0].Count == 0) return;
// 计算瓦片地图的有效范围(考虑偏移)
int startX = dataOffset.x;
int startY = dataOffset.y;
int endX = startX + mapData.Count - 1;
int endY = startY + mapData[0].Count - 1;
var startX = dataOffset.x;
var startY = dataOffset.y;
var endX = startX + mapData.Count - 1;
var endY = startY + mapData[0].Count - 1;
// 遍历所有瓦片位置
for (int x = startX; x <= endX; x++)
for (var x = startX; x <= endX; x++)
{
for (int y = startY; y <= endY; y++)
for (var y = startY; y <= endY; y++)
{
UpdateTileAtTilemapPosition(x, y);
}
@ -98,30 +119,30 @@ namespace Map
private void UpdateTileAtTilemapPosition(int tileX, int tileY)
{
// 计算对应的数据坐标(考虑偏移)
int dataX = tileX - dataOffset.x;
int dataY = tileY - dataOffset.y;
var dataX = tileX - dataOffset.x;
var dataY = tileY - dataOffset.y;
// 获取四个角的数据坐标
int topLeftX = dataX;
int topLeftY = dataY;
int topRightX = dataX + 1;
int topRightY = dataY;
int bottomLeftX = dataX;
int bottomLeftY = dataY + 1;
int bottomRightX = dataX + 1;
int bottomRightY = dataY + 1;
var topLeftX = dataX;
var topLeftY = dataY + 1;
var topRightX = dataX + 1;
var topRightY = dataY + 1;
var bottomLeftX = dataX;
var bottomLeftY = dataY;
var bottomRightX = dataX + 1;
var bottomRightY = dataY;
// 检查边界并获取值
int topLeft = GetDataValue(topLeftX, topLeftY);
int topRight = GetDataValue(topRightX, topRightY);
int bottomLeft = GetDataValue(bottomLeftX, bottomLeftY);
int bottomRight = GetDataValue(bottomRightX, bottomRightY);
var topLeft = GetDataValue(topLeftX, topLeftY);
var topRight = GetDataValue(topRightX, topRightY);
var bottomLeft = GetDataValue(bottomLeftX, bottomLeftY);
var bottomRight = GetDataValue(bottomRightX, bottomRightY);
// 获取对应的瓦片
TileBase tile = GetTileFromManager(topLeft, topRight, bottomLeft, bottomRight);
var tile = GetTileFromManager(topLeft, topRight, bottomLeft, bottomRight);
// 设置到瓦片地图
Vector3Int position = new Vector3Int(tileX, tileY, 0);
var position = new Vector3Int(tileX, tileY, 0);
textureLevel.SetTile(position, tile);
}
@ -136,7 +157,7 @@ namespace Map
// 从TileManager获取对应瓦片
private TileBase GetTileFromManager(int topLeft, int topRight, int bottomLeft, int bottomRight)
{
TileManager manager = TileManager.Instance;
var manager = TileManager.Instance;
if (manager == null)
{
Debug.LogError("TileManager实例未找到");
@ -145,13 +166,13 @@ namespace Map
// 尝试获取组合键对应的瓦片
var key = (topLeft, topRight, bottomLeft, bottomRight);
if (manager.tileToTileBaseMapping.TryGetValue(key, out TileBase tile))
if (manager.tileToTileBaseMapping.TryGetValue(key, out var tile))
{
return tile;
}
// 备用方案:尝试获取默认瓦片
if (manager.tileBaseMapping.TryGetValue("Default", out TileBase defaultTile))
if (manager.tileBaseMapping.TryGetValue("Default", out var defaultTile))
{
return defaultTile;
}

View File

@ -10,21 +10,7 @@ namespace Map
public Tilemap buildLevel;
public Tilemap plantLevel;
public void Start()
{
var perline= Utils.PerlinNoise.Instance;
var size = 100;
baseLevel.InitializeData(size, size);
for (var i = 0; i < size; i++) {
for (var j = 0; j < size; j++) {
var dx = i - size/2;
var dy = j - size/2;
baseLevel.mapData[i][j] = (int)(Math.Sqrt(dx*dx + dy*dy) / 5) & 1;
}
}
baseLevel.RefreshAllTiles();
}
public bool CanPassThrough(int x, int y)
{
return GetTilePassCost(x, y) < 1;