NewN_UAVPlane/Assets/3rdParty/ZFBrowser/Scripts/FileLocations.cs

145 lines
5.1 KiB
C#

using System;
using System.IO;
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif
namespace ZenFulcrum.EmbeddedBrowser {
public static class FileLocations {
public const string SlaveExecutable = "ZFGameBrowser";
private static CEFDirs _dirs;
public static CEFDirs Dirs {
get { return _dirs ?? (_dirs = GetCEFDirs()); }
}
public class CEFDirs {
/** Where to find cef.pak, et al */
public string resourcesPath;
/** Where to find .dll, .so, natives_blob.bin, etc */
public string binariesPath;
/** Where to find en-US.pak et al */
public string localesPath;
/** The executable to run for browser processes. */
public string subprocessFile;
/** Editor/application log file */
public string logFile;
}
private static CEFDirs GetCEFDirs() {
#if UNITY_EDITOR
//In the editor we don't know exactly where we are at, but we can look up one of our scripts and move from there
var guids = AssetDatabase.FindAssets("EditorWebResources");
if (guids.Length != 1) throw new FileNotFoundException("Failed to locate a single EditorWebResources file");
string scriptPath = AssetDatabase.GUIDToAssetPath(guids[0]);
// ReSharper disable once PossibleNullReferenceException
var baseDir = Directory.GetParent(scriptPath).Parent.FullName + "/Plugins";
string resourcesPath, localesDir;
var platformDir = baseDir;
#if UNITY_EDITOR_WIN
#if UNITY_EDITOR_64
platformDir += "/w64";
#else
platformDir += "/w32";
#endif
resourcesPath = platformDir + "/CEFResources";
localesDir = resourcesPath + "/locales";
//Silly MS.
resourcesPath = resourcesPath.Replace("/", "\\");
localesDir = localesDir.Replace("/", "\\");
platformDir = platformDir.Replace("/", "\\");
var subprocessFile = platformDir + "/" + SlaveExecutable + ".exe";
//var logFile = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "/Unity/Editor/Editor.log";
#elif UNITY_EDITOR_LINUX
#if UNITY_EDITOR_64
platformDir += "/l64";
#else
platformDir += "/w32";
#endif
resourcesPath = platformDir + "/CEFResources";
localesDir = resourcesPath + "/locales";
var subprocessFile = platformDir + "/" + SlaveExecutable;
var logFile = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "/unity3d/Editor.log";
#elif UNITY_EDITOR_OSX
platformDir += "/m64";
resourcesPath = platformDir + "/BrowserLib.app/Contents/Frameworks/Chromium Embedded Framework.framework/Resources";
localesDir = resourcesPath;
//Chromium's base::mac::GetAppBundlePath will walk up the tree until it finds an ".app" folder and start
//looking for pieces from there. That's why everything is hidden in a fake "BrowserLib.app"
//folder that's not actually an app.
var subprocessFile = platformDir + "/BrowserLib.app/Contents/Frameworks/" + SlaveExecutable + ".app/Contents/MacOS/" + SlaveExecutable;
var logFile = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "/Library/Logs/Unity/Editor.log";
#else
//If you want to build your app without ZFBrowser on some platforms change this to an exception or
//tweak the .asmdef
#error ZFBrowser is not supported on this platform
#endif
return new CEFDirs() {
resourcesPath = resourcesPath,
binariesPath = platformDir,
localesPath = localesDir,
subprocessFile = subprocessFile,
//logFile = logFile,
};
#elif UNITY_STANDALONE_WIN
var resourcesPath = Application.dataPath + "/Plugins";
var logFile = Application.dataPath + "/output_log.txt";
#if UNITY_2017_2_OR_NEWER
var appLowDir = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "Low/" + Application.companyName + "/" + Application.productName;
if (Directory.Exists(appLowDir)) {
logFile = appLowDir + "/output_log.txt";
}
#endif
return new CEFDirs() {
resourcesPath = resourcesPath,
binariesPath = resourcesPath,
localesPath = resourcesPath + "/locales",
subprocessFile = resourcesPath + "/" + SlaveExecutable + ".exe",
logFile = logFile,
};
#elif UNITY_STANDALONE_LINUX
var resourcesPath = Application.dataPath + "/Plugins";
return new CEFDirs() {
resourcesPath = resourcesPath,
binariesPath = resourcesPath,
localesPath = resourcesPath + "/locales",
subprocessFile = resourcesPath + "/" + SlaveExecutable,
logFile = "/dev/null",
// Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "/unity3d/" +
// Application.companyName + "/" + Application.productName + "/Player.log",
};
#elif UNITY_STANDALONE_OSX
return new CEFDirs() {
resourcesPath = Application.dataPath + "/Frameworks/Chromium Embedded Framework.framework/Resources",
binariesPath = Application.dataPath + "/Plugins",
localesPath = Application.dataPath + "/Frameworks/Chromium Embedded Framework.framework/Resources",
subprocessFile = Application.dataPath + "/Frameworks/ZFGameBrowser.app/Contents/MacOS/" + SlaveExecutable,
logFile = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "/Library/Logs/Unity/Player.log",
};
#else
#error Web textures are not supported on this platform
#endif
}
}
}