Compare commits

..

10 commits

19 changed files with 1198 additions and 183 deletions

2
.gitignore vendored
View file

@ -450,3 +450,5 @@ dmypy.json
# Pyre type checker # Pyre type checker
.pyre/ .pyre/
# Gamecraft install folder
ref

Binary file not shown.

View file

@ -7,6 +7,7 @@ using System.Threading.Tasks;
using GamecraftModdingAPI.Commands; using GamecraftModdingAPI.Commands;
using GamecraftModdingAPI.Utility; using GamecraftModdingAPI.Utility;
using Svelto.ECS; using Svelto.ECS;
using uREPL;
using IronPython; using IronPython;
@ -18,21 +19,55 @@ namespace GamecraftScripting.Commands
public string Name { get; } = "PythonInfo"; public string Name { get; } = "PythonInfo";
public IEntitiesDB entitiesDB { set; private get; } public EntitiesDB entitiesDB { set; private get; }
public bool isRemovable => false;
private bool isEnabledIDE = false;
public void Dispose() public void Dispose()
{ {
CommandRegistrationHelper.Unregister("PythonInfo"); CommandRegistrationHelper.Unregister("PythonVersion");
CommandRegistrationHelper.Unregister("PythonSearchPathes");
CommandRegistrationHelper.Unregister("ToggleIDE");
isEnabledIDE = false;
} }
public void Ready() public void Ready()
{ {
CommandRegistrationHelper.Register("PythonInfo", ironPythonInfo, "Display Python debug info"); CommandRegistrationHelper.Register("PythonVersion", ironPythonVersion, "Display Python info");
CommandRegistrationHelper.Register("PythonSearchPathes", ironPythonPathes, "Display Python import search pathes");
CommandRegistrationHelper.Register("ToggleIDE", toggleIDE, "Toggle command line IDE tools");
} }
private void ironPythonInfo() private void ironPythonVersion()
{ {
Logging.CommandLog($"Assembly {typeof(PythonOptions).Assembly.GetName().ToString()}"); Logging.CommandLog($"Assembly {typeof(PythonOptions).Assembly.GetName().ToString()}");
} }
private void ironPythonPathes()
{
Logging.CommandLog("'"+string.Join("', '", Environment.PythonEnvironment.CurrentEngine.GetSearchPaths().ToArray())+"'");
}
private void toggleIDE()
{
uREPL.Parameters cliConfig = uREPL.Window.selected.parameters;
if (isEnabledIDE)
{
// disable
}
else
{
// enable
}
isEnabledIDE = !isEnabledIDE;
cliConfig.useMonoCompletion = isEnabledIDE;
cliConfig.useGameObjectNameCompletion = isEnabledIDE;
cliConfig.useGameObjectPathCompletion = isEnabledIDE;
cliConfig.useGlobalClassCompletion = isEnabledIDE;
string word = isEnabledIDE ? "On" : "Off";
Logging.CommandLog($"IDE {word}");
}
} }
} }

View file

@ -0,0 +1,206 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;
using GamecraftModdingAPI.Commands;
using GamecraftModdingAPI.Utility;
using Svelto.ECS;
using Microsoft.Scripting.Hosting;
using GamecraftScripting.Environment;
using GamecraftScripting.Serialization;
namespace GamecraftScripting.Commands
{
public class ExecuteCommandEngine : ICustomCommandEngine
{
public const string URI_IMMEDIATE = "immediate://";
public const string URI_HTTP = "http://";
public const string URI_HTTPS = "https://";
public const string URI_INTERNAL = "internal://";
public const string URI_BUILTIN = "exmods://";
public const string URI_FILE = "file://";
public const string URI_ANSWER = "42://";
public string Description { get; } = "Execute some Python, intelligently guessing how to execute it";
public string Name { get; } = "ExecutePython";
public EntitiesDB entitiesDB { set; private get; }
public bool isRemovable => false;
public void Dispose()
{
CommandRegistrationHelper.Unregister(Name);
}
public void Ready()
{
// TODO command registration
CommandRegistrationHelper.Register<string>(Name, ExecutePythonCommand, Description);
// create insecure Python namespace
ScriptEngine pyEngine = PythonEnvironment.CreateEngine();
ScriptScope pyScope = PythonEnvironment.CreateScope(pyEngine);
PythonEnvironment.CurrentEngine = pyEngine;
PythonEnvironment.CurrentScope = pyScope;
}
private void ExecutePythonCommand(string name)
{
string uriName = urifyName(name.Trim());
if (uriName == null)
{
Logging.CommandLogError("Unable to guess script type. Please add a scheme to the start of the command argument to avoid this. \nValid schemes include: \n" + URI_IMMEDIATE.Replace('/', '\\') + " (for Python code) \n" + URI_FILE.Replace('/', '\\') + " (for Python file) ");
return;
}
string scriptContents = getScript(uriName);
if (scriptContents == null)
{
Logging.CommandLogError("Invalid script or URI scheme. Please replace the scheme at the start of the command argument. Valid schemes include: \n" + URI_IMMEDIATE.Replace('/', '\\') + "\\\\ (for Python code) \n" + URI_FILE.Replace('/', '\\') + "\\\\ (for Python file) ");
return;
}
Execute(uriName, scriptContents);
}
private string urifyName(string name)
{
if (name.Contains("://")) return name; // already is a uri, hopefully a valid uri
if (name.Contains(":\\\\")) return name.Replace(":\\\\", "://"); // :\\ is easier to input in CLI
if (!name.EndsWith(".py", StringComparison.InvariantCultureIgnoreCase))
return URI_IMMEDIATE + name; // probably not a script file, hopefully it's some code
name = name.TrimEnd('\\', '/'); // I still hate that Windows filenames use the escape character as a separator
// search scripts included in game save
EntityCollection<ScriptStruct> integratedScripts = entitiesDB.QueryEntities<ScriptStruct>(ScriptBuilder.ScriptGroup);
for (int i = 0; i < integratedScripts.count; i++)
{
if (integratedScripts[i].name == name)
{
// matching script found in game save
return URI_INTERNAL + name;
}
}
// search scripts on disk
try
{
FileInfo file = new FileInfo(name);
if (file.Exists)
{
return URI_FILE + name;
}
}
catch (Exception e) when (
e is System.Security.SecurityException
|| e is ArgumentException
|| e is UnauthorizedAccessException
|| e is PathTooLongException
|| e is NotSupportedException)
{ }
return null;
}
private string getScheme(string uriName)
{
string[] splitName = uriName.Split(new string[] { @"://" }, StringSplitOptions.None);
if (splitName.Length == 2)
{
return splitName[0] + "://";
}
return null;
}
private string getPath(string uriName)
{
string[] splitName = uriName.Split(new string[] { @"://" }, StringSplitOptions.None);
if (splitName.Length == 2)
{
return splitName[1];
}
return null;
}
private string getScript(string uriName)
{
string uri_scheme = getScheme(uriName);
if (uri_scheme == null) return null;
string uri_path = getPath(uriName);
if (uri_path == null) return null;
switch (uri_scheme)
{
case URI_IMMEDIATE:
return uri_path;
case URI_HTTP: // download from web
case URI_HTTPS:
#if DEBUG
Logging.CommandLogWarning("Executing code from the Internet is dangerous! \nWeb scripts are only available in DEVELOPMENT versions of GamecraftScripting.");
try
{
WebRequest req = WebRequest.Create(uriName);
req.Method = "GET";
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
byte[] body = new byte[int.Parse(resp.GetResponseHeader("Content-Length"))];
resp.GetResponseStream().Read(body, 0, body.Length);
return Encoding.ASCII.GetString(body);
}
catch (Exception)
{
return null;
}
#else
Logging.CommandLogError("Executing code from the Internet is dangerous! \nWeb scripts are only available in DEVELOPMENT versions of GamecraftScripting.");
return null;
#endif
case URI_INTERNAL: // found in game file (already deserialized to memory)
EntityCollection<ScriptStruct> internalScripts = entitiesDB.QueryEntities<ScriptStruct>(ScriptBuilder.ScriptGroup);
for (int i = 0; i < internalScripts.count; i++)
{
if (internalScripts[i].name == uri_path)
{
return internalScripts[i].script;
}
}
return null;
case URI_BUILTIN:
// TODO: for future implementation
return null;
case URI_FILE:
try
{
return File.ReadAllText(uri_path);
}
catch (Exception)
{
return null;
}
case URI_ANSWER:
return "print 42";
default:
return null;
}
}
private void Execute(string uriName, string script, bool logError = true)
{
ScriptSource src = PythonEnvironment.CurrentEngine.CreateScriptSourceFromString(script);
try
{
src.Execute(PythonEnvironment.CurrentScope);
}
catch (Exception e)
{
if (logError)
{
Logging.CommandLogError($"Python error in '{uriName}': \n{e.Message}");
}
else
{
throw e;
}
}
}
}
}

View file

