Netcode Bootstrap
This commit is contained in:
+90
@@ -0,0 +1,90 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing.Design;
|
||||
using System.IO;
|
||||
using System.Text.RegularExpressions;
|
||||
using UnityEditor;
|
||||
using UnityEditor.Build;
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace Rukhanka.Editor
|
||||
{
|
||||
public static class ProjectScriptSymbolManager
|
||||
{
|
||||
static NamedBuildTarget GetCurrentBuildTarget()
|
||||
{
|
||||
#if UNITY_SERVER
|
||||
return NamedBuildTarget.Server;
|
||||
#else
|
||||
var bt = EditorUserBuildSettings.activeBuildTarget;
|
||||
var btg = BuildPipeline.GetBuildTargetGroup(bt);
|
||||
var rv = NamedBuildTarget.FromBuildTargetGroup(btg);
|
||||
return rv;
|
||||
#endif
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static List<string> GetScriptSymbols()
|
||||
{
|
||||
var bt = GetCurrentBuildTarget();
|
||||
var definesStr = PlayerSettings.GetScriptingDefineSymbols(bt);
|
||||
var rv = new List<string>(definesStr.Split(';'));
|
||||
return rv;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static void SetScriptSymbols(List<string> sss)
|
||||
{
|
||||
if (sss == null || sss.Count == 0)
|
||||
return;
|
||||
|
||||
var rv = "";
|
||||
for (var i = 0; i < sss.Count; ++i)
|
||||
{
|
||||
rv += sss[i];
|
||||
if (i != sss.Count - 1)
|
||||
rv += ';';
|
||||
}
|
||||
PlayerSettings.SetScriptingDefineSymbols(GetCurrentBuildTarget(), rv);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public static void ToggleScriptSymbol(string ss, bool on)
|
||||
{
|
||||
if (on)
|
||||
AddScriptSymbol(ss);
|
||||
else
|
||||
RemoveScriptSymbol(ss);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public static void RemoveScriptSymbol(string ss)
|
||||
{
|
||||
var defines = GetScriptSymbols();
|
||||
var idx = defines.FindIndex(x => x == ss);
|
||||
if (idx >= 0)
|
||||
{
|
||||
defines.RemoveAt(idx);
|
||||
SetScriptSymbols(defines);
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public static void AddScriptSymbol(string ss)
|
||||
{
|
||||
var defines = GetScriptSymbols();
|
||||
if (defines.FindIndex(x => x == ss) < 0)
|
||||
{
|
||||
defines.Add(ss);
|
||||
SetScriptSymbols(defines);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 155cd1f5502e721488f0c87e4f7c5c39
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 298480
|
||||
packageName: Rukhanka Animation System 2
|
||||
packageVersion: 2.9.0
|
||||
assetPath: Packages/com.rukhanka.animation/Rukhanka.Editor/SettingsWindow/ProjectScriptSymbolManager.cs
|
||||
uploadId: 897522
|
||||
@@ -0,0 +1,86 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text.RegularExpressions;
|
||||
using UnityEditor;
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace Rukhanka.Editor
|
||||
{
|
||||
public class ResponseFileManager: SymbolManager
|
||||
{
|
||||
List<string> rspFileContent = new ();
|
||||
string filePath;
|
||||
readonly Regex defineRegex = new ("-define\\s*:\\s*(.*)");
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public ResponseFileManager(string pathToResponseFile)
|
||||
{
|
||||
filePath = pathToResponseFile;
|
||||
if (File.Exists(pathToResponseFile))
|
||||
{
|
||||
var rspFileContentArr = File.ReadAllLines(pathToResponseFile);
|
||||
rspFileContent = new List<string>(rspFileContentArr);
|
||||
}
|
||||
|
||||
// Search for defines and add them to the list
|
||||
for (var k = 0; k < rspFileContent.Count;)
|
||||
{
|
||||
var l = rspFileContent[k];
|
||||
var defines = defineRegex.Match(l);
|
||||
if (defines.Length > 1)
|
||||
{
|
||||
for (var i = 1; i < defines.Groups.Count; ++i)
|
||||
{
|
||||
var d = defines.Groups[i];
|
||||
var symbolsArr = d.Value.Split(';');
|
||||
symbols.AddRange(symbolsArr);
|
||||
}
|
||||
rspFileContent.RemoveAt(k);
|
||||
}
|
||||
else
|
||||
{
|
||||
++k;
|
||||
}
|
||||
}
|
||||
|
||||
// Remove blank lines
|
||||
rspFileContent.RemoveAll(x => x.Length == 0);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
string CreateDefinesString()
|
||||
{
|
||||
if (symbols.Count == 0)
|
||||
return "";
|
||||
|
||||
var rv = "-define:";
|
||||
for (var i = 0; i < symbols.Count; ++i)
|
||||
{
|
||||
if (i != 0)
|
||||
rv += ';';
|
||||
rv += symbols[i];
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public override void ApplyChanges()
|
||||
{
|
||||
if (!HasChanges())
|
||||
return;
|
||||
|
||||
var definesString = CreateDefinesString();
|
||||
rspFileContent.Add(definesString);
|
||||
File.WriteAllLines(filePath, rspFileContent);
|
||||
AssetDatabase.Refresh();
|
||||
|
||||
base.ApplyChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 99b9546b389e32340831fc402195a2e5
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 298480
|
||||
packageName: Rukhanka Animation System 2
|
||||
packageVersion: 2.9.0
|
||||
assetPath: Packages/com.rukhanka.animation/Rukhanka.Editor/SettingsWindow/ResponseFileManager.cs
|
||||
uploadId: 897522
|
||||
@@ -0,0 +1,138 @@
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace Rukhanka.Editor
|
||||
{
|
||||
public class SettingsWindow: SettingsProvider
|
||||
{
|
||||
ResponseFileManager
|
||||
editorRSP,
|
||||
hybridRSP,
|
||||
runtimeRSP,
|
||||
debugDrawerRSP;
|
||||
|
||||
ShaderConfigManager scm;
|
||||
|
||||
const string EDITOR_RSP_PATH = "Packages/com.rukhanka.animation/Rukhanka.Editor/csc.rsp";
|
||||
const string HYBRID_RSP_PATH = "Packages/com.rukhanka.animation/Rukhanka.Hybrid/csc.rsp";
|
||||
const string RUNTIME_RSP_PATH = "Packages/com.rukhanka.animation/Rukhanka.Runtime/csc.rsp";
|
||||
const string DEBUG_DRAWER_RSP_PATH = "Packages/com.rukhanka.animation/Rukhanka.DebugDrawer/csc.rsp";
|
||||
public const string SHADER_CONFIG_PATH = "Packages/com.rukhanka.animation/Rukhanka.Runtime/Common/Shaders/ShaderConf.hlsl";
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
SettingsWindow(string path, SettingsScope ss = SettingsScope.Project)
|
||||
: base(path, ss)
|
||||
{ }
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
[SettingsProvider]
|
||||
static SettingsProvider CreateSettingsProvider()
|
||||
{
|
||||
var rv = new SettingsWindow("Project/Rukhanka Animation", SettingsScope.Project);
|
||||
return rv;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public override void OnActivate(string searchContext, VisualElement rootElement)
|
||||
{
|
||||
InitSymbolManagers();
|
||||
|
||||
var vta = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>("Packages/com.rukhanka.animation/Rukhanka.Editor/UXML/SettingsWindow.uxml");
|
||||
var settingsInstance = vta.Instantiate();
|
||||
rootElement.Add(settingsInstance);
|
||||
|
||||
ConfigureUI(settingsInstance);
|
||||
SetupDebugAndValidationCheckbox(settingsInstance);
|
||||
SetupToggle(settingsInstance, "RUKHANKA_ENABLE_DEFORMATION_MOTION_VECTORS", "enableMotionVectorsToggle", new []{ runtimeRSP, hybridRSP }, scm);
|
||||
#if RUKHANKA_INPLACE_SKINNING
|
||||
var hdd = settingsInstance.Q<VisualElement>("halfDeformedData");
|
||||
var hddl = settingsInstance.Q<Label>("halfDeformedDataLabel");
|
||||
hddl.tooltip = "With in-place skinning enabled there is no internal deformed data storage";
|
||||
hdd.SetEnabled(false);
|
||||
#else
|
||||
SetupToggle(settingsInstance, "RUKHANKA_HALF_DEFORMED_DATA", "halfDeformedDataToggle", new []{ runtimeRSP }, scm);
|
||||
#endif
|
||||
SetupToggle(settingsInstance, "RUKHANKA_DUAL_QUATERNION_SKINNING", "dualQuaternionSkinningToggle", new []{ runtimeRSP }, scm);
|
||||
SetupToggle(settingsInstance, "RUKHANKA_INPLACE_SKINNING", "inplaceSkinningToggle", new []{ runtimeRSP, editorRSP }, scm);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void ConfigureUI(VisualElement root)
|
||||
{
|
||||
SetupHelpURLs(root);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void InitSymbolManagers()
|
||||
{
|
||||
editorRSP = new ResponseFileManager(EDITOR_RSP_PATH);
|
||||
hybridRSP = new ResponseFileManager(HYBRID_RSP_PATH);
|
||||
runtimeRSP = new ResponseFileManager(RUNTIME_RSP_PATH);
|
||||
debugDrawerRSP = new ResponseFileManager(DEBUG_DRAWER_RSP_PATH);
|
||||
|
||||
scm = new ShaderConfigManager(SHADER_CONFIG_PATH);
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void SetupToggle(VisualElement root, string scriptSymbol, string toggleName, ResponseFileManager[] rfms, ShaderConfigManager scm, bool invert = false)
|
||||
{
|
||||
var t = root.Q<Toggle>(toggleName);
|
||||
t.value = rfms[0].IsSymbolDefined(scriptSymbol);
|
||||
|
||||
if (invert)
|
||||
t.value = !t.value;
|
||||
|
||||
t.RegisterCallback<ChangeEvent<bool>>((evt) =>
|
||||
{
|
||||
var newVal = invert ? !evt.newValue : evt.newValue;
|
||||
foreach (var rfm in rfms)
|
||||
{
|
||||
rfm.ToggleScriptSymbol(scriptSymbol, newVal);
|
||||
rfm.ApplyChanges();
|
||||
}
|
||||
|
||||
scm?.ToggleScriptSymbol(scriptSymbol, newVal);
|
||||
scm?.ApplyChanges();
|
||||
});
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void SetupDebugAndValidationCheckbox(VisualElement settingsInstance)
|
||||
{
|
||||
var debugModeToggle = settingsInstance.Q<Toggle>("debugInfoToggle");
|
||||
#if RUKHANKA_DEBUG_INFO
|
||||
debugModeToggle.value = true;
|
||||
#else
|
||||
debugModeToggle.value = false;
|
||||
#endif
|
||||
debugModeToggle.RegisterCallback<ChangeEvent<bool>>((evt) => ProjectScriptSymbolManager.ToggleScriptSymbol("RUKHANKA_DEBUG_INFO", evt.newValue));
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void SetupHelpURLs(VisualElement settingsInstance)
|
||||
{
|
||||
var debugInfoIcon = settingsInstance.Q<Label>("debugInfoHelpIcon");
|
||||
debugInfoIcon.RegisterCallback<ClickEvent>(evt => { Application.OpenURL("https://docs.rukhanka.com/Debug%20and%20Validation/validation_layer"); });
|
||||
var enableMotionVectorsHelpIcon = settingsInstance.Q<Label>("enableMotionVectorsHelpIcon");
|
||||
enableMotionVectorsHelpIcon.RegisterCallback<ClickEvent>(evt => { Application.OpenURL("https://docs.rukhanka.com/settings_dialog#enable-motion-vectors-for-deformation-shaders"); });
|
||||
var dualQuaternionSkinningIcon = settingsInstance.Q<Label>("dualQuaternionSkinningHelpIcon");
|
||||
dualQuaternionSkinningIcon.RegisterCallback<ClickEvent>(evt => { Application.OpenURL("https://docs.rukhanka.com/settings_dialog#dual-quaternion-skinning"); });
|
||||
var halfDeformedDataHelpIcon = settingsInstance.Q<Label>("halfDeformedDataHelpIcon");
|
||||
halfDeformedDataHelpIcon.RegisterCallback<ClickEvent>(evt => { Application.OpenURL("https://docs.rukhanka.com/Optimizing%20Rukhanka/half_precision_deformation_data"); });
|
||||
var inplaceSkinningHelpIcon = settingsInstance.Q<Label>("inplaceSkinningHelpIcon");
|
||||
inplaceSkinningHelpIcon.RegisterCallback<ClickEvent>(evt => { Application.OpenURL("https://docs.rukhanka.com/Optimizing%20Rukhanka/inplace_skinning"); });
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 019e3a528e0eac44d9da325c4df5089d
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 298480
|
||||
packageName: Rukhanka Animation System 2
|
||||
packageVersion: 2.9.0
|
||||
assetPath: Packages/com.rukhanka.animation/Rukhanka.Editor/SettingsWindow/SettingsWindow.cs
|
||||
uploadId: 897522
|
||||
@@ -0,0 +1,68 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text.RegularExpressions;
|
||||
using UnityEditor;
|
||||
using UnityEngine.Assertions;
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace Rukhanka.Editor
|
||||
{
|
||||
public class ShaderConfigManager: SymbolManager
|
||||
{
|
||||
string filePath;
|
||||
List<string> cfgLines = new ();
|
||||
readonly Regex defineRegex = new ("\\s*#define\\s+(.*)");
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public ShaderConfigManager(string pathToShaderConfigFile)
|
||||
{
|
||||
filePath = pathToShaderConfigFile;
|
||||
if (File.Exists(filePath))
|
||||
{
|
||||
var lines = File.ReadAllLines(filePath);
|
||||
cfgLines = new List<string>(lines);
|
||||
}
|
||||
|
||||
// Search for defines and add them to the list
|
||||
for (var k = 0; k < cfgLines.Count;)
|
||||
{
|
||||
var l = cfgLines[k];
|
||||
var defines = defineRegex.Match(l);
|
||||
if (defines.Length > 1)
|
||||
{
|
||||
Assert.IsTrue(defines.Groups.Count == 2);
|
||||
var d = defines.Groups[1];
|
||||
symbols.Add(d.Value);
|
||||
cfgLines.RemoveAt(k);
|
||||
}
|
||||
else
|
||||
{
|
||||
++k;
|
||||
}
|
||||
}
|
||||
|
||||
// Remove blank lines
|
||||
cfgLines.RemoveAll(x => x.Length == 0);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public override void ApplyChanges()
|
||||
{
|
||||
if (!HasChanges())
|
||||
return;
|
||||
|
||||
for (var i = 0; i < symbols.Count; ++i)
|
||||
{
|
||||
var s = symbols[i];
|
||||
cfgLines.Add($"#define {s}");
|
||||
}
|
||||
File.WriteAllLines(filePath, cfgLines);
|
||||
AssetDatabase.Refresh();
|
||||
|
||||
base.ApplyChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 22598281a2afe1e4f81a9750b2966b05
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 298480
|
||||
packageName: Rukhanka Animation System 2
|
||||
packageVersion: 2.9.0
|
||||
assetPath: Packages/com.rukhanka.animation/Rukhanka.Editor/SettingsWindow/ShaderConfigManager.cs
|
||||
uploadId: 897522
|
||||
@@ -0,0 +1,74 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text.RegularExpressions;
|
||||
using UnityEditor;
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace Rukhanka.Editor
|
||||
{
|
||||
public class SymbolManager: IDisposable
|
||||
{
|
||||
protected List<string> symbols = new ();
|
||||
bool changed = false;
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public void ToggleScriptSymbol(string ss, bool on)
|
||||
{
|
||||
if (on)
|
||||
AddScriptSymbol(ss);
|
||||
else
|
||||
RemoveScriptSymbol(ss);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public void RemoveScriptSymbol(string ss)
|
||||
{
|
||||
if (IsSymbolDefined(ss))
|
||||
{
|
||||
changed = true;
|
||||
symbols.Remove(ss);
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public void AddScriptSymbol(string ss)
|
||||
{
|
||||
if (!IsSymbolDefined(ss))
|
||||
{
|
||||
changed = true;
|
||||
symbols.Add(ss);
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public bool IsSymbolDefined(string ss)
|
||||
{
|
||||
return symbols.FindIndex(x => x == ss) >= 0;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public bool HasChanges() => changed;
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public virtual void ApplyChanges()
|
||||
{
|
||||
changed = false;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
ApplyChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7b367d9d55c165042b07c7f54b9562eb
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 298480
|
||||
packageName: Rukhanka Animation System 2
|
||||
packageVersion: 2.9.0
|
||||
assetPath: Packages/com.rukhanka.animation/Rukhanka.Editor/SettingsWindow/SymbolManager.cs
|
||||
uploadId: 897522
|
||||
Reference in New Issue
Block a user