备份CatanBuilding瘦身独立工程

This commit is contained in:
JSD\13999
2026-05-26 16:15:54 +08:00
commit 2d0e6a61b7
12001 changed files with 2431925 additions and 0 deletions

View File

@@ -0,0 +1,173 @@
#if UNITY_EDITOR
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using cfg;
using Newtonsoft.Json;
using SimpleJSON;
using UnityEditor;
#endif
using UnityEngine;
using UnityEngine.UI;
[ExecuteInEditMode]
[System.Serializable]
public class CubeScript : MonoBehaviour
{
#if UNITY_EDITOR
public int PropId = 0;
[AngleSelector]
public int Angle = 0;
public bool IsBorder = false;
public bool DoubleClick = false;
public int ID = 1;
[HideInInspector]
public Vector3 LocalPos = Vector3.zero;
[HideInInspector]
public CubeConfigData ConfigData;
private int _oidAngle = 0;
private int _oidPropId = 0;
private GameObject currentInstance;
private Tables _tables;
private Tables GetTable()
{
if (_tables == null)
{
_tables = new Tables((string fileName) =>
{
return JSON.Parse(
File.ReadAllText(Application.dataPath + "/ABPackage/pkgFirstPackage/Data/" + fileName + ".json"));
});
}
return _tables;
}
private void Awake()
{
_oidAngle = Angle;
if (PropId > 0)
{
ApplyId();
}
}
void OnValidate()
{
if (PropId != _oidPropId)
{
_oidPropId = PropId;
//EditorApplication.delayCall += UpdateModel;
}
if (Angle != _oidAngle)
{
_oidAngle = Angle;
if (ConfigData != null)
{
ConfigData.PropDirection = _oidAngle;
}
EditorApplication.delayCall += UpdateAngle;
}
}
public void ApplyId()
{
UpdateModel();
}
private void UpdateAngle()
{
if (currentInstance != null && ConfigData != null)
{
ConfigData.PropDirection = _oidAngle;
currentInstance.transform.localEulerAngles = new Vector3(0, 0, -ConfigData.PropDirection);
}
}
private void UpdateModel()
{
if (PropId <= 0)
{
_oidAngle = 0;
Angle = 0;
ConfigData = null;
return;
}
string templateName = GetTable().TbDiggingItemList.Get(PropId).GridTemplate;
string templateUrl = $"Assets/AssetsPackage/art/DgSand/Scriptable/CubeConfig/{templateName}.asset";
CubeConfigData asset = AssetDatabase.LoadAssetAtPath<CubeConfigData>(templateUrl);
if (asset == null)
{
Debug.LogError("格子上的道具布局信息 没找到,请检查配置!!" + PropId);
return;
}
ConfigData = asset.Copy();
ConfigData.PropDirection = _oidAngle;
// 清空所有子物体
//foreach (Transform child in transform)
//{
// DestroyImmediate(child.gameObject);
//}
currentInstance = null;
if (!GetTable().TbDiggingItemList.DataMap.TryGetValue(PropId, out DiggingItemList info))
{
return;
}
string modelName = GetTable().TbDiggingItemList.Get(PropId).ItemGridResource;
Debug.LogWarning("目标道具资源名字:" + modelName + " x:" + LocalPos.x + " y:" + LocalPos.y + " angle:" + ConfigData.PropDirection);
string modelUrl = $"Assets/ABPackage/pkgDownloads/EventDigging/DgSand/GridProp/DgSand{modelName}.prefab";
GameObject prefab = AssetDatabase.LoadAssetAtPath<GameObject>(modelUrl);
if (prefab != null)
{
prefab.transform.localPosition = new Vector3(0, 0, -0.5f);
prefab.transform.localEulerAngles = new Vector3(0, 0, -ConfigData.PropDirection);
currentInstance = (GameObject)PrefabUtility.InstantiatePrefab(prefab, transform);
}
else
{
Debug.LogWarning("Prefab not found at path: " + modelUrl);
}
}
public void Update()
{
LocalPos = this.transform.localPosition;
}
public string ToJson()
{
if (ConfigData != null && PropId <= 0)
{
Debug.LogError("检查资源 PropId 没有设置!!!" + " x:" + LocalPos.x + " y:" + LocalPos.y);
return String.Empty;
}
if (PropId > 0 && ConfigData == null)
{
EditorUtility.DisplayDialog("格子道具配置数据没有生成 ConfigData", "PropId " + PropId + " 位置:" + " x:" + LocalPos.x + " y:" + LocalPos.y, "OK");
return String.Empty;
}
var serializablePos = new SerializableVector3(LocalPos);
return JsonConvert.SerializeObject(new { IsBorder = IsBorder, DoubleClick = DoubleClick, PropId = PropId, ConfigData = ConfigData, LocalPos = serializablePos, ID = ID });
}
#endif
}