Skip to content

Commit 8c73f40

Browse files
committed
fix: Fixed error in TimelineInternals.dll when Timeline package is not installed
1 parent 7d359cb commit 8c73f40

13 files changed

+185
-20
lines changed

Editor/GenericScriptableArchitecture.Editor.asmdef

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@
2424
],
2525
"autoReferenced": true,
2626
"defineConstraints": [],
27-
"versionDefines": [],
27+
"versionDefines": [
28+
{
29+
"name": "com.unity.timeline",
30+
"expression": "",
31+
"define": "USE_TIMELINE"
32+
}
33+
],
2834
"noEngineReferences": false
2935
}

Editor/SymbolManager.cs

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
namespace GenericScriptableArchitecture.Editor
2+
{
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Linq;
6+
using System.Reflection;
7+
using UnityEditor;
8+
using UnityEngine;
9+
10+
[InitializeOnLoad]
11+
public static class SymbolManager
12+
{
13+
private const string TimelineDefine = "GSA_TIMELINE";
14+
15+
static SymbolManager()
16+
{
17+
#if USE_TIMELINE
18+
if (!IsSymbolDefined(TimelineDefine))
19+
SetCompileDefine(TimelineDefine, true);
20+
#else
21+
if (IsSymbolDefined(TimelineDefine))
22+
SetCompileDefine(TimelineDefine, false);
23+
#endif
24+
}
25+
26+
private static bool IsSymbolDefined(string define)
27+
{
28+
return PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup)
29+
.Split(';')
30+
.Any(defineSymbol => defineSymbol == define);
31+
}
32+
33+
private static void SetCompileDefine(string define, bool enabled)
34+
{
35+
foreach (BuildTargetGroup targetGroup in GetAllBuildTargetGroups())
36+
{
37+
var defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(targetGroup).Split(';').ToList();
38+
39+
bool alreadyExists = false;
40+
41+
for (int i = 0; i < defines.Count; i++)
42+
{
43+
if (!string.Equals(define, defines[i], StringComparison.InvariantCultureIgnoreCase))
44+
{
45+
continue;
46+
}
47+
48+
alreadyExists = true;
49+
if (!enabled)
50+
{
51+
defines.RemoveAt(i);
52+
}
53+
}
54+
55+
if (!alreadyExists && enabled)
56+
{
57+
defines.Add(define);
58+
}
59+
60+
PlayerSettings.SetScriptingDefineSymbolsForGroup(targetGroup, string.Join(";", defines.ToArray()));
61+
}
62+
}
63+
64+
private static IEnumerable<BuildTargetGroup> GetAllBuildTargetGroups()
65+
{
66+
Type enumType = typeof(BuildTargetGroup);
67+
string[] names = Enum.GetNames(enumType);
68+
Array values = Enum.GetValues(enumType);
69+
70+
for (var i = 0; i < names.Length; i++)
71+
{
72+
string name = names[i];
73+
BuildTargetGroup value = (BuildTargetGroup)values.GetValue(i);
74+
75+
if (value == BuildTargetGroup.Unknown) continue;
76+
77+
MemberInfo[] member = enumType.GetMember(name);
78+
MemberInfo entry = member.FirstOrDefault(p => p.DeclaringType == enumType);
79+
80+
if (entry == null)
81+
{
82+
Debug.LogError($"Unhandled build target: {name}.");
83+
continue;
84+
}
85+
86+
if (entry.GetCustomAttributes(typeof(ObsoleteAttribute), true).Length != 0)
87+
{
88+
continue;
89+
}
90+
91+
yield return value;
92+
}
93+
}
94+
}
95+
}

Editor/SymbolManager.cs.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Timeline/Editor/EmitterGenerator.cs.meta

Lines changed: 10 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Timeline/Editor/OneEventCreator.cs.meta

Lines changed: 10 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Timeline/Editor/ScriptableEventCreator.cs.meta

Lines changed: 10 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Timeline/Editor/ThreeEventsCreator.cs.meta

Lines changed: 10 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Timeline/Editor/TwoEventsCreator.cs.meta

Lines changed: 10 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Timeline/Editor/VoidEventCreator.cs.meta

Lines changed: 10 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Timeline/Runtime/ScriptableEventEmitters.meta

Lines changed: 7 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)