A simple first person controller based on the Brackeys video. Adding in some concepts from the Unite 2017 Architecture session and adding some more capabilities.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

94 lines
3.3 KiB

using UnityEditor;
using UnityEngine;
using System.IO;
using System;
namespace GitHub.Unity
{
[InitializeOnLoad]
public class ExtensionLoader : ScriptableSingleton<ExtensionLoader>
{
[SerializeField] private bool initialized = true;
public bool Initialized
{
get
{
return initialized;
}
set
{
initialized = value;
Save(true);
}
}
private static bool inSourceMode = false;
private const string sourceModePath = "Assets/Editor/build/";
private const string realPath = "Assets/Plugins/GitHub/Editor/";
private static string[] assemblies20 = { "System.Threading.dll", "AsyncBridge.Net35.dll", "ReadOnlyCollectionsInterfaces.dll", "GitHub.Api.dll", "GitHub.Unity.dll" };
private static string[] assemblies45 = { "GitHub.Api.45.dll", "GitHub.Unity.45.dll" };
private const string GITHUB_UNITY_DISABLE = "GITHUB_UNITY_DISABLE";
private static bool IsDisabled { get { return Environment.GetEnvironmentVariable(GITHUB_UNITY_DISABLE) == "1"; } }
static ExtensionLoader()
{
if (IsDisabled)
{
return;
}
EditorApplication.update += Initialize;
}
private static void Initialize()
{
EditorApplication.update -= Initialize;
// we're always doing this right now because if the plugin gets updated all the meta files will be disabled and we need to re-enable them
// we should probably detect if our assets change and re-run this instead of doing it every time
//if (!ExtensionLoader.instance.Initialized)
{
var scriptPath = Path.Combine(Application.dataPath, "Editor" + Path.DirectorySeparatorChar + "GitHub.Unity" + Path.DirectorySeparatorChar + "EntryPoint.cs");
inSourceMode = File.Exists(scriptPath);
ToggleAssemblies();
//ExtensionLoader.instance.Initialized = true;
AssetDatabase.SaveAssets();
}
}
private static void ToggleAssemblies()
{
var path = inSourceMode ? sourceModePath : realPath;
#if NET_4_6
ToggleAssemblies(path, assemblies20, false);
ToggleAssemblies(path, assemblies45, true);
#else
ToggleAssemblies(path, assemblies45, false);
ToggleAssemblies(path, assemblies20, true);
#endif
}
private static void ToggleAssemblies(string path, string[] assemblies, bool enable)
{
foreach (var file in assemblies)
{
var filepath = path + file;
PluginImporter importer = AssetImporter.GetAtPath(filepath) as PluginImporter;
if (importer == null)
{
Debug.LogFormat("GitHub for Unity: Could not find importer for {0}. Some functionality may fail.", filepath);
continue;
}
if (importer.GetCompatibleWithEditor() != enable)
{
importer.SetCompatibleWithEditor(enable);
importer.SaveAndReimport();
}
}
}
}
}