DanMachi:

-compatibility improvements
Core:
-simplified object and keyframe serialization
-complicated assetbundle loading
This commit is contained in:
2024-05-10 09:56:39 +02:00
parent c922584d38
commit c05f989384
192 changed files with 79685 additions and 25820 deletions

View File

@@ -9,6 +9,13 @@ public class ExtendedDropdown : MonoBehaviour
[SerializeField] private TMPro.TMP_Dropdown _dropdown;
public UnityEvent<int> OnValueChangedEvent;
public List<TMPro.TMP_Dropdown.OptionData> options => _dropdown.options;
public int value
{
get { return _dropdown.value; }
set { _dropdown.value = value; }
}
[Header("Hotkeys")]
public KeyCode PreviousKey = KeyCode.None;
public KeyCode NextKey = KeyCode.None;

View File

@@ -1,31 +1,29 @@
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using static SerializableBone;
namespace KF3.UI.Panels
public class HandleSettingsPanel : MonoBehaviour
{
public class HandleSettingsPanel : MonoBehaviour
{
public ScrollRect HandleVisibilityToggles;
public ScrollRect HandleVisibilityToggles;
public List<BoneTags> AvailableTags = new List<BoneTags>();
private void Start()
private void Start()
{
var handleManager = HandleManager.Instance;
foreach (BoneTags en in AvailableTags)
{
var handleManager = HandleManager.Instance;
foreach (BoneTags en in Enum.GetValues(typeof(BoneTags)))
var handle = SliderPanel.CreateToggle(en.ToString(), handleManager.EnabledHandles.Contains(en), HandleVisibilityToggles.content, (value)=>
{
var handle = SliderPanel.CreateToggle(en.ToString(), handleManager.EnabledHandles.Contains(en), HandleVisibilityToggles.content, (value)=>
if (value)
{
if (value)
{
handleManager.EnabledHandles.Add(en);
}
else
{
handleManager.EnabledHandles.Remove(en);
}
});
}
handleManager.EnabledHandles.Add(en);
}
else
{
handleManager.EnabledHandles.Remove(en);
}
});
}
}
}

View File

@@ -16,6 +16,11 @@ public class MorphPanel : MonoBehaviour
public void Init(List<string> categories)
{
for(int i = _categoryPanels.childCount-1; i >= 0; i--)
{
Destroy(_categoryPanels.GetChild(i).gameObject);
}
Categories.Clear();
foreach (var category in categories)
{
@@ -25,8 +30,8 @@ public class MorphPanel : MonoBehaviour
}
}
public void CreateMorph(string category, ObjectContainer container, SkinnedMeshRenderer meshRenderer, int index, string displayName)
public SliderPanel CreateMorph(string category, ObjectContainer container, SkinnedMeshRenderer meshRenderer, int index, string displayName)
{
SliderPanel.CreateMorph(container, meshRenderer, index, displayName, this.Categories[category].Content);
return SliderPanel.CreateMorph(container, meshRenderer, index, displayName, this.Categories[category].Content);
}
}

View File