@ -1,21 +1,15 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Numerics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Security.Policy;
using GamecraftModdingAPI.Commands; using GamecraftModdingAPI.Commands;
using GamecraftModdingAPI.Utility; using GamecraftModdingAPI.Utility;
using Svelto.ECS; using Svelto.ECS;
using RobocraftX.Common;
using IronPython.Hosting;
using Microsoft.Scripting.Hosting; using Microsoft.Scripting.Hosting;
using GamecraftScripting.Environment; using GamecraftScripting.Environment;
using GamecraftScripting.Serialization;
namespace GamecraftScripting.Commands namespace GamecraftScripting.Commands
{ {
@ -25,33 +19,63 @@ namespace GamecraftScripting.Commands
public string Name { get; } = "PythonRunner"; public string Name { get; } = "PythonRunner";
public IEntitiesDB entitiesDB { set; private get; } public EntitiesDB entitiesDB { set; private get; }
private ScriptEngine pyEngine; public bool isRemovable => false;
private ScriptScope gameScope; public void Dispose()
public void Dispose()
{ {
CommandRegistrationHelper.Unregister("RunPythonScript"); CommandRegistrationHelper.Unregister("RunPythonScript");
CommandRegistrationHelper.Unregister("RunPython"); CommandRegistrationHelper.Unregister("RunPython");
CommandRegistrationHelper.Unregister("RunGamePython");
CommandRegistrationHelper.Unregister("ListGameScripts");
} }
public void Ready() public void Ready()
{ {
CommandRegistrationHelper.Register<string>("RunPythonScript", RunPythonScript, "Run a python script stored on your computer"); CommandRegistrationHelper.Register<string>("RunPythonScript", RunPythonScript, "Run a python script stored on your computer");
CommandRegistrationHelper.Register<string>("RunPython", RunPythonString, "Run a python argument"); CommandRegistrationHelper.Register<string>("RunPython", RunPythonString, "Run a python argument");
CommandRegistrationHelper.Register<string>("RunGamePython", RunIntegratedScript, "Run a python script stored in the game file");
CommandRegistrationHelper.Register("ListGameScripts", ListIntegratedScripts, "List python scripts stored in the game file");
// create insecure Python namespace // create insecure Python namespace
CreateFreeInstance(); ScriptEngine pyEngine = PythonEnvironment.CreateEngine();
// make "import GamecraftModdingAPI" work without the clr boilerplate ScriptScope pyScope = PythonEnvironment.CreateScope(pyEngine);
pyEngine.Execute("import clr\nclr.AddReference(\"GamecraftModdingAPI\")", gameScope); PythonEnvironment.CurrentEngine = pyEngine;
ICollection<string> searchPaths = pyEngine.GetSearchPaths(); PythonEnvironment.CurrentScope = pyScope;
searchPaths.Add(@".\Lib\"); //Logging.MetaLog(string.Join(", ", pyEngine.GetSearchPaths().ToArray()));
searchPaths.Add(@".\Gamecraft_Data\Managed\Lib\");
pyEngine.SetSearchPaths(searchPaths);
Logging.MetaLog(string.Join(", ", pyEngine.GetSearchPaths().ToArray()));
} }
private void ListIntegratedScripts()
{
string result = "";
EntityCollection<ScriptStruct> scripts = entitiesDB.QueryEntities<ScriptStruct>(ScriptBuilder.ScriptGroup);
for (uint i = 0u; i < scripts.count; i++)
{
result += scripts[i].name + " \n";
}
Logging.CommandLog($"Found {scripts.count} integrated script(s) \n{result}");
}
private void RunIntegratedScript(string scriptName)
{
if (scriptName == null) return;
if (scriptName.StartsWith("exmods://", StringComparison.InvariantCultureIgnoreCase))
{
// TODO: Lookup for built-in scripts
return;
}
EntityCollection<ScriptStruct> scripts = entitiesDB.QueryEntities<ScriptStruct>(ScriptBuilder.ScriptGroup);
for (uint i = 0u; i < scripts.count; i++)
{
if (scripts[i].name == scriptName)
{
ExecuteScript(scripts[i].script);
return;
}
}
Logging.CommandLogError("Script not found");
}
private void RunPythonScript(string scriptPath) private void RunPythonScript(string scriptPath)
{ {
string script = File.ReadAllText(scriptPath); string script = File.ReadAllText(scriptPath);
@ -65,10 +89,10 @@ namespace GamecraftScripting.Commands
private void ExecuteScript(string script, bool logError=true) private void ExecuteScript(string script, bool logError=true)
{ {
ScriptSource src = pyEngine.CreateScriptSourceFromString(script); ScriptSource src = PythonEnvironment.CurrentEngine.CreateScriptSourceFromString(script);
try try
{ {
src.Execute(gameScope); src.Execute(PythonEnvironment.CurrentScope);
} }
catch (Exception e) catch (Exception e)
{ {
@ -84,33 +108,9 @@ namespace GamecraftScripting.Commands
} }
} }
/// <summary>
/// [Experimental] Create a Python instance without access to any(?) assemblies
/// </summary>
private void CreateSandboxedInstance()
{
Evidence evidence = new Evidence(); // an uninformative class name to limit accessible Assemblies
AppDomain domain = AppDomain.CreateDomain(GameMode.SaveGameDetails.Name, evidence);
this.pyEngine = Python.CreateEngine(domain);
PythonLogStream pyLog = new PythonLogStream();
pyEngine.Runtime.IO.SetOutput(pyLog, pyLog.Encoding);
this.gameScope = pyEngine.CreateScope();
}
/// <summary>
/// Create an unsecured Python instance
/// </summary>
private void CreateFreeInstance()
{
this.pyEngine = Python.CreateEngine();
PythonLogStream pyLog = new PythonLogStream();
pyEngine.Runtime.IO.SetOutput(pyLog, pyLog.Encoding);
this.gameScope = pyEngine.CreateScope();
}
public PythonRunnerCommandEngine() public PythonRunnerCommandEngine()
{ {
Logging.CommandLog($"cwd: {Directory.GetCurrentDirectory()}"); //Logging.CommandLog($"cwd: {Directory.GetCurrentDirectory()}");
} }
} }
} }

View file

@ -0,0 +1,38 @@
using System;
using System.IO;
using Svelto.ECS;
using GamecraftModdingAPI.Commands;
using GamecraftModdingAPI.Utility;
namespace GamecraftScripting.Commands
{
public class SerializationCommandEngine : ICustomCommandEngine
{
public string Description => "Save a script into a Gamecraft game file";
public string Name => "IntegrateScript";
public EntitiesDB entitiesDB { set; private get; }
public bool isRemovable => false;
internal static IEntityFactory entityFactory = null;
public void Dispose()
{
CommandRegistrationHelper.Unregister(Name);
}
public void Ready()
{
CommandRegistrationHelper.Register<string>(Name, persistScript, Description);
}
private void persistScript(string filepath)
{
if (entityFactory == null) return;
EGID scriptId = Serialization.ScriptBuilder.BuildScriptEntity(filepath, File.ReadAllText(filepath), entityFactory);
Logging.MetaLog($"Created persistent script with id {scriptId.entityID}");
}
}
}

View file

@ -0,0 +1,73 @@
using System;
using System.Collections.Generic;
using System.Security.Policy;
using RobocraftX.Common;
using IronPython.Hosting;
using Microsoft.Scripting.Hosting;
namespace GamecraftScripting.Environment
{
/// <summary>
/// Python environment factories and utilities
/// </summary>
public static class PythonEnvironment
{
public static ScriptEngine CurrentEngine { get; set; }
public static ScriptScope CurrentScope { get; set; }
/// <summary>
/// Creates and configure the Python execution engine
/// </summary>
/// <returns>The Python engine</returns>
public static ScriptEngine CreateEngine()
{
ScriptEngine pyEngine = Python.CreateEngine();
PythonLogStream pyLog = new PythonLogStream();
pyEngine.Runtime.IO.SetOutput(pyLog, pyLog.Encoding);
ICollection<string> searchPaths = pyEngine.GetSearchPaths();
// Add Python standard lib to import search pathes
searchPaths.Add(@".\Lib\"); // try not to use this location
searchPaths.Add(@".\Gamecraft_Data\Managed\Lib\");
pyEngine.SetSearchPaths(searchPaths);
return pyEngine;
}
/// <summary>
/// Creates a restricted Python execution engine
/// </summary>
/// <returns>The Python engine</returns>
public static ScriptEngine CreateRestrictedEngine()
{
Evidence evidence = new Evidence(); // an uninformative class name to limit accessible Assemblies
AppDomain domain = AppDomain.CreateDomain(GameMode.SaveGameDetails.Name, evidence);
ScriptEngine pyEngine = Python.CreateEngine(domain);
// Add Python standard lib to import search pathes
ICollection<string> searchPaths = pyEngine.GetSearchPaths();
searchPaths.Add(@".\Lib\"); // try not to use this location
searchPaths.Add(@".\Gamecraft_Data\Managed\Lib\");
if (!string.IsNullOrWhiteSpace(GameMode.SaveGameDetails.Folder))
{
// Add game's working directory, in case multiple files are used
searchPaths.Add(GameMode.SaveGameDetails.Folder);
}
pyEngine.SetSearchPaths(searchPaths);
return pyEngine;
}
/// <summary>
/// Creates the Python execution scope
/// </summary>
/// <returns>The Python scope</returns>
/// <param name="pyEngine">The Python engine</param>
public static ScriptScope CreateScope(ScriptEngine pyEngine)
{
ScriptScope pyScope = pyEngine.CreateScope();
// make "import GamecraftModdingAPI" work without the clr boilerplate
pyEngine.Execute("import clr\nclr.AddReference(\"GamecraftModdingAPI\")", pyScope);
return pyScope;
}
}
}

View file

@ -1,9 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net48</TargetFramework> <TargetFramework>net472</TargetFramework>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Version>0.0.1.0</Version> <Version>0.2.1</Version>
<Authors>Exmods</Authors> <Authors>Exmods</Authors>
<PackageLicenseExpression>GNU General Public Licence 3+</PackageLicenseExpression> <PackageLicenseExpression>GNU General Public Licence 3+</PackageLicenseExpression>
<PackageProjectUrl>https://git.exmods.org/SnakesOnAGame/GamecraftScripting</PackageProjectUrl> <PackageProjectUrl>https://git.exmods.org/SnakesOnAGame/GamecraftScripting</PackageProjectUrl>
@ -11,535 +11,826 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="IronPython" Version="2.7.9" /> <PackageReference Include="IronPython" Version="2.7.10" />
<PackageReference Include="IronPython.StdLib" Version="2.7.9" /> <PackageReference Include="IronPython.StdLib" Version="2.7.10" />
<PackageReference Include="Lib.Harmony" Version="1.2.0.1" /> <PackageReference Include="Lib.Harmony" Version="2.0.0.10" />
</ItemGroup> </ItemGroup>
<!--Start Dependencies--> <!--Start Dependencies-->
<ItemGroup> <ItemGroup>
<Reference Include="GamecraftModdingAPI"> <Reference Include="GamecraftModdingAPI">
<HintPath>..\GamecraftModdingAPI.dll</HintPath> <HintPath>..\ref\Plugins\GamecraftModdingAPI.dll</HintPath>
</Reference> <HintPath>..\..\ref\Plugins\GamecraftModdingAPI.dll</HintPath>
<Reference Include="Analytics">
<HintPath>..\..\ref\Gamecraft_Data\Managed\Analytics.dll</HintPath>
</Reference>
<Reference Include="Assembly-CSharp-firstpass">
<HintPath>..\..\ref\Gamecraft_Data\Managed\Assembly-CSharp-firstpass.dll</HintPath>
</Reference>
<Reference Include="Assembly-CSharp">
<HintPath>..\..\ref\Gamecraft_Data\Managed\Assembly-CSharp.dll</HintPath>
</Reference>
<Reference Include="Authentication">
<HintPath>..\..\ref\Gamecraft_Data\Managed\Authentication.dll</HintPath>
</Reference>
<Reference Include="BlockEntityFactory">
<HintPath>..\..\ref\Gamecraft_Data\Managed\BlockEntityFactory.dll</HintPath>
</Reference>
<Reference Include="CommandLine">
<HintPath>..\..\ref\Gamecraft_Data\Managed\CommandLine.dll</HintPath>
</Reference>
<Reference Include="DataLoader">
<HintPath>..\..\ref\Gamecraft_Data\Managed\DataLoader.dll</HintPath>
</Reference>
<Reference Include="DDNA">
<HintPath>..\..\ref\Gamecraft_Data\Managed\DDNA.dll</HintPath>
</Reference>
<Reference Include="Facepunch.Steamworks.Win64">
<HintPath>..\..\ref\Gamecraft_Data\Managed\Facepunch.Steamworks.Win64.dll</HintPath>
</Reference>
<Reference Include="FMOD">
<HintPath>..\..\ref\Gamecraft_Data\Managed\FMOD.dll</HintPath>
</Reference>
<Reference Include="FullGame">
<HintPath>..\..\ref\Gamecraft_Data\Managed\FullGame.dll</HintPath>
</Reference>
<Reference Include="Gamecraft.Blocks.ConsoleBlock">
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.ConsoleBlock.dll</HintPath>
</Reference>
<Reference Include="Gamecraft.Effects">
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Effects.dll</HintPath>
</Reference>
<Reference Include="Gamecraft.GUI.ConsoleBlock">
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.ConsoleBlock.dll</HintPath>
</Reference>
<Reference Include="GameState">
<HintPath>..\..\ref\Gamecraft_Data\Managed\GameState.dll</HintPath>
</Reference>
<Reference Include="GPUInstancer">
<HintPath>..\..\ref\Gamecraft_Data\Managed\GPUInstancer.dll</HintPath>
</Reference>
<Reference Include="Havok.Physics">
<HintPath>..\..\ref\Gamecraft_Data\Managed\Havok.Physics.dll</HintPath>
</Reference>
<Reference Include="Havok.Physics.Hybrid">
<HintPath>..\..\ref\Gamecraft_Data\Managed\Havok.Physics.Hybrid.dll</HintPath>
</Reference>
<Reference Include="HdgRemoteDebugRuntime">
<HintPath>..\..\ref\Gamecraft_Data\Managed\HdgRemoteDebugRuntime.dll</HintPath>
</Reference> </Reference>
<Reference Include="IllusionInjector"> <Reference Include="IllusionInjector">
<HintPath>..\ref\Gamecraft_Data\Managed\IllusionInjector.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\IllusionInjector.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\IllusionInjector.dll</HintPath>
</Reference> </Reference>
<Reference Include="IllusionPlugin"> <Reference Include="IllusionPlugin">
<HintPath>..\ref\Gamecraft_Data\Managed\IllusionPlugin.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\IllusionPlugin.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\IllusionPlugin.dll</HintPath>
</Reference> </Reference>
<Reference Include="JWT"> <Reference Include="JWT">
<HintPath>..\ref\Gamecraft_Data\Managed\JWT.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\JWT.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\JWT.dll</HintPath>
</Reference> </Reference>
<Reference Include="LZ4"> <Reference Include="Unity.Burst.Unsafe">
<HintPath>..\..\ref\Gamecraft_Data\Managed\LZ4.dll</HintPath> <HintPath>..\ref\Gamecraft_Data\Managed\Unity.Burst.Unsafe.dll</HintPath>
</Reference> <HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Burst.Unsafe.dll</HintPath>
<Reference Include="MultiplayerNetworking">
<HintPath>..\..\ref\Gamecraft_Data\Managed\MultiplayerNetworking.dll</HintPath>
</Reference>
<Reference Include="MultiplayerTest">
<HintPath>..\..\ref\Gamecraft_Data\Managed\MultiplayerTest.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json">
<HintPath>..\..\ref\Gamecraft_Data\Managed\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="RCX.ScreenshotTaker">
<HintPath>..\..\ref\Gamecraft_Data\Managed\RCX.ScreenshotTaker.dll</HintPath>
</Reference> </Reference>
<Reference Include="Rewired_Core"> <Reference Include="Rewired_Core">
<HintPath>..\ref\Gamecraft_Data\Managed\Rewired_Core.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Rewired_Core.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\Rewired_Core.dll</HintPath>
</Reference> </Reference>
<Reference Include="Rewired_Windows"> <Reference Include="Rewired_Windows">
<HintPath>..\ref\Gamecraft_Data\Managed\Rewired_Windows.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Rewired_Windows.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\Rewired_Windows.dll</HintPath>
</Reference> </Reference>
<Reference Include="Robocraft.MainGame.AutoEnterSimulation"> <Reference Include="mscorlib">
<HintPath>..\..\ref\Gamecraft_Data\Managed\Robocraft.MainGame.AutoEnterSimulation.dll</HintPath> <HintPath>..\ref\Gamecraft_Data\Managed\mscorlib.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\mscorlib.dll</HintPath>
</Reference>
<Reference Include="Accessibility">
<HintPath>..\ref\Gamecraft_Data\Managed\Accessibility.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Accessibility.dll</HintPath>
</Reference>
<Reference Include="Analytics">
<HintPath>..\ref\Gamecraft_Data\Managed\Analytics.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Analytics.dll</HintPath>
</Reference>
<Reference Include="Assembly-CSharp-firstpass">
<HintPath>..\ref\Gamecraft_Data\Managed\Assembly-CSharp-firstpass.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Assembly-CSharp-firstpass.dll</HintPath>
</Reference>
<Reference Include="Assembly-CSharp">
<HintPath>..\ref\Gamecraft_Data\Managed\Assembly-CSharp.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Assembly-CSharp.dll</HintPath>
</Reference>
<Reference Include="Authentication">
<HintPath>..\ref\Gamecraft_Data\Managed\Authentication.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Authentication.dll</HintPath>
</Reference>
<Reference Include="BlockEntityFactory">
<HintPath>..\ref\Gamecraft_Data\Managed\BlockEntityFactory.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\BlockEntityFactory.dll</HintPath>
</Reference>
<Reference Include="Blocks.HUDFeedbackBlocks">
<HintPath>..\ref\Gamecraft_Data\Managed\Blocks.HUDFeedbackBlocks.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Blocks.HUDFeedbackBlocks.dll</HintPath>
</Reference>
<Reference Include="ClusterToWireConversion.Mock">
<HintPath>..\ref\Gamecraft_Data\Managed\ClusterToWireConversion.Mock.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\ClusterToWireConversion.Mock.dll</HintPath>
</Reference>
<Reference Include="CommandLine">
<HintPath>..\ref\Gamecraft_Data\Managed\CommandLine.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\CommandLine.dll</HintPath>
</Reference>
<Reference Include="DataLoader">
<HintPath>..\ref\Gamecraft_Data\Managed\DataLoader.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\DataLoader.dll</HintPath>
</Reference>
<Reference Include="DDNA">
<HintPath>..\ref\Gamecraft_Data\Managed\DDNA.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\DDNA.dll</HintPath>
</Reference>
<Reference Include="Facepunch.Steamworks.Win64">
<HintPath>..\ref\Gamecraft_Data\Managed\Facepunch.Steamworks.Win64.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Facepunch.Steamworks.Win64.dll</HintPath>
</Reference>
<Reference Include="FMOD">
<HintPath>..\ref\Gamecraft_Data\Managed\FMOD.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\FMOD.dll</HintPath>
</Reference>
<Reference Include="FullGame">
<HintPath>..\ref\Gamecraft_Data\Managed\FullGame.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\FullGame.dll</HintPath>
</Reference>
<Reference Include="Gamecraft.AudioBlocks">
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.AudioBlocks.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.AudioBlocks.dll</HintPath>
</Reference>
<Reference Include="Gamecraft.Blocks.ConsoleBlock">
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.ConsoleBlock.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.ConsoleBlock.dll</HintPath>
</Reference>
<Reference Include="Gamecraft.Blocks.DamagingSurfaceBlock">
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.DamagingSurfaceBlock.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.DamagingSurfaceBlock.dll</HintPath>
</Reference>
<Reference Include="Gamecraft.Blocks.GenericPhysicsBlocks">
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.GenericPhysicsBlocks.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.GenericPhysicsBlocks.dll</HintPath>
</Reference>
<Reference Include="Gamecraft.Blocks.LogicBlock">
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.LogicBlock.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.LogicBlock.dll</HintPath>
</Reference>
<Reference Include="GameCraft.Blocks.ProjectileBlock">
<HintPath>..\ref\Gamecraft_Data\Managed\GameCraft.Blocks.ProjectileBlock.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\GameCraft.Blocks.ProjectileBlock.dll</HintPath>
</Reference>
<Reference Include="Gamecraft.Blocks.TimerBlock">
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.TimerBlock.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Blocks.TimerBlock.dll</HintPath>
</Reference>
<Reference Include="Gamecraft.CharacterVulnerability">
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.CharacterVulnerability.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.CharacterVulnerability.dll</HintPath>
</Reference>
<Reference Include="Gamecraft.CharacterVulnerabilityGui">
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.CharacterVulnerabilityGui.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.CharacterVulnerabilityGui.dll</HintPath>
</Reference>
<Reference Include="Gamecraft.Effects">
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Effects.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Effects.dll</HintPath>
</Reference>
<Reference Include="Gamecraft.GUI.ConsoleBlock">
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.ConsoleBlock.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.ConsoleBlock.dll</HintPath>
</Reference>
<Reference Include="Gamecraft.GUI.GraphicsScreen">
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.GraphicsScreen.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.GraphicsScreen.dll</HintPath>
</Reference>
<Reference Include="Gamecraft.GUI.HUDFeedbackBlocks">
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.HUDFeedbackBlocks.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.HUDFeedbackBlocks.dll</HintPath>
</Reference>
<Reference Include="Gamecraft.GUI.Tweaks">
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.Tweaks.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.Tweaks.dll</HintPath>
</Reference>
<Reference Include="Gamecraft.GUI.Wires">
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.Wires.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.Wires.dll</HintPath>
</Reference>
<Reference Include="Gamecraft.GUI.Wires.Mockup">
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.Wires.Mockup.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.Wires.Mockup.dll</HintPath>
</Reference>
<Reference Include="Gamecraft.GUI.WorldSpaceGuis">
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.WorldSpaceGuis.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.GUI.WorldSpaceGuis.dll</HintPath>
</Reference>
<Reference Include="Gamecraft.Music">
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Music.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Music.dll</HintPath>
</Reference>
<Reference Include="Gamecraft.PerformanceWarnings">
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.PerformanceWarnings.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.PerformanceWarnings.dll</HintPath>
</Reference>
<Reference Include="Gamecraft.Tweaks">
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Tweaks.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Tweaks.dll</HintPath>
</Reference>
<Reference Include="Gamecraft.Tweaks.Mockup">
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Tweaks.Mockup.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Tweaks.Mockup.dll</HintPath>
</Reference>
<Reference Include="Gamecraft.VisualEffects">
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.VisualEffects.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.VisualEffects.dll</HintPath>
</Reference>
<Reference Include="Gamecraft.Wires">
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Wires.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Wires.dll</HintPath>
</Reference>
<Reference Include="Gamecraft.Wires.Input">
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Wires.Input.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Wires.Input.dll</HintPath>
</Reference>
<Reference Include="Gamecraft.Wires.Mockup">
<HintPath>..\ref\Gamecraft_Data\Managed\Gamecraft.Wires.Mockup.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Gamecraft.Wires.Mockup.dll</HintPath>
</Reference>
<Reference Include="GameState">
<HintPath>..\ref\Gamecraft_Data\Managed\GameState.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\GameState.dll</HintPath>
</Reference>
<Reference Include="GPUInstancer">
<HintPath>..\ref\Gamecraft_Data\Managed\GPUInstancer.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\GPUInstancer.dll</HintPath>
</Reference>
<Reference Include="Havok.Physics">
<HintPath>..\ref\Gamecraft_Data\Managed\Havok.Physics.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Havok.Physics.dll</HintPath>
</Reference>
<Reference Include="Havok.Physics.Hybrid">
<HintPath>..\ref\Gamecraft_Data\Managed\Havok.Physics.Hybrid.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Havok.Physics.Hybrid.dll</HintPath>
</Reference>
<Reference Include="LZ4">
<HintPath>..\ref\Gamecraft_Data\Managed\LZ4.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\LZ4.dll</HintPath>
</Reference>
<Reference Include="MultiplayerNetworking">
<HintPath>..\ref\Gamecraft_Data\Managed\MultiplayerNetworking.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\MultiplayerNetworking.dll</HintPath>
</Reference>
<Reference Include="MultiplayerTest">
<HintPath>..\ref\Gamecraft_Data\Managed\MultiplayerTest.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\MultiplayerTest.dll</HintPath>
</Reference>
<Reference Include="netstandard">
<HintPath>..\ref\Gamecraft_Data\Managed\netstandard.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\netstandard.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json">
<HintPath>..\ref\Gamecraft_Data\Managed\Newtonsoft.Json.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="Novell.Directory.Ldap">
<HintPath>..\ref\Gamecraft_Data\Managed\Novell.Directory.Ldap.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Novell.Directory.Ldap.dll</HintPath>
</Reference>
<Reference Include="RCX.ScreenshotTaker">
<HintPath>..\ref\Gamecraft_Data\Managed\RCX.ScreenshotTaker.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RCX.ScreenshotTaker.dll</HintPath>
</Reference>
<Reference Include="RobocraftECS">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftECS.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftECS.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.AccountPreferences"> <Reference Include="RobocraftX.AccountPreferences">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.AccountPreferences.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.AccountPreferences.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.AccountPreferences.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.Blocks"> <Reference Include="RobocraftX.Blocks">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.Blocks.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Blocks.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Blocks.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.Blocks.Ghost"> <Reference Include="RobocraftX.Blocks.Ghost">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.Blocks.Ghost.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Blocks.Ghost.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Blocks.Ghost.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.Blocks.Triggers"> <Reference Include="RobocraftX.Blocks.Triggers">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.Blocks.Triggers.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Blocks.Triggers.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Blocks.Triggers.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.Building.BoxSelect">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.Building.BoxSelect.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Building.BoxSelect.dll</HintPath>
</Reference>
<Reference Include="RobocraftX.Building.Jobs">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.Building.Jobs.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Building.Jobs.dll</HintPath>
</Reference>
<Reference Include="RobocraftX.Character"> <Reference Include="RobocraftX.Character">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.Character.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Character.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Character.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.ClusterToWireConversion">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.ClusterToWireConversion.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.ClusterToWireConversion.dll</HintPath>
</Reference>
<Reference Include="RobocraftX.Common"> <Reference Include="RobocraftX.Common">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.Common.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Common.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Common.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.ControlsScreen"> <Reference Include="RobocraftX.ControlsScreen">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.ControlsScreen.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.ControlsScreen.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.ControlsScreen.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.Crosshair"> <Reference Include="RobocraftX.Crosshair">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.Crosshair.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Crosshair.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Crosshair.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.EntityStreamUtility">
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.EntityStreamUtility.dll</HintPath>
</Reference>
<Reference Include="RobocraftX.FrontEnd"> <Reference Include="RobocraftX.FrontEnd">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.FrontEnd.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.FrontEnd.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.FrontEnd.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.GameSignalHandling"> <Reference Include="RobocraftX.GUI.BlockLabel">
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.GameSignalHandling.dll</HintPath> <HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.BlockLabel.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.BlockLabel.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.GUI.DebugDisplay"> <Reference Include="RobocraftX.GUI.DebugDisplay">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.DebugDisplay.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.DebugDisplay.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.DebugDisplay.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.GUI"> <Reference Include="RobocraftX.GUI">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.GUI.RemoveBlock"> <Reference Include="RobocraftX.GUI.RemoveBlock">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.RemoveBlock.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.RemoveBlock.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.RemoveBlock.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.GUI.ScaleGhost"> <Reference Include="RobocraftX.GUI.ScaleGhost">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.ScaleGhost.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.ScaleGhost.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.ScaleGhost.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.GUI.SignalLabel">
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.SignalLabel.dll</HintPath>
</Reference>
<Reference Include="RobocraftX.GUIs.WorkshopPrefabs"> <Reference Include="RobocraftX.GUIs.WorkshopPrefabs">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.GUIs.WorkshopPrefabs.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.GUIs.WorkshopPrefabs.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.GUIs.WorkshopPrefabs.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.Input"> <Reference Include="RobocraftX.Input">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.Input.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Input.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Input.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.Inventory">
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Inventory.dll</HintPath>
</Reference>
<Reference Include="RobocraftX.MachineEditor"> <Reference Include="RobocraftX.MachineEditor">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.MachineEditor.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.MachineEditor.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.MachineEditor.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.MainGame"> <Reference Include="RobocraftX.MainGame">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.MainGame.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.MainGame.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.MainGame.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.MainSimulation"> <Reference Include="RobocraftX.MainSimulation">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.MainSimulation.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.MainSimulation.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.MainSimulation.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.MockCharacter">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.MockCharacter.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.MockCharacter.dll</HintPath>
</Reference>
<Reference Include="RobocraftX.Multiplayer"> <Reference Include="RobocraftX.Multiplayer">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.Multiplayer.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Multiplayer.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Multiplayer.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.Multiplayer.NetworkEntityStream"> <Reference Include="RobocraftX.Multiplayer.NetworkEntityStream">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.Multiplayer.NetworkEntityStream.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Multiplayer.NetworkEntityStream.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Multiplayer.NetworkEntityStream.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.MultiplayerInput"> <Reference Include="RobocraftX.MultiplayerInput">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.MultiplayerInput.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.MultiplayerInput.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.MultiplayerInput.dll</HintPath>
</Reference> </Reference>
<Reference Include="Robocraftx.ObjectIdBlocks">
<HintPath>..\ref\Gamecraft_Data\Managed\Robocraftx.ObjectIdBlocks.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Robocraftx.ObjectIdBlocks.dll</HintPath>
</Reference>
<Reference Include="RobocraftX.Party"> <Reference Include="RobocraftX.Party">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.Party.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Party.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Party.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.PartyGui"> <Reference Include="RobocraftX.PartyGui">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.PartyGui.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.PartyGui.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.PartyGui.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.Physics"> <Reference Include="RobocraftX.Physics">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.Physics.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Physics.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Physics.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.PilotSeat"> <Reference Include="RobocraftX.PilotSeat">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.PilotSeat.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.PilotSeat.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.PilotSeat.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.Player"> <Reference Include="RobocraftX.Player">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.Player.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Player.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Player.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.Priority">
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Priority.dll</HintPath>
</Reference>
<Reference Include="RobocraftX.Rendering"> <Reference Include="RobocraftX.Rendering">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.Rendering.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Rendering.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Rendering.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.Rendering.Mock"> <Reference Include="RobocraftX.Rendering.Mock">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.Rendering.Mock.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Rendering.Mock.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Rendering.Mock.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.SaveAndLoad"> <Reference Include="RobocraftX.SaveAndLoad">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.SaveAndLoad.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.SaveAndLoad.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.SaveAndLoad.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.SaveGameDialog"> <Reference Include="RobocraftX.SaveGameDialog">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.SaveGameDialog.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.SaveGameDialog.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.SaveGameDialog.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.Serializers"> <Reference Include="RobocraftX.Serializers">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.Serializers.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Serializers.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Serializers.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.Services"> <Reference Include="RobocraftX.Services">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.Services.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Services.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Services.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.SignalHandling"> <Reference Include="RobocraftX.SignalHandling">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.SignalHandling.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.SignalHandling.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.SignalHandling.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.StateSync"> <Reference Include="RobocraftX.StateSync">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX.StateSync.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.StateSync.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.StateSync.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX_SpawnPoints"> <Reference Include="RobocraftX_SpawnPoints">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX_SpawnPoints.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX_SpawnPoints.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX_SpawnPoints.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX_TextBlock"> <Reference Include="RobocraftX_TextBlock">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocraftX_TextBlock.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX_TextBlock.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX_TextBlock.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocratX.SimulationCompositionRoot"> <Reference Include="RobocratX.SimulationCompositionRoot">
<HintPath>..\ref\Gamecraft_Data\Managed\RobocratX.SimulationCompositionRoot.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\RobocratX.SimulationCompositionRoot.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocratX.SimulationCompositionRoot.dll</HintPath>
</Reference> </Reference>
<Reference Include="StringFormatter"> <Reference Include="StringFormatter">
<HintPath>..\ref\Gamecraft_Data\Managed\StringFormatter.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\StringFormatter.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\StringFormatter.dll</HintPath>
</Reference> </Reference>
<Reference Include="Svelto.Common"> <Reference Include="Svelto.Common_3">
<HintPath>..\..\ref\Gamecraft_Data\Managed\Svelto.Common.dll</HintPath> <HintPath>..\ref\Gamecraft_Data\Managed\Svelto.Common_3.dll</HintPath>
</Reference> <HintPath>..\..\ref\Gamecraft_Data\Managed\Svelto.Common_3.dll</HintPath>
<Reference Include="Svelto.ECS.Debugger">
<HintPath>..\..\ref\Gamecraft_Data\Managed\Svelto.ECS.Debugger.dll</HintPath>
</Reference> </Reference>
<Reference Include="Svelto.ECS"> <Reference Include="Svelto.ECS">
<HintPath>..\ref\Gamecraft_Data\Managed\Svelto.ECS.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Svelto.ECS.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\Svelto.ECS.dll</HintPath>
</Reference> </Reference>
<Reference Include="Svelto.Services"> <Reference Include="Svelto.Services">
<HintPath>..\ref\Gamecraft_Data\Managed\Svelto.Services.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Svelto.Services.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\Svelto.Services.dll</HintPath>
</Reference> </Reference>
<Reference Include="Svelto.Tasks"> <Reference Include="Svelto.Tasks">
<HintPath>..\ref\Gamecraft_Data\Managed\Svelto.Tasks.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Svelto.Tasks.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\Svelto.Tasks.dll</HintPath>
</Reference> </Reference>
<Reference Include="Unity.Addressables"> <Reference Include="Unity.Addressables">
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Addressables.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Addressables.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Addressables.dll</HintPath>
</Reference> </Reference>
<Reference Include="Unity.Animation.Rigging"> <Reference Include="Unity.Build.SlimPlayerRuntime">
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Animation.Rigging.dll</HintPath> <HintPath>..\ref\Gamecraft_Data\Managed\Unity.Build.SlimPlayerRuntime.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Build.SlimPlayerRuntime.dll</HintPath>
</Reference> </Reference>
<Reference Include="Unity.Burst"> <Reference Include="Unity.Burst">
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Burst.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Burst.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Burst.dll</HintPath>
</Reference> </Reference>
<Reference Include="Unity.Burst.Unsafe">
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Burst.Unsafe.dll</HintPath>
</Reference>
<Reference Include="Unity.Cloud.UserReporting.Client">
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Cloud.UserReporting.Client.dll</HintPath>
</Reference>
<Reference Include="Unity.Cloud.UserReporting.Plugin">
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Cloud.UserReporting.Plugin.dll</HintPath>
</Reference>
<Reference Include="Unity.Collections"> <Reference Include="Unity.Collections">
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Collections.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Collections.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Collections.dll</HintPath>
</Reference> </Reference>
<Reference Include="Unity.Deformations">
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Deformations.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Deformations.dll</HintPath>
</Reference>
<Reference Include="Unity.Entities"> <Reference Include="Unity.Entities">
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Entities.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Entities.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Entities.dll</HintPath>
</Reference> </Reference>
<Reference Include="Unity.Entities.Hybrid"> <Reference Include="Unity.Entities.Hybrid">
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Entities.Hybrid.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Entities.Hybrid.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Entities.Hybrid.dll</HintPath>
</Reference> </Reference>
<Reference Include="Unity.Entities.Properties">
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Entities.Properties.dll</HintPath>
</Reference>
<Reference Include="Unity.Entities.StaticTypeRegistry">
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Entities.StaticTypeRegistry.dll</HintPath>
</Reference>
<Reference Include="Unity.Jobs"> <Reference Include="Unity.Jobs">
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Jobs.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Jobs.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Jobs.dll</HintPath>
</Reference> </Reference>
<Reference Include="Unity.Mathematics"> <Reference Include="Unity.Mathematics">
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Mathematics.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Mathematics.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Mathematics.dll</HintPath>
</Reference> </Reference>
<Reference Include="Unity.Mathematics.Extensions"> <Reference Include="Unity.Mathematics.Extensions">
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Mathematics.Extensions.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Mathematics.Extensions.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Mathematics.Extensions.dll</HintPath>
</Reference> </Reference>
<Reference Include="Unity.Mathematics.Extensions.Hybrid"> <Reference Include="Unity.Mathematics.Extensions.Hybrid">
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Mathematics.Extensions.Hybrid.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Mathematics.Extensions.Hybrid.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Mathematics.Extensions.Hybrid.dll</HintPath>
</Reference> </Reference>
<Reference Include="Unity.Physics"> <Reference Include="Unity.Physics">
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Physics.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Physics.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Physics.dll</HintPath>
</Reference> </Reference>
<Reference Include="Unity.Physics.Hybrid"> <Reference Include="Unity.Physics.Hybrid">
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Physics.Hybrid.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Physics.Hybrid.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Physics.Hybrid.dll</HintPath>
</Reference> </Reference>
<Reference Include="Unity.Platforms.Common">
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Platforms.Common.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Platforms.Common.dll</HintPath>
</Reference>
<Reference Include="Unity.Postprocessing.Runtime"> <Reference Include="Unity.Postprocessing.Runtime">
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Postprocessing.Runtime.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Postprocessing.Runtime.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Postprocessing.Runtime.dll</HintPath>
</Reference> </Reference>
<Reference Include="Unity.Properties"> <Reference Include="Unity.Properties">
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Properties.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Properties.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Properties.dll</HintPath>
</Reference> </Reference>
<Reference Include="Unity.Rendering.Hybrid"> <Reference Include="Unity.Properties.Reflection">
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Rendering.Hybrid.dll</HintPath> <HintPath>..\ref\Gamecraft_Data\Managed\Unity.Properties.Reflection.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Properties.Reflection.dll</HintPath>
</Reference>
<Reference Include="Unity.Properties.UI">
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Properties.UI.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Properties.UI.dll</HintPath>
</Reference>
<Reference Include="Unity.RenderPipeline.Universal.ShaderLibrary">
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.RenderPipeline.Universal.ShaderLibrary.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.RenderPipeline.Universal.ShaderLibrary.dll</HintPath>
</Reference> </Reference>
<Reference Include="Unity.RenderPipelines.Core.Runtime"> <Reference Include="Unity.RenderPipelines.Core.Runtime">
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.RenderPipelines.Core.Runtime.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.RenderPipelines.Core.Runtime.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.RenderPipelines.Core.Runtime.dll</HintPath>
</Reference> </Reference>
<Reference Include="Unity.RenderPipelines.Core.ShaderLibrary"> <Reference Include="Unity.RenderPipelines.Core.ShaderLibrary">
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.RenderPipelines.Core.ShaderLibrary.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.RenderPipelines.Core.ShaderLibrary.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.RenderPipelines.Core.ShaderLibrary.dll</HintPath>
</Reference> </Reference>
<Reference Include="Unity.RenderPipelines.Lightweight.Runtime">
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.RenderPipelines.Lightweight.Runtime.dll</HintPath>
</Reference>
<Reference Include="Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary"> <Reference Include="Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary">
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary.dll</HintPath>
</Reference> </Reference>
<Reference Include="Unity.RenderPipelines.Universal.Runtime">
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.RenderPipelines.Universal.Runtime.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.RenderPipelines.Universal.Runtime.dll</HintPath>
</Reference>
<Reference Include="Unity.RenderPipelines.Universal.Shaders">
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.RenderPipelines.Universal.Shaders.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.RenderPipelines.Universal.Shaders.dll</HintPath>
</Reference>
<Reference Include="Unity.ResourceManager"> <Reference Include="Unity.ResourceManager">
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.ResourceManager.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.ResourceManager.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.ResourceManager.dll</HintPath>
</Reference> </Reference>
<Reference Include="Unity.Scenes.Hybrid"> <Reference Include="Unity.Scenes.Hybrid">
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Scenes.Hybrid.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Scenes.Hybrid.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Scenes.Hybrid.dll</HintPath>
</Reference> </Reference>
<Reference Include="Unity.ScriptableBuildPipeline"> <Reference Include="Unity.ScriptableBuildPipeline">
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.ScriptableBuildPipeline.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.ScriptableBuildPipeline.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.ScriptableBuildPipeline.dll</HintPath>
</Reference> </Reference>
<Reference Include="Unity.Serialization">
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Serialization.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Serialization.dll</HintPath>
</Reference>
<Reference Include="Unity.TextMeshPro"> <Reference Include="Unity.TextMeshPro">
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.TextMeshPro.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.TextMeshPro.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.TextMeshPro.dll</HintPath>
</Reference> </Reference>
<Reference Include="Unity.Timeline"> <Reference Include="Unity.Timeline">
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Timeline.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Timeline.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Timeline.dll</HintPath>
</Reference> </Reference>
<Reference Include="Unity.Transforms"> <Reference Include="Unity.Transforms">
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Transforms.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Transforms.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Transforms.dll</HintPath>
</Reference> </Reference>
<Reference Include="Unity.Transforms.Hybrid"> <Reference Include="Unity.Transforms.Hybrid">
<HintPath>..\ref\Gamecraft_Data\Managed\Unity.Transforms.Hybrid.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Transforms.Hybrid.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Transforms.Hybrid.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.AccessibilityModule"> <Reference Include="UnityEngine.AccessibilityModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.AccessibilityModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.AccessibilityModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.AccessibilityModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.AIModule"> <Reference Include="UnityEngine.AIModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.AIModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.AIModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.AIModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.AndroidJNIModule"> <Reference Include="UnityEngine.AndroidJNIModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.AndroidJNIModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.AndroidJNIModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.AndroidJNIModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.AnimationModule"> <Reference Include="UnityEngine.AnimationModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.AnimationModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.AnimationModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.AnimationModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.ARModule"> <Reference Include="UnityEngine.ARModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.ARModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.ARModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.ARModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.AssetBundleModule"> <Reference Include="UnityEngine.AssetBundleModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.AssetBundleModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.AssetBundleModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.AssetBundleModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.AudioModule"> <Reference Include="UnityEngine.AudioModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.AudioModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.AudioModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.AudioModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.ClothModule"> <Reference Include="UnityEngine.ClothModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.ClothModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.ClothModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.ClothModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.ClusterInputModule"> <Reference Include="UnityEngine.ClusterInputModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.ClusterInputModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.ClusterInputModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.ClusterInputModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.ClusterRendererModule"> <Reference Include="UnityEngine.ClusterRendererModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.ClusterRendererModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.ClusterRendererModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.ClusterRendererModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.CoreModule"> <Reference Include="UnityEngine.CoreModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.CoreModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.CoreModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.CoreModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.CrashReportingModule"> <Reference Include="UnityEngine.CrashReportingModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.CrashReportingModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.CrashReportingModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.CrashReportingModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.DirectorModule"> <Reference Include="UnityEngine.DirectorModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.DirectorModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.DirectorModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.DirectorModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine"> <Reference Include="UnityEngine">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.DSPGraphModule"> <Reference Include="UnityEngine.DSPGraphModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.DSPGraphModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.DSPGraphModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.DSPGraphModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.FileSystemHttpModule">
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.FileSystemHttpModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.GameCenterModule"> <Reference Include="UnityEngine.GameCenterModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.GameCenterModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.GameCenterModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.GameCenterModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.GridModule"> <Reference Include="UnityEngine.GridModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.GridModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.GridModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.GridModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.HotReloadModule"> <Reference Include="UnityEngine.HotReloadModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.HotReloadModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.HotReloadModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.HotReloadModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.ImageConversionModule"> <Reference Include="UnityEngine.ImageConversionModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.ImageConversionModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.ImageConversionModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.ImageConversionModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.IMGUIModule"> <Reference Include="UnityEngine.IMGUIModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.IMGUIModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.IMGUIModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.IMGUIModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.InputLegacyModule"> <Reference Include="UnityEngine.InputLegacyModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.InputLegacyModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.InputLegacyModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.InputLegacyModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.InputModule"> <Reference Include="UnityEngine.InputModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.InputModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.InputModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.InputModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.JSONSerializeModule"> <Reference Include="UnityEngine.JSONSerializeModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.JSONSerializeModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.JSONSerializeModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.JSONSerializeModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.LocalizationModule"> <Reference Include="UnityEngine.LocalizationModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.LocalizationModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.LocalizationModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.LocalizationModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.ParticleSystemModule"> <Reference Include="UnityEngine.ParticleSystemModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.ParticleSystemModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.ParticleSystemModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.ParticleSystemModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.PerformanceReportingModule"> <Reference Include="UnityEngine.PerformanceReportingModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.PerformanceReportingModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.PerformanceReportingModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.PerformanceReportingModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.Physics2DModule"> <Reference Include="UnityEngine.Physics2DModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.Physics2DModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.Physics2DModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.Physics2DModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.PhysicsModule"> <Reference Include="UnityEngine.PhysicsModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.PhysicsModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.PhysicsModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.PhysicsModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.ProfilerModule"> <Reference Include="UnityEngine.ProfilerModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.ProfilerModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.ProfilerModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.ProfilerModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.ScreenCaptureModule"> <Reference Include="UnityEngine.ScreenCaptureModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.ScreenCaptureModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.ScreenCaptureModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.ScreenCaptureModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.SharedInternalsModule"> <Reference Include="UnityEngine.SharedInternalsModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.SharedInternalsModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.SharedInternalsModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.SharedInternalsModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.SpriteMaskModule"> <Reference Include="UnityEngine.SpriteMaskModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.SpriteMaskModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.SpriteMaskModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.SpriteMaskModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.SpriteShapeModule"> <Reference Include="UnityEngine.SpriteShapeModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.SpriteShapeModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.SpriteShapeModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.SpriteShapeModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.StreamingModule"> <Reference Include="UnityEngine.StreamingModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.StreamingModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.StreamingModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.StreamingModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.SubstanceModule"> <Reference Include="UnityEngine.SubstanceModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.SubstanceModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.SubstanceModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.SubstanceModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.SubsystemsModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.SubsystemsModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.SubsystemsModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.TerrainModule"> <Reference Include="UnityEngine.TerrainModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.TerrainModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.TerrainModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.TerrainModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.TerrainPhysicsModule"> <Reference Include="UnityEngine.TerrainPhysicsModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.TerrainPhysicsModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.TerrainPhysicsModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.TerrainPhysicsModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.TextCoreModule"> <Reference Include="UnityEngine.TextCoreModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.TextCoreModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.TextCoreModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.TextCoreModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.TextRenderingModule"> <Reference Include="UnityEngine.TextRenderingModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.TextRenderingModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.TextRenderingModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.TextRenderingModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.TilemapModule"> <Reference Include="UnityEngine.TilemapModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.TilemapModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.TilemapModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.TilemapModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.TLSModule"> <Reference Include="UnityEngine.TLSModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.TLSModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.TLSModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.TLSModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.UI"> <Reference Include="UnityEngine.UI">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.UI.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.UI.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.UI.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.UIElementsModule"> <Reference Include="UnityEngine.UIElementsModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.UIElementsModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.UIElementsModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.UIElementsModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.UIModule"> <Reference Include="UnityEngine.UIModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.UIModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.UIModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.UIModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.UmbraModule"> <Reference Include="UnityEngine.UmbraModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.UmbraModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.UmbraModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.UmbraModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.UNETModule"> <Reference Include="UnityEngine.UNETModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.UNETModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.UNETModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.UNETModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.UnityAnalyticsModule"> <Reference Include="UnityEngine.UnityAnalyticsModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.UnityAnalyticsModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.UnityAnalyticsModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.UnityAnalyticsModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.UnityConnectModule"> <Reference Include="UnityEngine.UnityConnectModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.UnityConnectModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.UnityConnectModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.UnityConnectModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.UnityTestProtocolModule"> <Reference Include="UnityEngine.UnityTestProtocolModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.UnityTestProtocolModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.UnityTestProtocolModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.UnityTestProtocolModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.UnityWebRequestAssetBundleModule"> <Reference Include="UnityEngine.UnityWebRequestAssetBundleModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.UnityWebRequestAssetBundleModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.UnityWebRequestAssetBundleModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.UnityWebRequestAssetBundleModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.UnityWebRequestAudioModule"> <Reference Include="UnityEngine.UnityWebRequestAudioModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.UnityWebRequestAudioModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.UnityWebRequestAudioModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.UnityWebRequestAudioModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.UnityWebRequestModule"> <Reference Include="UnityEngine.UnityWebRequestModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.UnityWebRequestModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.UnityWebRequestModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.UnityWebRequestModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.UnityWebRequestTextureModule"> <Reference Include="UnityEngine.UnityWebRequestTextureModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.UnityWebRequestTextureModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.UnityWebRequestTextureModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.UnityWebRequestTextureModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.UnityWebRequestWWWModule"> <Reference Include="UnityEngine.UnityWebRequestWWWModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.UnityWebRequestWWWModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.UnityWebRequestWWWModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.UnityWebRequestWWWModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.VehiclesModule"> <Reference Include="UnityEngine.VehiclesModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.VehiclesModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.VehiclesModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.VehiclesModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.VFXModule"> <Reference Include="UnityEngine.VFXModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.VFXModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.VFXModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.VFXModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.VideoModule"> <Reference Include="UnityEngine.VideoModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.VideoModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.VideoModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.VideoModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.VRModule"> <Reference Include="UnityEngine.VRModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.VRModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.VRModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.VRModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.WindModule"> <Reference Include="UnityEngine.WindModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.WindModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.WindModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.WindModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.XRModule"> <Reference Include="UnityEngine.XRModule">
<HintPath>..\ref\Gamecraft_Data\Managed\UnityEngine.XRModule.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.XRModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.XRModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="uREPL"> <Reference Include="uREPL">
<HintPath>..\ref\Gamecraft_Data\Managed\uREPL.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\uREPL.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\uREPL.dll</HintPath>
</Reference> </Reference>
<Reference Include="UserReporting">
<HintPath>..\..\ref\Gamecraft_Data\Managed\UserReporting.dll</HintPath>
</Reference>
<Reference Include="VisualProfiler"> <Reference Include="VisualProfiler">
<HintPath>..\ref\Gamecraft_Data\Managed\VisualProfiler.dll</HintPath>
<HintPath>..\..\ref\Gamecraft_Data\Managed\VisualProfiler.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\VisualProfiler.dll</HintPath>
</Reference> </Reference>
<Reference Include="Microsoft.CSharp" />
<Reference Include="GamecraftModdingAPI">
<HintPath>..\ref\Plugins\GamecraftModdingAPI.dll</HintPath>
<HintPath>..\..\ref\Plugins\GamecraftModdingAPI.dll</HintPath>
</Reference>
</ItemGroup> </ItemGroup>
<!--End Dependencies--> <!--End Dependencies-->

View file

@ -9,6 +9,7 @@ using IllusionPlugin;
using UnityEngine; using UnityEngine;
using GamecraftModdingAPI; using GamecraftModdingAPI;
using GamecraftModdingAPI.Commands; using GamecraftModdingAPI.Commands;
using HarmonyLib;
namespace GamecraftScripting namespace GamecraftScripting
{ {
@ -20,23 +21,32 @@ namespace GamecraftScripting
public string Version { get; } = Assembly.GetExecutingAssembly().GetName().Version.ToString(); public string Version { get; } = Assembly.GetExecutingAssembly().GetName().Version.ToString();
private Harmony harmony = null;
public void OnApplicationQuit() public void OnApplicationQuit()
{ {
var currentAssembly = Assembly.GetExecutingAssembly();
harmony.UnpatchAll(currentAssembly.GetName().Name);
harmony = null;
Main.Shutdown(); Main.Shutdown();
} }
public void OnApplicationStart() public void OnApplicationStart()
{ {
Main.Init(); Main.Init();
var currentAssembly = Assembly.GetExecutingAssembly();
harmony = new Harmony(currentAssembly.GetName().Name);
harmony.PatchAll(currentAssembly);
// register development commands // register development commands
#if DEBUG #if DEBUG
CommandManager.AddCommand(new SimpleCustomCommandEngine(() => { Application.Quit(); }, "Exit", "Exit the game immediately"));
#endif #endif
// debugging commands // debugging commands
CommandManager.AddCommand(new Commands.DebugCommandEngine()); CommandManager.AddCommand(new Commands.DebugCommandEngine());
// functional commands // functional commands
CommandManager.AddCommand(new Commands.PythonRunnerCommandEngine()); CommandManager.AddCommand(new Commands.PythonRunnerCommandEngine());
CommandManager.AddCommand(new Commands.ExecuteCommandEngine());
CommandManager.AddCommand(new Commands.SerializationCommandEngine());
} }
public void OnFixedUpdate() { } public void OnFixedUpdate() { }

View file

@ -0,0 +1,74 @@
using System;
using System.Text;
using System.Reflection;
using HarmonyLib;
using RobocraftX.Common;
using Svelto.DataStructures;
using Svelto.ECS;
using Svelto.ECS.Serialization;
namespace GamecraftScripting.Serialization
{
[HarmonyPatch]
class DeserializeFromDiskEntitiesEnginePatch
{
internal static IEntityFactory entityFactory = null;
private static readonly byte[] frameStart = (new UTF8Encoding()).GetBytes("GamecraftScripting");
public static void Prefix(ref ISerializationData ____serializationData, ref FasterList<byte> ____bytesStream, ref IEntitySerialization ____entitySerializer)
{
____entitySerializer.RegisterSerializationFactory<ScriptEntityDescriptor>(new ScriptDeserializationFactory(entityFactory));
uint scriptDataStart = ____serializationData.dataPos;
GamecraftModdingAPI.Utility.Logging.MetaLog($"dataPos: {scriptDataStart}");
BinaryBufferReader bbr = new BinaryBufferReader(____bytesStream.ToArrayFast(out uint count), ____serializationData.dataPos);
byte[] frameBuffer = new byte[frameStart.Length];
GamecraftModdingAPI.Utility.Logging.MetaLog($"serial data count: {____serializationData.data.count} capacity: {____serializationData.data.capacity}");
int i = 0;
// match frame start
while (frameBuffer != frameStart && bbr.Position < count-frameStart.Length)
{
i = 0;
frameBuffer[0] = bbr.ReadByte();
GamecraftModdingAPI.Utility.Logging.MetaLog($"Buffer byte 0: {(new UTF8Encoding()).GetString(new byte[]{frameBuffer[0]})}");
while (frameBuffer[i] == frameStart[i])
{
i++;
if (i == frameStart.Length) break;
frameBuffer[i] = bbr.ReadByte();
GamecraftModdingAPI.Utility.Logging.MetaLog($"Buffer byte {i}: {(new UTF8Encoding()).GetString(new byte[] { frameBuffer[i] })}");
}
if (i == frameStart.Length) break;
}
// abort if at end of file
if (bbr.Position >= count - frameStart.Length)
{
GamecraftModdingAPI.Utility.Logging.MetaLog("Skipping script deserialization (no frame found)");
return;
}
____serializationData.dataPos = bbr.Position;
GamecraftModdingAPI.Utility.Logging.MetaLog($"dataPos (after frame): {____serializationData.dataPos}");
uint scriptCount = bbr.ReadUint();
GamecraftModdingAPI.Utility.Logging.MetaLog($"scriptCount: {scriptCount}");
uint potentialStart = bbr.ReadUint();
if (potentialStart == ____serializationData.dataPos - frameStart.Length) return;
____serializationData.dataPos += 4u;
for (uint j = 0; j < scriptCount; j++)
{
EGID newScriptId = new EGID(j, ScriptBuilder.ScriptGroup);
// why doesn't \/this\/ do anything?
____entitySerializer.DeserializeNewEntity(newScriptId, ____serializationData, (int)SerializationType.Storage);
}
bbr = new BinaryBufferReader(____bytesStream.ToArrayFast(out count), ____serializationData.dataPos);
uint actualStart = bbr.ReadUint();
GamecraftModdingAPI.Utility.Logging.MetaLog($"actualStart: {actualStart}");
GamecraftModdingAPI.Utility.Logging.MetaLog($"Deserialized {scriptCount} scripts starting at {scriptDataStart} ({actualStart})");
____serializationData.dataPos = scriptDataStart; // change back to original end point (just in case)
}
public static MethodBase TargetMethod()
{
return AccessTools.Method("RobocraftX.SaveAndLoad.DeserializeFromDiskEntitiesEngine:LoadingFinished");//AccessTools.TypeByName("RobocraftX.SaveAndLoad.DeserializeFromDiskEntities")
}
}
}

View file

@ -0,0 +1,17 @@
using System;
using HarmonyLib;
using RobocraftX.SaveAndLoad;
using Svelto.ECS;
namespace GamecraftScripting.Serialization
{
[HarmonyPatch(typeof(SaveAndLoadCompositionRoot), "Compose")]
class SaveAndLoadCompositionRootPatch
{
public static void Prefix(EnginesRoot enginesRoot)
{
IEntityFactory factory = enginesRoot.GenerateEntityFactory();
DeserializeFromDiskEntitiesEnginePatch.entityFactory = factory;
Commands.SerializationCommandEngine.entityFactory = factory;
}
}
}

View file

@ -0,0 +1,57 @@
using System;
using System.Text;
using System.Reflection;
using HarmonyLib;
using RobocraftX.Common;
using RobocraftX.SaveAndLoad;
using Svelto.DataStructures;
using Svelto.ECS;
using Svelto.ECS.Serialization;
using GamecraftModdingAPI.Utility;
namespace GamecraftScripting.Serialization
{
[HarmonyPatch]
class SaveGameEnginePatch
{
private static readonly byte[] frameStart = (new UTF8Encoding()).GetBytes("GamecraftScripting");
public static void Postfix(ref ISerializationData serializationData, EntitiesDB entitiesDB, IEntitySerialization entitySerializer)
{
Logging.MetaLog("Running Postfix on game save serializer");
serializationData.data.ExpandBy((uint)frameStart.Length);
BinaryBufferWriter bbw = new BinaryBufferWriter(serializationData.data.ToArrayFast(out uint buffLen), serializationData.dataPos);
EntityCollection<ScriptStruct> scripts = entitiesDB.QueryEntities<ScriptStruct>(ScriptBuilder.ScriptGroup);
uint scriptDataStart = serializationData.dataPos;
GamecraftModdingAPI.Utility.Logging.MetaLog($"dataPos: {scriptDataStart}");
for (int i = 0; i < frameStart.Length; i++)
{
bbw.Write(frameStart[i]);
}
serializationData.dataPos += (uint)frameStart.Length;
GamecraftModdingAPI.Utility.Logging.MetaLog($"dataPos (after frame start): {serializationData.dataPos}");
serializationData.data.ExpandBy(4u);
Logging.MetaLog($"scriptCount: {scripts.count}");
bbw.Write(scripts.count);
serializationData.dataPos += 4u;
//foreach (byte b in BitConverter.GetBytes(count)) serializationData.data.Add(b);
for (uint i = 0; i < scripts.count; i++)
{
EGID scriptId = new EGID(i, ScriptBuilder.ScriptGroup);
entitySerializer.SerializeEntity(scriptId, serializationData, (int)SerializationType.Storage);
}
bbw = new BinaryBufferWriter(serializationData.data.ToArrayFast(out buffLen), serializationData.dataPos);
serializationData.data.ExpandBy(4u);
bbw.Write(scriptDataStart);
serializationData.dataPos += 4u;
//foreach (byte b in BitConverter.GetBytes(scriptDataStart)) serializationData.data.Add(b);
serializationData.data.Trim();
}
public static MethodBase TargetMethod()
{
return typeof(SaveGameEngine).GetMethod("SerializeGameToBuffer");
}
}
}

View file

@ -0,0 +1,24 @@
using System;
using Svelto.ECS;
using Svelto.ECS.Experimental;
namespace GamecraftScripting.Serialization
{
public static class ScriptBuilder
{
public static readonly ExclusiveGroup ScriptGroup = new ExclusiveGroup("SCRIPT_GROUP");
private static uint nextScriptId = 0u;
public static EGID BuildScriptEntity(string name, string script, IEntityFactory entityFactory)
{
EGID scriptId = new EGID(nextScriptId++, ScriptGroup);
EntityComponentInitializer builder = entityFactory.BuildEntity<ScriptEntityDescriptor>(scriptId);
builder.Init(new ScriptStruct {
name = new ECSString(name),
script = new ECSString(script),
});
return scriptId;
}
}
}

View file

@ -0,0 +1,25 @@
using System;
using Svelto.ECS;
using Svelto.ECS.Serialization;
using GamecraftModdingAPI.Utility;
namespace GamecraftScripting.Serialization
{
public class ScriptDeserializationFactory : IDeserializationFactory
{
private IEntityFactory entityFactory;
public ScriptDeserializationFactory(IEntityFactory entityFactory)
{
this.entityFactory = entityFactory;
}
public EntityComponentInitializer BuildDeserializedEntity(EGID egid, ISerializationData serializationData, ISerializableEntityDescriptor entityDescriptor, int serializationType, IEntitySerialization entitySerialization)
{
Logging.MetaLog(entityFactory == null);
EntityComponentInitializer esi = entityFactory.BuildEntity<ScriptEntityDescriptor>(egid);
entitySerialization.DeserializeEntityComponents(serializationData, entityDescriptor, ref esi, serializationType);
Logging.MetaLog($"Deserialized script named {esi.Get<ScriptStruct>().name.ToString()}");
return esi;
}
}
}

View file

@ -0,0 +1,29 @@
using System;
using RobocraftX.Common;
using Svelto.ECS;
using Svelto.ECS.Serialization;
namespace GamecraftScripting.Serialization
{
public class ScriptEntityDescriptor : SerializableEntityDescriptor<ScriptEntityDescriptor._ScriptEntityDescriptor>
{
[HashName("GamecraftScriptingScriptEntityDescriptorV0")]
public class _ScriptEntityDescriptor : IEntityDescriptor
{
public IComponentBuilder[] componentsToBuild => _entityBuilders;
private static readonly IComponentBuilder[] _entityBuilders = new IComponentBuilder[1]
{
new SerializableComponentBuilder<SerializationType, ScriptStruct>(((int)SerializationType.Network, new ScriptSerializer()),
((int)SerializationType.Storage, new ScriptSerializer()))
};
}
public ScriptEntityDescriptor() : base()
{
GamecraftModdingAPI.Utility.Logging.MetaLog("ScriptEntityDescriptor Initialized");
GamecraftModdingAPI.Utility.Logging.MetaLog($"Entities to serialize: {entitiesToSerialize.Length}");
GamecraftModdingAPI.Utility.Logging.MetaLog($"Entities to serialize: {componentsToBuild.Length}");
}
}
}

View file

@ -0,0 +1,61 @@
using System;
using System.Text;
using RobocraftX.Common;
using Svelto.ECS;
using Svelto.ECS.Serialization;
namespace GamecraftScripting.Serialization
{
public class ScriptSerializer : IComponentSerializer<ScriptStruct>
{
private static readonly UTF8Encoding utf8Encoding = new UTF8Encoding();
private static readonly uint padding = 42u;
public uint size => 0u;
public bool Deserialize(ref ScriptStruct value, ISerializationData serializationData)
{
GamecraftModdingAPI.Utility.Logging.MetaLog($"dataPos: {serializationData.dataPos}");
BinaryBufferReader bbr = new BinaryBufferReader(serializationData.data.ToArrayFast(out uint count), serializationData.dataPos);
short nameLength = bbr.ReadShort();
GamecraftModdingAPI.Utility.Logging.MetaLog($"nameLength: {nameLength}");
byte[] serialName = new byte[nameLength];
bbr.ReadBytes(serialName, (uint)nameLength);
value.name.Set(utf8Encoding.GetString(serialName));
int scriptLength = bbr.ReadInt();
GamecraftModdingAPI.Utility.Logging.MetaLog($"scriptLength: {scriptLength}");
byte[] serialScript = new byte[scriptLength];
bbr.ReadBytes(serialScript, (uint)scriptLength);
value.script.Set(utf8Encoding.GetString(serialScript));
uint serialPadding = bbr.ReadUint();
serializationData.dataPos += (uint)(2 + nameLength + 4 + scriptLength + 4);
GamecraftModdingAPI.Utility.Logging.MetaLog($"Deserializing Script successful: {serialPadding == padding}");
return true;
}
public bool Serialize(in ScriptStruct value, ISerializationData serializationData)
{
GamecraftModdingAPI.Utility.Logging.MetaLog($"dataPos: {serializationData.dataPos}");
byte[] serialName = utf8Encoding.GetBytes(value.name);
byte[] serialScript = utf8Encoding.GetBytes(value.script);
uint actualSize = (uint)(2 + serialName.Length + 4 + serialScript.Length + 4);
serializationData.data.ExpandBy(actualSize);
BinaryBufferWriter bbw = new BinaryBufferWriter(serializationData.data.ToArrayFast(out uint count), serializationData.dataPos);
bbw.Write((short)serialName.Length);
for (int i = 0; i < serialName.Length; i++)
{
bbw.Write(serialName[i]);
}
bbw.Write((int)serialScript.Length);
for (int i = 0; i < serialScript.Length; i++)
{
bbw.Write(serialScript[i]);
}
bbw.Write(padding);
serializationData.dataPos += actualSize;
return true;
}
}
}

View file

@ -0,0 +1,13 @@
using System;
using Svelto.ECS;
using Svelto.ECS.Experimental;
namespace GamecraftScripting.Serialization
{
public struct ScriptStruct : IEntityComponent
{
public ECSString name;
public ECSString script;
}
}

View file

@ -0,0 +1,60 @@
using System;
using System.Reflection;
using HarmonyLib;
using Svelto.ECS;
using Svelto.ECS.Serialization;
using GamecraftModdingAPI.Utility;
namespace GamecraftScripting.Serialization
{
#if DEBUG
[HarmonyPatch]
public class SerializationDescriptorMapPatch
{
public static void Prefix(ISerializableEntityDescriptor descriptor)
{
if (descriptor.entitiesToSerialize.Length == 0)
{
if (descriptor.componentsToBuild.Length != 0)
{
Logging.MetaLog($"Descriptor: {descriptor.componentsToBuild[0].GetType().FullName} (hash:{descriptor.hash})");
}
else
{
Logging.MetaLog($"Emtpy descriptor (hash: {descriptor.hash})");
}
}
else
{
Logging.MetaLog($"Descriptor: {descriptor.entitiesToSerialize[0].GetType().FullName} (hash:{descriptor.hash}) (serializables: {descriptor.entitiesToSerialize.Length})");
}
}
public static MethodBase TargetMethod()
{
//Logging.MetaLog(AccessTools.Method(AccessTools.Inner(AccessTools.TypeByName("Svelto.ECS.EnginesRoot"), "SerializationDescriptorMap"), "RegisterEntityDescriptor") == null);
return AccessTools.Method(AccessTools.Inner(AccessTools.TypeByName("Svelto.ECS.EnginesRoot"), "SerializationDescriptorMap"), "RegisterEntityDescriptor");
}
}
[HarmonyPatch]
public class SerializationDescriptorMapGetPatch
{
public static void Prefix(uint descriptorID)
{
if (descriptorID == 3520129338u)
{
Logging.MetaLog("Got hash for ScriptStruct");
}
Logging.MetaLog($"GetDescriptorFromHash({descriptorID})");
}
public static MethodBase TargetMethod()
{
//Logging.MetaLog(AccessTools.Method(AccessTools.Inner(AccessTools.TypeByName("Svelto.ECS.EnginesRoot"), "SerializationDescriptorMap"), "RegisterEntityDescriptor") == null);
return AccessTools.Method(AccessTools.Inner(AccessTools.TypeByName("Svelto.ECS.EnginesRoot"), "SerializationDescriptorMap"), "GetDescriptorFromHash");
}
}
#endif
}

View file

@ -15,7 +15,7 @@ To get started with Python 2.7 on Mono, check out the resources below.
Resources Resources
- [Python <-> Mono/.NET interfacing](https://ironpython.net/documentation/dotnet) - [Python <-> Mono/.NET interfacing](https://ironpython.net/documentation/dotnet)
- [Python 2.7 docs](https://docs.python.org/2.7) - [Python 2.7 docs](https://docs.python.org/2.7)
- [GamecraftModdingAPI Mono/.NET library](https://git.exmods/modtainers/GamecraftModdingAPI) - [GamecraftModdingAPI Mono/.NET library](https://git.exmods.org/modtainers/GamecraftModdingAPI)
## External Libraries ## External Libraries
GamecraftScripting uses the [GamecraftModdingAPI](https://git.exmods.org/modtainers/GamecraftModdingAPI) to modify the behaviour of existing Gamecraft code. GamecraftScripting uses the [GamecraftModdingAPI](https://git.exmods.org/modtainers/GamecraftModdingAPI) to modify the behaviour of existing Gamecraft code.