using UnityEngine;
public class TextureChanger : CombineTileByCPU
{
public Shader cutoutShader; // 材质拼图着色器
private JsonConfigParser.TileConfig config; // 配置信息
private bool isDisabled = true; // 是否禁用点击更换贴图
private Vector3 mouseDownPosition; // 记录鼠标按下的位置
private const float dragThreshold = 5f; // 拖拽的阈值(像素)
///
/// 获取当前配置
///
///
public override JsonConfigParser.TileConfig GetConfig()
{
return config;
}
///
/// 设置当前配置
///
///
public override void SetTileConfig(string jsonContent)
{
config = ConfigManager.getTestTileConfig(jsonContent);
}
///
/// 获取当前共享材质
///
///
public override Material GetCurrentMaterial()
{
// 返回当前对象的材质
return GetComponent().sharedMaterial;
}
///
/// 获取当前材质拼图着色器
///
///
public override Shader GetCurrentShader()
{
return cutoutShader;
}
///
/// 设置当前贴图
///
///
public void SetCurrentTexture(string jsonStr)
{
UpdateMaterial(jsonStr);
}
///
/// 鼠标按下事件处理
///
private void OnMouseDown()
{
// 记录鼠标按下的位置
mouseDownPosition = Input.mousePosition;
}
///
/// 鼠标抬起事件处理
///
private void OnMouseUp()
{
// 检查是否是点击而非拖拽
if (Vector3.Distance(mouseDownPosition, Input.mousePosition) > dragThreshold)
{
return; // 如果拖拽距离超过阈值,则不触发点击事件
}
// 执行点击检测逻辑
HandleClick();
}
///
/// 处理点击事件
///
private void HandleClick()
{
if (isDisabled)
{
return;
}
string jsonStr = ConfigCache.Instance.GetConfig(gameObject.tag);
if (!string.IsNullOrEmpty(jsonStr))
{
SetCurrentTexture(jsonStr);
}
}
///
/// 禁用点击更换贴图
///
public void EnableTextureChanger()
{
isDisabled = false;
}
///
/// 启用点击更换贴图
///
public void DisableTextureChanger()
{
isDisabled = true;
}
}