This commit is contained in:
Nim XD
2024-08-27 21:01:33 +05:30
parent 99eaf514fd
commit 121a1b7c73
31803 changed files with 623461 additions and 623399 deletions

View File

@@ -1,47 +1,47 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using Assets.HeroEditor4D.Common.Scripts.Data;
using UnityEngine;
namespace Assets.HeroEditor4D.Common.Scripts.Editor
{
public static class FirearmMuzzleResolver
{
private static Texture2D _texture;
public static void Resolve(ItemSprite sprite)
{
sprite.MetaDict = new Dictionary<string, string> { { "Muzzle", ResolveMuzzle(sprite.Path).ToString() } };
}
public static int ResolveMuzzle(string path)
{
path = Path.Combine(Environment.CurrentDirectory, path);
_texture ??= new Texture2D(2, 2);
if (File.Exists(path))
{
var bytes = File.ReadAllBytes(path);
_texture.LoadImage(bytes);
var pixels = _texture.GetPixels32();
var x = _texture.width / 2;
var height = _texture.height - 64;
for (var y = height - 1; y >= 0; y--)
{
if (pixels[x + y * _texture.width].a > 0)
{
return 100 * y / height;
}
}
}
return 0;
}
}
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using Assets.HeroEditor4D.Common.Scripts.Data;
using UnityEngine;
namespace Assets.HeroEditor4D.Common.Scripts.Editor
{
public static class FirearmMuzzleResolver
{
private static Texture2D _texture;
public static void Resolve(ItemSprite sprite)
{
sprite.MetaDict = new Dictionary<string, string> { { "Muzzle", ResolveMuzzle(sprite.Path).ToString() } };
}
public static int ResolveMuzzle(string path)
{
path = Path.Combine(Environment.CurrentDirectory, path);
_texture ??= new Texture2D(2, 2);
if (File.Exists(path))
{
var bytes = File.ReadAllBytes(path);
_texture.LoadImage(bytes);
var pixels = _texture.GetPixels32();
var x = _texture.width / 2;
var height = _texture.height - 64;
for (var y = height - 1; y >= 0; y--)
{
if (pixels[x + y * _texture.width].a > 0)
{
return 100 * y / height;
}
}
}
return 0;
}
}
}

View File

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

View File

@@ -1,27 +1,27 @@
using Assets.HeroEditor4D.Common.Scripts.Collections;
using Assets.HeroEditor4D.Common.Scripts.Common;
using UnityEditor;
using UnityEngine;
namespace Assets.HeroEditor4D.Common.Scripts.Editor
{
/// <summary>
/// Add "Refresh" button to IconCollection script
/// </summary>
[CustomEditor(typeof(IconCollection))]
public class IconCollectionEditor : UnityEditor.Editor
{
public override void OnInspectorGUI()
{
DrawDefaultInspector();
var collection = (IconCollection) target;
if (GUILayout.Button("Refresh"))
{
collection.Refresh();
}
}
}
using Assets.HeroEditor4D.Common.Scripts.Collections;
using Assets.HeroEditor4D.Common.Scripts.Common;
using UnityEditor;
using UnityEngine;
namespace Assets.HeroEditor4D.Common.Scripts.Editor
{
/// <summary>
/// Add "Refresh" button to IconCollection script
/// </summary>
[CustomEditor(typeof(IconCollection))]
public class IconCollectionEditor : UnityEditor.Editor
{
public override void OnInspectorGUI()
{
DrawDefaultInspector();
var collection = (IconCollection) target;
if (GUILayout.Button("Refresh"))
{
collection.Refresh();
}
}
}
}

View File

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

View File

@@ -1,37 +1,37 @@
using Assets.HeroEditor4D.Common.Scripts.CharacterScripts;
using UnityEditor;
using UnityEngine;
namespace Assets.HeroEditor4D.Common.Scripts.Editor
{
/// <summary>
/// Add action buttons to LayerManager script
/// </summary>
[CustomEditor(typeof(LayerManager))]
public class LayerManagerEditor : UnityEditor.Editor
{
public override void OnInspectorGUI()
{
DrawDefaultInspector();
var script = (LayerManager) target;
EditorGUILayout.LabelField("Service", EditorStyles.boldLabel);
if (GUILayout.Button("Read Sorting Order"))
{
script.GetSpritesBySortingOrder();
}
if (GUILayout.Button("Set Sorting Order"))
{
script.SetSpritesBySortingOrder();
}
if (GUILayout.Button("Copy order"))
{
script.CopyOrder();
}
}
}
using Assets.HeroEditor4D.Common.Scripts.CharacterScripts;
using UnityEditor;
using UnityEngine;
namespace Assets.HeroEditor4D.Common.Scripts.Editor
{
/// <summary>
/// Add action buttons to LayerManager script
/// </summary>
[CustomEditor(typeof(LayerManager))]
public class LayerManagerEditor : UnityEditor.Editor
{
public override void OnInspectorGUI()
{
DrawDefaultInspector();
var script = (LayerManager) target;
EditorGUILayout.LabelField("Service", EditorStyles.boldLabel);
if (GUILayout.Button("Read Sorting Order"))
{
script.GetSpritesBySortingOrder();
}
if (GUILayout.Button("Set Sorting Order"))
{
script.SetSpritesBySortingOrder();
}
if (GUILayout.Button("Copy order"))
{
script.CopyOrder();
}
}
}
}

View File

@@ -1,13 +1,13 @@
fileFormatVersion: 2
guid: 592e08cb8e8447fc88517a8e62ca66ca
timeCreated: 1516785062
licenseType: Store
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: 592e08cb8e8447fc88517a8e62ca66ca
timeCreated: 1516785062
licenseType: Store
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,27 +1,27 @@
using Assets.HeroEditor4D.Common.Scripts.Collections;
using HeroEditor4D.Common.Editor;
using UnityEditor;
using UnityEngine;
namespace Assets.HeroEditor4D.Common.Scripts.Editor
{
/// <summary>
/// Add "Refresh" button to SpriteCollection script
/// </summary>
[CustomEditor(typeof(SpriteCollection))]
public class SpriteCollectionEditor : UnityEditor.Editor
{
public override void OnInspectorGUI()
{
DrawDefaultInspector();
var spriteCollection = (SpriteCollection) target;
if (GUILayout.Button("Refresh"))
{
Debug.ClearDeveloperConsole();
SpriteCollectionRefresh.Refresh(spriteCollection);
}
}
}
using Assets.HeroEditor4D.Common.Scripts.Collections;
using HeroEditor4D.Common.Editor;
using UnityEditor;
using UnityEngine;
namespace Assets.HeroEditor4D.Common.Scripts.Editor
{
/// <summary>
/// Add "Refresh" button to SpriteCollection script
/// </summary>
[CustomEditor(typeof(SpriteCollection))]
public class SpriteCollectionEditor : UnityEditor.Editor
{
public override void OnInspectorGUI()
{
DrawDefaultInspector();
var spriteCollection = (SpriteCollection) target;
if (GUILayout.Button("Refresh"))
{
Debug.ClearDeveloperConsole();
SpriteCollectionRefresh.Refresh(spriteCollection);
}
}
}
}

View File

@@ -1,13 +1,13 @@
fileFormatVersion: 2
guid: 0725699ce53342079ec8e0a885ad2a84
timeCreated: 1516785062
licenseType: Store
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: 0725699ce53342079ec8e0a885ad2a84
timeCreated: 1516785062
licenseType: Store
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,127 +1,127 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
using Assets.HeroEditor4D.Common.Scripts.Collections;
using Assets.HeroEditor4D.Common.Scripts.Data;
using Assets.HeroEditor4D.Common.Scripts.Editor;
using UnityEditor;
using UnityEngine;
namespace HeroEditor4D.Common.Editor
{
/// <summary>
/// Refreshes the main sprite collection when importing new sprite bundles.
/// </summary>
public class SpriteCollectionRefresh : AssetPostprocessor
{
public static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)
{
var spriteCollection = UnityEngine.Object.FindObjectOfType<SpriteCollection>();
if (spriteCollection != null)
{
Refresh(spriteCollection);
}
}
public static void Refresh(SpriteCollection spriteCollection)
{
spriteCollection.Body = LoadSprites(spriteCollection, "/BodyParts/Body");
spriteCollection.Ears = LoadSprites(spriteCollection, "/BodyParts/Ears");
spriteCollection.Hair = LoadSprites(spriteCollection, "/BodyParts/Hair");
spriteCollection.Beard = LoadSprites(spriteCollection, "/BodyParts/Beard");
spriteCollection.Eyebrows = LoadSprites(spriteCollection, "/BodyParts/Eyebrows");
spriteCollection.Eyes = LoadSprites(spriteCollection, "/BodyParts/Eyes");
spriteCollection.Mouth = LoadSprites(spriteCollection, "/BodyParts/Mouth");
spriteCollection.Armor = LoadSprites(spriteCollection, "/Equipment/Armor");
spriteCollection.Cape = LoadSprites(spriteCollection, "/Equipment/Cape");
spriteCollection.Backpack = LoadSprites(spriteCollection, "/Equipment/Back");
spriteCollection.MeleeWeapon1H = LoadSprites(spriteCollection, "/Equipment/MeleeWeapon1H", 1);
spriteCollection.MeleeWeapon2H = LoadSprites(spriteCollection, "/Equipment/MeleeWeapon2H", 1);
spriteCollection.Shield = LoadSprites(spriteCollection, "/Equipment/Shield");
spriteCollection.Supplies = LoadSprites(spriteCollection, "/Equipment/Supplies", 1);
spriteCollection.Bow = LoadSprites(spriteCollection, "/Equipment/Bow");
spriteCollection.Crossbow = LoadSprites(spriteCollection, "/Equipment/Crossbow");
spriteCollection.Firearm1H = LoadSprites(spriteCollection, "/Equipment/Firearm1H");
spriteCollection.Firearm2H = LoadSprites(spriteCollection, "/Equipment/Firearm2H");
spriteCollection.Throwable = LoadSprites(spriteCollection, "/Equipment/Throwable");
spriteCollection.Makeup = LoadSprites(spriteCollection, "/Equipment/Makeup");
spriteCollection.Mask = LoadSprites(spriteCollection, "/Equipment/Mask");
spriteCollection.Earrings = LoadSprites(spriteCollection, "/Equipment/Earrings");
spriteCollection.Firearm1H.ForEach(FirearmMuzzleResolver.Resolve);
spriteCollection.Firearm2H.ForEach(FirearmMuzzleResolver.Resolve);
EditorUtility.SetDirty(spriteCollection);
if (spriteCollection.DebugLogging) Debug.Log("<color=yellow>SpriteCollection: refreshed.</color>");
}
private static List<ItemSprite> LoadSprites(SpriteCollection sc, string subPath, int nesting = 0)
{
var type = subPath.Split('/')[2];
var collection = new List<ItemSprite>();
foreach (var asset in sc.SpriteFolders)
{
if (asset == null) continue;
var path = AssetDatabase.GetAssetPath(asset) + subPath;
if (!Directory.Exists(path)) continue;
var include = sc.CollectionFilter.Where(i => !i.StartsWith("!")).ToList();
var exclude = sc.CollectionFilter.Where(i => i.StartsWith("!")).Select(i => i.Replace("!", "")).ToList();
var extensions = new List<string> { "*.png" };
if (sc.IncludePsd) extensions.Add("*.psd");
foreach (var ext in extensions)
{
var entries = Directory.GetFiles(path, ext, SearchOption.AllDirectories)
.Select(p => p.Replace("\\", "/"))
.Select(p => new ItemSprite(GetEditionName(p), GetCollectionName(p, nesting), type, Path.GetFileNameWithoutExtension(p), p, AssetDatabase.LoadAssetAtPath<Sprite>(p), AssetDatabase.LoadAllAssetsAtPath(p).OfType<Sprite>().ToList()))
.Where(i => (include.Count == 0 || include.Contains(i.Collection)) && !exclude.Contains(i.Collection) || sc.CollectionFilterIgnore.Any(i.Path.Contains) && !exclude.Contains(i.Collection)).ToList();
collection.AddRange(entries);
}
}
foreach (var entry in collection)
{
foreach (Match match in Regex.Matches(entry.Path, @"\[(.+?)\]"))
{
entry.Tags.Add(match.Groups[1].Value);
}
}
return collection.OrderBy(i => i.Name).ToList();
}
private static string GetEditionName(string path)
{
var edition = path.Split('/')[2];
return edition;
}
private static string GetCollectionName(string path, int nesting)
{
var parent = Directory.GetParent(path);
for (var i = 0; i < nesting; i++)
{
parent = parent?.Parent;
}
if (parent == null) throw new NotSupportedException();
return parent.Name;
}
}
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
using Assets.HeroEditor4D.Common.Scripts.Collections;
using Assets.HeroEditor4D.Common.Scripts.Data;
using Assets.HeroEditor4D.Common.Scripts.Editor;
using UnityEditor;
using UnityEngine;
namespace HeroEditor4D.Common.Editor
{
/// <summary>
/// Refreshes the main sprite collection when importing new sprite bundles.
/// </summary>
public class SpriteCollectionRefresh : AssetPostprocessor
{
public static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)
{
var spriteCollection = UnityEngine.Object.FindObjectOfType<SpriteCollection>();
if (spriteCollection != null)
{
Refresh(spriteCollection);
}
}
public static void Refresh(SpriteCollection spriteCollection)
{
spriteCollection.Body = LoadSprites(spriteCollection, "/BodyParts/Body");
spriteCollection.Ears = LoadSprites(spriteCollection, "/BodyParts/Ears");
spriteCollection.Hair = LoadSprites(spriteCollection, "/BodyParts/Hair");
spriteCollection.Beard = LoadSprites(spriteCollection, "/BodyParts/Beard");
spriteCollection.Eyebrows = LoadSprites(spriteCollection, "/BodyParts/Eyebrows");
spriteCollection.Eyes = LoadSprites(spriteCollection, "/BodyParts/Eyes");
spriteCollection.Mouth = LoadSprites(spriteCollection, "/BodyParts/Mouth");
spriteCollection.Armor = LoadSprites(spriteCollection, "/Equipment/Armor");
spriteCollection.Cape = LoadSprites(spriteCollection, "/Equipment/Cape");
spriteCollection.Backpack = LoadSprites(spriteCollection, "/Equipment/Back");
spriteCollection.MeleeWeapon1H = LoadSprites(spriteCollection, "/Equipment/MeleeWeapon1H", 1);
spriteCollection.MeleeWeapon2H = LoadSprites(spriteCollection, "/Equipment/MeleeWeapon2H", 1);
spriteCollection.Shield = LoadSprites(spriteCollection, "/Equipment/Shield");
spriteCollection.Supplies = LoadSprites(spriteCollection, "/Equipment/Supplies", 1);
spriteCollection.Bow = LoadSprites(spriteCollection, "/Equipment/Bow");
spriteCollection.Crossbow = LoadSprites(spriteCollection, "/Equipment/Crossbow");
spriteCollection.Firearm1H = LoadSprites(spriteCollection, "/Equipment/Firearm1H");
spriteCollection.Firearm2H = LoadSprites(spriteCollection, "/Equipment/Firearm2H");
spriteCollection.Throwable = LoadSprites(spriteCollection, "/Equipment/Throwable");
spriteCollection.Makeup = LoadSprites(spriteCollection, "/Equipment/Makeup");
spriteCollection.Mask = LoadSprites(spriteCollection, "/Equipment/Mask");
spriteCollection.Earrings = LoadSprites(spriteCollection, "/Equipment/Earrings");
spriteCollection.Firearm1H.ForEach(FirearmMuzzleResolver.Resolve);
spriteCollection.Firearm2H.ForEach(FirearmMuzzleResolver.Resolve);
EditorUtility.SetDirty(spriteCollection);
if (spriteCollection.DebugLogging) Debug.Log("<color=yellow>SpriteCollection: refreshed.</color>");
}
private static List<ItemSprite> LoadSprites(SpriteCollection sc, string subPath, int nesting = 0)
{
var type = subPath.Split('/')[2];
var collection = new List<ItemSprite>();
foreach (var asset in sc.SpriteFolders)
{
if (asset == null) continue;
var path = AssetDatabase.GetAssetPath(asset) + subPath;
if (!Directory.Exists(path)) continue;
var include = sc.CollectionFilter.Where(i => !i.StartsWith("!")).ToList();
var exclude = sc.CollectionFilter.Where(i => i.StartsWith("!")).Select(i => i.Replace("!", "")).ToList();
var extensions = new List<string> { "*.png" };
if (sc.IncludePsd) extensions.Add("*.psd");
foreach (var ext in extensions)
{
var entries = Directory.GetFiles(path, ext, SearchOption.AllDirectories)
.Select(p => p.Replace("\\", "/"))
.Select(p => new ItemSprite(GetEditionName(p), GetCollectionName(p, nesting), type, Path.GetFileNameWithoutExtension(p), p, AssetDatabase.LoadAssetAtPath<Sprite>(p), AssetDatabase.LoadAllAssetsAtPath(p).OfType<Sprite>().ToList()))
.Where(i => (include.Count == 0 || include.Contains(i.Collection)) && !exclude.Contains(i.Collection) || sc.CollectionFilterIgnore.Any(i.Path.Contains) && !exclude.Contains(i.Collection)).ToList();
collection.AddRange(entries);
}
}
foreach (var entry in collection)
{
foreach (Match match in Regex.Matches(entry.Path, @"\[(.+?)\]"))
{
entry.Tags.Add(match.Groups[1].Value);
}
}
return collection.OrderBy(i => i.Name).ToList();
}
private static string GetEditionName(string path)
{
var edition = path.Split('/')[2];
return edition;
}
private static string GetCollectionName(string path, int nesting)
{
var parent = Directory.GetParent(path);
for (var i = 0; i < nesting; i++)
{
parent = parent?.Parent;
}
if (parent == null) throw new NotSupportedException();
return parent.Name;
}
}
}

View File

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

View File

@@ -1,35 +1,35 @@
using System;
using UnityEngine;
namespace HeroEditor4D.Common.Editor
{
[ExecuteInEditMode]
public class TransformNormalizer : MonoBehaviour
{
public bool ZeroZ;
public bool RoundTransform;
public int RoundTransformDigits;
public void OnEnable()
{
if (ZeroZ)
{
foreach (var t in GetComponentsInChildren<Transform>())
{
t.localPosition = new Vector3(t.localPosition.x, t.localPosition.y, 0);
}
}
if (RoundTransform)
{
foreach (var t in GetComponentsInChildren<Transform>())
{
t.localPosition = new Vector3(
(float) Math.Round(t.localPosition.x, RoundTransformDigits),
(float) Math.Round(t.localPosition.y, RoundTransformDigits),
(float) Math.Round(t.localPosition.z, RoundTransformDigits));
}
}
}
}
using System;
using UnityEngine;
namespace HeroEditor4D.Common.Editor
{
[ExecuteInEditMode]
public class TransformNormalizer : MonoBehaviour
{
public bool ZeroZ;
public bool RoundTransform;
public int RoundTransformDigits;
public void OnEnable()
{
if (ZeroZ)
{
foreach (var t in GetComponentsInChildren<Transform>())
{
t.localPosition = new Vector3(t.localPosition.x, t.localPosition.y, 0);
}
}
if (RoundTransform)
{
foreach (var t in GetComponentsInChildren<Transform>())
{
t.localPosition = new Vector3(
(float) Math.Round(t.localPosition.x, RoundTransformDigits),
(float) Math.Round(t.localPosition.y, RoundTransformDigits),
(float) Math.Round(t.localPosition.z, RoundTransformDigits));
}
}
}
}
}

View File

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