// Magica Cloth 2.
// Copyright (c) 2024 MagicaSoft.
// https://magicasoft.jp
using System;
using System.Collections.Generic;
using UnityEngine;
namespace MagicaCloth2
{
///
/// PreBuildの保存データ
///
[System.Serializable]
public class PreBuildSerializeData : ITransform
{
///
/// 有効状態
/// Valid state.
///
public bool enabled = false;
///
/// ビルド識別ID
///
public string buildId;
///
/// ビルドデータの共有部分
/// このデータは複数のインスタンスで共有されるためScriptableObjectとして外部アセットとして保存される
///
public PreBuildScriptableObject preBuildScriptableObject = null;
///
/// ビルドデータの固有部分
/// このデータはインスタンスごとに固有となる
///
public UniquePreBuildData uniquePreBuildData;
//=========================================================================================
///
/// PreBuild利用の有無
///
///
public bool UsePreBuild() => enabled;
///
/// PreBuildデータの検証
///
///
public ResultCode DataValidate()
{
if (uniquePreBuildData == null)
return new ResultCode(Define.Result.PreBuildData_Empty);
var preBuildData = GetSharePreBuildData();
if (preBuildData == null)
return new ResultCode(Define.Result.PreBuildData_Empty);
var result = preBuildData.DataValidate();
if (result.IsFaild())
return result;
result = uniquePreBuildData.DataValidate();
if (result.IsFaild())
return result;
return ResultCode.Success;
}
public SharePreBuildData GetSharePreBuildData()
{
if (preBuildScriptableObject == null)
return null;
if (string.IsNullOrEmpty(buildId))
return null;
return preBuildScriptableObject.GetPreBuildData(buildId); ;
}
///
/// ビルドIDを生成する(英数字8文字)
///
///
public static string GenerateBuildID()
{
Guid g = Guid.NewGuid();
return g.ToString().Substring(0, 8);
}
public void GetUsedTransform(HashSet transformSet)
{
uniquePreBuildData.GetUsedTransform(transformSet);
}
public void ReplaceTransform(Dictionary replaceDict)
{
uniquePreBuildData.ReplaceTransform(replaceDict);
}
}
}