2022-01-13 15:05:10 +01:00

83 lines
3.0 KiB
C#

using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
#if !UNITY_2019_1_OR_NEWER
using UnityEngine.Networking;
#endif
namespace Passer.Humanoid {
[InitializeOnLoad]
public class OnLoadHumanoidPlayer {
static OnLoadHumanoidPlayer() {
//HumanoidPreferencesIMGUIRegister.reload = true;
}
public static string GetHumanoidPlayerPrefabPath() {
string humanoidPath = Configuration_Editor.FindHumanoidFolder();
string prefabPathWithoutScripts = humanoidPath.Substring(0, humanoidPath.Length - 8);
string prefabPath = "Assets" + prefabPathWithoutScripts + "Prefabs/Networking/Resources/HumanoidPlayer.prefab";
return prefabPath;
}
public static GameObject GetHumanoidPlayerPrefab(string prefabPath) {
GameObject prefab = PrefabUtility.LoadPrefabContents(prefabPath);
return prefab;
}
public static void UpdateHumanoidPrefab(GameObject prefab, string prefabPath) {
if (!Application.isPlaying) {
Debug.Log("UpdateHumanoidPrefab " + Application.isFocused + " " + Application.isBatchMode + " " + Application.isEditor);
if (Application.isFocused && !Application.isBatchMode && Application.isEditor) {
Debug.Log("delaying save " + prefab);
HumanoidPlayer_Editor.prefabsToSave.Push(prefab);
HumanoidPlayer_Editor.prefabPaths.Push(prefabPath);
EditorApplication.delayCall += HumanoidPlayer_Editor.DelayedSave;
}
else {
Debug.Log("updating " + prefab);
PrefabUtility.SaveAsPrefabAsset(prefab, prefabPath);
PrefabUtility.UnloadPrefabContents(prefab);
}
}
}
[CustomEditor(typeof(HumanoidPlayer))]
public class HumanoidPlayer_Editor : HumanoidNetworking_Editor {
#if hNW_UNET
public override void OnInspectorGUI() {
serializedObject.Update();
SendRateInspector();
DebugLevelInspector();
SmoothingInspector();
SyncFingerSwingInspector();
CreateLocalRemotesInspector();
SyncTrackingInspector();
serializedObject.ApplyModifiedProperties();
}
#endif
public static Stack<GameObject> prefabsToSave = new Stack<GameObject>();
public static Stack<string> prefabPaths = new Stack<string>();
//private void OnSceneGUI() {
public static void DelayedSave() {
if (Application.isPlaying)
return;
if (prefabsToSave.Count > 0) {
GameObject prefab = prefabsToSave.Pop();
Debug.Log("Delayed save of prefab " + prefab);
string path = prefabPaths.Pop();
PrefabUtility.SaveAsPrefabAsset(prefab, path);
PrefabUtility.UnloadPrefabContents(prefab);
}
}
}
}
}