@@ -8,10 +8,11 @@ public class SliderPanel : MonoBehaviour
public static SliderPanel Prefab;
public Slider Slider;
//public UICallbacks ToggleCallbacks;
public TMPro.TMP_Text Text;
public Toggle Toggle;
public float DefaultValue;
public MorphHelper MorphHelper;
public float value {
get { return Slider.value; }
set { Slider.value = value; }
@@ -39,15 +40,10 @@ public class SliderPanel : MonoBehaviour
{
SliderPanel panel = Instantiate(SharedResources.Instance.SliderPanel, parent);
var helper = new MorphHelper(meshRenderer, meshRenderer.sharedMesh.GetBlendShapeName(index), panel.Slider);
if (container.Morphs.ContainsKey(meshRenderer))
container.Morphs[meshRenderer].Add(helper);
else
container.Morphs.Add(meshRenderer, new List<MorphHelper>() { helper });
panel.MorphHelper = new MorphHelper(meshRenderer, meshRenderer.sharedMesh.GetBlendShapeName(index), panel.Slider);
panel.Text.text = displayName;
panel.Slider.value = meshRenderer.GetBlendShapeWeight(index);
panel.SetOnValueChanged((value) => {helper.UpdateMorph(value);});
panel.SetOnValueChanged((value) => {panel.MorphHelper.UpdateMorph(value);});
panel.SetOnRelease((value) => { container.SetKeyframe(); });
panel.SetOnRightClick(null);
return panel;

View File

@@ -96,13 +96,15 @@ public class TimelineController : MonoBehaviour
{
var main = ModelViewerMain.GetInstance();
Instance.CurrentFrame = frameIndex;
//Debug.Log(frameIndex);
Debug.Log("Setting frame to: " + frameIndex);
foreach (var container in main.CurrentScene.AllObjects)
{
container.GetClosestFrames(frameIndex, out var previousFrame, out var nextFrame);
var blendAmount = previousFrame == nextFrame? 0 : 1 - (float)(nextFrame.FrameNum - frameIndex) / (nextFrame.FrameNum - previousFrame.FrameNum);
Debug.Log($"Setting {container.name} to frame {previousFrame.FrameNum}({nextFrame.FrameNum})");
container.Lerp(previousFrame.ObjectData, nextFrame.ObjectData, blendAmount);
}
UpdateTimeline();

View File

@@ -6,19 +6,39 @@ using UnityEngine.EventSystems;
public class UICallbacks : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
private bool _isHovering;
private bool _hoverActionActivated;
private float _hoveredTime;
private float _timeBeforeHoverActivate = 1.5f;
public UnityEvent MouseHover;
public UnityEvent MouseHoverEnd;
public void OnPointerEnter(PointerEventData eventData)
{
MouseHover.Invoke();
_hoverActionActivated = false;
_isHovering = true;
_hoveredTime = 0;
}
public void OnPointerExit(PointerEventData eventData)
{
_isHovering = false;
MouseHoverEnd.Invoke();
}
private void Update()
{
if (_isHovering && !_hoverActionActivated)
{
_hoveredTime += Time.deltaTime;
if (_hoveredTime >= _timeBeforeHoverActivate)
{
_hoverActionActivated = true;
MouseHover.Invoke();
}
}
}
public void SetTooltipText(string text)
{
ModelViewerInterface.GetInstance().Tooltip.SetAsLastSibling();

View File

@@ -1,5 +1,6 @@
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class UIDraggableProxy : MonoBehaviour, IEndDragHandler, IDragHandler
{

View File

@@ -27,7 +27,7 @@ public class UIElementDragger : MonoBehaviour, IDragHandler, IEndDragHandler, IP
private CanvasGroup _canvasGroup;
public DragAction LastDragAction;
public enum DragAction
{
None,

View File

@@ -11,7 +11,7 @@ public class UIPoseContainer : MonoBehaviour
public KeyframeData KeyframeData;
public TMPro.TMP_InputField NameLabel;
static ModelViewerInterface UI => ModelViewerInterface.GetInstance();
static UISaveLoadPanel SaveLoadPanel => ModelViewerInterface.GetInstance().CanvasContainer.SaveLoadPanel;
static ModelViewerMain Main => ModelViewerMain.GetInstance();
public static UIPoseContainer CreateNew(string poseName, KeyframeData poseData, bool forceOverride)
@@ -23,7 +23,7 @@ public class UIPoseContainer : MonoBehaviour
return null;
}
if (UI.SaveLoadPanel.GetPoseByName(poseName, out var savedPose))
if (SaveLoadPanel.GetPoseByName(poseName, out var savedPose))
{
if (!forceOverride)
{
@@ -33,8 +33,8 @@ public class UIPoseContainer : MonoBehaviour
}
else
{
savedPose = Instantiate(SharedResources.Instance.UIPoseContainer, UI.PosePresetToggle.content);
UI.SaveLoadPanel.AddPose(savedPose);
savedPose = Instantiate(SharedResources.Instance.UIPoseContainer, SaveLoadPanel.ScrollPose.content);
SaveLoadPanel.AddPose(savedPose);
}
savedPose.Init(poseName, poseData);
@@ -54,16 +54,16 @@ public class UIPoseContainer : MonoBehaviour
{
var poseName = NameLabel.text;
if (UI.SaveLoadPanel.GetPoseByName(poseName, out var savedPose))
if (SaveLoadPanel.GetPoseByName(poseName, out var savedPose))
{
Error.Log(Color.red, "Preset with this name already exists");
return;
}
else
{
savedPose = Instantiate(SharedResources.Instance.UIPoseContainer, UI.PosePresetToggle.content);
savedPose = Instantiate(SharedResources.Instance.UIPoseContainer, SaveLoadPanel.ScrollPose.content);
savedPose.NameLabel.text = poseName;
UI.SaveLoadPanel.AddPose(savedPose);
SaveLoadPanel.AddPose(savedPose);
}
savedPose.Save();
@@ -75,12 +75,12 @@ public class UIPoseContainer : MonoBehaviour
var poseData = Main.SelectedObject.SerializeFrame();
string poseName = NameLabel.text;
string fileName = Path.GetFullPath(Path.Combine(Settings.SavePoseDirectory, $"{poseName}.pose"));
string fileName = Path.GetFullPath(Path.Combine(UISaveLoadPanel.SavePoseDirectory, $"{poseName}.pose"));
try
{
var settings = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.Auto, DefaultValueHandling = DefaultValueHandling.Ignore };
var json = JsonConvert.SerializeObject(poseData, Formatting.Indented, settings);
var json = JsonConvert.SerializeObject(poseData, typeof(KeyframeData), Formatting.Indented, settings);
File.WriteAllText(fileName, json);
Error.Log(Color.green, $"Pose saved to {fileName}");
}
@@ -121,7 +121,7 @@ public class UIPoseContainer : MonoBehaviour
{
Destroy(this.gameObject);
string path = Path.GetFullPath(Path.Combine(Settings.SavePoseDirectory, $"{PoseName}.pose"));
string path = Path.GetFullPath(Path.Combine(UISaveLoadPanel.SavePoseDirectory, $"{NameLabel.text}.pose"));
if (File.Exists(path))
File.Delete(path);

View File

@@ -19,6 +19,15 @@ public class UISaveLoadPanel : MonoBehaviour
public List<UISceneContainer> ScenePresetEntries = new List<UISceneContainer>();
public List<UIPoseContainer> PosePresetEntries = new List<UIPoseContainer>();
public static string SavePoseDirectory => ModelViewerSettings.Get("SavePoseDirectory", new ModelViewerSettings.Setting(Application.dataPath + "/../Poses/", ModelViewerSettings.SettingType.FolderPath));
public static string SaveSceneDirectory => ModelViewerSettings.Get("SaveSceneDirectory", new ModelViewerSettings.Setting(Application.dataPath + "/../Scenes/", ModelViewerSettings.SettingType.FolderPath));
private void Awake()
{
InitPoses();
InitScenes();
}
public void AddPose(UIPoseContainer pose)
{
PosePresetEntries.Add(pose);
@@ -45,6 +54,11 @@ public class UISaveLoadPanel : MonoBehaviour
ScrollPose.gameObject.SetActive(false);
}
public void OnDeleteButton()
{
ModelViewerMain.GetInstance().EmptySceneDefault();
}
public bool GetPoseByName(string name, out UIPoseContainer pose)
{
pose = PosePresetEntries.FirstOrDefault(p => p.PoseName == name);
@@ -57,15 +71,13 @@ public class UISaveLoadPanel : MonoBehaviour
return scene != null;
}
public void Init()
{
InitPoses();
InitScenes();
}
private void InitPoses()
{
string path = Settings.SavePoseDirectory;
string path = SavePoseDirectory;
if(!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
foreach (var fileName in Directory.GetFiles(path).Where(f => f.EndsWith(".pose")))
{
@@ -86,7 +98,11 @@ public class UISaveLoadPanel : MonoBehaviour
private void InitScenes()
{
string path = Settings.SaveSceneDirectory;
string path = SaveSceneDirectory;
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
List<SceneSerializable> scenes = new List<SceneSerializable>();
foreach (var fileName in Directory.GetFiles(path).Where(f => f.EndsWith(".scene")))

View File

@@ -11,7 +11,7 @@ public class UISceneContainer : MonoBehaviour
public TMPro.TMP_Text DateLabel;
public TMPro.TMP_Text VersionLabel;
static ModelViewerInterface UI => ModelViewerInterface.GetInstance();
static UISaveLoadPanel SaveLoadPanel => ModelViewerInterface.GetInstance().CanvasContainer.SaveLoadPanel;
static ModelViewerMain Main => ModelViewerMain.GetInstance();
public static UISceneContainer CreateNew(SceneSerializable sceneData, bool forceOverride)
@@ -23,7 +23,7 @@ public class UISceneContainer : MonoBehaviour
return null;
}
if (UI.SaveLoadPanel.GetSceneByName(sceneData.Filename, out var savedScene))
if (SaveLoadPanel.GetSceneByName(sceneData.Filename, out var savedScene))
{
if (!forceOverride)
{
@@ -33,8 +33,8 @@ public class UISceneContainer : MonoBehaviour
}
else
{
savedScene = Instantiate(SharedResources.Instance.UISceneContainer, UI.ScenePresetToggle.content);
UI.SaveLoadPanel.AddScene(savedScene);
savedScene = Instantiate(SharedResources.Instance.UISceneContainer, SaveLoadPanel.ScrollScene.content);
SaveLoadPanel.AddScene(savedScene);
}
savedScene.Init(sceneData);
@@ -56,16 +56,16 @@ public class UISceneContainer : MonoBehaviour
{
var sceneName = NameLabel.text;
if (UI.SaveLoadPanel.GetSceneByName(sceneName, out var savedScene))
if (SaveLoadPanel.GetSceneByName(sceneName, out var savedScene))
{
Error.Log(Color.red, "Preset with this name already exists");
return;
}
else
{
savedScene = Instantiate(SharedResources.Instance.UISceneContainer, UI.ScenePresetToggle.content);
savedScene = Instantiate(SharedResources.Instance.UISceneContainer, SaveLoadPanel.ScrollScene.content);
savedScene.NameLabel.text = sceneName;
UI.SaveLoadPanel.AddScene(savedScene);
SaveLoadPanel.AddScene(savedScene);
}
savedScene.Save();
@@ -80,12 +80,12 @@ public class UISceneContainer : MonoBehaviour
var sceneData = Main.SaveScene();
sceneData.Filename = NameLabel.text;
string fileName = Path.GetFullPath(Path.Combine(Settings.SaveSceneDirectory, $"{sceneData.Filename}.scene"));
string fileName = Path.GetFullPath(Path.Combine(UISaveLoadPanel.SaveSceneDirectory, $"{sceneData.Filename}.scene"));
try
{
var settings = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.Auto, DefaultValueHandling = DefaultValueHandling.Ignore };
var json = JsonConvert.SerializeObject(sceneData, Formatting.Indented, settings);
var json = JsonConvert.SerializeObject(sceneData, typeof(SceneSerializable), Formatting.Indented, settings);
File.WriteAllText(fileName, json);
if (!silenceMessage)
{
@@ -110,7 +110,7 @@ public class UISceneContainer : MonoBehaviour
{
Destroy(this.gameObject);
string path = Path.GetFullPath(Path.Combine(Settings.SaveSceneDirectory, $"{SceneData.Filename}.scene"));
string path = Path.GetFullPath(Path.Combine(UISaveLoadPanel.SaveSceneDirectory, $"{SceneData.Filename}.scene"));
if (File.Exists(path))
File.Delete(path);

View File

@@ -21,8 +21,6 @@ public class UISettingsPanel : MonoBehaviour
public void UpdateSettings(ModelViewerSettings settings)
{
Debug.Log("Updating");
for(int i = Content.childCount -1; i >= 0; i--)
{
Destroy(Content.GetChild(i).gameObject);