145 lines
5.1 KiB
C#
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
|
|
}
|
|
}
|
|
|
|
}
|