Skip to content

Commit 2b48497

Browse files
committed
Use a single cached studio instance
1 parent 5338bc9 commit 2b48497

9 files changed

Lines changed: 30 additions & 29 deletions

src/PHAPI/Chara/CharacterExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ public static string GetCharacterName(this Human h)
114114
{
115115
if (StudioAPI.InsideStudio)
116116
{
117-
var charaName = global::Studio.Studio.Instance.dicObjectCtrl.Values.OfType<OCIChar>().FirstOrDefault(x => x.charInfo.human == h)?.charStatus.name;
117+
var charaName = StudioAPI.StudioInstance.dicObjectCtrl.Values.OfType<OCIChar>().FirstOrDefault(x => x.charInfo.human == h)?.charStatus.name;
118118
if (!string.IsNullOrEmpty(charaName)) return charaName;
119119
}
120120
//return h is Female f ? f.HeroineID.ToString() : ((Male) h).MaleID.ToString();

src/Shared.CharaStudio/Studio/SaveLoad/SceneCustomFunctionController.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,6 @@ public void SetExtendedData(PluginData data)
8888
/// <summary>
8989
/// Get the instance of the Studio game manager object.
9090
/// </summary>
91-
public global::Studio.Studio GetStudio() => global::Studio.Studio.Instance;
91+
public global::Studio.Studio GetStudio() => StudioAPI.StudioInstance;
9292
}
9393
}

src/Shared.CharaStudio/Studio/SaveLoad/StudioSaveLoadApi.Hooks.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ private static void TreeNodeCtrl_SelectSingle(TreeNodeObject _node)
194194
private static void TreeNodeCtrl_SelectMultiple()
195195
{
196196
List<ObjectCtrlInfo> selectedObjects = new List<ObjectCtrlInfo>();
197-
foreach (var node in Singleton<global::Studio.Studio>.Instance.treeNodeCtrl.selectNodes)
197+
foreach (var node in StudioAPI.StudioInstance.treeNodeCtrl.selectNodes)
198198
selectedObjects.Add(global::Studio.Studio.GetCtrlInfo(node));
199199
OnObjectsSelected(selectedObjects);
200200
}
@@ -221,7 +221,7 @@ private static void TreeNodeCtrl_SetSelectNode()
221221
if (Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl))
222222
{
223223
List<ObjectCtrlInfo> selectedObjects = new List<ObjectCtrlInfo>();
224-
foreach (var node in Singleton<global::Studio.Studio>.Instance.treeNodeCtrl.selectNodes)
224+
foreach (var node in StudioAPI.StudioInstance.treeNodeCtrl.selectNodes)
225225
selectedObjects.Add(global::Studio.Studio.GetCtrlInfo(node));
226226
OnObjectsSelected(selectedObjects);
227227
}

