阶段性完成

This commit is contained in:
SoulliesOfficial
2025-12-08 05:27:53 -05:00
parent ef7b479712
commit f7af60351b
8770 changed files with 15637030 additions and 208354 deletions

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 57c98ac5b7795e245bf9eb8879c5c044
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 4637bb97f76aab64b99a7ec24b9e6f70
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 886d72048e1cccd44b08012df11c41a6
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,104 @@
fileFormatVersion: 2
guid: 25ea3d0b87bebac4b807135b88f01f3f
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 2
textureShape: 1
singleChannelComponent: 0
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: 4
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 1
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,88 @@
#if UNITY_EDITOR
using UnityEditor;
#endif
using UnityEngine;
namespace FIMSpace.FTools
{
[CreateAssetMenu(fileName = "Animation Clips Pack", menuName = "FImpossible Creations/Utilities/Animation Clips Pack", order = 400)]
public class FAnimationClipsPack : FContainerBase
{
public override void AddAsset(Object obj)
{
if (obj == null) return;
bool isRightType = false;
if (obj is AnimationClip) isRightType = true;
if (!isRightType)
{
UnityEngine.Debug.Log("[Animation Clips Pack] Wrong asset type! You're trying to add '" + obj.GetType() + "'!'");
return;
}
base.AddAsset(obj);
}
}
#region Inspector window draw
#if UNITY_EDITOR
[CanEditMultipleObjects, CustomEditor(typeof(FAnimationClipsPack))]
public class FAnimationClipsPackEditor : FContainerBaseEditor
{
public FAnimationClipsPack Get { get { if (_get == null) _get = (FAnimationClipsPack)target; return _get; } }
private FAnimationClipsPack _get;
GUILayoutOption[] g_opt = null;
protected override Color DragAndDropBoxColor { get { return new Color(0.2f, 1f, .6f, 0.45f); } }
protected override string HeaderInfo { get { return "Simple file in which you can keep multiple Animation Clip files to avoid mess in project directory."; } }
protected override string MainDragAndDropText { get { return " Drag & Drop your Animation Clips here"; ; } }
protected override bool DrawDragAndDropToCopy { get { return true; } }
protected override bool DrawDragAndDropToRemove { get { return true; } }
protected override void GUIBody()
{
float maxW = EditorGUIUtility.currentViewWidth;
int width = 0;
int size = 72;
if (g_opt == null) g_opt = new GUILayoutOption[2];
g_opt[0] = GUILayout.Width(size);
g_opt[1] = GUILayout.Height(size);
GUILayout.BeginHorizontal();
for (int i = 0; i < Get.ContainedAssets.Count; i++)
{
var mt = Get.ContainedAssets[i];
if ((mt.Reference is AnimationClip) == false) continue;
AnimationClip clp = mt.Reference as AnimationClip;
GUIContent gct = new GUIContent(mt.Reference.name);
float bWth = EditorStyles.miniButton.CalcSize(gct).x;
width += (int)bWth + 2;
if (width > maxW - 14)
{
width = size + 2;
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal();
}
if (GUILayout.Button(mt.Reference.name, GUILayout.Width(bWth-1)))
{
Selection.activeObject = mt.Reference;
}
}
GUILayout.EndHorizontal();
}
}
#endif
#endregion
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 0ff8f635985c71a4ead6236457713fb9
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {fileID: 2800000, guid: 25ea3d0b87bebac4b807135b88f01f3f, type: 3}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,346 @@
#if UNITY_EDITOR
using FIMSpace.FEditor;
using UnityEditor;
#endif
using System.Collections.Generic;
using UnityEngine;
namespace FIMSpace.FTools
{
public abstract class FContainerBase : ScriptableObject
{
public List<AssetReference> ContainedAssets = new List<AssetReference>();
public virtual bool Contains(Object obj)
{
for (int i = ContainedAssets.Count - 1; i >= 0; i--)
{
if (ContainedAssets[i].Reference == null) { ContainedAssets.RemoveAt(i); continue; }
if (ContainedAssets[i].Reference == obj) return true;
}
return false;
}
public virtual void Remove(Object obj)
{
for (int i = ContainedAssets.Count - 1; i >= 0; i--)
{
if (ContainedAssets[i].Reference == null) { ContainedAssets.RemoveAt(i); continue; }
if (ContainedAssets[i].Reference == obj) { ContainedAssets.RemoveAt(i); return; }
}
}
public virtual void RemoveAndDestroy(Object obj)
{
if (obj == null) return;
Remove(obj);
#if UNITY_EDITOR
AssetDatabase.RemoveObjectFromAsset(obj);
if (obj) DestroyImmediate(obj, true);
#endif
}
public virtual void CopyAsset(Object obj, string extension = ".asset")
{
if (obj == null) return;
#if UNITY_EDITOR
string path = AssetDatabase.GetAssetPath(this);
AssetDatabase.CreateAsset(Instantiate(obj), System.IO.Path.GetDirectoryName(path) + "/" + obj.name + " (copy)" + extension);
#endif
}
public virtual void Add(Object obj)
{
if (obj == null) return;
AssetReference a = new AssetReference();
a.Reference = obj;
#if UNITY_EDITOR
a.OriginalExtension = System.IO.Path.GetExtension(AssetDatabase.GetAssetPath(obj));
#endif
ContainedAssets.Add(a);
}
[System.Serializable]
public class AssetReference
{
public Object Reference;
public string OriginalExtension = "";
}
public AssetReference GetReferenceTo(Object asset)
{
if (asset == null) return null;
for (int i = ContainedAssets.Count - 1; i >= 0; i--)
{
if (ContainedAssets[i].Reference == null) { ContainedAssets.RemoveAt(i); continue; }
if (ContainedAssets[i].Reference == asset) return ContainedAssets[i];
}
return null;
}
public virtual void AddAsset(Object obj)
{
if (obj == null) return;
if (Contains(obj))
{
UnpackSingleAsset(obj);
return;
}
if (!Contains(obj)) Add(obj);
AddAssetTo(this, obj);
}
public virtual void UnpackSingleAsset(Object asset)
{
if (asset == null) return;
UnpackSingleAsset(this, asset);
}
public virtual void UnpackAll()
{
UnpackAll(this);
}
public void _SetDirty()
{
#if UNITY_EDITOR
EditorUtility.SetDirty(this);
#endif
}
#region Static Editor Utility Methods
public static void AddAssetTo(ScriptableObject container, Object asset)
{
#if UNITY_EDITOR
string prePath = AssetDatabase.GetAssetPath(asset);
AssetDatabase.RemoveObjectFromAsset(asset);
AssetDatabase.AddObjectToAsset(asset, AssetDatabase.GetAssetPath(container));
AssetDatabase.SaveAssets();
AssetDatabase.DeleteAsset(prePath);
#endif
}
public static void UnpackAll(FContainerBase container)
{
#if UNITY_EDITOR
string path = AssetDatabase.GetAssetPath(container);
var assets = AssetDatabase.LoadAllAssetsAtPath(path);
for (int a = 0; a < assets.Length; a++)
{
UnityEngine.Object asset = assets[a];
if (asset == container) continue;
var refr = container.GetReferenceTo(asset);
if (refr == null) return;
AssetDatabase.RemoveObjectFromAsset(asset);
AssetDatabase.CreateAsset(asset, System.IO.Path.GetDirectoryName(path) + "/" + asset.name + refr.OriginalExtension);
}
container.ContainedAssets.Clear();
AssetDatabase.ImportAsset(path);
#endif
}
public static void UnpackSingleAsset(FContainerBase container, Object tgt)
{
#if UNITY_EDITOR
string path = AssetDatabase.GetAssetPath(container);
var assets = AssetDatabase.LoadAllAssetsAtPath(path);
for (int a = 0; a < assets.Length; a++)
{
UnityEngine.Object asset = assets[a];
if (asset != tgt) continue;
var refr = container.GetReferenceTo(tgt);
if (refr == null) return;
AssetDatabase.RemoveObjectFromAsset(tgt);
AssetDatabase.CreateAsset(tgt, System.IO.Path.GetDirectoryName(path) + "/" + asset.name + refr.OriginalExtension);
break;
}
container.Remove(tgt);
AssetDatabase.ImportAsset(path);
AssetDatabase.SaveAssets();
#endif
}
#endregion
}
#region Inspector window draw
#if UNITY_EDITOR
public class FContainerBaseEditor : Editor
{
public FContainerBase bGet { get { if (_bget == null) _bget = (FContainerBase)target; return _bget; } }
private FContainerBase _bget;
protected virtual string MainDragAndDropText { get { return " Drag & Drop your Assets here"; } }
protected virtual string HeaderInfo { get { return "Simple file in which you can keep multiple asset files to keep projects directory cleaner"; } }
protected virtual Color DragAndDropBoxColor { get { return new Color(0.2f, 1f, 0.4f, 0.35f); } }
protected virtual bool DrawDragAndDropToCopy { get { return false; } }
protected virtual bool DrawDragAndDropToRemove { get { return false; } }
public override void OnInspectorGUI()
{
if (HeaderInfo.Length > 1)
{
EditorGUILayout.HelpBox(HeaderInfo, UnityEditor.MessageType.Info);
}
serializedObject.Update();
GUILayout.Space(4f);
DrawPropertiesExcluding(serializedObject, "m_Script");
serializedObject.ApplyModifiedProperties();
GUILayout.Space(10f);
DrawDragAndDropBox();
GUILayout.Space(10f);
GUIBody();
if (DrawDragAndDropToCopy || DrawDragAndDropToRemove)
{
GUILayout.Space(10f);
if (DrawDragAndDropToCopy && DrawDragAndDropToRemove)
{
EditorGUILayout.BeginHorizontal();
bGet.CopyAsset(DragAndDropBox(new Color(0.4f, 0.5f, 1f), bGet, 32, " Drag here to Copy"));
bGet.RemoveAndDestroy(DragAndDropBox(new Color(1f, 0.4f, 0.4f), bGet, 32, " Drag here to REMOVE"));
EditorGUILayout.EndHorizontal();
}
else
{
if (DrawDragAndDropToCopy) bGet.CopyAsset(DragAndDropBox(new Color(0.4f, 0.5f, 1f), bGet, 32, " Drag & Drop here to Copy"));
else bGet.RemoveAndDestroy(DragAndDropBox(new Color(1f, 0.4f, 0.4f), bGet, 32, " Drag & Drop here to REMOVE"));
}
GUILayout.Space(10f);
}
GUIFooter();
}
protected virtual void GUIBody()
{
}
protected virtual void GUIFooter()
{
GUILayout.Space(16f);
if (GUILayout.Button("Unpack all files outside", GUILayout.Height(20)))
{
bGet.UnpackAll();
}
}
protected virtual void DrawDragAndDropBox()
{
GUILayout.Label("Drop file from inside this pack to release it to project directory", EditorStyles.centeredGreyMiniLabel);
Object dragged = DragAndDropBox(DragAndDropBoxColor, bGet, 44, MainDragAndDropText);
if (dragged)
{
bGet.AddAsset(dragged);
}
}
public static Object DragAndDropBox(Color col, Object toDirty, float height = 44f, string ddText = " Drag & Drop your Assets here")
{
Object ob = null;
Color preCol = GUI.color;
GUI.color = col;
GUILayout.Space(2);
GUILayout.BeginVertical(FGUI_Resources.HeaderBoxStyleH);
GUI.color = new Color(1f, 1f, 1f, 0.7f);
var drop = GUILayoutUtility.GetRect(0f, height, new GUILayoutOption[1] { GUILayout.ExpandWidth(true) });
GUI.Box(drop, new GUIContent(ddText, FGUI_Resources.Tex_Drag), new GUIStyle(EditorStyles.label) { alignment = TextAnchor.MiddleCenter });
Event dropEvent = Event.current;
GUI.color = preCol;
switch (dropEvent.type)
{
case EventType.DragUpdated:
case EventType.DragPerform:
if (!drop.Contains(dropEvent.mousePosition)) break;
DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
if (dropEvent.type == EventType.DragPerform)
{
DragAndDrop.AcceptDrag();
foreach (var dragged in DragAndDrop.objectReferences)
{
Object draggedObject = dragged as Object;
if (draggedObject)
{
ob = draggedObject;
EditorUtility.SetDirty(toDirty);
}
}
}
Event.current.Use();
break;
}
GUILayout.EndVertical();
GUILayout.Space(2);
GUI.color = preCol;
return ob;
}
}
#endif
#endregion
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: a0d80f4da7a2d6d46810a61eb87da602
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: