190 lines
5.7 KiB
C#
190 lines
5.7 KiB
C#
|
|
using DA_Assets.DAI;
|
|||
|
|
using DA_Assets.Extensions;
|
|||
|
|
using DA_Assets.FCU.Extensions;
|
|||
|
|
using DA_Assets.FCU.Model;
|
|||
|
|
using DA_Assets.Logging;
|
|||
|
|
using System;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using UnityEngine;
|
|||
|
|
|
|||
|
|
namespace DA_Assets.FCU
|
|||
|
|
{
|
|||
|
|
[Serializable]
|
|||
|
|
public class CurrentProject : MonoBehaviourLinkerRuntime<FigmaConverterUnity>
|
|||
|
|
{
|
|||
|
|
public string GetInstanceKey(string id)
|
|||
|
|
{
|
|||
|
|
foreach (var item in figmaProject.Components)
|
|||
|
|
{
|
|||
|
|
if (item.Key == id)
|
|||
|
|
{
|
|||
|
|
return item.Value.Key;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public bool TryGetById(string id, out FObject fobject)
|
|||
|
|
{
|
|||
|
|
foreach (var item in this.CurrentPage)
|
|||
|
|
{
|
|||
|
|
if (item.Id == id)
|
|||
|
|
{
|
|||
|
|
fobject = item;
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
fobject = default;
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public bool TryGetByIndex(int index, out FObject fobject)
|
|||
|
|
{
|
|||
|
|
if (index < 0)
|
|||
|
|
{
|
|||
|
|
fobject = default;
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
fobject = this.CurrentPage[index];
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public bool TryGetParent(FObject fobject, out FObject parent)
|
|||
|
|
{
|
|||
|
|
if (fobject.Data.ParentIndex < 0)
|
|||
|
|
{
|
|||
|
|
parent = default;
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
parent = this.CurrentPage[fobject.Data.ParentIndex];
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public FObject GetRootFrame(FObject fobject)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
if (fobject.ContainsTag(FcuTag.Frame))
|
|||
|
|
{
|
|||
|
|
return fobject;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
TryGetParent(fobject, out FObject parent);
|
|||
|
|
|
|||
|
|
//If the objects that are children of the "Page"
|
|||
|
|
//don’t have the "Frame" tag, this may cause errors in this place.
|
|||
|
|
/*if (parent.IsDefault())
|
|||
|
|
{
|
|||
|
|
return fobject;
|
|||
|
|
}*/
|
|||
|
|
|
|||
|
|
return GetRootFrame(parent);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public FObject GetNotDuplicate(FObject fobject)
|
|||
|
|
{
|
|||
|
|
if (fobject.Data.Parent.Equals(default(FObject)))
|
|||
|
|
return default;
|
|||
|
|
|
|||
|
|
if (fobject.Data.Parent.Data.IsDuplicate == false)
|
|||
|
|
return fobject;
|
|||
|
|
|
|||
|
|
TryGetParent(fobject, out FObject parent);
|
|||
|
|
return GetRootFrame(parent);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public bool HasLocalPrefab(SyncData fobject, out SyncHelper localPrefab)
|
|||
|
|
{
|
|||
|
|
foreach (SyncHelper lp in localPrefabs)
|
|||
|
|
{
|
|||
|
|
if (lp.Data.Hash == fobject.Hash)
|
|||
|
|
{
|
|||
|
|
localPrefab = lp;
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
foreach (SyncHelper lp in localPrefabs)
|
|||
|
|
{
|
|||
|
|
if (lp.Data.Id == fobject.Id && lp.Data.Names.FileName == fobject.Names.FileName)
|
|||
|
|
{
|
|||
|
|
localPrefab = lp;
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
localPrefab = null;
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void LoadLocalPrefabs()
|
|||
|
|
{
|
|||
|
|
DALogger.Log(FcuLocKey.log_search_local_prefabs.Localize());
|
|||
|
|
localPrefabs = LoadAssetFromFolder<SyncHelper>(monoBeh.Settings.PrefabSettings.PrefabsPath, "t:Prefab");
|
|||
|
|
DALogger.Log(FcuLocKey.log_local_prefabs_found.Localize(localPrefabs.Count));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public List<T> LoadAssetFromFolder<T>(string fontsPath, string customType = null) where T : UnityEngine.Object
|
|||
|
|
{
|
|||
|
|
List<string> pathes = new List<string>();
|
|||
|
|
List<T> loadedAssets = new List<T>();
|
|||
|
|
|
|||
|
|
if (customType == null)
|
|||
|
|
customType = $"t:{typeof(T).Name}";
|
|||
|
|
|
|||
|
|
if (monoBeh.IsCancellationRequested(TokenType.Import))
|
|||
|
|
return loadedAssets;
|
|||
|
|
|
|||
|
|
#if UNITY_EDITOR
|
|||
|
|
string[] guids = UnityEditor.AssetDatabase.FindAssets(customType, new string[] { fontsPath.ToRelativePath() });
|
|||
|
|
|
|||
|
|
foreach (string guid in guids)
|
|||
|
|
{
|
|||
|
|
if (monoBeh.IsCancellationRequested(TokenType.Import))
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
string path = UnityEditor.AssetDatabase.GUIDToAssetPath(guid);
|
|||
|
|
T asset = UnityEditor.AssetDatabase.LoadAssetAtPath<T>(path);
|
|||
|
|
|
|||
|
|
if (asset != null)
|
|||
|
|
{
|
|||
|
|
loadedAssets.Add(asset);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
return loadedAssets;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void SetRootFrames(List<FObject> fobjects)
|
|||
|
|
{
|
|||
|
|
DALogger.Log("SetRootFrames");
|
|||
|
|
for (int i = 0; i < fobjects.Count; i++)
|
|||
|
|
{
|
|||
|
|
if (fobjects[i].ContainsTag(FcuTag.Page))
|
|||
|
|
continue;
|
|||
|
|
|
|||
|
|
FObject rootFrameFObject = monoBeh.CurrentProject.GetRootFrame(fobjects[i]);
|
|||
|
|
fobjects[i].Data.RootFrame = rootFrameFObject.Data;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
[SerializeField] List<SyncData> lastImportedFrames = new List<SyncData>();
|
|||
|
|
public List<SyncData> LastImportedFrames { get => lastImportedFrames; set => SetValue(ref lastImportedFrames, value); }
|
|||
|
|
|
|||
|
|
[SerializeField] List<SyncHelper> localPrefabs = new List<SyncHelper>();
|
|||
|
|
public List<SyncHelper> LocalPrefabs { get => localPrefabs; set => SetValue(ref localPrefabs, value); }
|
|||
|
|
|
|||
|
|
[SerializeField] string projectName;
|
|||
|
|
public string ProjectName { get => projectName; set => projectName = value; }
|
|||
|
|
|
|||
|
|
private FigmaProject figmaProject;
|
|||
|
|
public FigmaProject FigmaProject { get => figmaProject; set => figmaProject = value; }
|
|||
|
|
|
|||
|
|
private List<FObject> currentPage = new List<FObject>();
|
|||
|
|
public List<FObject> CurrentPage { get => currentPage; set => currentPage = value; }
|
|||
|
|
}
|
|||
|
|
}
|