src/Shared.CharaStudio/Studio/SaveLoad/StudioSaveLoadApi.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,10 +208,10 @@ private static Dictionary<int, ObjectCtrlInfo> GetLoadedObjects(SceneOperationKi
208208
switch (operation)
209209
{
210210
case SceneOperationKind.Load:
211-
results = global::Studio.Studio.Instance.dicObjectCtrl;
211+
results = StudioAPI.StudioInstance.dicObjectCtrl;
212212
break;
213213
case SceneOperationKind.Import:
214-
results = global::Studio.Studio.Instance.dicObjectCtrl
214+
results = StudioAPI.StudioInstance.dicObjectCtrl
215215
.Join(Hooks.ImportDictionary, pair => pair.Key, pair => pair.Key, (current, idLookup) => new { originalId = idLookup.Value, obj = current.Value })
216216
.ToDictionary(x => x.originalId, x => x.obj);
217217
break;

src/Shared.CharaStudio/Studio/StudioAPI.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ namespace KKAPI.Studio
1919
/// </summary>
2020
public static partial class StudioAPI
2121
{
22+
private static global::Studio.Studio _studioInstance;
23+
internal static global::Studio.Studio StudioInstance => _studioInstance ? _studioInstance : _studioInstance = global::Studio.Studio.Instance;
24+
2225
private static readonly List<CurrentStateCategory> _customCurrentStateCategories = new List<CurrentStateCategory>();
2326
private static GameObject _customStateRoot;
2427

@@ -99,7 +102,7 @@ public static IEnumerable<ObjectCtrlInfo> GetSelectedObjects()
99102

100103
private static IEnumerable<ObjectCtrlInfo> GetObjectCtrlInfos(IList<TreeNodeObject> selectNodes)
101104
{
102-
return selectNodes.Select(node => global::Studio.Studio.Instance.dicInfo.TryGetValue(node, out var objectCtrlInfo) ? objectCtrlInfo : null)
105+
return selectNodes.Select(node => StudioInstance.dicInfo.TryGetValue(node, out var objectCtrlInfo) ? objectCtrlInfo : null)
103106
.Where(x => x != null);
104107
}
105108

@@ -108,7 +111,7 @@ private static IEnumerable<ObjectCtrlInfo> GetObjectCtrlInfos(IList<TreeNodeObje
108111
/// </summary>
109112
public static TreeNodeObject[] GetSelectedTreeNodes()
110113
{
111-
return StudioLoaded ? Singleton<global::Studio.Studio>.Instance.treeNodeCtrl.selectNodes : new TreeNodeObject[0]; ;
114+
return StudioLoaded ? StudioInstance.treeNodeCtrl.selectNodes : new TreeNodeObject[0];
112115
}
113116

114117
private static void CreateCategory(CurrentStateCategory category)

src/Shared.CharaStudio/Studio/StudioObjectExtensions.cs

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,16 @@ namespace KKAPI.Studio
1414
/// </summary>
1515
public static class StudioObjectExtensions
1616
{
17-
private static global::Studio.Studio Studio => global::Studio.Studio.Instance;
18-
1917
/// <summary>
2018
/// Get the ObjectCtrlInfo object that uses this ObjectInfo.
2119
/// If the object was not found in current scene, null is returned.
2220
/// </summary>
2321
public static ObjectCtrlInfo GetObjectCtrlInfo(this ObjectInfo obj)
2422
{
2523
if (obj == null) throw new ArgumentNullException(nameof(obj));
26-
if (Studio == null) throw new InvalidOperationException("Studio is not initialized yet!");
24+
if (StudioAPI.StudioInstance == null) throw new InvalidOperationException("Studio is not initialized yet!");
2725

28-
return Studio.dicObjectCtrl.Values.FirstOrDefault(x => x.objectInfo == obj);
26+
return StudioAPI.StudioInstance.dicObjectCtrl.Values.FirstOrDefault(x => x.objectInfo == obj);
2927
}
3028

3129
/// <summary>
@@ -35,9 +33,9 @@ public static ObjectCtrlInfo GetObjectCtrlInfo(this ObjectInfo obj)
3533
public static int GetSceneId(this ObjectCtrlInfo obj)
3634
{
3735
if (obj == null) throw new ArgumentNullException(nameof(obj));
38-
if (Studio == null) throw new InvalidOperationException("Studio is not initialized yet!");
36+
if (StudioAPI.StudioInstance == null) throw new InvalidOperationException("Studio is not initialized yet!");
3937

40-
if (Studio.dicObjectCtrl.TryGetValue(obj.objectInfo.dicKey, out var oci) && oci == obj)
38+
if (StudioAPI.StudioInstance.dicObjectCtrl.TryGetValue(obj.objectInfo.dicKey, out var oci) && oci == obj)
4139
return obj.objectInfo.dicKey;
4240

4341
return -1;
@@ -50,9 +48,9 @@ public static int GetSceneId(this ObjectCtrlInfo obj)
5048
public static int GetSceneId(this ObjectInfo obj)
5149
{
5250
if (obj == null) throw new ArgumentNullException(nameof(obj));
53-
if (Studio == null) throw new InvalidOperationException("Studio is not initialized yet!");
51+
if (StudioAPI.StudioInstance == null) throw new InvalidOperationException("Studio is not initialized yet!");
5452

55-
if (Studio.dicObjectCtrl.TryGetValue(obj.dicKey, out var oci) && oci.objectInfo == obj)
53+
if (StudioAPI.StudioInstance.dicObjectCtrl.TryGetValue(obj.dicKey, out var oci) && oci.objectInfo == obj)
5654
return obj.dicKey;
5755

5856
return -1;
@@ -64,7 +62,7 @@ public static int GetSceneId(this ObjectInfo obj)
6462
public static OCIChar GetOCIChar(this ChaControl chaControl)
6563
{
6664
if (!StudioAPI.InsideStudio) return null;
67-
var infos = global::Studio.Studio.Instance.dicInfo;
65+
var infos = StudioAPI.StudioInstance.dicInfo;
6866
var charas = infos.Values.OfType<OCIChar>();
6967
return charas.FirstOrDefault(x => x.charInfo == chaControl);
7068
}
@@ -99,7 +97,7 @@ public static bool TryGetObjectCtrlInfo(this TreeNodeObject tno, out ObjectCtrlI
9997
return false;
10098
}
10199

102-
return Studio.dicInfo.TryGetValue(tno, out objectCtrlInfo);
100+
return StudioAPI.StudioInstance.dicInfo.TryGetValue(tno, out objectCtrlInfo);
103101
}
104102

105103
/// <summary>

src/Shared.CharaStudio/Studio/UI/CurrentStateCategoryColorPicker.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,12 +69,12 @@ protected override GameObject CreateItem(GameObject categoryObject)
6969
button.onClick.AddListener(() =>
7070
{
7171
#if !PH
72-
Singleton<GameStudio.Studio>.Instance.colorPalette.Setup(Name, Value.Value, c => { OnValueChanged(c); image.color = c; }, true);
73-
Singleton<GameStudio.Studio>.Instance.colorPalette.visible = true;
72+
StudioAPI.StudioInstance.colorPalette.Setup(Name, Value.Value, c => { OnValueChanged(c); image.color = c; }, true);
73+
StudioAPI.StudioInstance.colorPalette.visible = true;
7474
#elif PH
75-
Singleton<GameStudio.Studio>.Instance.colorMenu.updateColorFunc = new GameStudio.UI_ColorInfo.UpdateColor(c => { OnValueChanged(c); image.color = c; });
76-
Singleton<GameStudio.Studio>.Instance.colorMenu.SetColor(image.color, UI_ColorInfo.ControlType.PresetsSample);
77-
Singleton<GameStudio.Studio>.Instance.colorPaletteCtrl.visible = true;
75+
StudioAPI.StudioInstance.colorMenu.updateColorFunc = new GameStudio.UI_ColorInfo.UpdateColor(c => { OnValueChanged(c); image.color = c; });
76+
StudioAPI.StudioInstance.colorMenu.SetColor(image.color, UI_ColorInfo.ControlType.PresetsSample);
77+
StudioAPI.StudioInstance.colorPaletteCtrl.visible = true;
7878
#endif
7979
});
8080
Value.Subscribe(newValue => image.color = newValue);

src/Shared.CharaStudio/Studio/UI/SceneEffectsCategory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ private static void Initialize()
6868
const string sliderSourcePath = "Screen Effect/Viewport/Content/Depth of Field/Slider Focal Size";
6969
#endif
7070

71-
var sbc = global::Studio.Studio.Instance.systemButtonCtrl;
71+
var sbc = StudioAPI.StudioInstance.systemButtonCtrl;
7272
var sef = sbc.transform.FindLoop("01_Screen Effect");
7373
_headerSource = sef.transform.Find(headerSourcePath)?.gameObject ?? throw new ArgumentException("Could not find " + headerSourcePath);
7474
_contentSource = sef.transform.Find(contentSourcePath)?.gameObject ?? throw new ArgumentException("Could not find " + contentSourcePath);

src/Shared.CharaStudio/Studio/UI/SceneEffectsCategoryColorPicker.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -87,12 +87,12 @@ public SceneEffectsColorPickerSet(Text label, Button button, string text, Action
8787
button.onClick.AddListener(() =>
8888
{
8989
#if !PH
90-
Singleton<GameStudio.Studio>.Instance.colorPalette.Setup(Text, Value, SetValue, true);
91-
Singleton<GameStudio.Studio>.Instance.colorPalette.visible = true;
90+
StudioAPI.StudioInstance.colorPalette.Setup(Text, Value, SetValue, true);
91+
StudioAPI.StudioInstance.colorPalette.visible = true;
9292
#elif PH
93-
Singleton<GameStudio.Studio>.Instance.colorMenu.updateColorFunc = new GameStudio.UI_ColorInfo.UpdateColor(SetValue);
94-
Singleton<GameStudio.Studio>.Instance.colorMenu.SetColor(ColorImage.color, UI_ColorInfo.ControlType.PresetsSample);
95-
Singleton<GameStudio.Studio>.Instance.colorPaletteCtrl.visible = true;
93+
StudioAPI.StudioInstance.colorMenu.updateColorFunc = new GameStudio.UI_ColorInfo.UpdateColor(SetValue);
94+
StudioAPI.StudioInstance.colorMenu.SetColor(ColorImage.color, UI_ColorInfo.ControlType.PresetsSample);
95+
StudioAPI.StudioInstance.colorPaletteCtrl.visible = true;
9696
#endif
9797
});
9898

0 commit comments

Comments
 (0)