From dc78f16e2bb4faf9ffe44228a4c2d550f64a56e8 Mon Sep 17 00:00:00 2001 From: Japa Date: Mon, 17 Jun 2013 23:53:36 +0530 Subject: [PATCH] Added a simple unity project that connects to DF and pulls a list of plugins. --- .../Assets/RemoteClient/Basic.cs | 968 ++++++++++++++++++ .../Assets/RemoteClient/BasicApi.cs | 460 +++++++++ .../Assets/RemoteClient/ColorText.cs | 119 +++ .../Assets/RemoteClient/CoreProtocol.cs | 311 ++++++ .../Assets/RemoteClient/RemoteClient.cs | 720 +++++++++++++ .../Assets/RemoteClient/Tools.cs | 690 +++++++++++++ .../unity/simple_sample/Assets/Start.unity | Bin 0 -> 12760 bytes .../unity/simple_sample/Assets/TestScript.cs | 21 + .../simple_sample/Assets/protobuf-net.dll | Bin 0 -> 187904 bytes .../simple_sample/Library/AnnotationManager | Bin 0 -> 4116 bytes .../simple_sample/Library/AssetImportState | 1 + .../simple_sample/Library/AssetServerCacheV3 | Bin 0 -> 5044 bytes .../simple_sample/Library/BuildPlayer.prefs | 0 .../simple_sample/Library/BuildSettings.asset | Bin 0 -> 4116 bytes .../Library/EditorUserBuildSettings.asset | Bin 0 -> 4160 bytes .../Library/EditorUserSettings.asset | Bin 0 -> 4108 bytes .../Library/FailedAssetImports.txt | 0 .../Library/InspectorExpandedItems.asset | Bin 0 -> 4104 bytes .../simple_sample/Library/MonoManager.asset | Bin 0 -> 4100 bytes .../Library/ProjectSettings.asset | Bin 0 -> 15876 bytes .../ScriptAssemblies/Assembly-CSharp.dll | Bin 0 -> 69120 bytes .../ScriptAssemblies/Assembly-CSharp.dll.mdb | Bin 0 -> 19136 bytes .../ScriptAssemblies/CompilationCompleted.txt | 1 + .../unity/simple_sample/Library/ScriptMapper | Bin 0 -> 8420 bytes .../simple_sample/Library/assetDatabase3 | Bin 0 -> 25144 bytes .../unity/simple_sample/Library/expandedItems | Bin 0 -> 4140 bytes .../unity/simple_sample/Library/guidmapper | Bin 0 -> 4580 bytes .../00/00000000000000001000000000000000 | Bin 0 -> 4268 bytes .../00/00000000000000002000000000000000 | Bin 0 -> 4304 bytes .../00/00000000000000003000000000000000 | Bin 0 -> 4296 bytes .../00/00000000000000004000000000000000 | Bin 0 -> 4308 bytes .../00/00000000000000004100000000000000 | Bin 0 -> 4308 bytes .../00/00000000000000005000000000000000 | Bin 0 -> 4296 bytes .../00/00000000000000006000000000000000 | Bin 0 -> 4304 bytes .../00/00000000000000007000000000000000 | Bin 0 -> 4304 bytes .../00/00000000000000008000000000000000 | Bin 0 -> 4308 bytes .../00/00000000000000009000000000000000 | Bin 0 -> 4308 bytes .../00/0000000000000000a000000000000000 | Bin 0 -> 4308 bytes .../00/0000000000000000b000000000000000 | Bin 0 -> 4320 bytes .../00/0000000000000000c000000000000000 | Bin 0 -> 4308 bytes .../26/2678d7ad7ff72d248854d487d8f15c21 | Bin 0 -> 43889 bytes .../36/364a32494f42e934bae30ff47badc45a | Bin 0 -> 25865 bytes .../73/73b3c5754a89e43409dcf23866eb0484 | Bin 0 -> 29561 bytes .../84/8401f7b1211481b469ac746534a896b8 | Bin 0 -> 7713 bytes .../89/8946b1d409fcda6499e46ca0fd310b73 | Bin 0 -> 4296 bytes .../ab/ab257b5c0c7259943a5b614e3dde558e | Bin 0 -> 26333 bytes .../d8/d8595cea157337845be980bcc8978623 | Bin 0 -> 17925 bytes .../e4/e4195866782d0214cb59abbae44f068f | Bin 0 -> 4288 bytes .../e8/e85d437f881938247992e492006de2df | Bin 0 -> 5325 bytes .../eb/eb0b853da2a60f540a81dc515bab1875 | Bin 0 -> 4284 bytes .../ProjectSettings/AudioManager.asset | Bin 0 -> 4124 bytes .../ProjectSettings/DynamicsManager.asset | Bin 0 -> 4280 bytes .../ProjectSettings/EditorBuildSettings.asset | Bin 0 -> 4104 bytes .../ProjectSettings/EditorSettings.asset | Bin 0 -> 4164 bytes .../ProjectSettings/InputManager.asset | Bin 0 -> 5252 bytes .../ProjectSettings/NavMeshLayers.asset | Bin 0 -> 9196 bytes .../ProjectSettings/NetworkManager.asset | Bin 0 -> 4112 bytes .../ProjectSettings/ProjectSettings.asset | Bin 0 -> 15876 bytes .../ProjectSettings/QualitySettings.asset | Bin 0 -> 4716 bytes .../ProjectSettings/TagManager.asset | Bin 0 -> 5352 bytes .../ProjectSettings/TimeManager.asset | Bin 0 -> 4112 bytes library/xml | 2 +- plugins/CMakeLists.txt | 2 +- plugins/isoworld | 2 +- plugins/stonesense | 2 +- 65 files changed, 3295 insertions(+), 4 deletions(-) create mode 100644 clients/unity/simple_sample/Assets/RemoteClient/Basic.cs create mode 100644 clients/unity/simple_sample/Assets/RemoteClient/BasicApi.cs create mode 100644 clients/unity/simple_sample/Assets/RemoteClient/ColorText.cs create mode 100644 clients/unity/simple_sample/Assets/RemoteClient/CoreProtocol.cs create mode 100644 clients/unity/simple_sample/Assets/RemoteClient/RemoteClient.cs create mode 100644 clients/unity/simple_sample/Assets/RemoteClient/Tools.cs create mode 100644 clients/unity/simple_sample/Assets/Start.unity create mode 100644 clients/unity/simple_sample/Assets/TestScript.cs create mode 100644 clients/unity/simple_sample/Assets/protobuf-net.dll create mode 100644 clients/unity/simple_sample/Library/AnnotationManager create mode 100644 clients/unity/simple_sample/Library/AssetImportState create mode 100644 clients/unity/simple_sample/Library/AssetServerCacheV3 create mode 100644 clients/unity/simple_sample/Library/BuildPlayer.prefs create mode 100644 clients/unity/simple_sample/Library/BuildSettings.asset create mode 100644 clients/unity/simple_sample/Library/EditorUserBuildSettings.asset create mode 100644 clients/unity/simple_sample/Library/EditorUserSettings.asset create mode 100644 clients/unity/simple_sample/Library/FailedAssetImports.txt create mode 100644 clients/unity/simple_sample/Library/InspectorExpandedItems.asset create mode 100644 clients/unity/simple_sample/Library/MonoManager.asset create mode 100644 clients/unity/simple_sample/Library/ProjectSettings.asset create mode 100644 clients/unity/simple_sample/Library/ScriptAssemblies/Assembly-CSharp.dll create mode 100644 clients/unity/simple_sample/Library/ScriptAssemblies/Assembly-CSharp.dll.mdb create mode 100644 clients/unity/simple_sample/Library/ScriptAssemblies/CompilationCompleted.txt create mode 100644 clients/unity/simple_sample/Library/ScriptMapper create mode 100644 clients/unity/simple_sample/Library/assetDatabase3 create mode 100644 clients/unity/simple_sample/Library/expandedItems create mode 100644 clients/unity/simple_sample/Library/guidmapper create mode 100644 clients/unity/simple_sample/Library/metadata/00/00000000000000001000000000000000 create mode 100644 clients/unity/simple_sample/Library/metadata/00/00000000000000002000000000000000 create mode 100644 clients/unity/simple_sample/Library/metadata/00/00000000000000003000000000000000 create mode 100644 clients/unity/simple_sample/Library/metadata/00/00000000000000004000000000000000 create mode 100644 clients/unity/simple_sample/Library/metadata/00/00000000000000004100000000000000 create mode 100644 clients/unity/simple_sample/Library/metadata/00/00000000000000005000000000000000 create mode 100644 clients/unity/simple_sample/Library/metadata/00/00000000000000006000000000000000 create mode 100644 clients/unity/simple_sample/Library/metadata/00/00000000000000007000000000000000 create mode 100644 clients/unity/simple_sample/Library/metadata/00/00000000000000008000000000000000 create mode 100644 clients/unity/simple_sample/Library/metadata/00/00000000000000009000000000000000 create mode 100644 clients/unity/simple_sample/Library/metadata/00/0000000000000000a000000000000000 create mode 100644 clients/unity/simple_sample/Library/metadata/00/0000000000000000b000000000000000 create mode 100644 clients/unity/simple_sample/Library/metadata/00/0000000000000000c000000000000000 create mode 100644 clients/unity/simple_sample/Library/metadata/26/2678d7ad7ff72d248854d487d8f15c21 create mode 100644 clients/unity/simple_sample/Library/metadata/36/364a32494f42e934bae30ff47badc45a create mode 100644 clients/unity/simple_sample/Library/metadata/73/73b3c5754a89e43409dcf23866eb0484 create mode 100644 clients/unity/simple_sample/Library/metadata/84/8401f7b1211481b469ac746534a896b8 create mode 100644 clients/unity/simple_sample/Library/metadata/89/8946b1d409fcda6499e46ca0fd310b73 create mode 100644 clients/unity/simple_sample/Library/metadata/ab/ab257b5c0c7259943a5b614e3dde558e create mode 100644 clients/unity/simple_sample/Library/metadata/d8/d8595cea157337845be980bcc8978623 create mode 100644 clients/unity/simple_sample/Library/metadata/e4/e4195866782d0214cb59abbae44f068f create mode 100644 clients/unity/simple_sample/Library/metadata/e8/e85d437f881938247992e492006de2df create mode 100644 clients/unity/simple_sample/Library/metadata/eb/eb0b853da2a60f540a81dc515bab1875 create mode 100644 clients/unity/simple_sample/ProjectSettings/AudioManager.asset create mode 100644 clients/unity/simple_sample/ProjectSettings/DynamicsManager.asset create mode 100644 clients/unity/simple_sample/ProjectSettings/EditorBuildSettings.asset create mode 100644 clients/unity/simple_sample/ProjectSettings/EditorSettings.asset create mode 100644 clients/unity/simple_sample/ProjectSettings/InputManager.asset create mode 100644 clients/unity/simple_sample/ProjectSettings/NavMeshLayers.asset create mode 100644 clients/unity/simple_sample/ProjectSettings/NetworkManager.asset create mode 100644 clients/unity/simple_sample/ProjectSettings/ProjectSettings.asset create mode 100644 clients/unity/simple_sample/ProjectSettings/QualitySettings.asset create mode 100644 clients/unity/simple_sample/ProjectSettings/TagManager.asset create mode 100644 clients/unity/simple_sample/ProjectSettings/TimeManager.asset diff --git a/clients/unity/simple_sample/Assets/RemoteClient/Basic.cs b/clients/unity/simple_sample/Assets/RemoteClient/Basic.cs new file mode 100644 index 000000000..146df0232 --- /dev/null +++ b/clients/unity/simple_sample/Assets/RemoteClient/Basic.cs @@ -0,0 +1,968 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +// Generated from: Basic.proto +namespace dfproto +{ + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"EnumItemName")] + public partial class EnumItemName : global::ProtoBuf.IExtensible + { + public EnumItemName() {} + + private int _value; + [global::ProtoBuf.ProtoMember(1, IsRequired = true, Name=@"value", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + public int value + { + get { return _value; } + set { _value = value; } + } + + private string _name = ""; + [global::ProtoBuf.ProtoMember(2, IsRequired = false, Name=@"name", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue("")] + public string name + { + get { return _name; } + set { _name = value; } + } + + private int _bit_size = (int)1; + [global::ProtoBuf.ProtoMember(3, IsRequired = false, Name=@"bit_size", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + [global::System.ComponentModel.DefaultValue((int)1)] + public int bit_size + { + get { return _bit_size; } + set { _bit_size = value; } + } + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"BasicMaterialId")] + public partial class BasicMaterialId : global::ProtoBuf.IExtensible + { + public BasicMaterialId() {} + + private int _type; + [global::ProtoBuf.ProtoMember(1, IsRequired = true, Name=@"type", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + public int type + { + get { return _type; } + set { _type = value; } + } + private int _index; + [global::ProtoBuf.ProtoMember(2, IsRequired = true, Name=@"index", DataFormat = global::ProtoBuf.DataFormat.ZigZag)] + public int index + { + get { return _index; } + set { _index = value; } + } + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"BasicMaterialInfo")] + public partial class BasicMaterialInfo : global::ProtoBuf.IExtensible + { + public BasicMaterialInfo() {} + + private int _type; + [global::ProtoBuf.ProtoMember(1, IsRequired = true, Name=@"type", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + public int type + { + get { return _type; } + set { _type = value; } + } + private int _index; + [global::ProtoBuf.ProtoMember(2, IsRequired = true, Name=@"index", DataFormat = global::ProtoBuf.DataFormat.ZigZag)] + public int index + { + get { return _index; } + set { _index = value; } + } + private string _token; + [global::ProtoBuf.ProtoMember(3, IsRequired = true, Name=@"token", DataFormat = global::ProtoBuf.DataFormat.Default)] + public string token + { + get { return _token; } + set { _token = value; } + } + private readonly global::System.Collections.Generic.List _flags = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(4, Name=@"flags", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + public global::System.Collections.Generic.List flags + { + get { return _flags; } + } + + + private int _subtype = (int)-1; + [global::ProtoBuf.ProtoMember(5, IsRequired = false, Name=@"subtype", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + [global::System.ComponentModel.DefaultValue((int)-1)] + public int subtype + { + get { return _subtype; } + set { _subtype = value; } + } + + private int _creature_id = (int)-1; + [global::ProtoBuf.ProtoMember(6, IsRequired = false, Name=@"creature_id", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + [global::System.ComponentModel.DefaultValue((int)-1)] + public int creature_id + { + get { return _creature_id; } + set { _creature_id = value; } + } + + private int _plant_id = (int)-1; + [global::ProtoBuf.ProtoMember(7, IsRequired = false, Name=@"plant_id", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + [global::System.ComponentModel.DefaultValue((int)-1)] + public int plant_id + { + get { return _plant_id; } + set { _plant_id = value; } + } + + private int _histfig_id = (int)-1; + [global::ProtoBuf.ProtoMember(8, IsRequired = false, Name=@"histfig_id", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + [global::System.ComponentModel.DefaultValue((int)-1)] + public int histfig_id + { + get { return _histfig_id; } + set { _histfig_id = value; } + } + + private string _name_prefix = ""; + [global::ProtoBuf.ProtoMember(9, IsRequired = false, Name=@"name_prefix", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue("")] + public string name_prefix + { + get { return _name_prefix; } + set { _name_prefix = value; } + } + private readonly global::System.Collections.Generic.List _state_color = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(10, Name=@"state_color", DataFormat = global::ProtoBuf.DataFormat.FixedSize)] + public global::System.Collections.Generic.List state_color + { + get { return _state_color; } + } + + private readonly global::System.Collections.Generic.List _state_name = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(11, Name=@"state_name", DataFormat = global::ProtoBuf.DataFormat.Default)] + public global::System.Collections.Generic.List state_name + { + get { return _state_name; } + } + + private readonly global::System.Collections.Generic.List _state_adj = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(12, Name=@"state_adj", DataFormat = global::ProtoBuf.DataFormat.Default)] + public global::System.Collections.Generic.List state_adj + { + get { return _state_adj; } + } + + private readonly global::System.Collections.Generic.List _reaction_class = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(13, Name=@"reaction_class", DataFormat = global::ProtoBuf.DataFormat.Default)] + public global::System.Collections.Generic.List reaction_class + { + get { return _reaction_class; } + } + + private readonly global::System.Collections.Generic.List _reaction_product = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(14, Name=@"reaction_product", DataFormat = global::ProtoBuf.DataFormat.Default)] + public global::System.Collections.Generic.List reaction_product + { + get { return _reaction_product; } + } + + private readonly global::System.Collections.Generic.List _inorganic_flags = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(15, Name=@"inorganic_flags", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + public global::System.Collections.Generic.List inorganic_flags + { + get { return _inorganic_flags; } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"Product")] + public partial class Product : global::ProtoBuf.IExtensible + { + public Product() {} + + private string _id; + [global::ProtoBuf.ProtoMember(1, IsRequired = true, Name=@"id", DataFormat = global::ProtoBuf.DataFormat.Default)] + public string id + { + get { return _id; } + set { _id = value; } + } + private int _type; + [global::ProtoBuf.ProtoMember(2, IsRequired = true, Name=@"type", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + public int type + { + get { return _type; } + set { _type = value; } + } + private int _index; + [global::ProtoBuf.ProtoMember(3, IsRequired = true, Name=@"index", DataFormat = global::ProtoBuf.DataFormat.ZigZag)] + public int index + { + get { return _index; } + set { _index = value; } + } + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"BasicMaterialInfoMask")] + public partial class BasicMaterialInfoMask : global::ProtoBuf.IExtensible + { + public BasicMaterialInfoMask() {} + + private readonly global::System.Collections.Generic.List _states = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(1, Name=@"states", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + public global::System.Collections.Generic.List states + { + get { return _states; } + } + + + private int _temperature = (int)10015; + [global::ProtoBuf.ProtoMember(4, IsRequired = false, Name=@"temperature", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + [global::System.ComponentModel.DefaultValue((int)10015)] + public int temperature + { + get { return _temperature; } + set { _temperature = value; } + } + + private bool _flags = (bool)false; + [global::ProtoBuf.ProtoMember(2, IsRequired = false, Name=@"flags", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue((bool)false)] + public bool flags + { + get { return _flags; } + set { _flags = value; } + } + + private bool _reaction = (bool)false; + [global::ProtoBuf.ProtoMember(3, IsRequired = false, Name=@"reaction", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue((bool)false)] + public bool reaction + { + get { return _reaction; } + set { _reaction = value; } + } + [global::ProtoBuf.ProtoContract(Name=@"StateType")] + public enum StateType + { + + [global::ProtoBuf.ProtoEnum(Name=@"Solid", Value=0)] + Solid = 0, + + [global::ProtoBuf.ProtoEnum(Name=@"Liquid", Value=1)] + Liquid = 1, + + [global::ProtoBuf.ProtoEnum(Name=@"Gas", Value=2)] + Gas = 2, + + [global::ProtoBuf.ProtoEnum(Name=@"Powder", Value=3)] + Powder = 3, + + [global::ProtoBuf.ProtoEnum(Name=@"Paste", Value=4)] + Paste = 4, + + [global::ProtoBuf.ProtoEnum(Name=@"Pressed", Value=5)] + Pressed = 5 + } + + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"JobSkillAttr")] + public partial class JobSkillAttr : global::ProtoBuf.IExtensible + { + public JobSkillAttr() {} + + private int _id; + [global::ProtoBuf.ProtoMember(1, IsRequired = true, Name=@"id", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + public int id + { + get { return _id; } + set { _id = value; } + } + private string _key; + [global::ProtoBuf.ProtoMember(2, IsRequired = true, Name=@"key", DataFormat = global::ProtoBuf.DataFormat.Default)] + public string key + { + get { return _key; } + set { _key = value; } + } + + private string _caption = ""; + [global::ProtoBuf.ProtoMember(3, IsRequired = false, Name=@"caption", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue("")] + public string caption + { + get { return _caption; } + set { _caption = value; } + } + + private string _caption_noun = ""; + [global::ProtoBuf.ProtoMember(4, IsRequired = false, Name=@"caption_noun", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue("")] + public string caption_noun + { + get { return _caption_noun; } + set { _caption_noun = value; } + } + + private int _profession = default(int); + [global::ProtoBuf.ProtoMember(5, IsRequired = false, Name=@"profession", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + [global::System.ComponentModel.DefaultValue(default(int))] + public int profession + { + get { return _profession; } + set { _profession = value; } + } + + private int _labor = default(int); + [global::ProtoBuf.ProtoMember(6, IsRequired = false, Name=@"labor", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + [global::System.ComponentModel.DefaultValue(default(int))] + public int labor + { + get { return _labor; } + set { _labor = value; } + } + + private string _type = ""; + [global::ProtoBuf.ProtoMember(7, IsRequired = false, Name=@"type", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue("")] + public string type + { + get { return _type; } + set { _type = value; } + } + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"ProfessionAttr")] + public partial class ProfessionAttr : global::ProtoBuf.IExtensible + { + public ProfessionAttr() {} + + private int _id; + [global::ProtoBuf.ProtoMember(1, IsRequired = true, Name=@"id", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + public int id + { + get { return _id; } + set { _id = value; } + } + private string _key; + [global::ProtoBuf.ProtoMember(2, IsRequired = true, Name=@"key", DataFormat = global::ProtoBuf.DataFormat.Default)] + public string key + { + get { return _key; } + set { _key = value; } + } + + private string _caption = ""; + [global::ProtoBuf.ProtoMember(3, IsRequired = false, Name=@"caption", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue("")] + public string caption + { + get { return _caption; } + set { _caption = value; } + } + + private bool _military = default(bool); + [global::ProtoBuf.ProtoMember(4, IsRequired = false, Name=@"military", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue(default(bool))] + public bool military + { + get { return _military; } + set { _military = value; } + } + + private bool _can_assign_labor = default(bool); + [global::ProtoBuf.ProtoMember(5, IsRequired = false, Name=@"can_assign_labor", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue(default(bool))] + public bool can_assign_labor + { + get { return _can_assign_labor; } + set { _can_assign_labor = value; } + } + + private int _parent = default(int); + [global::ProtoBuf.ProtoMember(6, IsRequired = false, Name=@"parent", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + [global::System.ComponentModel.DefaultValue(default(int))] + public int parent + { + get { return _parent; } + set { _parent = value; } + } + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"UnitLaborAttr")] + public partial class UnitLaborAttr : global::ProtoBuf.IExtensible + { + public UnitLaborAttr() {} + + private int _id; + [global::ProtoBuf.ProtoMember(1, IsRequired = true, Name=@"id", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + public int id + { + get { return _id; } + set { _id = value; } + } + private string _key; + [global::ProtoBuf.ProtoMember(2, IsRequired = true, Name=@"key", DataFormat = global::ProtoBuf.DataFormat.Default)] + public string key + { + get { return _key; } + set { _key = value; } + } + + private string _caption = ""; + [global::ProtoBuf.ProtoMember(3, IsRequired = false, Name=@"caption", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue("")] + public string caption + { + get { return _caption; } + set { _caption = value; } + } + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"NameInfo")] + public partial class NameInfo : global::ProtoBuf.IExtensible + { + public NameInfo() {} + + + private string _first_name = ""; + [global::ProtoBuf.ProtoMember(1, IsRequired = false, Name=@"first_name", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue("")] + public string first_name + { + get { return _first_name; } + set { _first_name = value; } + } + + private string _nickname = ""; + [global::ProtoBuf.ProtoMember(2, IsRequired = false, Name=@"nickname", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue("")] + public string nickname + { + get { return _nickname; } + set { _nickname = value; } + } + + private int _language_id = (int)-1; + [global::ProtoBuf.ProtoMember(3, IsRequired = false, Name=@"language_id", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + [global::System.ComponentModel.DefaultValue((int)-1)] + public int language_id + { + get { return _language_id; } + set { _language_id = value; } + } + + private string _last_name = ""; + [global::ProtoBuf.ProtoMember(4, IsRequired = false, Name=@"last_name", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue("")] + public string last_name + { + get { return _last_name; } + set { _last_name = value; } + } + + private string _english_name = ""; + [global::ProtoBuf.ProtoMember(5, IsRequired = false, Name=@"english_name", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue("")] + public string english_name + { + get { return _english_name; } + set { _english_name = value; } + } + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"NameTriple")] + public partial class NameTriple : global::ProtoBuf.IExtensible + { + public NameTriple() {} + + private string _normal; + [global::ProtoBuf.ProtoMember(1, IsRequired = true, Name=@"normal", DataFormat = global::ProtoBuf.DataFormat.Default)] + public string normal + { + get { return _normal; } + set { _normal = value; } + } + + private string _plural = ""; + [global::ProtoBuf.ProtoMember(2, IsRequired = false, Name=@"plural", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue("")] + public string plural + { + get { return _plural; } + set { _plural = value; } + } + + private string _adjective = ""; + [global::ProtoBuf.ProtoMember(3, IsRequired = false, Name=@"adjective", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue("")] + public string adjective + { + get { return _adjective; } + set { _adjective = value; } + } + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"UnitCurseInfo")] + public partial class UnitCurseInfo : global::ProtoBuf.IExtensible + { + public UnitCurseInfo() {} + + private uint _add_tags1; + [global::ProtoBuf.ProtoMember(1, IsRequired = true, Name=@"add_tags1", DataFormat = global::ProtoBuf.DataFormat.FixedSize)] + public uint add_tags1 + { + get { return _add_tags1; } + set { _add_tags1 = value; } + } + private uint _rem_tags1; + [global::ProtoBuf.ProtoMember(2, IsRequired = true, Name=@"rem_tags1", DataFormat = global::ProtoBuf.DataFormat.FixedSize)] + public uint rem_tags1 + { + get { return _rem_tags1; } + set { _rem_tags1 = value; } + } + private uint _add_tags2; + [global::ProtoBuf.ProtoMember(3, IsRequired = true, Name=@"add_tags2", DataFormat = global::ProtoBuf.DataFormat.FixedSize)] + public uint add_tags2 + { + get { return _add_tags2; } + set { _add_tags2 = value; } + } + private uint _rem_tags2; + [global::ProtoBuf.ProtoMember(4, IsRequired = true, Name=@"rem_tags2", DataFormat = global::ProtoBuf.DataFormat.FixedSize)] + public uint rem_tags2 + { + get { return _rem_tags2; } + set { _rem_tags2 = value; } + } + + private dfproto.NameTriple _name = null; + [global::ProtoBuf.ProtoMember(5, IsRequired = false, Name=@"name", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue(null)] + public dfproto.NameTriple name + { + get { return _name; } + set { _name = value; } + } + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"SkillInfo")] + public partial class SkillInfo : global::ProtoBuf.IExtensible + { + public SkillInfo() {} + + private int _id; + [global::ProtoBuf.ProtoMember(1, IsRequired = true, Name=@"id", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + public int id + { + get { return _id; } + set { _id = value; } + } + private int _level; + [global::ProtoBuf.ProtoMember(2, IsRequired = true, Name=@"level", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + public int level + { + get { return _level; } + set { _level = value; } + } + private int _experience; + [global::ProtoBuf.ProtoMember(3, IsRequired = true, Name=@"experience", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + public int experience + { + get { return _experience; } + set { _experience = value; } + } + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"UnitMiscTrait")] + public partial class UnitMiscTrait : global::ProtoBuf.IExtensible + { + public UnitMiscTrait() {} + + private int _id; + [global::ProtoBuf.ProtoMember(1, IsRequired = true, Name=@"id", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + public int id + { + get { return _id; } + set { _id = value; } + } + private int _value; + [global::ProtoBuf.ProtoMember(2, IsRequired = true, Name=@"value", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + public int value + { + get { return _value; } + set { _value = value; } + } + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"BasicUnitInfo")] + public partial class BasicUnitInfo : global::ProtoBuf.IExtensible + { + public BasicUnitInfo() {} + + private int _unit_id; + [global::ProtoBuf.ProtoMember(1, IsRequired = true, Name=@"unit_id", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + public int unit_id + { + get { return _unit_id; } + set { _unit_id = value; } + } + private int _pos_x; + [global::ProtoBuf.ProtoMember(13, IsRequired = true, Name=@"pos_x", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + public int pos_x + { + get { return _pos_x; } + set { _pos_x = value; } + } + private int _pos_y; + [global::ProtoBuf.ProtoMember(14, IsRequired = true, Name=@"pos_y", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + public int pos_y + { + get { return _pos_y; } + set { _pos_y = value; } + } + private int _pos_z; + [global::ProtoBuf.ProtoMember(15, IsRequired = true, Name=@"pos_z", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + public int pos_z + { + get { return _pos_z; } + set { _pos_z = value; } + } + + private dfproto.NameInfo _name = null; + [global::ProtoBuf.ProtoMember(2, IsRequired = false, Name=@"name", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue(null)] + public dfproto.NameInfo name + { + get { return _name; } + set { _name = value; } + } + private uint _flags1; + [global::ProtoBuf.ProtoMember(3, IsRequired = true, Name=@"flags1", DataFormat = global::ProtoBuf.DataFormat.FixedSize)] + public uint flags1 + { + get { return _flags1; } + set { _flags1 = value; } + } + private uint _flags2; + [global::ProtoBuf.ProtoMember(4, IsRequired = true, Name=@"flags2", DataFormat = global::ProtoBuf.DataFormat.FixedSize)] + public uint flags2 + { + get { return _flags2; } + set { _flags2 = value; } + } + private uint _flags3; + [global::ProtoBuf.ProtoMember(5, IsRequired = true, Name=@"flags3", DataFormat = global::ProtoBuf.DataFormat.FixedSize)] + public uint flags3 + { + get { return _flags3; } + set { _flags3 = value; } + } + private int _race; + [global::ProtoBuf.ProtoMember(6, IsRequired = true, Name=@"race", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + public int race + { + get { return _race; } + set { _race = value; } + } + private int _caste; + [global::ProtoBuf.ProtoMember(7, IsRequired = true, Name=@"caste", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + public int caste + { + get { return _caste; } + set { _caste = value; } + } + + private int _gender = (int)-1; + [global::ProtoBuf.ProtoMember(8, IsRequired = false, Name=@"gender", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + [global::System.ComponentModel.DefaultValue((int)-1)] + public int gender + { + get { return _gender; } + set { _gender = value; } + } + + private int _civ_id = (int)-1; + [global::ProtoBuf.ProtoMember(9, IsRequired = false, Name=@"civ_id", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + [global::System.ComponentModel.DefaultValue((int)-1)] + public int civ_id + { + get { return _civ_id; } + set { _civ_id = value; } + } + + private int _histfig_id = (int)-1; + [global::ProtoBuf.ProtoMember(10, IsRequired = false, Name=@"histfig_id", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + [global::System.ComponentModel.DefaultValue((int)-1)] + public int histfig_id + { + get { return _histfig_id; } + set { _histfig_id = value; } + } + + private int _death_id = (int)-1; + [global::ProtoBuf.ProtoMember(17, IsRequired = false, Name=@"death_id", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + [global::System.ComponentModel.DefaultValue((int)-1)] + public int death_id + { + get { return _death_id; } + set { _death_id = value; } + } + + private uint _death_flags = default(uint); + [global::ProtoBuf.ProtoMember(18, IsRequired = false, Name=@"death_flags", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + [global::System.ComponentModel.DefaultValue(default(uint))] + public uint death_flags + { + get { return _death_flags; } + set { _death_flags = value; } + } + + private int _squad_id = (int)-1; + [global::ProtoBuf.ProtoMember(19, IsRequired = false, Name=@"squad_id", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + [global::System.ComponentModel.DefaultValue((int)-1)] + public int squad_id + { + get { return _squad_id; } + set { _squad_id = value; } + } + + private int _squad_position = (int)-1; + [global::ProtoBuf.ProtoMember(20, IsRequired = false, Name=@"squad_position", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + [global::System.ComponentModel.DefaultValue((int)-1)] + public int squad_position + { + get { return _squad_position; } + set { _squad_position = value; } + } + + private int _profession = (int)-1; + [global::ProtoBuf.ProtoMember(22, IsRequired = false, Name=@"profession", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + [global::System.ComponentModel.DefaultValue((int)-1)] + public int profession + { + get { return _profession; } + set { _profession = value; } + } + + private string _custom_profession = ""; + [global::ProtoBuf.ProtoMember(23, IsRequired = false, Name=@"custom_profession", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue("")] + public string custom_profession + { + get { return _custom_profession; } + set { _custom_profession = value; } + } + private readonly global::System.Collections.Generic.List _labors = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(11, Name=@"labors", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + public global::System.Collections.Generic.List labors + { + get { return _labors; } + } + + private readonly global::System.Collections.Generic.List _skills = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(12, Name=@"skills", DataFormat = global::ProtoBuf.DataFormat.Default)] + public global::System.Collections.Generic.List skills + { + get { return _skills; } + } + + private readonly global::System.Collections.Generic.List _misc_traits = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(24, Name=@"misc_traits", DataFormat = global::ProtoBuf.DataFormat.Default)] + public global::System.Collections.Generic.List misc_traits + { + get { return _misc_traits; } + } + + + private dfproto.UnitCurseInfo _curse = null; + [global::ProtoBuf.ProtoMember(16, IsRequired = false, Name=@"curse", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue(null)] + public dfproto.UnitCurseInfo curse + { + get { return _curse; } + set { _curse = value; } + } + private readonly global::System.Collections.Generic.List _burrows = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(21, Name=@"burrows", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + public global::System.Collections.Generic.List burrows + { + get { return _burrows; } + } + + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"BasicUnitInfoMask")] + public partial class BasicUnitInfoMask : global::ProtoBuf.IExtensible + { + public BasicUnitInfoMask() {} + + + private bool _labors = (bool)false; + [global::ProtoBuf.ProtoMember(1, IsRequired = false, Name=@"labors", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue((bool)false)] + public bool labors + { + get { return _labors; } + set { _labors = value; } + } + + private bool _skills = (bool)false; + [global::ProtoBuf.ProtoMember(2, IsRequired = false, Name=@"skills", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue((bool)false)] + public bool skills + { + get { return _skills; } + set { _skills = value; } + } + + private bool _profession = (bool)false; + [global::ProtoBuf.ProtoMember(3, IsRequired = false, Name=@"profession", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue((bool)false)] + public bool profession + { + get { return _profession; } + set { _profession = value; } + } + + private bool _misc_traits = (bool)false; + [global::ProtoBuf.ProtoMember(4, IsRequired = false, Name=@"misc_traits", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue((bool)false)] + public bool misc_traits + { + get { return _misc_traits; } + set { _misc_traits = value; } + } + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"BasicSquadInfo")] + public partial class BasicSquadInfo : global::ProtoBuf.IExtensible + { + public BasicSquadInfo() {} + + private int _squad_id; + [global::ProtoBuf.ProtoMember(1, IsRequired = true, Name=@"squad_id", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + public int squad_id + { + get { return _squad_id; } + set { _squad_id = value; } + } + + private dfproto.NameInfo _name = null; + [global::ProtoBuf.ProtoMember(2, IsRequired = false, Name=@"name", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue(null)] + public dfproto.NameInfo name + { + get { return _name; } + set { _name = value; } + } + + private string _alias = ""; + [global::ProtoBuf.ProtoMember(3, IsRequired = false, Name=@"alias", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue("")] + public string alias + { + get { return _alias; } + set { _alias = value; } + } + private readonly global::System.Collections.Generic.List _members = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(4, Name=@"members", DataFormat = global::ProtoBuf.DataFormat.ZigZag)] + public global::System.Collections.Generic.List members + { + get { return _members; } + } + + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"UnitLaborState")] + public partial class UnitLaborState : global::ProtoBuf.IExtensible + { + public UnitLaborState() {} + + private int _unit_id; + [global::ProtoBuf.ProtoMember(1, IsRequired = true, Name=@"unit_id", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + public int unit_id + { + get { return _unit_id; } + set { _unit_id = value; } + } + private int _labor; + [global::ProtoBuf.ProtoMember(2, IsRequired = true, Name=@"labor", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + public int labor + { + get { return _labor; } + set { _labor = value; } + } + private bool _value; + [global::ProtoBuf.ProtoMember(3, IsRequired = true, Name=@"value", DataFormat = global::ProtoBuf.DataFormat.Default)] + public bool value + { + get { return _value; } + set { _value = value; } + } + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + +} \ No newline at end of file diff --git a/clients/unity/simple_sample/Assets/RemoteClient/BasicApi.cs b/clients/unity/simple_sample/Assets/RemoteClient/BasicApi.cs new file mode 100644 index 000000000..3f9f97984 --- /dev/null +++ b/clients/unity/simple_sample/Assets/RemoteClient/BasicApi.cs @@ -0,0 +1,460 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +// Generated from: BasicApi.proto +// Note: requires additional types generated from: Basic.proto +namespace dfproto +{ + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"GetWorldInfoOut")] + public partial class GetWorldInfoOut : global::ProtoBuf.IExtensible + { + public GetWorldInfoOut() {} + + private dfproto.GetWorldInfoOut.Mode _mode; + [global::ProtoBuf.ProtoMember(1, IsRequired = true, Name=@"mode", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + public dfproto.GetWorldInfoOut.Mode mode + { + get { return _mode; } + set { _mode = value; } + } + private string _save_dir; + [global::ProtoBuf.ProtoMember(2, IsRequired = true, Name=@"save_dir", DataFormat = global::ProtoBuf.DataFormat.Default)] + public string save_dir + { + get { return _save_dir; } + set { _save_dir = value; } + } + + private dfproto.NameInfo _world_name = null; + [global::ProtoBuf.ProtoMember(3, IsRequired = false, Name=@"world_name", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue(null)] + public dfproto.NameInfo world_name + { + get { return _world_name; } + set { _world_name = value; } + } + + private int _civ_id = default(int); + [global::ProtoBuf.ProtoMember(4, IsRequired = false, Name=@"civ_id", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + [global::System.ComponentModel.DefaultValue(default(int))] + public int civ_id + { + get { return _civ_id; } + set { _civ_id = value; } + } + + private int _site_id = default(int); + [global::ProtoBuf.ProtoMember(5, IsRequired = false, Name=@"site_id", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + [global::System.ComponentModel.DefaultValue(default(int))] + public int site_id + { + get { return _site_id; } + set { _site_id = value; } + } + + private int _group_id = default(int); + [global::ProtoBuf.ProtoMember(6, IsRequired = false, Name=@"group_id", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + [global::System.ComponentModel.DefaultValue(default(int))] + public int group_id + { + get { return _group_id; } + set { _group_id = value; } + } + + private int _race_id = default(int); + [global::ProtoBuf.ProtoMember(7, IsRequired = false, Name=@"race_id", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + [global::System.ComponentModel.DefaultValue(default(int))] + public int race_id + { + get { return _race_id; } + set { _race_id = value; } + } + + private int _player_unit_id = default(int); + [global::ProtoBuf.ProtoMember(8, IsRequired = false, Name=@"player_unit_id", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + [global::System.ComponentModel.DefaultValue(default(int))] + public int player_unit_id + { + get { return _player_unit_id; } + set { _player_unit_id = value; } + } + + private int _player_histfig_id = default(int); + [global::ProtoBuf.ProtoMember(9, IsRequired = false, Name=@"player_histfig_id", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + [global::System.ComponentModel.DefaultValue(default(int))] + public int player_histfig_id + { + get { return _player_histfig_id; } + set { _player_histfig_id = value; } + } + private readonly global::System.Collections.Generic.List _companion_histfig_ids = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(10, Name=@"companion_histfig_ids", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + public global::System.Collections.Generic.List companion_histfig_ids + { + get { return _companion_histfig_ids; } + } + + [global::ProtoBuf.ProtoContract(Name=@"Mode")] + public enum Mode + { + + [global::ProtoBuf.ProtoEnum(Name=@"MODE_DWARF", Value=1)] + MODE_DWARF = 1, + + [global::ProtoBuf.ProtoEnum(Name=@"MODE_ADVENTURE", Value=2)] + MODE_ADVENTURE = 2, + + [global::ProtoBuf.ProtoEnum(Name=@"MODE_LEGENDS", Value=3)] + MODE_LEGENDS = 3 + } + + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"ListEnumsOut")] + public partial class ListEnumsOut : global::ProtoBuf.IExtensible + { + public ListEnumsOut() {} + + private readonly global::System.Collections.Generic.List _material_flags = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(1, Name=@"material_flags", DataFormat = global::ProtoBuf.DataFormat.Default)] + public global::System.Collections.Generic.List material_flags + { + get { return _material_flags; } + } + + private readonly global::System.Collections.Generic.List _inorganic_flags = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(2, Name=@"inorganic_flags", DataFormat = global::ProtoBuf.DataFormat.Default)] + public global::System.Collections.Generic.List inorganic_flags + { + get { return _inorganic_flags; } + } + + private readonly global::System.Collections.Generic.List _unit_flags1 = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(3, Name=@"unit_flags1", DataFormat = global::ProtoBuf.DataFormat.Default)] + public global::System.Collections.Generic.List unit_flags1 + { + get { return _unit_flags1; } + } + + private readonly global::System.Collections.Generic.List _unit_flags2 = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(4, Name=@"unit_flags2", DataFormat = global::ProtoBuf.DataFormat.Default)] + public global::System.Collections.Generic.List unit_flags2 + { + get { return _unit_flags2; } + } + + private readonly global::System.Collections.Generic.List _unit_flags3 = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(5, Name=@"unit_flags3", DataFormat = global::ProtoBuf.DataFormat.Default)] + public global::System.Collections.Generic.List unit_flags3 + { + get { return _unit_flags3; } + } + + private readonly global::System.Collections.Generic.List _unit_labor = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(6, Name=@"unit_labor", DataFormat = global::ProtoBuf.DataFormat.Default)] + public global::System.Collections.Generic.List unit_labor + { + get { return _unit_labor; } + } + + private readonly global::System.Collections.Generic.List _job_skill = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(7, Name=@"job_skill", DataFormat = global::ProtoBuf.DataFormat.Default)] + public global::System.Collections.Generic.List job_skill + { + get { return _job_skill; } + } + + private readonly global::System.Collections.Generic.List _cie_add_tag_mask1 = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(8, Name=@"cie_add_tag_mask1", DataFormat = global::ProtoBuf.DataFormat.Default)] + public global::System.Collections.Generic.List cie_add_tag_mask1 + { + get { return _cie_add_tag_mask1; } + } + + private readonly global::System.Collections.Generic.List _cie_add_tag_mask2 = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(9, Name=@"cie_add_tag_mask2", DataFormat = global::ProtoBuf.DataFormat.Default)] + public global::System.Collections.Generic.List cie_add_tag_mask2 + { + get { return _cie_add_tag_mask2; } + } + + private readonly global::System.Collections.Generic.List _death_info_flags = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(10, Name=@"death_info_flags", DataFormat = global::ProtoBuf.DataFormat.Default)] + public global::System.Collections.Generic.List death_info_flags + { + get { return _death_info_flags; } + } + + private readonly global::System.Collections.Generic.List _profession = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(11, Name=@"profession", DataFormat = global::ProtoBuf.DataFormat.Default)] + public global::System.Collections.Generic.List profession + { + get { return _profession; } + } + + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"ListJobSkillsOut")] + public partial class ListJobSkillsOut : global::ProtoBuf.IExtensible + { + public ListJobSkillsOut() {} + + private readonly global::System.Collections.Generic.List _skill = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(1, Name=@"skill", DataFormat = global::ProtoBuf.DataFormat.Default)] + public global::System.Collections.Generic.List skill + { + get { return _skill; } + } + + private readonly global::System.Collections.Generic.List _profession = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(2, Name=@"profession", DataFormat = global::ProtoBuf.DataFormat.Default)] + public global::System.Collections.Generic.List profession + { + get { return _profession; } + } + + private readonly global::System.Collections.Generic.List _labor = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(3, Name=@"labor", DataFormat = global::ProtoBuf.DataFormat.Default)] + public global::System.Collections.Generic.List labor + { + get { return _labor; } + } + + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"ListMaterialsIn")] + public partial class ListMaterialsIn : global::ProtoBuf.IExtensible + { + public ListMaterialsIn() {} + + + private dfproto.BasicMaterialInfoMask _mask = null; + [global::ProtoBuf.ProtoMember(1, IsRequired = false, Name=@"mask", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue(null)] + public dfproto.BasicMaterialInfoMask mask + { + get { return _mask; } + set { _mask = value; } + } + private readonly global::System.Collections.Generic.List _id_list = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(2, Name=@"id_list", DataFormat = global::ProtoBuf.DataFormat.Default)] + public global::System.Collections.Generic.List id_list + { + get { return _id_list; } + } + + + private bool _builtin = default(bool); + [global::ProtoBuf.ProtoMember(3, IsRequired = false, Name=@"builtin", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue(default(bool))] + public bool builtin + { + get { return _builtin; } + set { _builtin = value; } + } + + private bool _inorganic = default(bool); + [global::ProtoBuf.ProtoMember(4, IsRequired = false, Name=@"inorganic", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue(default(bool))] + public bool inorganic + { + get { return _inorganic; } + set { _inorganic = value; } + } + + private bool _creatures = default(bool); + [global::ProtoBuf.ProtoMember(5, IsRequired = false, Name=@"creatures", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue(default(bool))] + public bool creatures + { + get { return _creatures; } + set { _creatures = value; } + } + + private bool _plants = default(bool); + [global::ProtoBuf.ProtoMember(6, IsRequired = false, Name=@"plants", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue(default(bool))] + public bool plants + { + get { return _plants; } + set { _plants = value; } + } + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"ListMaterialsOut")] + public partial class ListMaterialsOut : global::ProtoBuf.IExtensible + { + public ListMaterialsOut() {} + + private readonly global::System.Collections.Generic.List _value = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(1, Name=@"value", DataFormat = global::ProtoBuf.DataFormat.Default)] + public global::System.Collections.Generic.List value + { + get { return _value; } + } + + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"ListUnitsIn")] + public partial class ListUnitsIn : global::ProtoBuf.IExtensible + { + public ListUnitsIn() {} + + + private dfproto.BasicUnitInfoMask _mask = null; + [global::ProtoBuf.ProtoMember(1, IsRequired = false, Name=@"mask", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue(null)] + public dfproto.BasicUnitInfoMask mask + { + get { return _mask; } + set { _mask = value; } + } + private readonly global::System.Collections.Generic.List _id_list = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(2, Name=@"id_list", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + public global::System.Collections.Generic.List id_list + { + get { return _id_list; } + } + + + private bool _scan_all = default(bool); + [global::ProtoBuf.ProtoMember(5, IsRequired = false, Name=@"scan_all", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue(default(bool))] + public bool scan_all + { + get { return _scan_all; } + set { _scan_all = value; } + } + + private int _race = default(int); + [global::ProtoBuf.ProtoMember(3, IsRequired = false, Name=@"race", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + [global::System.ComponentModel.DefaultValue(default(int))] + public int race + { + get { return _race; } + set { _race = value; } + } + + private int _civ_id = default(int); + [global::ProtoBuf.ProtoMember(4, IsRequired = false, Name=@"civ_id", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + [global::System.ComponentModel.DefaultValue(default(int))] + public int civ_id + { + get { return _civ_id; } + set { _civ_id = value; } + } + + private bool _dead = default(bool); + [global::ProtoBuf.ProtoMember(6, IsRequired = false, Name=@"dead", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue(default(bool))] + public bool dead + { + get { return _dead; } + set { _dead = value; } + } + + private bool _alive = default(bool); + [global::ProtoBuf.ProtoMember(7, IsRequired = false, Name=@"alive", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue(default(bool))] + public bool alive + { + get { return _alive; } + set { _alive = value; } + } + + private bool _sane = default(bool); + [global::ProtoBuf.ProtoMember(8, IsRequired = false, Name=@"sane", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue(default(bool))] + public bool sane + { + get { return _sane; } + set { _sane = value; } + } + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"ListUnitsOut")] + public partial class ListUnitsOut : global::ProtoBuf.IExtensible + { + public ListUnitsOut() {} + + private readonly global::System.Collections.Generic.List _value = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(1, Name=@"value", DataFormat = global::ProtoBuf.DataFormat.Default)] + public global::System.Collections.Generic.List value + { + get { return _value; } + } + + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"ListSquadsIn")] + public partial class ListSquadsIn : global::ProtoBuf.IExtensible + { + public ListSquadsIn() {} + + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"ListSquadsOut")] + public partial class ListSquadsOut : global::ProtoBuf.IExtensible + { + public ListSquadsOut() {} + + private readonly global::System.Collections.Generic.List _value = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(1, Name=@"value", DataFormat = global::ProtoBuf.DataFormat.Default)] + public global::System.Collections.Generic.List value + { + get { return _value; } + } + + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"SetUnitLaborsIn")] + public partial class SetUnitLaborsIn : global::ProtoBuf.IExtensible + { + public SetUnitLaborsIn() {} + + private readonly global::System.Collections.Generic.List _change = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(1, Name=@"change", DataFormat = global::ProtoBuf.DataFormat.Default)] + public global::System.Collections.Generic.List change + { + get { return _change; } + } + + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + +} \ No newline at end of file diff --git a/clients/unity/simple_sample/Assets/RemoteClient/ColorText.cs b/clients/unity/simple_sample/Assets/RemoteClient/ColorText.cs new file mode 100644 index 000000000..c98941b01 --- /dev/null +++ b/clients/unity/simple_sample/Assets/RemoteClient/ColorText.cs @@ -0,0 +1,119 @@ +using System; +using UnityEngine; +using AT.MIN; +using dfproto; + +namespace DFHack +{ + public enum color_value + { + COLOR_RESET = -1, + COLOR_BLACK = 0, + COLOR_BLUE, + COLOR_GREEN, + COLOR_CYAN, + COLOR_RED, + COLOR_MAGENTA, + COLOR_BROWN, + COLOR_GREY, + COLOR_DARKGREY, + COLOR_LIGHTBLUE, + COLOR_LIGHTGREEN, + COLOR_LIGHTCYAN, + COLOR_LIGHTRED, + COLOR_LIGHTMAGENTA, + COLOR_YELLOW, + COLOR_WHITE, + COLOR_MAX = COLOR_WHITE + }; + + public class color_ostream + { + string buffer; + public void printerr(string Format, params object[] Parameters) + { + Debug.LogError(Tools.sprintf(Format, Parameters)); + } + public void print(string Format, params object[] Parameters) + { + Debug.Log(Tools.sprintf(Format, Parameters)); + } + public void begin_batch() + { + buffer = ""; + } + public void end_batch() + { + Debug.Log(buffer); + buffer = null; + } + + public void add_text(color_value color, string text) + { + //Debug.Log(text); + buffer += text; + } + + } + public class buffered_color_ostream : color_ostream + { + //protected: + public new void add_text(color_value color, string text) + { + if (text.Length == 0) + return; + + if (buffer.Length == 0) + { + buffer = text; + } + else + { + buffer += text; + } + } + + + + // buffered_color_ostream() {} + // ~buffered_color_ostream() {} + + // const std::list &fragments() { return buffer; } + + protected string buffer; + } + public class color_ostream_proxy : buffered_color_ostream + { + protected color_ostream target; + + //virtual void flush_proxy(); + + public color_ostream_proxy(color_ostream targetIn) + { + target = targetIn; + } + + public virtual color_ostream proxy_target() { return target; } + + public void decode(dfproto.CoreTextNotification data) + { + int cnt = data.fragments.Count; + + if (cnt > 0) + { + target.begin_batch(); + + for (int i = 0; i < cnt; i++) + { + var frag = data.fragments[i]; + + //color_value color = frag.has_color() ? color_value(frag.color()) : COLOR_RESET; + target.add_text(color_value.COLOR_RESET, frag.text); + //target.printerr(data.fragments[i].text); + } + + target.end_batch(); + } + } + } +} \ No newline at end of file diff --git a/clients/unity/simple_sample/Assets/RemoteClient/CoreProtocol.cs b/clients/unity/simple_sample/Assets/RemoteClient/CoreProtocol.cs new file mode 100644 index 000000000..e5536da04 --- /dev/null +++ b/clients/unity/simple_sample/Assets/RemoteClient/CoreProtocol.cs @@ -0,0 +1,311 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +// Generated from: CoreProtocol.proto +namespace dfproto +{ + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"CoreTextFragment")] + public partial class CoreTextFragment : global::ProtoBuf.IExtensible + { + public CoreTextFragment() {} + + private string _text; + [global::ProtoBuf.ProtoMember(1, IsRequired = true, Name=@"text", DataFormat = global::ProtoBuf.DataFormat.Default)] + public string text + { + get { return _text; } + set { _text = value; } + } + + private dfproto.CoreTextFragment.Color _color = dfproto.CoreTextFragment.Color.COLOR_BLACK; + [global::ProtoBuf.ProtoMember(2, IsRequired = false, Name=@"color", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + [global::System.ComponentModel.DefaultValue(dfproto.CoreTextFragment.Color.COLOR_BLACK)] + public dfproto.CoreTextFragment.Color color + { + get { return _color; } + set { _color = value; } + } + [global::ProtoBuf.ProtoContract(Name=@"Color")] + public enum Color + { + + [global::ProtoBuf.ProtoEnum(Name=@"COLOR_BLACK", Value=0)] + COLOR_BLACK = 0, + + [global::ProtoBuf.ProtoEnum(Name=@"COLOR_BLUE", Value=1)] + COLOR_BLUE = 1, + + [global::ProtoBuf.ProtoEnum(Name=@"COLOR_GREEN", Value=2)] + COLOR_GREEN = 2, + + [global::ProtoBuf.ProtoEnum(Name=@"COLOR_CYAN", Value=3)] + COLOR_CYAN = 3, + + [global::ProtoBuf.ProtoEnum(Name=@"COLOR_RED", Value=4)] + COLOR_RED = 4, + + [global::ProtoBuf.ProtoEnum(Name=@"COLOR_MAGENTA", Value=5)] + COLOR_MAGENTA = 5, + + [global::ProtoBuf.ProtoEnum(Name=@"COLOR_BROWN", Value=6)] + COLOR_BROWN = 6, + + [global::ProtoBuf.ProtoEnum(Name=@"COLOR_GREY", Value=7)] + COLOR_GREY = 7, + + [global::ProtoBuf.ProtoEnum(Name=@"COLOR_DARKGREY", Value=8)] + COLOR_DARKGREY = 8, + + [global::ProtoBuf.ProtoEnum(Name=@"COLOR_LIGHTBLUE", Value=9)] + COLOR_LIGHTBLUE = 9, + + [global::ProtoBuf.ProtoEnum(Name=@"COLOR_LIGHTGREEN", Value=10)] + COLOR_LIGHTGREEN = 10, + + [global::ProtoBuf.ProtoEnum(Name=@"COLOR_LIGHTCYAN", Value=11)] + COLOR_LIGHTCYAN = 11, + + [global::ProtoBuf.ProtoEnum(Name=@"COLOR_LIGHTRED", Value=12)] + COLOR_LIGHTRED = 12, + + [global::ProtoBuf.ProtoEnum(Name=@"COLOR_LIGHTMAGENTA", Value=13)] + COLOR_LIGHTMAGENTA = 13, + + [global::ProtoBuf.ProtoEnum(Name=@"COLOR_YELLOW", Value=14)] + COLOR_YELLOW = 14, + + [global::ProtoBuf.ProtoEnum(Name=@"COLOR_WHITE", Value=15)] + COLOR_WHITE = 15 + } + + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"CoreTextNotification")] + public partial class CoreTextNotification : global::ProtoBuf.IExtensible + { + public CoreTextNotification() {} + + private readonly global::System.Collections.Generic.List _fragments = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(1, Name=@"fragments", DataFormat = global::ProtoBuf.DataFormat.Default)] + public global::System.Collections.Generic.List fragments + { + get { return _fragments; } + } + + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"CoreErrorNotification")] + public partial class CoreErrorNotification : global::ProtoBuf.IExtensible + { + public CoreErrorNotification() {} + + private dfproto.CoreErrorNotification.ErrorCode _code; + [global::ProtoBuf.ProtoMember(1, IsRequired = true, Name=@"code", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + public dfproto.CoreErrorNotification.ErrorCode code + { + get { return _code; } + set { _code = value; } + } + [global::ProtoBuf.ProtoContract(Name=@"ErrorCode")] + public enum ErrorCode + { + + [global::ProtoBuf.ProtoEnum(Name=@"CR_LINK_FAILURE", Value=-3)] + CR_LINK_FAILURE = -3, + + [global::ProtoBuf.ProtoEnum(Name=@"CR_WOULD_BREAK", Value=-2)] + CR_WOULD_BREAK = -2, + + [global::ProtoBuf.ProtoEnum(Name=@"CR_NOT_IMPLEMENTED", Value=-1)] + CR_NOT_IMPLEMENTED = -1, + + [global::ProtoBuf.ProtoEnum(Name=@"CR_OK", Value=0)] + CR_OK = 0, + + [global::ProtoBuf.ProtoEnum(Name=@"CR_FAILURE", Value=1)] + CR_FAILURE = 1, + + [global::ProtoBuf.ProtoEnum(Name=@"CR_WRONG_USAGE", Value=2)] + CR_WRONG_USAGE = 2, + + [global::ProtoBuf.ProtoEnum(Name=@"CR_NOT_FOUND", Value=3)] + CR_NOT_FOUND = 3 + } + + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"EmptyMessage")] + public partial class EmptyMessage : global::ProtoBuf.IExtensible + { + public EmptyMessage() {} + + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"IntMessage")] + public partial class IntMessage : global::ProtoBuf.IExtensible + { + public IntMessage() {} + + private int _value; + [global::ProtoBuf.ProtoMember(1, IsRequired = true, Name=@"value", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + public int value + { + get { return _value; } + set { _value = value; } + } + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"IntListMessage")] + public partial class IntListMessage : global::ProtoBuf.IExtensible + { + public IntListMessage() {} + + private readonly global::System.Collections.Generic.List _value = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(1, Name=@"value", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + public global::System.Collections.Generic.List value + { + get { return _value; } + } + + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"StringMessage")] + public partial class StringMessage : global::ProtoBuf.IExtensible + { + public StringMessage() {} + + private string _value; + [global::ProtoBuf.ProtoMember(1, IsRequired = true, Name=@"value", DataFormat = global::ProtoBuf.DataFormat.Default)] + public string value + { + get { return _value; } + set { _value = value; } + } + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"StringListMessage")] + public partial class StringListMessage : global::ProtoBuf.IExtensible + { + public StringListMessage() {} + + private readonly global::System.Collections.Generic.List _value = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(1, Name=@"value", DataFormat = global::ProtoBuf.DataFormat.Default)] + public global::System.Collections.Generic.List value + { + get { return _value; } + } + + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"CoreBindRequest")] + public partial class CoreBindRequest : global::ProtoBuf.IExtensible + { + public CoreBindRequest() {} + + private string _method; + [global::ProtoBuf.ProtoMember(1, IsRequired = true, Name=@"method", DataFormat = global::ProtoBuf.DataFormat.Default)] + public string method + { + get { return _method; } + set { _method = value; } + } + private string _input_msg; + [global::ProtoBuf.ProtoMember(2, IsRequired = true, Name=@"input_msg", DataFormat = global::ProtoBuf.DataFormat.Default)] + public string input_msg + { + get { return _input_msg; } + set { _input_msg = value; } + } + private string _output_msg; + [global::ProtoBuf.ProtoMember(3, IsRequired = true, Name=@"output_msg", DataFormat = global::ProtoBuf.DataFormat.Default)] + public string output_msg + { + get { return _output_msg; } + set { _output_msg = value; } + } + + private string _plugin = ""; + [global::ProtoBuf.ProtoMember(4, IsRequired = false, Name=@"plugin", DataFormat = global::ProtoBuf.DataFormat.Default)] + [global::System.ComponentModel.DefaultValue("")] + public string plugin + { + get { return _plugin; } + set { _plugin = value; } + } + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"CoreBindReply")] + public partial class CoreBindReply : global::ProtoBuf.IExtensible + { + public CoreBindReply() {} + + private int _assigned_id; + [global::ProtoBuf.ProtoMember(1, IsRequired = true, Name=@"assigned_id", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] + public int assigned_id + { + get { return _assigned_id; } + set { _assigned_id = value; } + } + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + + [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"CoreRunCommandRequest")] + public partial class CoreRunCommandRequest : global::ProtoBuf.IExtensible + { + public CoreRunCommandRequest() {} + + private string _command; + [global::ProtoBuf.ProtoMember(1, IsRequired = true, Name=@"command", DataFormat = global::ProtoBuf.DataFormat.Default)] + public string command + { + get { return _command; } + set { _command = value; } + } + private readonly global::System.Collections.Generic.List _arguments = new global::System.Collections.Generic.List(); + [global::ProtoBuf.ProtoMember(2, Name=@"arguments", DataFormat = global::ProtoBuf.DataFormat.Default)] + public global::System.Collections.Generic.List arguments + { + get { return _arguments; } + } + + private global::ProtoBuf.IExtension extensionObject; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } + } + +} \ No newline at end of file diff --git a/clients/unity/simple_sample/Assets/RemoteClient/RemoteClient.cs b/clients/unity/simple_sample/Assets/RemoteClient/RemoteClient.cs new file mode 100644 index 000000000..f23faa761 --- /dev/null +++ b/clients/unity/simple_sample/Assets/RemoteClient/RemoteClient.cs @@ -0,0 +1,720 @@ +/* +https://github.com/peterix/dfhack +Copyright (c) 2009-2012 Petr Mrázek (peterix@gmail.com) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must +not claim that you wrote the original software. If you use this +software in a product, an acknowledgment in the product documentation +would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. +*/ + +using dfproto; +using System; +using System.Net; +using System.Net.Sockets; +using System.IO; +using System.Text; +using System.Runtime.Serialization; +using System.Runtime.Serialization.Formatters.Binary; +using System.Collections.Generic; +using System.Diagnostics; + +namespace DFHack +{ + using message_type = ProtoBuf.IExtensible; + + public enum command_result + { + CR_LINK_FAILURE = -3, // RPC call failed due to I/O or protocol error + CR_NEEDS_CONSOLE = -2, // Attempt to call interactive command without console + CR_NOT_IMPLEMENTED = -1, // Command not implemented, or plugin not loaded + CR_OK = 0, // Success + CR_FAILURE = 1, // Failure + CR_WRONG_USAGE = 2, // Wrong arguments or ui state + CR_NOT_FOUND = 3 // Target object not found (for RPC mainly) + } + + public enum DFHackReplyCode + { + RPC_REPLY_RESULT = -1, + RPC_REPLY_FAIL = -2, + RPC_REPLY_TEXT = -3, + RPC_REQUEST_QUIT = -4 + } + + class RPCHandshakeHeader + { + public string magic; + public int version; + + public static string REQUEST_MAGIC = "DFHack?\n"; + public static string RESPONSE_MAGIC = "DFHack!\n"; + } + + struct RPCMessageHeader + { + public const int MAX_MESSAGE_SIZE = 8 * 1048576; + + public Int16 id; + public Int32 size; + + public byte[] ConvertToBtyes() + { + List output = new List(); + output.AddRange(BitConverter.GetBytes(id)); + output.AddRange(new byte[2]); + output.AddRange(BitConverter.GetBytes(size)); + return output.ToArray(); + } + string BytesToString(byte[] input) + { + string output = ""; + foreach (byte item in input) + { + if (output.Length > 0) + output += ","; + output += item; + } + return output; + } + } + + /* Protocol description: + * + * 1. Handshake + * + * Client initiates connection by sending the handshake + * request header. The server responds with the response + * magic. Currently both versions must be 1. + * + * 2. Interaction + * + * Requests are done by exchanging messages between the + * client and the server. Messages consist of a serialized + * protobuf message preceeded by RPCMessageHeader. The size + * field specifies the length of the protobuf part. + * + * NOTE: As a special exception, RPC_REPLY_FAIL uses the size + * field to hold the error code directly. + * + * Every callable function is assigned a non-negative id by + * the server. Id 0 is reserved for BindMethod, which can be + * used to request any other id by function name. Id 1 is + * RunCommand, used to call console commands remotely. + * + * The client initiates every call by sending a message with + * appropriate function id and input arguments. The server + * responds with zero or more RPC_REPLY_TEXT:CoreTextNotification + * messages, followed by RPC_REPLY_RESULT containing the output + * of the function if it succeeded, or RPC_REPLY_FAIL with the + * error code if it did not. + * + * 3. Disconnect + * + * The client terminates the connection by sending an + * RPC_REQUEST_QUIT header with zero size and immediately + * closing the socket. + */ + + public class RPCFunctionBase + { + + public message_type p_in_template; + public message_type p_out_template; + + public message_type make_in() + { + return (message_type)Activator.CreateInstance(p_in_template.GetType()); + } + + public message_type input() + { + if (p_in == null) p_in = make_in(); + return p_in; + } + + public message_type make_out() + { + return (message_type)Activator.CreateInstance(p_out_template.GetType()); + } + + public message_type output() + { + if (p_out == null) p_out = make_out(); + return p_out; + } + + public void reset(bool free = false) + { + if (free) + { + p_in = null; + p_out = null; + } + else + { + if (p_in != null) + p_in = (message_type)Activator.CreateInstance(p_in.GetType()); + if (p_out != null) + p_out = (message_type)Activator.CreateInstance(p_out.GetType()); + } + } + + public RPCFunctionBase(message_type input, message_type output) + { + p_in_template = input; + p_out_template = output; + p_in = null; + p_out = null; + } + ~RPCFunctionBase() + { + p_in = null; + p_out = null; + } + + message_type p_in; + message_type p_out; + } + + public class RemoteFunctionBase : RPCFunctionBase + { + public bool bind(RemoteClient client, string name, + string proto = "") + { + return bind(client.default_output(), client, name, proto); + } + public bool bind(color_ostream output, + RemoteClient client, string name, + string proto = "") + { + if (isValid()) + { + if (p_client == client && this.name == name && this.proto == proto) + return true; + + output.printerr("Function already bound to %s::%s\n", + this.proto, this.name); + return false; + } + + this.name = name; + this.proto = proto; + this.p_client = client; + + return client.bind(output, this, name, proto); + } + + public bool isValid() { return (id >= 0); } + + public RemoteFunctionBase(message_type input, message_type output) + : base(input, output) + { + p_client = null; + id = -1; + } + + protected color_ostream default_ostream() + { + return p_client.default_output(); + } + + bool sendRemoteMessage(Socket socket, Int16 id, MemoryStream msg) + { + List buffer = new List(); + + RPCMessageHeader header = new RPCMessageHeader(); + header.id = id; + header.size = (Int32)msg.Length; + buffer.AddRange(header.ConvertToBtyes()); + buffer.AddRange(msg.ToArray()); + + int fullsz = buffer.Count; + + int got = socket.Send(buffer.ToArray()); + return (got == fullsz); + } + + protected command_result execute(color_ostream outString, Input input, Output output) + where Input : message_type, new() + where Output : message_type, new() + { + if (!isValid()) + { + outString.printerr("Calling an unbound RPC function %s::%s.\n", + this.proto, this.name); + return command_result.CR_NOT_IMPLEMENTED; + } + + if (p_client.socket == null) + { + outString.printerr("In call to %s::%s: invalid socket.\n", + this.proto, this.name); + return command_result.CR_LINK_FAILURE; + } + + MemoryStream sendStream = new MemoryStream(); + + ProtoBuf.Serializer.Serialize(sendStream, input); + + long send_size = sendStream.Length; + + if (send_size > RPCMessageHeader.MAX_MESSAGE_SIZE) + { + outString.printerr("In call to %s::%s: message too large: %d.\n", + this.proto, this.name, send_size); + return command_result.CR_LINK_FAILURE; + } + + if (!sendRemoteMessage(p_client.socket, id, sendStream)) + { + outString.printerr("In call to %s::%s: I/O error in send.\n", + this.proto, this.name); + return command_result.CR_LINK_FAILURE; + } + + color_ostream_proxy text_decoder = new color_ostream_proxy(outString); + CoreTextNotification text_data; + + output = new Output(); + //return command_result.CR_OK; + + while (true) + { + RPCMessageHeader header = new RPCMessageHeader(); + byte[] buffer = new byte[8]; + + if (!RemoteClient.readFullBuffer(p_client.socket, buffer, 8)) + { + outString.printerr("In call to %s::%s: I/O error in receive header.\n", + this.proto, this.name); + return command_result.CR_LINK_FAILURE; + } + + header.id = BitConverter.ToInt16(buffer, 0); + header.size = BitConverter.ToInt32(buffer, 4); //because something, somewhere, is fucking retarded + + //outString.print("Received %d:%d.\n", header.id, header.size); + + + if ((DFHackReplyCode)header.id == DFHackReplyCode.RPC_REPLY_FAIL) + if (header.size == (int)command_result.CR_OK) + return command_result.CR_FAILURE; + else + return (command_result)header.size; + + if (header.size < 0 || header.size > RPCMessageHeader.MAX_MESSAGE_SIZE) + { + outString.printerr("In call to %s::%s: invalid received size %d.\n", + this.proto, this.name, header.size); + return command_result.CR_LINK_FAILURE; + } + + byte[] buf = new byte[header.size]; + + if (!RemoteClient.readFullBuffer(p_client.socket, buf, header.size)) + { + outString.printerr("In call to %s::%s: I/O error in receive %d bytes of data.\n", + this.proto, this.name, header.size); + return command_result.CR_LINK_FAILURE; + } + + switch ((DFHackReplyCode)header.id) + { + case DFHackReplyCode.RPC_REPLY_RESULT: + output = ProtoBuf.Serializer.Deserialize(new MemoryStream(buf)); + if (output == null) + { + outString.printerr("In call to %s::%s: error parsing received result.\n", + this.proto, this.name); + return command_result.CR_LINK_FAILURE; + } + return command_result.CR_OK; + + case DFHackReplyCode.RPC_REPLY_TEXT: + text_data = ProtoBuf.Serializer.Deserialize(new MemoryStream(buf)); + + if (text_data != null) + { + text_decoder.decode(text_data); + } + else + outString.printerr("In call to %s::%s: received invalid text data.\n", + this.proto, this.name); + break; + + default: + break; + } + } + return command_result.CR_OK; + } + + + public string name, proto; + public RemoteClient p_client; + public Int16 id; + } + + public class RemoteFunction : RemoteFunctionBase + where Input : message_type, new() + where Output : message_type, new() + { + public new Input make_in() { return (Input)(base.make_in()); } + public new Input input() { return (Input)(base.input()); } + public new Output make_out() { return (Output)(base.make_out()); } + public new Output output() { return (Output)(base.output()); } + + public RemoteFunction() : base(new Input(), new Output()) { } + + public command_result execute() + { + if (p_client == null) + return command_result.CR_NOT_IMPLEMENTED; + else + return base.execute(default_ostream(), input(), output()); + } + public command_result execute(color_ostream stream) + { + return base.execute(stream, input(), output()); + } + public command_result execute(Input input, Output output) + { + if (p_client == null) + return command_result.CR_NOT_IMPLEMENTED; + else + return base.execute(default_ostream(), input, output); + } + public command_result execute(color_ostream stream, Input input, Output output) + { + return base.execute(stream, input, output); + } + } + + public class RemoteFunction : RemoteFunctionBase + where Input : message_type, new() + { + public new Input make_in() { return (Input)(base.make_in()); } + public new Input input() { return (Input)(base.input()); } + + public RemoteFunction() : base(new Input(), new EmptyMessage()) { } + + public command_result execute() + { + if (p_client == null) + return command_result.CR_NOT_IMPLEMENTED; + else + return base.execute(default_ostream(), input(), (EmptyMessage)output()); + } + public command_result execute(color_ostream stream) + { + return base.execute(stream, input(), (EmptyMessage)output()); + } + public command_result execute(Input input) + { + if (p_client == null) + return command_result.CR_NOT_IMPLEMENTED; + else + return base.execute(default_ostream(), input, (EmptyMessage)output()); + } + public command_result execute(color_ostream stream, Input input) + { + return base.execute(stream, input, (EmptyMessage)output()); + } + }; + + public class RemoteClient + { + public static bool readFullBuffer(Socket socket, byte[] buf, int size) + { + if (!socket.Connected) + return false; + + if (size == 0) + return true; + + int cnt = socket.Receive(buf, size, SocketFlags.None); + if (cnt <= 0) return false; + + return true; + } + + public bool bind(color_ostream outStream, RemoteFunctionBase function, + string name, string proto) + { + if (!active || socket == null) + return false; + + bind_call.reset(); + + { + var input = bind_call.input(); + + input.method = name; + if (proto.Length == 0) + input.plugin = proto; + input.input_msg = function.p_in_template.GetType().ToString(); + input.output_msg = function.p_out_template.GetType().ToString(); + } + + if (bind_call.execute(outStream) != command_result.CR_OK) + return false; + + function.id = (Int16)bind_call.output().assigned_id; + + return true; + } + + public RemoteClient(color_ostream default_output = null) + { + p_default_output = default_output; + active = false; + socket = null; + suspend_ready = false; + + if (p_default_output == null) + { + delete_output = true; + p_default_output = new color_ostream(); + } + else + delete_output = false; + } + ~RemoteClient() + { + disconnect(); + socket = null; + + if (delete_output) + p_default_output = null; + } + + public static int GetDefaultPort() + { + string port = System.Environment.GetEnvironmentVariable("DFHACK_PORT"); + if (port == null) port = "0"; + + int portval = Int32.Parse(port); + if (portval <= 0) + return 5000; + else + return portval; + } + + public color_ostream default_output() + { + return p_default_output; + } + + private static Socket ConnectSocket(string server, int port) + { + Socket s = null; + IPHostEntry hostEntry = null; + + // Get host related information. + hostEntry = Dns.GetHostEntry(server); + + // Loop through the AddressList to obtain the supported AddressFamily. This is to avoid + // an exception that occurs when the host IP Address is not compatible with the address family + // (typical in the IPv6 case). + foreach (IPAddress address in hostEntry.AddressList) + { + IPEndPoint ipe = new IPEndPoint(address, port); + Socket tempSocket = + new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp); + + tempSocket.Connect(ipe); + + if (tempSocket.Connected) + { + s = tempSocket; + break; + } + else + { + continue; + } + } + return s; + } + + static bool partialArrayCompare(byte[] A, byte[] B) //compares the intersection of the two arrays, ignoring the rest. + { + int size = A.Length; + if (size > B.Length) size = B.Length; + for (int i = 0; i < size; i++) + { + if (A[i] != B[i]) + return false; + } + return true; + } + + public bool connect(int port = -1) + { + Debug.Assert(!active); + + if (port <= 0) + port = GetDefaultPort(); + + socket = ConnectSocket("localhost", port); + if (socket == null) + { + default_output().printerr("Could not connect to localhost: %d\n", port); + return false; + } + + active = true; + + List headerList = new List(); + + headerList.AddRange(Encoding.ASCII.GetBytes(RPCHandshakeHeader.REQUEST_MAGIC)); + headerList.AddRange(BitConverter.GetBytes((Int32)1)); + + byte[] header = headerList.ToArray(); + + if (socket.Send(header) != header.Length) + { + default_output().printerr("Could not send handshake header.\n"); + socket.Close(); + socket = null; + return active = false; + } + + if (!readFullBuffer(socket, header, header.Length)) + { + default_output().printerr("Could not read handshake header.\n"); + socket.Close(); + socket = null; + return active = false; + } + + if (!partialArrayCompare(header, Encoding.ASCII.GetBytes(RPCHandshakeHeader.RESPONSE_MAGIC)) || + BitConverter.ToInt32(header, Encoding.ASCII.GetBytes(RPCHandshakeHeader.RESPONSE_MAGIC).Length) != 1) + { + default_output().printerr("Invalid handshake response: %s.\n", System.Text.Encoding.Default.GetString(header)); + socket.Close(); + socket = null; + return active = false; + } + + if (bind_call == null) bind_call = new RemoteFunction(); + bind_call.name = "BindMethod"; + bind_call.p_client = this; + bind_call.id = 0; + + if (runcmd_call == null) runcmd_call = new RemoteFunction(); + runcmd_call.name = "RunCommand"; + runcmd_call.p_client = this; + runcmd_call.id = 1; + + return true; + } + + public void disconnect() + { + if (active && socket != null) + { + RPCMessageHeader header; + header.id = (Int16)DFHackReplyCode.RPC_REQUEST_QUIT; + header.size = 0; + if (socket.Send(header.ConvertToBtyes()) != header.ConvertToBtyes().Length) + default_output().printerr("Could not send the disconnect message.\n"); + socket.Close(); + } + socket = null; + + } + + public command_result run_command(string cmd, List args) + { + return run_command(default_output(), cmd, args); + } + public command_result run_command(color_ostream output, string cmd, List args) + { + if (!active || socket == null) + { + output.printerr("In RunCommand: client connection not valid.\n"); + return command_result.CR_FAILURE; + } + + runcmd_call.reset(); + + runcmd_call.input().command = cmd; + for (int i = 0; i < args.Count; i++) + runcmd_call.input().arguments.Add(args[i]); + + return runcmd_call.execute(output); + } + + // // For executing multiple calls in rapid succession. + // // Best used via RemoteSuspender. + public int suspend_game() + { + if (!active) + return -1; + + if (!suspend_ready) + { + suspend_ready = true; + + suspend_call.bind(this, "CoreSuspend"); + resume_call.bind(this, "CoreResume"); + } + + if (suspend_call.execute(default_output()) == command_result.CR_OK) + return suspend_call.output().value; + else + return -1; + } + public int resume_game() + { + if (!suspend_ready) + return -1; + + if (resume_call.execute(default_output()) == command_result.CR_OK) + return resume_call.output().value; + else + return -1; + } + + //private: + bool active, delete_output; + public Socket socket; + color_ostream p_default_output; + + RemoteFunction bind_call; + RemoteFunction runcmd_call; + + bool suspend_ready; + RemoteFunction suspend_call, resume_call; + } + + class RemoteSuspender + { + RemoteClient client; + public RemoteSuspender(RemoteClient clientIn) + { + client = clientIn; + if (client == null || client.suspend_game() <= 0) client = null; + } + ~RemoteSuspender() + { + if (client != null) client.resume_game(); + } + }; +} diff --git a/clients/unity/simple_sample/Assets/RemoteClient/Tools.cs b/clients/unity/simple_sample/Assets/RemoteClient/Tools.cs new file mode 100644 index 000000000..bc16a1221 --- /dev/null +++ b/clients/unity/simple_sample/Assets/RemoteClient/Tools.cs @@ -0,0 +1,690 @@ +#region Usings +using System; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +#endregion + +namespace AT.MIN +{ + public static class Tools + { + #region Public Methods + #region IsNumericType + /// + /// Determines whether the specified value is of numeric type. + /// + /// The object to check. + /// + /// true if o is a numeric type; otherwise, false. + /// + public static bool IsNumericType( object o ) + { + return ( o is byte || + o is sbyte || + o is short || + o is ushort || + o is int || + o is uint || + o is long || + o is ulong || + o is float || + o is double || + o is decimal ); + } + #endregion + #region IsPositive + /// + /// Determines whether the specified value is positive. + /// + /// The value. + /// if set to true treats 0 as positive. + /// + /// true if the specified value is positive; otherwise, false. + /// + public static bool IsPositive( object Value, bool ZeroIsPositive ) + { + switch ( Type.GetTypeCode( Value.GetType() ) ) + { + case TypeCode.SByte: + return ( ZeroIsPositive ? (sbyte)Value >= 0 : (sbyte)Value > 0 ); + case TypeCode.Int16: + return ( ZeroIsPositive ? (short)Value >= 0 : (short)Value > 0 ); + case TypeCode.Int32: + return ( ZeroIsPositive ? (int)Value >= 0 : (int)Value > 0 ); + case TypeCode.Int64: + return ( ZeroIsPositive ? (long)Value >= 0 : (long)Value > 0 ); + case TypeCode.Single: + return ( ZeroIsPositive ? (float)Value >= 0 : (float)Value > 0 ); + case TypeCode.Double: + return ( ZeroIsPositive ? (double)Value >= 0 : (double)Value > 0 ); + case TypeCode.Decimal: + return ( ZeroIsPositive ? (decimal)Value >= 0 : (decimal)Value > 0 ); + case TypeCode.Byte: + return ( ZeroIsPositive ? true : (byte)Value > 0 ); + case TypeCode.UInt16: + return ( ZeroIsPositive ? true : (ushort)Value > 0 ); + case TypeCode.UInt32: + return ( ZeroIsPositive ? true : (uint)Value > 0 ); + case TypeCode.UInt64: + return ( ZeroIsPositive ? true : (ulong)Value > 0 ); + case TypeCode.Char: + return ( ZeroIsPositive ? true : (char)Value != '\0' ); + default: + return false; + } + } + #endregion + #region ToUnsigned + /// + /// Converts the specified values boxed type to its correpsonding unsigned + /// type. + /// + /// The value. + /// A boxed numeric object whos type is unsigned. + public static object ToUnsigned( object Value ) + { + switch ( Type.GetTypeCode( Value.GetType() ) ) + { + case TypeCode.SByte: + return (byte)( (sbyte)Value ); + case TypeCode.Int16: + return (ushort)( (short)Value ); + case TypeCode.Int32: + return (uint)( (int)Value ); + case TypeCode.Int64: + return (ulong)( (long)Value ); + + case TypeCode.Byte: + return Value; + case TypeCode.UInt16: + return Value; + case TypeCode.UInt32: + return Value; + case TypeCode.UInt64: + return Value; + + case TypeCode.Single: + return (UInt32)( (float)Value ); + case TypeCode.Double: + return (ulong)( (double)Value ); + case TypeCode.Decimal: + return (ulong)( (decimal)Value ); + + default: + return null; + } + } + #endregion + #region ToInteger + /// + /// Converts the specified values boxed type to its correpsonding integer + /// type. + /// + /// The value. + /// A boxed numeric object whos type is an integer type. + public static object ToInteger( object Value, bool Round ) + { + switch ( Type.GetTypeCode( Value.GetType() ) ) + { + case TypeCode.SByte: + return Value; + case TypeCode.Int16: + return Value; + case TypeCode.Int32: + return Value; + case TypeCode.Int64: + return Value; + + case TypeCode.Byte: + return Value; + case TypeCode.UInt16: + return Value; + case TypeCode.UInt32: + return Value; + case TypeCode.UInt64: + return Value; + + case TypeCode.Single: + return ( Round ? (int)Math.Round( (float)Value ) : (int)( (float)Value ) ); + case TypeCode.Double: + return ( Round ? (long)Math.Round( (double)Value ) : (long)( (double)Value ) ); + case TypeCode.Decimal: + return ( Round ? Math.Round( (decimal)Value ) : (decimal)Value ); + + default: + return null; + } + } + #endregion + #region UnboxToLong + public static long UnboxToLong( object Value, bool Round ) + { + switch ( Type.GetTypeCode( Value.GetType() ) ) + { + case TypeCode.SByte: + return (long)( (sbyte)Value ); + case TypeCode.Int16: + return (long)( (short)Value ); + case TypeCode.Int32: + return (long)( (int)Value ); + case TypeCode.Int64: + return (long)Value; + + case TypeCode.Byte: + return (long)( (byte)Value ); + case TypeCode.UInt16: + return (long)( (ushort)Value ); + case TypeCode.UInt32: + return (long)( (uint)Value ); + case TypeCode.UInt64: + return (long)( (ulong)Value ); + + case TypeCode.Single: + return ( Round ? (long)Math.Round( (float)Value ) : (long)( (float)Value ) ); + case TypeCode.Double: + return ( Round ? (long)Math.Round( (double)Value ) : (long)( (double)Value ) ); + case TypeCode.Decimal: + return ( Round ? (long)Math.Round( (decimal)Value ) : (long)( (decimal)Value ) ); + + default: + return 0; + } + } + #endregion + #region ReplaceMetaChars + /// + /// Replaces the string representations of meta chars with their corresponding + /// character values. + /// + /// The input. + /// A string with all string meta chars are replaced + public static string ReplaceMetaChars( string input ) + { + return Regex.Replace( input, @"(\\)(\d{3}|[^\d])?", new MatchEvaluator( ReplaceMetaCharsMatch ) ); + } + private static string ReplaceMetaCharsMatch( Match m ) + { + // convert octal quotes (like \040) + if ( m.Groups[2].Length == 3 ) + return Convert.ToChar( Convert.ToByte( m.Groups[2].Value, 8 ) ).ToString(); + else + { + // convert all other special meta characters + //TODO: \xhhh hex and possible dec !! + switch ( m.Groups[2].Value ) + { + case "0": // null + return "\0"; + case "a": // alert (beep) + return "\a"; + case "b": // BS + return "\b"; + case "f": // FF + return "\f"; + case "v": // vertical tab + return "\v"; + case "r": // CR + return "\r"; + case "n": // LF + return "\n"; + case "t": // Tab + return "\t"; + default: + // if neither an octal quote nor a special meta character + // so just remove the backslash + return m.Groups[2].Value; + } + } + } + #endregion + #region printf + public static void printf( string Format, params object[] Parameters ) + { + Console.Write( Tools.sprintf( Format, Parameters ) ); + } + #endregion + #region fprintf + public static void fprintf( TextWriter Destination, string Format, params object[] Parameters ) + { + Destination.Write( Tools.sprintf( Format, Parameters ) ); + } + #endregion + #region sprintf + public static string sprintf( string Format, params object[] Parameters ) + { + #region Variables + StringBuilder f = new StringBuilder(); + Regex r = new Regex( @"\%(\d*\$)?([\'\#\-\+ ]*)(\d*)(?:\.(\d+))?([hl])?([dioxXucsfeEgGpn%])" ); + //"%[parameter][flags][width][.precision][length]type" + Match m = null; + string w = String.Empty; + int defaultParamIx = 0; + int paramIx; + object o = null; + + bool flagLeft2Right = false; + bool flagAlternate = false; + bool flagPositiveSign = false; + bool flagPositiveSpace = false; + bool flagZeroPadding = false; + bool flagGroupThousands = false; + + int fieldLength = 0; + int fieldPrecision = 0; + char shortLongIndicator = '\0'; + char formatSpecifier = '\0'; + char paddingCharacter = ' '; + #endregion + + // find all format parameters in format string + f.Append( Format ); + m = r.Match( f.ToString() ); + while ( m.Success ) + { + #region parameter index + paramIx = defaultParamIx; + if ( m.Groups[1] != null && m.Groups[1].Value.Length > 0 ) + { + string val = m.Groups[1].Value.Substring( 0, m.Groups[1].Value.Length - 1 ); + paramIx = Convert.ToInt32( val ) - 1; + }; + #endregion + + #region format flags + // extract format flags + flagAlternate = false; + flagLeft2Right = false; + flagPositiveSign = false; + flagPositiveSpace = false; + flagZeroPadding = false; + flagGroupThousands = false; + if ( m.Groups[2] != null && m.Groups[2].Value.Length > 0 ) + { + string flags = m.Groups[2].Value; + + flagAlternate = ( flags.IndexOf( '#' ) >= 0 ); + flagLeft2Right = ( flags.IndexOf( '-' ) >= 0 ); + flagPositiveSign = ( flags.IndexOf( '+' ) >= 0 ); + flagPositiveSpace = ( flags.IndexOf( ' ' ) >= 0 ); + flagGroupThousands = ( flags.IndexOf( '\'' ) >= 0 ); + + // positive + indicator overrides a + // positive space character + if ( flagPositiveSign && flagPositiveSpace ) + flagPositiveSpace = false; + } + #endregion + + #region field length + // extract field length and + // pading character + paddingCharacter = ' '; + fieldLength = int.MinValue; + if ( m.Groups[3] != null && m.Groups[3].Value.Length > 0 ) + { + fieldLength = Convert.ToInt32( m.Groups[3].Value ); + flagZeroPadding = ( m.Groups[3].Value[0] == '0' ); + } + #endregion + + if ( flagZeroPadding ) + paddingCharacter = '0'; + + // left2right allignment overrides zero padding + if ( flagLeft2Right && flagZeroPadding ) + { + flagZeroPadding = false; + paddingCharacter = ' '; + } + + #region field precision + // extract field precision + fieldPrecision = int.MinValue; + if ( m.Groups[4] != null && m.Groups[4].Value.Length > 0 ) + fieldPrecision = Convert.ToInt32( m.Groups[4].Value ); + #endregion + + #region short / long indicator + // extract short / long indicator + shortLongIndicator = Char.MinValue; + if ( m.Groups[5] != null && m.Groups[5].Value.Length > 0 ) + shortLongIndicator = m.Groups[5].Value[0]; + #endregion + + #region format specifier + // extract format + formatSpecifier = Char.MinValue; + if ( m.Groups[6] != null && m.Groups[6].Value.Length > 0 ) + formatSpecifier = m.Groups[6].Value[0]; + #endregion + + // default precision is 6 digits if none is specified except + if ( fieldPrecision == int.MinValue && + formatSpecifier != 's' && + formatSpecifier != 'c' && + Char.ToUpper( formatSpecifier ) != 'X' && + formatSpecifier != 'o' ) + fieldPrecision = 6; + + #region get next value parameter + // get next value parameter and convert value parameter depending on short / long indicator + if ( Parameters == null || paramIx >= Parameters.Length ) + o = null; + else + { + o = Parameters[paramIx]; + + if ( shortLongIndicator == 'h' ) + { + if ( o is int ) + o = (short)( (int)o ); + else if ( o is long ) + o = (short)( (long)o ); + else if ( o is uint ) + o = (ushort)( (uint)o ); + else if ( o is ulong ) + o = (ushort)( (ulong)o ); + } + else if ( shortLongIndicator == 'l' ) + { + if ( o is short ) + o = (long)( (short)o ); + else if ( o is int ) + o = (long)( (int)o ); + else if ( o is ushort ) + o = (ulong)( (ushort)o ); + else if ( o is uint ) + o = (ulong)( (uint)o ); + } + } + #endregion + + // convert value parameters to a string depending on the formatSpecifier + w = String.Empty; + switch ( formatSpecifier ) + { + #region % - character + case '%': // % character + w = "%"; + break; + #endregion + #region d - integer + case 'd': // integer + w = FormatNumber( ( flagGroupThousands ? "n" : "d" ), flagAlternate, + fieldLength, int.MinValue, flagLeft2Right, + flagPositiveSign, flagPositiveSpace, + paddingCharacter, o ); + defaultParamIx++; + break; + #endregion + #region i - integer + case 'i': // integer + goto case 'd'; + #endregion + #region o - octal integer + case 'o': // octal integer - no leading zero + w = FormatOct( "o", flagAlternate, + fieldLength, int.MinValue, flagLeft2Right, + paddingCharacter, o ); + defaultParamIx++; + break; + #endregion + #region x - hex integer + case 'x': // hex integer - no leading zero + w = FormatHex( "x", flagAlternate, + fieldLength, fieldPrecision, flagLeft2Right, + paddingCharacter, o ); + defaultParamIx++; + break; + #endregion + #region X - hex integer + case 'X': // same as x but with capital hex characters + w = FormatHex( "X", flagAlternate, + fieldLength, fieldPrecision, flagLeft2Right, + paddingCharacter, o ); + defaultParamIx++; + break; + #endregion + #region u - unsigned integer + case 'u': // unsigned integer + w = FormatNumber( ( flagGroupThousands ? "n" : "d" ), flagAlternate, + fieldLength, int.MinValue, flagLeft2Right, + false, false, + paddingCharacter, ToUnsigned( o ) ); + defaultParamIx++; + break; + #endregion + #region c - character + case 'c': // character + if ( IsNumericType( o ) ) + w = Convert.ToChar( o ).ToString(); + else if ( o is char ) + w = ( (char)o ).ToString(); + else if ( o is string && ( (string)o ).Length > 0 ) + w = ( (string)o )[0].ToString(); + defaultParamIx++; + break; + #endregion + #region s - string + case 's': // string + string t = "{0" + ( fieldLength != int.MinValue ? "," + ( flagLeft2Right ? "-" : String.Empty ) + fieldLength.ToString() : String.Empty ) + ":s}"; + w = o.ToString(); + if ( fieldPrecision >= 0 ) + w = w.Substring( 0, fieldPrecision ); + + if ( fieldLength != int.MinValue ) + if ( flagLeft2Right ) + w = w.PadRight( fieldLength, paddingCharacter ); + else + w = w.PadLeft( fieldLength, paddingCharacter ); + defaultParamIx++; + break; + #endregion + #region f - double number + case 'f': // double + w = FormatNumber( ( flagGroupThousands ? "n" : "f" ), flagAlternate, + fieldLength, fieldPrecision, flagLeft2Right, + flagPositiveSign, flagPositiveSpace, + paddingCharacter, o ); + defaultParamIx++; + break; + #endregion + #region e - exponent number + case 'e': // double / exponent + w = FormatNumber( "e", flagAlternate, + fieldLength, fieldPrecision, flagLeft2Right, + flagPositiveSign, flagPositiveSpace, + paddingCharacter, o ); + defaultParamIx++; + break; + #endregion + #region E - exponent number + case 'E': // double / exponent + w = FormatNumber( "E", flagAlternate, + fieldLength, fieldPrecision, flagLeft2Right, + flagPositiveSign, flagPositiveSpace, + paddingCharacter, o ); + defaultParamIx++; + break; + #endregion + #region g - general number + case 'g': // double / exponent + w = FormatNumber( "g", flagAlternate, + fieldLength, fieldPrecision, flagLeft2Right, + flagPositiveSign, flagPositiveSpace, + paddingCharacter, o ); + defaultParamIx++; + break; + #endregion + #region G - general number + case 'G': // double / exponent + w = FormatNumber( "G", flagAlternate, + fieldLength, fieldPrecision, flagLeft2Right, + flagPositiveSign, flagPositiveSpace, + paddingCharacter, o ); + defaultParamIx++; + break; + #endregion + #region p - pointer + case 'p': // pointer + if ( o is IntPtr ) + w = "0x" + ( (IntPtr)o ).ToString( "x" ); + defaultParamIx++; + break; + #endregion + #region n - number of processed chars so far + case 'n': // number of characters so far + w = FormatNumber( "d", flagAlternate, + fieldLength, int.MinValue, flagLeft2Right, + flagPositiveSign, flagPositiveSpace, + paddingCharacter, m.Index ); + break; + #endregion + default: + w = String.Empty; + defaultParamIx++; + break; + } + + // replace format parameter with parameter value + // and start searching for the next format parameter + // AFTER the position of the current inserted value + // to prohibit recursive matches if the value also + // includes a format specifier + f.Remove( m.Index, m.Length ); + f.Insert( m.Index, w ); + m = r.Match( f.ToString(), m.Index + w.Length ); + } + + return f.ToString(); + } + #endregion + #endregion + + #region Private Methods + #region FormatOCT + private static string FormatOct( string NativeFormat, bool Alternate, + int FieldLength, int FieldPrecision, + bool Left2Right, + char Padding, object Value ) + { + string w = String.Empty; + string lengthFormat = "{0" + ( FieldLength != int.MinValue ? + "," + ( Left2Right ? + "-" : + String.Empty ) + FieldLength.ToString() : + String.Empty ) + "}"; + + if ( IsNumericType( Value ) ) + { + w = Convert.ToString( UnboxToLong( Value, true ), 8 ); + + if ( Left2Right || Padding == ' ' ) + { + if ( Alternate && w != "0" ) + w = "0" + w; + w = String.Format( lengthFormat, w ); + } + else + { + if ( FieldLength != int.MinValue ) + w = w.PadLeft( FieldLength - ( Alternate && w != "0" ? 1 : 0 ), Padding ); + if ( Alternate && w != "0" ) + w = "0" + w; + } + } + + return w; + } + #endregion + #region FormatHEX + private static string FormatHex( string NativeFormat, bool Alternate, + int FieldLength, int FieldPrecision, + bool Left2Right, + char Padding, object Value ) + { + string w = String.Empty; + string lengthFormat = "{0" + ( FieldLength != int.MinValue ? + "," + ( Left2Right ? + "-" : + String.Empty ) + FieldLength.ToString() : + String.Empty ) + "}"; + string numberFormat = "{0:" + NativeFormat + ( FieldPrecision != int.MinValue ? + FieldPrecision.ToString() : + String.Empty ) + "}"; + + if ( IsNumericType( Value ) ) + { + w = String.Format( numberFormat, Value ); + + if ( Left2Right || Padding == ' ' ) + { + if ( Alternate ) + w = ( NativeFormat == "x" ? "0x" : "0X" ) + w; + w = String.Format( lengthFormat, w ); + } + else + { + if ( FieldLength != int.MinValue ) + w = w.PadLeft( FieldLength - ( Alternate ? 2 : 0 ), Padding ); + if ( Alternate ) + w = ( NativeFormat == "x" ? "0x" : "0X" ) + w; + } + } + + return w; + } + #endregion + #region FormatNumber + private static string FormatNumber( string NativeFormat, bool Alternate, + int FieldLength, int FieldPrecision, + bool Left2Right, + bool PositiveSign, bool PositiveSpace, + char Padding, object Value ) + { + string w = String.Empty; + string lengthFormat = "{0" + ( FieldLength != int.MinValue ? + "," + ( Left2Right ? + "-" : + String.Empty ) + FieldLength.ToString() : + String.Empty ) + "}"; + string numberFormat = "{0:" + NativeFormat + ( FieldPrecision != int.MinValue ? + FieldPrecision.ToString() : + "0" ) + "}"; + + if ( IsNumericType( Value ) ) + { + w = String.Format( numberFormat, Value ); + + if ( Left2Right || Padding == ' ' ) + { + if ( IsPositive( Value, true ) ) + w = ( PositiveSign ? + "+" : ( PositiveSpace ? " " : String.Empty ) ) + w; + w = String.Format( lengthFormat, w ); + } + else + { + if ( w.StartsWith( "-" ) ) + w = w.Substring( 1 ); + if ( FieldLength != int.MinValue ) + w = w.PadLeft( FieldLength - 1, Padding ); + if ( IsPositive( Value, true ) ) + w = ( PositiveSign ? + "+" : ( PositiveSpace ? + " " : ( FieldLength != int.MinValue ? + Padding.ToString() : String.Empty ) ) ) + w; + else + w = "-" + w; + } + } + + return w; + } + #endregion + #endregion + } +} + + diff --git a/clients/unity/simple_sample/Assets/Start.unity b/clients/unity/simple_sample/Assets/Start.unity new file mode 100644 index 0000000000000000000000000000000000000000..b115f6ec5809ce741f03fbbc96f53b79a31b0850 GIT binary patch literal 12760 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 Y;@tYZZ%fW0vguCu4|MqJ!EYG$AGXQ)`Tzg` literal 0 HcmV?d00001 diff --git a/clients/unity/simple_sample/Assets/TestScript.cs b/clients/unity/simple_sample/Assets/TestScript.cs new file mode 100644 index 000000000..27b7186ee --- /dev/null +++ b/clients/unity/simple_sample/Assets/TestScript.cs @@ -0,0 +1,21 @@ +using DFHack; +using System.Collections.Generic; +using UnityEngine; + +public class TestScript : MonoBehaviour { + RemoteClient remoteClient = new RemoteClient(); + // Use this for initialization + void Start () { + if (!remoteClient.connect()) + Debug.LogError("Could not connect"); + else + { + remoteClient.run_command("ls", new List()); + } + } + + // Update is called once per frame + void Update () { + + } +} diff --git a/clients/unity/simple_sample/Assets/protobuf-net.dll b/clients/unity/simple_sample/Assets/protobuf-net.dll new file mode 100644 index 0000000000000000000000000000000000000000..75584ad26e3d717f292d207a114ab36ff5ef99a4 GIT binary patch literal 187904 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%0D?m`r*Ov!;$O(l__AUSojJILS_8 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 literal 0 HcmV?d00001 diff --git a/clients/unity/simple_sample/Library/AnnotationManager b/clients/unity/simple_sample/Library/AnnotationManager new file mode 100644 index 0000000000000000000000000000000000000000..2d1e3612dc4f93f1041b5718acac417dfa00bbdb GIT binary patch literal 4116 zcmeH}-%b=U6vhw8KM@pBLEs%o0J-C05K%XgK-ds2H{F@CjG1jsTTS4KH}Fw>2j9tC z)^koPKW&jSA z(oVQis}rHbKpJ>2tOO)RyaqoAg*$**Y%V&=?d`&_ciR6dbN9I{ zEfi4$<>TX^5Ki!U^o1zmUexbvU7^}euGO&;{Yn-*J;z``Gv5j5r}B2F>+F0BTPjB$ zRKnWM2NtDb)bMZf?qNj&W9sCFF=oscky5h+{O)PX^HD%rl&)h#cklwJ_cj z8eO6xj5^`PkL$eb5oSU;+s36u&Z@6^PNeBebvG~E-YO+3O?MYFtM<20uYr_+jM3vY({faS-Ugq zI7h*ZPaB1O8%FCyv#=XACZupxX+iJqr8ZST*PO$(F~6t8S=vxnJTr=-Ap`w{ps zd_KaAG_q%f_9=QVu_XUAlKz?*?OKSr--MX^M+osKeEtoeVtIaH{@h?e{CjwKcnsRd z9}r@-ELF9oihWgdWPhZ@MOi8Vz#)#nf~2Um8L_>dRZEK^-MO}VNA;`AairD~IV=TO zG9Z2GK~PWS80hs%rKL7{AM|0dM)7mCDC7bC$BFN!?=6F4w#>w3d{61Qa6T+{9;}aL zT!=_kQoIbU2eAtZw{mHFy(+98^`b@sNN>tP4OCdU>G_DBF* zG#H$QE_~(O+LFN@^I#~WC{;htB0N;_IA>}hP`KSZPeAozPep5av8mF0UnW|FCpf)g z8gW*M)9~-qnJB-TCAo|?RhcJ~D$X;#_v3sJ)n|h;nW|2n4U)KDIRl^c3^dNrRf(!p zH1mn4I9i+IaD4)g3l-z1>H5So+z!=eK7pR~EGKFq(6bz$nBxf4TYTa<2g4>mMe>Q~ z0~qXFJAH|xwQ+SkxBf_GLj@tPH->S7h5Mq`V>pQ;9U`w7U`n*e z@v4Ji(<8@g0gU8$J%EuMZ+I}h`mrn&>=k|HO^0b&{|N`frf2jjJB4K@QCg_YoT+YQM1az}Q*ag#DP=K^99>*t4c{Y6+Vd zgz1i16(++i(5J5xF9z@e8-Z1{>n6oT>bG07e^L3t+V2OCF38#28ZTRd|-s+3ParYIDAB zL)SZ`*9@30FBCrF08h=*||lTPElzG8SifU1JFU>!J!xs46eIkkjM?G|=T8?*cPd&Xk5#X&Y544WPY*$QCfAlCyJ zImosLqsz_iq&vIhZV-L6OYSDnA*Fv{^IN5H)9jM_(SzUxjW=8c*Dt-uHJs)rHioLg zjM3pl5EAn9cbq>?3;!G_Bz5?PwLA0@F_5r7;-b}(n zhiK7ZRHy}L3KU+{E fo(a0yk6V9vXza2YVErWg;csgAchrJ`Z`uC2kLXJ7^Ax4ZF*+pu}m!Rwe_Ia_gM@0(qLgU)`CJ zg&2qxpm+X&NQ(S8Gx{kV1hDr9;ME%dcuGBW0Pnje-4EYS;O~09?$G@WU4zP$dWJC? zdl_J$0s^hB8D~A*cpRdqX8^6Dl3b5?k|fM(cdo~q zb*Z|yJJ%CpSi;mp$P4A`Ogy{4ncXHb=SnD4n4;C_KjH6Kd6XD*93rM0HS}aU{(?Rj zX9az>S-*ptaN)kHh<>j8PdP&2pSSZ9@1l##E3)X8f6>m5bd{?}g{bnDKe&gVXQ(x5 zse|7Z)}6Y^kV%!5CKOc1)La%Z2=ub%cW#&!O1ob*SHH)*1NZep*&Ow@fk$m|(W7H;@O@(xGyGNZ jm6RMv4kQPX1IdBpKyn~CkQ_)3BnSS_fsXuIbVUCEJqfEh literal 0 HcmV?d00001 diff --git a/clients/unity/simple_sample/Library/EditorUserBuildSettings.asset b/clients/unity/simple_sample/Library/EditorUserBuildSettings.asset new file mode 100644 index 0000000000000000000000000000000000000000..199deaca3dba820b9542ab34a0759f99cfcdc9f6 GIT binary patch literal 4160 zcmeHKU2oGc6ukq+_xCr9-!N$#yti97s8r}gn8q7&lH1nIwJXOdD^L6mek|o)I~j@8 zsC(csS8D9o=iK9a>_iQ~=5K(99RRpREj0jdw|BPRjdtMAa=F}~`>ksLhpBYNo@8kE zbE(n@os)W;!M?~42)Fc1x-bEL0X(PXq_5rHE=<1-H9gC5S}{1F&d4iTZOw z8A}8&GBAm7(rBOm3QcpA`MK>{D;C9-*KoC%FEPxC!WuI96TK`;bCi>#b^~FwIc_*iIa2mK70{&jLxr~ z_Q(h0%Lw=g6`6-=h4J2+eCBDl3v4qjazdv<8I2XSJB_riO(xQjU~Vg0dbbf@uI^OI zD39I0g6^%Q97lU~%KfzzQt4rwj|VtM=XIU%Fw{><-D~E2&h5+XeR$jqJuq66x5w6uq(bZAPnzLfrOXds@R*M=Cx6l6U2*c4xNsT?6DYLk!gCBH`>e(tv?(576rTW?*$|IxFqL>$fvWgQe zrX+GUkg*k3V&*X~oAHO|GbI!0KIKXsOfWeMj91N!3j;zSL(N5bnb%cPC*0I`ysJ}d zWLiHcTUA=ouhZy+SQDPi#Vovs-mD<;5ZhQ<*`YqaeEHW#>p<&3>p<&3>p<&3>p<&3 U>%f0>fIoTpZ)f@Gd)d@~0o*SdRR910 literal 0 HcmV?d00001 diff --git a/clients/unity/simple_sample/Library/EditorUserSettings.asset b/clients/unity/simple_sample/Library/EditorUserSettings.asset new file mode 100644 index 0000000000000000000000000000000000000000..c0862d8a1f4255dc66ec13e067db840663f655f0 GIT binary patch literal 4108 zcmeHF%TB{E5Zspc8-AoxdE8qH2u?jz?G-tRTa22xvYi8*`Yn7UN5bwpMrl>V2jG#C z-FU~d>u~_up8)5_0C0d21Hg5s+qs!`;j5~u7Jh%=bDt@v&DcsalFq4OX5m&?2}r4E z51~!3CBQC*@l)ZhE+Ky&Ca*Gek1CT7bAh|Iu}Go>iXqR%0@(vyOx0{6=B2c(&6 z^z^N?e0z0Kq7V~xNZpF;W~>TzflZ-dcf)ZLTNL4jU}8p4jX29N}6} z`E4G$e?s60g22MFm*UD;Q zSSf}40G_5qYwVu-nLF>$`}4!_jcf1IMBh!+*b?`vfZj_H#~;GL1%afeoRaov2Mg`t zuZ&S&{)rKqJ|8fs8B`W@82pMkXzsz~$E13M|Y3zj$ljn&gpdbSvQ(Z@tSom|&`q zMz6|{+!m*M{jU%5B z%ycyuKHk9fml7wnK7nsuiPIGb9EHw^u^0R)@QW4|hzdjnq5@HYs6bR8Di9Tj3Pc6| GnF7C+9iD6e literal 0 HcmV?d00001 diff --git a/clients/unity/simple_sample/Library/MonoManager.asset b/clients/unity/simple_sample/Library/MonoManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..80d34e17d4aaccbfd1c45166eeb5744da41c2414 GIT binary patch literal 4100 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 literal 0 HcmV?d00001 diff --git a/clients/unity/simple_sample/Library/ScriptAssemblies/Assembly-CSharp.dll b/clients/unity/simple_sample/Library/ScriptAssemblies/Assembly-CSharp.dll new file mode 100644 index 0000000000000000000000000000000000000000..6f0a04c8064bda98709c0e40245dd200b7e74ef0 GIT binary patch literal 69120 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 X&UJjF?Z-!MdNMWOhLCsXxP?!!NU* z@61e@*4;)Q)CYT#?ap+*J(q94IlD_VexB&UArYPCGoOg&rlzN!Y){koPN#F6=cA)U z3wf^Xsj*u8EIKeoEO*0-phbo16fm|to zttQK@T|=Rg#guP`mECjIqr>h&4(kUyx}o!2_E|HTo2;w6F6e8#8u%$=`g#;URD`0R z9VzBU0c4N&Y0FSURdpkmU^gQawO!zT1>a&!NC+5|(XZg!{2weNgRz&JXc#-;4*p~l zOuIPNUB52z=8I$9V+^dD6OVgkc3;+e5uoSk94R!oHD*D7(A$K~IT?Zdkj7YS*dB@N zZ9g}{P(vijUvGq!iZ#!dl9aPp+P6B((^mF^8)?PpZB=z!zz0Txai<*Nsw4iJo6BiK zb6Z6oajOIl=I;~x=Dy`|z``7V4kszO_(z#AW7=?M5t`!GIVg*`cMi%T?wtYW71P}8 zwkFgMlU&>G+^o^){^r{6yy*NXRiTdDH(lg!DXS%A+oUWN68ofw#>41pN@|jOWGZT{&&$cJ&d$-#?$>ZT+ zqB(1IzM^wAuX07NmDR+vUBUC=1UemAgEp43e0qwSoA0Zi^;Z5aP4r?z)hzKcGz1_U z&Y}NyV`-jhyJ;f+WvOTucljj~_WkkcCs_!A!NMZw$FNBU!`-kl*p!2fI8-TY+QCj0 zz-(^PtVTO3udk}6qvdpr>p1Uo#;7*ABd9yWn83o&tfO$vQD@VyT9V{PA{KBMY}J(^ zFd=u3IzVqF3_T4klh)EqHQv-!R@40WWXW^U4Zcf0g>XYJjq@?KQ=G;H#)R<7(in@@ z2@j$_4c4GoSP27>MTn`QjLvcqh!d&v3S5amE@O@@I7GidAXjjmtqkS`a@C$Yeg{hmp(fx$eE^?)(3UQFEYm)S#^??-^1=QE^G;MSN0{XuUNHs^Q*_FWobv0-~8 zuD1PL2ty8$D1W^WRw}u9xsaqB#ln8BGn=-uS6oOdMsKUC+XCJ(0*ou=5N93n-`reG z8=A{1;)qKna4`Rzcx|p*9tSMU@#k<7lJkEU2{Wb*R~DfuE}h3k5!cS+qKIo}zfzvT>!GL54Xce*Zq&7Z`}$be{9yt$nhp_Exm5FRQjTc0xXuODPFI cXr+MPoWQSUUmQHC>pxp0w2#DuGFCZQeYD-$EL?NQ|38BjAy2+x=Ch~3y;VGZM$M6As z8DY-YPTjIwcmW>BNX~lKXJ^L8#}g++Q&U7|z7o+fzVd}=etKs5;r0xD9}EVE`F?zy zXfexlzNT|kRk@-im1*M9f#CV$5ITMFK^v=SJ~vCP&DZr0dMkesM|veujf~h0jRDAp ztM5PGSglf{8%GjfTm_?e%ejm=_PYn~#Ss#Nc_-+Huo(-(+psd&tc6WjR4HuE!X^t~ zS#ILAK^>JhU#XU*xD{FWoNCJGG#7zbk=m%hl?dc4#@Kv7^a})X4$s-jU``9NzXiI?-7s`>YksSDGqo3i=X{0wHaoSTL7)9OiN8 zW73az6>|m8*h0t-@6)!SMAdbYNwBLHBq-`z^nL|j3%xJ~)7Y=z>--FcXx^OMM8nt# zH{5_=`o*zsGR9|ICbL_CA0Kb8%x)JTK+mIjQYdii%z}QSw+WlG5`bNoCRl9P9+9nW zKNmtjhd`9SUkGcp+&o#1V$NduQ?Ao2Zl_PVkk*XeR&~1tTwo*^R?0DEC*Z%exe_Ou z%PR5+OC@kHw@&Pv>z2a-3j@OABqbYvHxp(|8?G!uQ&>6=$|9_t-g{9NVeRxdrS^b~*M(wz7S+$anh6W0<&J2QsjBjtbd!9w)oB~1qg)Cg$Q7QE z6hx4JPzvAvwiJfa+{m<%qK%UFZ@)QNaI)#WTob;>Ar1}2pu-JC7cxex+_^jXh41fi zLxn>d*@%G=10x1T4E#3?_>&yY{x9RYQKol)sT(IzEm1vfraOEL%?@D0|1diM^2;HA Zt_y)UfdzRGA4hj${ZamskZ)Wb{{eUUz}Wx* literal 0 HcmV?d00001 diff --git a/clients/unity/simple_sample/Library/metadata/00/00000000000000006000000000000000 b/clients/unity/simple_sample/Library/metadata/00/00000000000000006000000000000000 new file mode 100644 index 0000000000000000000000000000000000000000..ae25318c7568c595706048911840e429de163a2f GIT binary patch literal 4304 zcmeHKTTj$L6h0_;LB;$1MvTuW7mW|bfC5S)x)FFXhRo7ow`R8`(*eP!{TcokAN*ym z=Q}gA%wkK7iTdE4WVX|tujlgho70wP^eoZ2uS9f`k9;7SnV6h-v^h!NyWQ?lJ|7+? znkx!zm$g;%$|`!U3QfG)6+HhO!K5QTXl*I8(^J%5e_Q{kH|(o4(TgqBD2UzA5P)nr zhWX32rFm*>r-{TDSJ5i2@-7pO{r=$xafHNR!3pLuY|_DSHLMCY&MuIUeIWF8Z7?YLDD6s5`-!z{1e1qj1GhSEQe{6v?+lEZ}gm(Nu=O zgj_x906kAQ^)%!rZKRoMy=bbeq51ZS%Tv(>eoDTCa6zw((=oPFUd9>5g!HP)7>oRb z8_{0|YfvnB!imTtE~nNRs?rmsfvLq#b1 z$-ZK)l|XiQpXP>Is;*mw1iK!gsN(`3RPYVPgoJ=W83z@7lmCN-WH9$~6Afc0+`^x1 zg6WjUy6x8`-fVfSJB)$#a^iWv%x56ywcY2esImaWgpVA164cjAe zz3t~l7;1<_`Rk3aRNxRKV3-c)tB1$X zG`Cgc5w}Xowqp$tj$0rL;c7D*T<#W8rVW1=I@<8W>mNB5vFFfw^ zK%2uD*noin0|N#I4EzrageUSnF1BWJe7vt{Yx(Q8crdq}r1`SSR70Byc~`DxBz&M% ZBYtlM&(k;$el6We^(T1)lZP&^{{U#L#<&0g literal 0 HcmV?d00001 diff --git a/clients/unity/simple_sample/Library/metadata/00/00000000000000007000000000000000 b/clients/unity/simple_sample/Library/metadata/00/00000000000000007000000000000000 new file mode 100644 index 0000000000000000000000000000000000000000..a1fa862ef75c02fb688c86aad7fddd8ef15b6678 GIT binary patch literal 4304 zcmeHKTTc@~6h0_;LB;$1hKbK87mW|bfC5S)+E{ophD_O^UDIyK?111?e}+HC2Y;FM zd}n6L6n7hAqCVJ@On0{P?YVsW&DmX|@v}tdz7o+%KJtNRZfbh!(bhD5?{>RK`FwPg zXd%zFUDZ}CDy!(Z$~Ez7SMdCE1e1>Vp!Jo^&dyM4<8AGu-n6gML@zg0JtuZUBLK4D z80Ih6R~D(hlO_^hTt%z6%DYTB_WOq)#1RsM1t*xtuxSUw)vz+yjDw9iR4HuM!HyNc za%$ixabSUsC{z3pzZ`?0t+Maj>4*=E>AyeDUxrASis?Av!M)u z3AuXQ0eYTr>S<`3w4P?F`J$n+y5`#_E>A@l_$m1k!UerDPRH0zaT#YA6VfXyVtU|T!}!=V~s5Y#JoTt7w|t@8O#ghqC=I!yg)7$ zz*dvx_Ku-Y$zsYk!^-Zt?9pNOAcwX6ZQay)F8i#N%uO~_-VpQ^UJd+|F?}_PA1Xr8 zPYx7wtpKvi`?PJSscO2JOR(z^iaIXvVFlk{Oh^bAlyO+WH~BwUNCtB+H_{Pwy2BV)FDIV&%j~YK_ai{h<2h1ja8+hOztdZU%{du?{glR7Y}g)& z>uo);TDPxOWc9BJQ05=M~f1 z=(Q%)50hLw?s!<94h${b}9=`o;J@oXso@*nW8-4BHK0aA+vh#yxEuZ5}4g(!wj|Vz0w2T3Te&KPS z2ihFQ(1r{Q85lA!WZ-{bAiR0q<60BXNhiUMU;!-1l^oAxj_>36%(YE4d7kLPArYPCGoOeSW@cxe?99^lZnt}!=i}o< zOIfD#HJz)9$`!p-nI>NC3Z8$CVbBpDw7Ht*^K+DJy{~=N+xeR~(ko3>&xqa77=Uaz z`|<0|)e6=3;z;6)t6&vZIhPT~{`mNlI6`7D?*!uzHfv$H8de6Iv#<$^DuvBk*ogvI zmYX=O)2_-J?^I%GIT_+QHu{n=s!jG6)SY6CXJKs7Qn+rZ%i^zEisV}&=5d&8Hv5`@uNo??YrcKr@=S1n84d?mvN3UKE1LsrUF0y zM)a4#8Wi)MFcDe!oT|#`G#7zbk=m%hl?db_*4TVNj0*&E3IDT|!JI%YTU05`3FJxv zY%N-8?HTfwRARmvx$K^+4()dja@c6^>ZZ;z*=I?#Fx^mDL(tcF)$>!v^z|UVuLwmy zJ5tPz0?0n^)0Uy8s_AAX!EOd9>e#@83cke{pAax8V^G1j`9GLX24g2T(J*$x9sJ2A zm`-u5yKY_LEf&YR#~4^ICm#39?7pn`BS6p71yX2m>&$}wpmzwHb2TO&z%CzOdxSH&?40BSh2e9P2 z&qxoV%0H-w!@sSEo<27-ZKQLful?J{Cksw?zSryl&+#UQ104Z#bY5r~2Ne2^kB5Aq z&EXi?h=CCUBL+qc{0|KHcd7?mY}K^z@xHF}oWE|fN0oM}l6X5?Q>m(JGb69dLrC!- bX+t2ty@Zd%fjl@*y&vl@@)jl!UdH?Y%HYXZ literal 0 HcmV?d00001 diff --git a/clients/unity/simple_sample/Library/metadata/00/00000000000000009000000000000000 b/clients/unity/simple_sample/Library/metadata/00/00000000000000009000000000000000 new file mode 100644 index 0000000000000000000000000000000000000000..dcd6262e8b4c67ec364d6ce1439fd61a8a4f0f66 GIT binary patch literal 4308 zcmeHK%Wl&^6upI(M}hKwzq&zURpB@Hzc5 z!aa9p(n+u*SO5!hCC4+F`| zQkLm_UFT|9<%*uGOcSqm1v5`*7Y&uxHQzpQc`CTT4at?@FX)wVI>dI0%Q(XrpI%uRQ-L3U zBl^o=4T^bBn20QVP8DTznu|cJNNrT$N(6EqYivFs#svbofdARbU``+xEvgje1aheW zwjQmvb`AMTmSesdx$K_H4()dja`@2R(TUD7*=NmYVY;ERhM=$Ts^_PS>8n9}UlEFa za;TVV1&}@7r!7N?s_7(?VAlf_b!^~41>azdPY4*4F{t31{2$CGgRzsFXc#-;7XD-t zOs6>3ZMQD*7K>xuVGOL76Oa34c30N>5uoSs0x2}ODzl*9>utj3oDRTlNE0kJY>&wH zwx1iJuOSfSuQ$R${@5TCyyoJewmoYy80M*Io literal 0 HcmV?d00001 diff --git a/clients/unity/simple_sample/Library/metadata/00/0000000000000000a000000000000000 b/clients/unity/simple_sample/Library/metadata/00/0000000000000000a000000000000000 new file mode 100644 index 0000000000000000000000000000000000000000..c7d1d464ea9d0e54b3a43e4630f23976635e9835 GIT binary patch literal 4308 zcmeHK$!-%t5UoJM5+LmRmIDV)fh-^n2qlmNB9UNWazZF-XFB$PJ&t-h8z+ATpOY`c z)T{1x+F>R_NWcM?)SjN{H?_QZU7jHtJx_FDpNLNLkq<;O6O$89HYVwNx7$6==flH9 zb9t`qvbJhoSw$~Zu8CK>g6E%Om~_MktuAGDdWu?W?`og*x_y%-daI zFn_(eG*9)dG?Dn?Dq6)|-etnEKR*5>j*u8EIKe!IO*$CvhLypl9Bjm)N@3FucA@~5 zTa#vW+Eli&qFRoYlQFL2qR$zl_Q?H$x>Jk^EDX&$3agH~JpHPrNPZ+@0f&?IhB5>u z0-phbo16fm|to zEhmfZEkmJ_`IH}qmECjIqr>h&4j=Y5byMfL?6X!fGu}{nL(tcFHSkl$^z|rys0c+r zJ5bDx0?0P+)3%|es_AAf!EQz<>bSs%6?}^^At7K;#$g5D=4-H!4CY>LqG9ZWJGjUu zm`-u5yMA5b%@)VH#~4^IC!Y7q?7pn`BS6p78B%C)Rc1lI*BgY*IUa%iltx%=*dB@N zZ9g}{P(vijUvGq!iZ#y{l9aPp*tI&#({}cP8)?Pp4OMenzz0Txai<*Osw4heYl~@9 zb6Z6oajOIl=ARS$=Dy`|z``7V4kszO_y?IVW7=?M5t`!Gc~lm0?>s7txOWDeS4?ZI z*P2j2OmgkG<6(WGd%9ZqI9sflqW;;hnYdv(PKd^ss<&y)D6=Pjj7zP}wqZ`n^#GQ9 z_ZjFxRQU(>u>ZI9(9`E?u8nkV^tFHc_sN2jogXx7`5bR@80ZMQJkWWeWeh0v8;^%P z(B?1(Heg`Dz<_}P1OEd9;a%tf7h5rHe7sk+wfuFPKU&dtr)|D0t4!6knUJ^TGETw= bTG{&VUdLx-e;&wFZ>M@k-ooUMmoYy8eUQkw literal 0 HcmV?d00001 diff --git a/clients/unity/simple_sample/Library/metadata/00/0000000000000000b000000000000000 b/clients/unity/simple_sample/Library/metadata/00/0000000000000000b000000000000000 new file mode 100644 index 0000000000000000000000000000000000000000..b258dd471fdfbef60c0df96080247e11d033dd02 GIT binary patch literal 4320 zcmeHK*>2N76upI(r9j#Dt*=O^&;`T;LTzaal_*4nJ|R?1>S3g@^JwOt0k2yT2z@PUhN8=e-2?%h!0v{P4n3qYHz%1yw{ug^ElEgiE3uVZfFER zHXQx@+4|}dHFx4j;)|@TQ0#u(4S$h@VnZmG-SPg;uPM~DvsJ;IK+aoKCCmxr zLJ4dwTIuW<@|7&b{4jFaJr^C??;hmvW^Y?3I?H6AwWGPomdaX!zQn7ZpDLy=2l0JH zDEiU9Vy=`xc6pz63?-_elT3nL4Nz3rzy}q4jWIqUU{Jokiy=@V|GHKVsw!)^f=7zu`*a)hf6_-}8l z#EIs%iaf$r2^`ElC-%*K%i(~9S^g|eQnK;)GhxQG;m#s7g{^Z?7GduklttJ(Jp7Cz3GYo@G!_G>0=n3fZw38v~r+%U@Q$sgltd%I(plWIMH zCD(n1dJt9qK|Or^+j{8fb3M~WIyd^-zy14U!O70|n*Ge@c$33GM<{rp^FqrQQ0NyP zcX^=AVGM1^z>t9<149P>2L}9`&K)kcW;*zIuj@SLuiNaNeJfquiId1*o03=N0mS$Z bwE>XdTEe$jNj{vj-i`GKc_WiQVaELcaAwT$ literal 0 HcmV?d00001 diff --git a/clients/unity/simple_sample/Library/metadata/00/0000000000000000c000000000000000 b/clients/unity/simple_sample/Library/metadata/00/0000000000000000c000000000000000 new file mode 100644 index 0000000000000000000000000000000000000000..131233636f0a87ff69619bcaefa30d178198f824 GIT binary patch literal 4308 zcmeHK+fEcg5G@qEpyK_0L;7y}9@iReb)$r#eh^zM$?oh3aDf=~Myehy#e zTBo{u>BSjhOwoD%ZrbJ;C$g7&={9gVvWbJ2Oq~jrXzPvzXYZjk7VfTb#x@#)R<7(wKMTn`YjLxhG#EH~-1+GLO7cs{c9HL(!kW0AERtEC|x$ID-FfWiR z1+bN5sk3b;WU`R*!?3b@u6lIXJ&0j#Z%emyp36RKC$p1Hl{W=_jb{TtWlUd>{D+K? z^s@uS+$ezT@ILJrYN?uT<>KsSgrcrZ3&Ei8;e{2&7KJe?(l0=LR6=nuM1*qoCQ*mr4+#fI&X zxZ3t}Aq+W0qWtwjSgl&~d@)Hmip5>4vpnr&FSw9ajjpSj+XCJ(0*ou=2xlGf-`-eC zTbj!%;)qKna4`Rzcx|p*9tSMU@#k<7lJkEM2{Wb*R~DfuE}ch35!cS6qKIo}zfFQmzNE zM!yYCNEyb`~Zu9$lw3~ literal 0 HcmV?d00001 diff --git a/clients/unity/simple_sample/Library/metadata/26/2678d7ad7ff72d248854d487d8f15c21 b/clients/unity/simple_sample/Library/metadata/26/2678d7ad7ff72d248854d487d8f15c21 new file mode 100644 index 0000000000000000000000000000000000000000..f3f4e722223377e97ecb73bcc6c244e7d967923f GIT binary patch literal 43889 zcmeHQNpsvtcCPl!c+pt)^o;jyV0n{li4sYvJ?`mNs9T%qX!bCg(j0oCqXMh~NsLfH z4SMZExK<-X8tmmtTJQ4fwx-pZ%(=4kvX!Z$}@d zO*Vo{Um`6Y-^5?9N2AN|=jmSA?(U3c;~yRUG@G=4olmnzMS9W@(OXCe2mTeG4-VS; zy@%7ht?Gv_+pKKzs=N#LAJo}#dUTN1S=lmPqhEyEeh%-4gRyvv{y!9LKFW)1?*TQ1 za^oTB@Ux^lNZV6RN3t7qBob@ClLXqx>M|`zif=WojE*1Q}$ME7UHu@crfYN z=gDbWkEUsx(%EmblNyDThYtg6?Uz-$*KUb$REU=PB>EMV5C5!7^s5evSvm)J9>6$R z6zwP3aRy^$k~K6ozoXK>c1!j)&`8OEM(IU~)pu1s{PR4`IaY|l_f!hbg=2M`*G)^} z{F*_8&6-{J>u^qrbI&c#Z>W6uXC0{DbWqTMW|QddsL3W(Ii+FzTL!HHz-+7x)5Loz71m;7G^$ z^asjq__0rn?<;gZF%lo$!M@3?vv{;0_3``@Nvs^!$EOWRRx%)y@m}rZZQ#qErlBY z$K#vegiwKYKWkGOnU;&iVTmpl&3m+qef$)h-N_=Kj&Ot#EBGs0?^vS!|H-Y-EC&h{ zbnupmY@3m({?kRa!^l*J=_1=@WU9XuWW0~(;In1#s{RsTL0wF9inANf)6YHkR6scK z5OnxiA9XHY$ziDK{3M5n;Qnb^o@CH{gq!L*ksTgf1#yE^Lv^2hYOK$F(y$ORu|SIk zh%iG43Le!L@+L(Co&^~u>hE3&4cc{ZEgPEOP2lzcS$RxuFz0u`5cMQwi2#ZIPEMFE~e zC|uQ}B0b6q7N4jtwXf^ZoeF`F2GuZQIn#{-i5PA;O-V7;h4!_D?o+hYr@ZPbkroeq zwz#|`!t>7U5qPq!Jp>doh}6jSCd7a>%Ri334TB9+jlJ2tsv+RElMT_AIKBBe+9Vq^ zM^)qb7Imf^E|5-jDUWJA1)X%H(l#N!c+jAD&HkDuc74ePpD=yVeXQZ^n>}jYLE6GE zJ-S!(4#9Pkf95P#Za zHCcbm-ZcC9+C9wCehP5|3Cl4sxl3HwvVH~|Kh*?_iz96!+&_V|MDNd|L@;L`6<3^Zhn%@sy4e{_inyh$e2G)rEjO(F@Bqq8JUS_tH~kW`ZMXb-L=E#7$yHK$~jo+XoX(PT+pPO7>F zcb^<(r|I*&s*|*wCNJ`$fHO%^HEog~OK$CH#@Yr>btW69CX@GWI%HlcGB++?B2gX- zSd!zqn!TH_kuk5Uwz_<&6bWB4J?5uAzkDf4esWS&M``iyyN72@o6WWkvpP?U{8f5X zWY-gM@c@~8xH#UT5BICGt+cm%M8;-{ZAIXc~Ete3F%V^VMs~=U*U6lCa_eWJ)mOK#Cwt8&+0PbvolTSXleS)f(p)QIbLD!1R_0Mv&(ansEI_)eTTfn8&HZXN zFR~d-OooFLA0;D>OfIfl0zC!eM#jwwx?yc#o+EtTo?kj~aD+05i~2T1z#Dvzu1xeUZh&Sv1Sna^yR2ru<@ zoX;XSY^!Hk8Dz%H_(n5h#3sg!8G#`;+*~T+<~3zZY|E6<=^;}F0l~B?i!&L$%V4x9 zAjyNJyapUU_ya_SFZ)Zds}82)KCnT?l_S{Dhzj! zlGL;pc%qO2ArEjI)2Ue;aaT$)=#8)#`i?h-<~)~&#tg@NX$TkJ;c&S)Ubr}o1WcwQ z9X=r$2?eoGU>oO{m&PFaju%md??pjX5y^|JLT96^Ty$9j$9SC=Y1ziZ`Ef90O|nj*cq?io{b$Pxagts3ITDu#}aPK^e8+=ar3Za}Ny8OxS>n(aRJDEV55>%)0u43fVnErGJ z2V9hG1Q>yeJnk^r}p9 z+a0%cHR(e%bi?$ zEjxr8afSZg5C*l|I>c1}378v^f5xr`gt8Bf`eaN&`C+p%Yb++p(2_x@J_(c0Yup)$ z^lAMI3$U?lj@$j98V=z$+u(BR*7lts=M8bPw!=%`+@!Ex9!u$3C5ru9ojNUy>J0hC zPGK*Ciu4jj85$@T0W~W|V2s6jDD9h(Au(;Exkg9@VQfYXI>yn9TSkx+1uH7TBsXv+ z4PzI(B$#w#D2yWK!NJu?!U1v=& z&QZKS%3=R0rV)(!cE_Au0q)!9=l(cFH^Er%bgbbt@ZC8---GG}JpC$J?{=)&72v+R z1oss7+DPWN73O#Wc;8-vcMT7YWgXym6z=R2@V~>l(^0|}zEY0MO;CC6eNlf?9UVS{ zP4yqNZS9LCRl4X9QoXr1a-=-@%@+g)bL6!Y1w;YlS#}oWmP`k)Z3F@)Fj2d0@GyC- zDbigPJHEx7)3*TuFT+yn+v8DSs~!L+q0NB^N2okW=eXYoZU|gH^}A%wZV3RSp9_c@ z`<70*6kg~!jSXLiNF0RYvRXvo=nurX5XAFhfJvf+AWDS2unLq0uqE>|ud8ElO>B5h z*$Yu9Q3#r({+(1E?-+R9<|$^#s%jW>9(C@-@49{=V(!DBL5W@bQ zRmAo}flCs3aU}{HQi0IGpcOV1%e3JJ)xUuXdBuRZM1Ip}O;H3dYDi#%#!;{^!;C=W z*_LD6#E$2V9S@|n9Eu)w%INq}zkL%yLQNFvdo?^-m5ebUV{=711%NAZVF{QlG37TA zq_8R%K7wRr##vtEZCYc{E?h8`$$|!wKa3Qtml#fR90#DOiEl(Vq^pp}>rMob?NY>* z;lPF=J4wqiJZGJslw;w-H4%dl_Q#QC6Bh+(Q!X#!Cb5mYNip05EP|&OT`B_`&W1e< z;*TxiF?x7pItJ_YNA4t&7iK244K6$Hf^-urom}I1$;zW?kj}H&=4qL?A7R=v6e?+i z(UFpN_a;!<1WKDy8(R;ErQVT(E|ENhgRm8tBOEh@iXXiVEC_!Y1BlC3_qsu#|5uW9WDaeqS+~ zLJTjKg2+ZvTp7lZ*FwvaMS60M$4vd}BJgab;2VSI@=+^)Qr1YuP*+7HFSZJu4X<)> z7-2E@;oVnlKdqY2sQoF-4m|2ION*eIj~Qub z3;c}F67xc@&@y)3vCSp7R{Gg_*LZf@ig~f9;pKzDYyJKJfpJ>`2Q!oRy@aA~af%7y zMURo#HbJ5hXldagM|?TT^N6)Qe^4M9e#IC{IlM4RDjP|8$u$(!sVFM*a!q8j-goZx zJ}fTXU)0TDI;Rmv8(8h`UK@)K$0y@-Ivuz0j-aqt-FS_xWEC?v`X2Eo=_JR2Q7%-l ztgU1)G|CwmbvBCt!!)&;$C0d728QJ51w&HVQ(j&Q14Cf96XbqPv#Eh0S*;8V$%ral@NlGVzRe*p&DB$^zNMOnG;Wjpt}oC_|3kIZJKYla@{o&05kudkIhU!M7Jo!rmk7^^YB| zm7>tG^+M5+*?4rmu^uPddGs!B`A>gYUh^`85=f(8~b?Ve|~v z?)J~%1qic}*Trx~D;?OJr*~)z1*{~WUl2$F2VSAmoy%{XF7`5GbFkT~$gUUM|oTD3qm46jf%E0$tX)j#R(syj})yjMR)u8gP z?BI+m;CWWwisn>=uJ~2bdTP$Vl zyyJ*VZkZ5v-ZhfcVuhmp3d&&A=FV!h-x=0^$DT$^k_hd0gUpE6icp)otJQvYSo_@` z?RST?C+7*@mll@nnmfTY1BzT?6d!aR$k3}g$!!gKJR79;1mD*X)aB-LftudLW~GV~ zN3Z5gbW3$Q?b4kw6OMyA9li<>UXlUCd|Ofw5dN2;GnUIkA#<~U=Uns|lENEi%O)(g7h)ospDohqIR>%c+zPI57UO=; zCFJoUD~N1Z#g*YfOo0F+hnzF#kHo~7-W|W`)p=hme1*mVC=1d)ti|;}#OLz$0B}PT z+Wv&S<9kt%?j-V}+>zM`ch`o|728WEi>9q+@Qp3XOKUG9 zOG_Rv&K9)|w?*PYU9BF#%M#<>YYRpP-dRfzfychH7HbT^=k0mBL+2RSB|A|2=Ut*m@aFqP z7d}yB@ph0xXZ8}iPgFNV|6@CHQ*JVz;Qm}NX2HerZL`{CdII3L1bQ(=4$pozT}x8Z z3nNiT0OdlmK*tKgS77Ro7Ij^{h#l(@wtlCx^}MZ^ep#Kd=Z$;u=QOeh9Ohmax&!gH zqRr0ybMMU87Se;h762y{t~Vj^a_jcUL0h}m?G$@2j*Nq1-^Xok+1IU8e9U7w-5B$v zh;GyhNXPgXNSY;yj%AlzSjrGb5h$pv?N6(g4q#S@Wqc$fv6ScpVX5U#v3UA(sE&1v znO@)c?BwxU?v6|vZ;5Sp&6O^>#;Ov|z%8)=o7*__$*=If7zir@c_CKlY>btQE|Aqg zW#d6tw`Y|+=poi!gSNa$%Jcb7dAsH~)xK3~maEv4&nlF0UzO&K7*RgK)H~P(kv-DI z71uD=ZHdTrFt6Ke0b(1VY&^@JCw6o!Me#5#a{2;_z=EOQ*AcTfWQ6-_gd~G^C=!K@ zn?S+}7}WU~U7W(i4vHYz>?o_(m=r424%SpmFMOJxe43sZ!L0BqL4`lApBHvcBZ1%K zg2($gyd$(+&x2%`*?oj>8lw~C> zTWI=%VCnik{qwTbI*X5|8)h}=uu)oqy4rG_cBZoNrfJ%iK5@J@u=@EMZX(>m_$>s=RV|QHZGsU z!x*yCj|-N~AKLIQ!<4-Z7(*FgtW`9;`aK(u`aX>k#Vg{$@7oXxi{jNV$%~T7`2!D# zhV_^34{^_sb0QF!{t1<3I7>=x0cb z|1<#Sj6L~e1B3I}e`dkb*QT-m+=3(S&=nf{FJzP9ApP{lmR9Cr9!*F0NzzH5{?h73 zUz^DID+_KO8DbvX`f=Q!l`wFR^Ff@mF1};IYne5gc5fUNg;D>G4f--H(&qr9W$5iY z&UB1OziZ(k6`;$Nq4V-4W6}_YD59sBMty0M-m^e|_%ck?5@1dus%zoVL%KvQ2Otbl zcZ(vP?2n%tX1#AgH_>%r0lHQ!JYl*n1|ascYz))1QAm+f7L$0;v!LlWUEhZjq6w6b z;xb~%thrbcOLDPf-cRjfA3lY%JD4Sd7D*VR!lxO%LP_?2XKkEUY_qzyza+NMTzqp%+D-TQ?@m}1h@Et4IQs5NUC37| zHe`8nkRT$sH;U4O7|X|evt1{lqf1RecQDhi-DlG@-kkenvCuThK#K)Ln;~KfU9`mZ z$}0iU+MvM*)CN-mVmnX*q00tS0%Chn3FLw)0kQq4275Gkkj?Uzp2__Liy^%(c~rWz z_7JJt&!_P?E(+GO$>6FOMa77HH2GF72u*=X$h*>Pep1CwzEdRv4iO4xd21Z)$730v z*eB*gHf(VAD;m2~m8wH3KH&RocnC(KF#v=Er$7-6q?JEhEE>~MZUXs{z?P?32 zEH1aeg&2_jw}vN;Nhn(=128T~9XjT9SGzIr=WyU>&uM=Ucp(MqH3i zRVj~cJT;tgq{cQ8f9YbOcqu=96Z__p4W%$m(fw%+XOs5Wc?ZuH|G3e;op)#~idj{3 z?^w(RUXi&xNx^Je8CEdcOlk-x%C(|<-&R`Y!-?*-mDJP`BSH~&DEA<^OV?Vl8`#oF zwxw*{A)G26-;R&VSsq`$f2)<~WWctW1l&ZbZ8i1uL!^ch5hLPHi#TWNPuZJeKVOE$ zob0D&PLpj6r5~m$70I}{u;E%^KqW_B)*50E5@rv(Zi#o046`V?Ewi!z@4)cx7pc4@oW<3NuRXBF1O+i4iJ2`vWgbUmA=X4x2t&`Q zC9pv+G{V;+jd~_V6qy|>f`!$ctSzI(QBw9tkWte0-ov=0&wJS*?g~brZ*`Xi{$t^l z!rktpvd+B-y0`TK#QVAw?n>~zac_$*%ltB<7PoGKvDdwOxFyA`?Tx_Bdyx@HUHlR3 zd-F!Pa(RIfplcp}>&`sv*RC#rowU?LZ{KRfzXiWDUStVa>Aex0dyPZfXWOvA9HbHP z#&B;o40zA1ya((v{B?GWAcg`KataB+`dOaG(*he36ynW1^rs1J*#6CRRXX~(tLV@H zl!}IqMj6N^+7MZ2O5pHxH=45>w5X01TU{BwLk1BS34s8Bd|zFLK_%MGJ9BI-Qj= zyWy|(LYz)h?xIeeQ!>S*MB}mkZBdCsl{61x!eCyAqA>aV>S~lsiXEM(@+>Ot@iFS{ zJVF;C5r|(AcRJnO-R17?;Kh~CKim16-ND}S?aqow<0Aoy?~m3GQEiN{L);bqh}=%q zGG1U#QKxxw7@_>Ds`3q_a>uU3FD5prsJ~3^-EM@|8|C*kpeC+`7{>0YggA~ zX%0oqu9);5=Gkmo>|EaKeH5n$Smc{G#TALKt&4Li`R#3IBvxHf{ic}3#lmJ{Mf`*& zg$`T1W?iMlI3&Q;URCr)s%>bc1?57!+!X-bW?fmXSePj}-+p}m@pZ9#JQ|I}C_WYu z;z(3Si-bziP%QDzJ5rTQxze7bvSJeAh5V2)VP~y#T~rrHqdY)CXiju?*E&)cRV3Mo z{9e(RSl```IbzSn2y_j&N3)@SJTIrRIGd?bBvxs3K} zy$`+Kx!?QVlUkqL>y!F@KB`lhdVNa2&vt;g(sc4{B}o&6I*nnfV26;hSn@B@47VC& zOHT#}icI`sR+O+Jlk5=H9BeA>NBvI=?2U~ym|D%6SSi6^Ek3d41T{~~A)$0@FNawI zdFDoAjvi$BB!Z#gJqcK5-sRfa6PvUHMq6uzZ2+L1MK+FmKhG0VPPrLcXp|b4-Pblh z;mw-iTyj+_#=;gQ51WhoIIDz1WaLX$v{}_-FE$Sg!)u+3Vnv~8y@PXC+er2?B3B^%s|y#idmawv{oQw$Z+CZgmv+zX zUfjJP_TDGAgMV&c-|gYsg=K0Ujp2a0JA))Uem3hD!+8DR;WRzJx7^VY@9Jvj{0^@I zNzdNSke+1N+c`=GuU?;-jhJ+EN}x1ZB}hY11|1{31PpwJ<4VU98_VU;R(^ivGF|~Xs2s) zgd6afhFk-5RotQ&OK>TZGQJIzmirV{0D#Kjl7S2}WP7otcGm*{Q%O2`a~ZS&g-{r5 z1HiPxDh?AkS@O^lvs^Q2c#>4#lv2Q5hP}JfDGnfXg;X9bcO*7>PsJ`nD?HEuMtggx(LAr@iC9tR)T~fTyaxo*^PHD?FnonkO+(S-mAi(OM5+z z5Ogqfi}r6M`WNz}t%Myh9Y!)fz;xW2?MsNRSX&9Ss|CL(F6lYL1CSkOy{ICq4SL+D zOVKnUDL|`Pe6Bugt7OhN4L zw>D}JmGRuwyc}Ll1hosUCNsodPu&&lR_pFFsw=ot4|*6MKOT0)(m8BN$&G5AwDLS0 zn^o_1G2F{zZN1-x6Z$Eh*E>ShLuA(2UGKTOLCb+IQITl$)V(uvvIhwX6Y;T41bh5?P7_!o; zk#h|L0V7K3C|O)<3iC{B+co)c0=-8`$|9=N+7;_7VX?k)vRJzV)vSs!TN+hmi-?=9 zURwE`2FJ4$lqW7(o3JwKbL5k6@yCgrLVH36oe{i85i7nT#>REL2{5&F!BkA6LWj zakW`Kqy*ZrMYC*ZG)6X>eU3bKwko*hY%D-++VjAIaSgG1zKZ-f%z_`!VL@;tqY=6% zM0`w@GpfPt0Su>5|tRhz9s;69(`4r zLs*BiLZ&l#PT?}S6C4korzXtZ%_{GQ73LuJv(I!QMG;5^paWSwLo2hQFv=9*D@PS8wOy5w8lPc>2pCS&vDTaVUNu}bA6VI*tV zwW4DyY*_Rh{Jy+TF{d*fXrl$iq=qAE4K2X9A_Sbawq zbEO#43e{*Z4-uRY-KBuVs`(lQcnFkBN6Jo-4*PfRsVb*dNfv_>oemh1o6s0vlF0>_ zEJ<-VTxbqEZMsBEdla1)YaLX@;Djl)P*XtG0sB~`L-58c3JQ+1@~Hw17s*X;F&E^n z3YO`Djm?^E2(oj%_`C`_h+Uc0!>mClYvX5bT#-2Hx%F+=(y~x%5vnjY%(}uXLEWiW zt-QuZz0GLA8$S*!X;0KE%v6eHWjCagGqXEawphg>--9jiYxR}i#$;~&NHFeLIH@` zfg z1Mf5t4p}NkhNX%mAT>$*;~8%(>pAMJ2qkAjoYAH8d$e`Q`}1@XLxrI_J{+QjsIp*= z%;Gg3R3Su+5kdHohf=SBIv;4CZ{fw{DyLgWvVRdsk4xuR6|Lg7 z0{{@pw!C{bMVxzCBU+i1*RR&A!&w;P=5)u)z7EQ^qe+)y#DdO69T7`$Fj_;(B#Lf8`Y{mm)mk>W zJY98MLW^6aR;tcl-*sYIEymWC(xii47H9Xlh%`G){%xGLx=u&ARtyWY8FqsDC3 zWZJbpF7Q`iS(J&=I%`jAMZVDGH5wB~f4eTLu!l|YD2iPav|>|g?HMf2uYifUEiNx= zR=(8yzl^c@*c6@S*&7MWyCN{Z%@Qa-*HDum#c%89NuqT3PLUE)`}B|J7>tZ^oXX9#1J-@pC-$ggsJ( zuhu4x43(^cy>;aLH3eLkngXgf#atD0a^NZXtlVtFCWGr^+bRHdysMLQ5dT=4On6%b zt19{hldI_Wl&0BwDI=X4#sBnQ(_1I)_eau8aOJxjTP=E7D!uoTUJQTn-WEzH)81f= UcWffoI85RrekUfs2^4_;4~p5vjQ{`u literal 0 HcmV?d00001 diff --git a/clients/unity/simple_sample/Library/metadata/73/73b3c5754a89e43409dcf23866eb0484 b/clients/unity/simple_sample/Library/metadata/73/73b3c5754a89e43409dcf23866eb0484 new file mode 100644 index 0000000000000000000000000000000000000000..201f2fb774da586f446d434d1abe8724deb53f2e GIT binary patch literal 29561 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 literal 0 HcmV?d00001 diff --git a/clients/unity/simple_sample/Library/metadata/84/8401f7b1211481b469ac746534a896b8 b/clients/unity/simple_sample/Library/metadata/84/8401f7b1211481b469ac746534a896b8 new file mode 100644 index 0000000000000000000000000000000000000000..2c34de4be21b1f3bf68391a5ab980f5459ef3fde GIT binary patch literal 7713 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 iDgN01jg1!kuO)+q7X* literal 0 HcmV?d00001 diff --git a/clients/unity/simple_sample/Library/metadata/d8/d8595cea157337845be980bcc8978623 b/clients/unity/simple_sample/Library/metadata/d8/d8595cea157337845be980bcc8978623 new file mode 100644 index 0000000000000000000000000000000000000000..c2a75d82b6f89721f0a8d1c6bc061f98de8fbf1a GIT binary patch literal 17925 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 KWB7g$g8vJ@_iRr9 literal 0 HcmV?d00001 diff --git a/clients/unity/simple_sample/Library/metadata/e4/e4195866782d0214cb59abbae44f068f b/clients/unity/simple_sample/Library/metadata/e4/e4195866782d0214cb59abbae44f068f new file mode 100644 index 0000000000000000000000000000000000000000..ed727e04d3bbf294d0cee56cc2026e19ffc54f6e GIT binary patch literal 4288 zcmeHK%Wl&^6upJEKzYC45D@D^A0QS8wKOes(GspxE;9FR*BHVLlCY=@=u>mBMD>)u}j_+&E9LGdMLqtbD5Yaw9^NDDDcx3oyeT2Su zI-T8o-QQ0%nPobk)48guT+uz1Y2w+A;Q41425s>{OS4HnHcIjG!3?#m|@@Darbs2E%$2XpcBP0fMPB8XiBL;@2VP&vU0~;`? zQrMV*4Hm$%JPnfut*N{@uVT}dJwC2&qEDu&+9dOf*6n4C>q6gzY2l)2T^7F7QY0^l zn8V>>wW(4TGd~Cb8jDw7E z!OO}xw!MtQ=4RIuE`=5@rnXWPsv$2%F1zQXMZ4XD93E}1=}2dp?6Wu+uQXNG6!a;c1wxLA zV#1u}d6>gtjG}LEG3E^JvH6e<-lwgUBDJEUOoE*?AVE>vpm#F(obQD(C}Sss&+|PP zqB*m46Aoi1T(A>@X&1-3$QYM#8O<(veq6lmG`n1YKznYDlY+o4au@W1t`jzA#RJ%_iUw=51=7!VF8DVg|NnQ+H+%E}^b@}=`vS@_!NyccER zYp26m#>C5AX+r%l$+d0HJNXIqG_~+~qL`mW`njDmzF?Z(5e;&ys=OxaQ9c{5wNh?J zITg?#D?B|a2qFI<6+ZuMDs-v2l<8DN86b?tvdL8I>px1$32mbpG%)fnAfBmI0`RU!q_w!$$e#5tpeD7!17j)dp n^;8t%b$JXb}+*V~#E%8kR}a9-dxS>CreEqev0MKb&+k^m1bQDYN$ zq9+500ULsO+TbUnB)`SG9DF6>O8e$%A3qLDHUpSKGQfDdSlH?*pN^dmnXtA(8$9hJ zEEQ|3u8=C%;+&~~kZpDAo`GkDI7?x1p7rV2dD&3U1rXYyO%N>-#iJ~ZwHrTQ!FmQ5 z?09bcLIsD*kQ=`kz?FCpcGiKp=KYd~#c3VympvR>2S%@4?!yP3CJqow7$D>gW3GSwhxzw?E*26oWEh23>VM-O@KkGxsVV8a# zFwTc&mP+arF8zi_2SWfy*@xaV4>cu+D1<_J)R09cC%xrCPmjYwy$zUq3DxlEIF@Ch zngK*1)D@-ppp)zu#(Kv?*U9znzmV&kM<*=T`2eDmWeKFFb!A-6W=ym}%R}QD#|bDx zs6f8KbEZA>P>Dsi#1f0?{k}`=+BOus-blm*Jxr5=d%=A|67&D3?|pWtfC54f%UQ$b z49u^eA=tcu`2{lsyJ%p3y>u|U$3v*u#qRp`63v3TRMRO&H$Kj$paZ(jJHH({}SqCz8WqRd6p9YWU@|PK^gwKDAponM|Xl9mJ&}Gzt#f zVt?nYgScpLFogOr>mYssMFgyVfwbeO7U854JuBgoilisOXR8fFkXoWLL64v2~=}-KU zTDSFBPMtuAK{cwqT(yh>#JL-WsaDJ{p>@2ld^%or%KNnvu{g@n5~`ADo=Xb^DjCnW zzzQ5XHC=kCCScgwDLDnshDVL{!7!81a34NwxV^;iwtn>gVME8LpFEH0%`Dsnj#HB( zkDojpt|+8MZbJLw&`vQn_iBoLaEA>WFm>Ji{U*-3=<&}TT3h%kclZ9e!%?xunsoQ2 zj9FtVOqcfxFh5s@1I$m84pHiIz3#r6E4}nl>h4{ZbkdNt<#!fp^ReBOr(J5WrEc>TWrBl!W=pMZfB-0?a*zWsIK z&u_l_`s(-18%^?C>o0T!-CwE;x1lteZnPDJUk0pm=fjl$+b7stO#~w34>0mb!Ji(q zy?TvBUwkw@WtLm}D(8dNa+V}eNa6gXT5CMzQbYx0I~Do?oqh9NJ z)?1M>la1NsY?Q<_&2nnrm_<s6`nG`?-SJhR0G}gVsOk?0 i#e|2xi-)`O%Ukd-)vy&O3FH#VcLl$r{aQye0RI6x(zwF_ literal 0 HcmV?d00001 diff --git a/clients/unity/simple_sample/Library/metadata/eb/eb0b853da2a60f540a81dc515bab1875 b/clients/unity/simple_sample/Library/metadata/eb/eb0b853da2a60f540a81dc515bab1875 new file mode 100644 index 0000000000000000000000000000000000000000..a6472ed086e86a1a6ab012ea152b67af4da34469 GIT binary patch literal 4284 zcmeHK&2AGh5S~IQrTqUC%75Ua959`0Of}rKg@SsW7%{#I1JkyIi?(z+ekFO4 zxFu{JM;9v%p@1sEPvhpXg$P%Mri$xvCX%}ik<}$`AG_QiJm7}lmf#=QT*iSA+sR+X zLB#mrMawu8_#rG=?=lYCo132Kl4;>{stP4D!vwJ;wNVLIK#-#}hvoy)IENs|=ssEz z%n{_cMHRvvK~Chr7NWUkOMzcWCC1G#e0oM5+MgcE;c&(w*7XFl7iZ`U_YJD(L4?9wszn} zGp#LYsra-Km;bF~4&(Mwc_PP<9skpue5Xe<`_$wE@&~Dj^`^T2J!)bwKJcEZ5nj_v z95oVx1~w91QZs6$OP7b<;B^TbQHWaK`W5I`pkIN01^)XAe0u-%>y@={vv0?~jDGm| z`U!m!@%O&Ix@d$lA74 A1ONa4 literal 0 HcmV?d00001 diff --git a/clients/unity/simple_sample/ProjectSettings/AudioManager.asset b/clients/unity/simple_sample/ProjectSettings/AudioManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..947df12d092baed85c5fc8a4c2cba6d4fdb7398f GIT binary patch literal 4124 zcmeH~OHRWu5Qe9`5gQJ`A}6R+9&1F2Dp*uSSg=JV9#;W3j#7KWsu$r1T#+yn%c!i` z&M%F|&ipgBzg+-Ep8%(40B}s162RqnGQP4C`0o3DMEetpn`ml3*Nt9c2UER9;Fc_Q zu?{Jo?wfFN4y%{N>l;?#t~NMxdbx%@DrO_+ytdBkK>la%;tB`b4wYGhvJGz+VIY|Jp2@4(7u^E#PJ-?k3BVy3I$yTQEARnoRurPq~c zb#$Si1N1v}&AmytIY=#kdg_LsSE`3;v=%#6eyUZF!W(3aN`qtk_g41+l53^r6s5je12&S4h?L#z~CaYh*i7Zdd#U z{6;t3B0hpGKf$)?jC~DBn++>A9?91p&pE#1Gxov&^XCAMF92YXdg=gPudT1W>8``& zcs!mX|1GtwUs{>l78ckO2DZ@(pzxUSY>b010Qaf;&@9}>D>ywqIQb-Uwf`u`P}*#CiSo|iP`VNx5abp$HV<1^g?Soxl|~06zZCmyG0x) z>&my1Te74;QXnai6i5mr1(E_ufuulEASv)~3jFxJ^8Fg4{_X4Y+RKm2HGp6BrJpZ0 Q`N7Mtl2vN_;`yI;1yt@b5dZ)H literal 0 HcmV?d00001 diff --git a/clients/unity/simple_sample/ProjectSettings/EditorBuildSettings.asset b/clients/unity/simple_sample/ProjectSettings/EditorBuildSettings.asset new file mode 100644 index 0000000000000000000000000000000000000000..82383f9954cf3b208be6a9f2e13f885ef5929805 GIT binary patch literal 4104 zcmeHE%TB{E5S;La6BmA?QlZ>SB@moAM4XWmo7N~K$TmoD%8&9Zgxz&Rd*~ZD1LzR69A`_DFL&|baMSN#qTf-1@#vPz^(PE3yTlm*wUrs+hxSUL@_3G+$@2$IQ3{4Rkn3aR`Sbq|#3p7yHu60p}g>c058G93g`9fY< ze1DsVFg#Oc@#w#u=&>fpsKvF&z?x)4>X7#+1kz`ks_PoK)>MtNa&RP&HE5ojm;$+h zcav5^bi9q}ci)-q9{;_V@4hoVhs22Ere2wlugtq=a=u|&xBtxCvl71_e;Vq5I-m}y V1L}Y}pbn@5>VP_+4yXg_z#qw`SUdm# literal 0 HcmV?d00001 diff --git a/clients/unity/simple_sample/ProjectSettings/EditorSettings.asset b/clients/unity/simple_sample/ProjectSettings/EditorSettings.asset new file mode 100644 index 0000000000000000000000000000000000000000..5e1df7d31e964994a3637ee8e2b030eb07d583d8 GIT binary patch literal 4164 zcmeH~y-ve05XZ0O8y22|F;yunOnfw`NFau&Fd{cGtx;lE&P64i`X;;zPe!1htvB9}nZ z700u6`LhDpAveC$I5>su<#F;RV;reO-ll@GwrP?Jvaw(P=V+-aC4}!NtrqE%w7D|+ z#%Q!Ajf(l)SghBp*IB2oT!|}dMG5Z9nzkC{JC{yd(go(T(yKv9qK zPS~0eN+YR^q*WqSOM#^E!6dHYt_$C6in}iUSxzDu7gk{zW<^@3g<4EfnbcbLS~53C z+LA{m$FWUoAp6ba&vqbmvYT!E1>~?%XMHZefgH6&@K6&F-y^;*+`M@Lo`5Id33vjY zfG6Mycmke)C*TSEGXngC9ID(sNPo1Qke?yWFM7SjVi9CzVltt05Sy%*l~a+)pwRT7 H9V7tXi&u%F literal 0 HcmV?d00001 diff --git a/clients/unity/simple_sample/ProjectSettings/InputManager.asset b/clients/unity/simple_sample/ProjectSettings/InputManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..14964590c1279d4e5c7d1f0af38df2c00f0338bd GIT binary patch literal 5252 zcmeHLNpI6Y6n&NOv#?8u&^O-_~Qfg69U z{3XJCGoE_vj%iMuJW}#z`QG`)I_qmFOh-eCPT=&(5%x?J! zHJD&3+)=$kpd=aYoHU7u{je!TEwh%s*3lGY0>TzW9g}mISHHT>M^RL&Lu1l`x6Wd% z2cGgqsHRv_M5?F36EF7L!te4uVJ9s(yiVJ z>S{-ck8D}GE?ej_T~~(Cb=Bf=>$>JZq`FujmiMRZy5&$N?Zyz&ZdyEUX}27ROxpYX zS-WjHlu5fYgtVH)UfmjP7Ca4*+t}l9O^SNiCD1DqXs=--9LGG7A5+16uFk}xL z$kiwcC<$3xJva}`5PsO@u~3*tHb(9OXnrV2^xAsEe5~j6lbUJVRO%Jl*K;NG@z9W<$YT)v63s8K^Q)WuVGHm4PY)RR;c725|PmA+jFDem@EY z3$n;~=?nOpz!^FAo9jYayvecDHl!t*nTf`JyoAM?-S86mQNDlrUd9T}Mzk5?$lhsd zKKT(s@oq}{FFxp4@MAuyaM>Tu%+Oi$L~P{aG~S9j39mhqz5cw`*q_h5bkA^36&9df zamuq0mNGs>KbUVCPFCCF^I9rx86P5-^C4evJ1v>1tU+_qW**O`WUrh9v6fUWKIc4K zgWtQmuP|@l%gq0a%Oy8w`x_3N%ys+~FOGuX(>mwoKINPX1Dnfy7AmXNf~y*S{WbTR zX!{KY#vgrGU1Gl2_Wb3Az~5YtshMIO;yUGFD3JyKy|${pHK^*#c+2mR;Vjmni!&eh XV9sJKx;XQ3%Q;>3=;F)AEa&?RumY=< literal 0 HcmV?d00001 diff --git a/clients/unity/simple_sample/ProjectSettings/NavMeshLayers.asset b/clients/unity/simple_sample/ProjectSettings/NavMeshLayers.asset new file mode 100644 index 0000000000000000000000000000000000000000..a337582595ae45f01e57e70a0cf2aa79da5fc3a1 GIT binary patch literal 9196 zcmeI2_m>n!5XT!(F`$Audw^L%?#QNF5D}1|0%FGDZVwjr?r?VxJq)Zl=d74>&N=6t zbJpMe8$7GS;CHL5>3+{&?f3Skrsq>Ny&qz<@vU%j# zj%M|DUteE8+CP(Cv$GYmiq$1Ev)*E*swQXEqN1aH8rMT(s;<;f+RUHcRU6%+Iv37a zw6xe(n^tNsPAzAPt7;uOXh65kW2`+Tt7U3(PpMoRQR-?kr)wHzPSu~X^vF*&fZ}Sc zQtDc)y0T8Y96hIpW(L>oc2cF1^(y;UFF9X@W`-1$(sk$BC09!;i)NMU(wrWKv7u^P zl2uf@UY?#^&&?vyQSQ!as;#?PGergh;zCvGs;OdosWz{7xjobR01a_*%ty2FLH}H4 z=oM)7l8+4yv34ID5u|&TeFc-rCaiQ;G7l2Y+*w4tWkQH*V8)GCFyAu<0u?N(VUF<0k%*9@SxX^d8 zH$W*aMw{=8eIP63VgzF(7bA&@x!4!#$S&w6Y(`#5?=Tn5mM|xCq3@yvpcEHljEm8b z6>>3#F_Me1#N_WF^nEc7>c}p}3j}j90T37ZE+zt$;$p0Eu^(iGTrsKx`Vy>Q|fdq3g&k}YqF7|rQ`2eN3m}p!a1z8~%3mBtU z%3T~ybNM?6eRm!Mbu_C-ql;th$z_u8a#ABgwdk7$ZV&3v!!rG1QS|Tp|!m#-)I`(3f!;KuI!e z|9Ls2g=Ad87)i#J#KdG=1$AT@R|^D_aSb3Y^krNNP?8MWfL;e_AsN>*Mv`#@F)c}$Q76>Ne9Y9>@%Xk-{BpJ2?eGk$?GTvv5B;x~OVlqC2Ip*BjIRMol3_d0Zy+rs z<6Fi^GQJ}wCgXdkBg^bNqkjVHmpBH}?37|h)>GEcC+e;J>F*$V&F-!>Ey&8t mvPETj>{V~2Df1sCX7qIGhb;xo*->vDkcY(mA8Q%^-NQdYu#0X0 literal 0 HcmV?d00001 diff --git a/clients/unity/simple_sample/ProjectSettings/NetworkManager.asset b/clients/unity/simple_sample/ProjectSettings/NetworkManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..758bf35263393a15b533c87c7a01340269030023 GIT binary patch literal 4112 zcmeH_Sx&<+5I~2r@BQQy6>Z@UAr)0El~^K`ej!x3&7=gfRJIF(dvF*oN0@P9h@whx z0FUH&dm4LQ3{d+7sMi5tn|kU1P8!X|Y0!kPEX!7C{z2^q^=m4huSFteDB(gV1lrD+ z=U|RwjoN6C=ynU@@$KXZr}{GVu@{M%GMg6U-j2gW6WzthVs?cu7#Xm}=_oA3;~+`} zqeD!5DKr{zm3Ju0U@Yc@b(BJVmwFNdF)`QW>v7oAx$j6R-ij}mv|icgiwyIURQR5s zxj}0jHV=>IB9!0@E#Qb|o4iC}3C_|V4Z0A7QfXs)%K*Pf$sMP;KYlRv(SI>vGx4NQ zY_MjI?c~(YfmN)PW4nJ~?Ht=%f_a{nXMGW4{$I~Q;WSNr;5zmzd`Vh7?u8Lj7FL>+nfaPBr?mrZleArmp|Rtw*N)Q^Tv%}D!JJ7c^3I^QSnljeVKe!UsZya8L*mJ2NFsx_8n9cWowa`0L4%m^H<4$8z_apxH4NNpISgv9Cql|3s|hd%0wmXut*WTm zEibM(p%DI9=n6l!V>j@rgw+z4T2GW>JDe49NzA#9ARyAgl+ZvKtxMpbC!)d7Zq{8# zGT#^TA?e}cA_}}#N@72W?E%}4BjD|VhKNNt5Qng9Ln9K4#!83IHFvR!>toyA#R1D zzjRg7M2f923PKAVb_D52EfleFDTg$s2cXRjm#7|&WH>AVQ;I9wab4k#l386Wc0zj( z!v31&P`N`v95sWOia(mcEo&_mU-JSxwic+^V>0=8EAwUZI98M2^DRud)woXPj_ZQU zn;!U(aA)f=;g4Slp3F~)8PYgmB^t7XMCC+-N@IFl_*H>z9UV;OPcmZjPVCN!V&DZ~ zrD>~=`D6{8`jy7?=tOFrD(e(8bTSg9U44B7JC(z7@&-NV22rIR%o7VYUL5wTu46;3 zkNG2kUB%B8JC+A=Z6%|&ExWlDSUAmKq3T9W=#4uaPRX^sK$f~zqeEV>JujFS)qD$x z2GCiGiJ%;WacH|Sz3l1tLvgYhLDyai=6y18#(gj`0&a*LyD7%00pe$N=KWD05jDyG zER%LC5@VJ0wQ-EV!p>d-zP`WU#wF?GLaSC&W6?QFsPu0@7150AOyOLvkdrr57i#nx zjs{wuC&w@%bskqxGAV>Df7mbB&YsyYX!%tFpKk(#SFsPQKtuEdvkt>NC4BuPk@c}T z5r$BaYlq80b?s;?avdt+LWSy45WYR*iJ_?q4!Ti{<0E1&GU1^LWcV-wtrU?Ln~*rN zG|Tlxpdf9oGa*9(gBa47a{X#BPi8MMfq}rN?c|%y3bcN))An2#-;$LCRnKK zas4rWuslfx^eqM5MqbI!!N@6tm;U9^+g%?946?m`rD$x+6CpGP>}k-O8)+@OClvS%fiD>zWe3aENs+1$s$r_kUW(SW#+m~GZ*()ckxSjb~R zUHa@x!`cWWMZ^uQcY%ar7!V36+L5pnTK>p5xf9L@@KI zw3brH&*VvJ*Q@H(&ih7!qTvV~SKplHHK z*-^N8X$1!q;v)D89ngRnBlVZ9QKS!ZAP5~X?8AiK7cun04L70&hp#xZq*A3+w8Lsf z#WATALji&N6mV-oyj9i0syxF1Wk z8duB78>|-P&2yNI=!MkgQkHdnB3$Y=% zG=k6+USP@{aH(P5V%EYywiOlZ5SFT-Gb8vOGkn{E8;|*w7If_@822<_eC5_~YPu3H zdNPb@Xu#Rk3*}gt=S6iD!{ZW$pHVd}VFV19d}z8QjHU*sr!oZdG?;N#vW#wJ7Em-X z3K?!GMv(@mXEXudfr(Yjte|LO)nd4%Sj}m0y{znNGNtZu(>ybPqKVJ~!!1Q~@A*ir6DGIP5djSTFlYwp#s2hF2nw4Y(sKj;;EdM`@JQ7_Z9NE*2x46{mB6M{||7 zez1QGVDR1O%60i7odY};@-Zbil)K}%$KfML9MMA#ChK;Tl6$<=AQe;m_5^0q6kI-$ z*}>v5b(4FNeAq=U+iqZ>QEUEk39exKK8(xQQ$LxhqiAX^Phq%(h_0u8ss=X)GY(kW zZcGv_o)lL; zD+5L<*{Q-E@GPNds?BFJJBbs!Yx6l8MC!hd&z{R*DC!73Pd!fxVl|uk?D-ixc#EY> zxpBRMn=jZ}{%rmvWS2H^a)9&{78V!OXTyQk5qB^PfQ2(_Itwgy-(3mbQ z`gS7&e;tSCFB%zFv!=c+cQcf!Q-2R& zmgDnYW=GHGeHsMz46uGUE@qQ8g!eO)5);+{9EAO9TH8Q>e}F^Vl47=IKM0uRsDFsr z(Nq7h29bOZl2kJJL|z|ZXp>9t1k7^0KFaLqd3{WS= zq7cB!2o?946)24cxJ*;_T5`SOvl&RQl4t$f0fh=kg`MAP>57 z`i}6+kdGewyTk%*%;N|1RS74&sbPMN*)#QtUuSl(Y)swE zz9Ao)n8D_MO6r>oY9jS5z$7neBK2)%M^EZI8U(g2tiVA5@jr~Rz>F3rzss;nq&XX6 zVY}E17Ud2gtgHkrSVWWujlQSR%Ep9fflv8p(s6f2kwsKpCtSYIaLG&RqQf6(aP(a) zK=^blz%19we$MP970})Ef1yEi zxRpkV8D_s^cvJhoX9diD#q8*r{aS8-_PA`|S#t{f^nuGyA;; z(P7rv)lI4Wfhm}%{c#1<{>1F)sr^}l=uoTRsg9J@Ul`WJ>aQzc^*3fm&+6|QM2FQx z7&Pk;k2D%;NcsnZn~42$1;qZv?C6R8TZ70FE5i{87@1PH{fFt8*!_0}?Ec5>=-J(? zL10G*okk%D;$mGmdq(YriajSV0>*A`yF4MWmuV_7374_QNgZBs_Y}RIDlt{+SM9_dZ+X~JUGor!`d1KMpKxmzowUf(`a;j1VQ_9WDari zh;5BFHhMSb_TzX7hl43i3r?lLwj6|EB~gPjGnK{0OyJ2G2BG-C0pu`H-%z@|dIZCpzM&%llay$RqK;yAl$c?5v<9JJ1}DY>3Wtwj zcoVZ@0fR8Qa(bT~$LuIE!|ZqsLc@$tAx~f`CUPeN24Qp=$eqOOC^19sWDSCoD~b@0 zV!$qcr(-;Y>6qA^3K)dZWnlLpW=Dw`cBg3&Ms`s&AHWO`!>YAR&&2R_z#xn+1H&_z z9VKQMo~c0?7*<;J-wQa>O#IFV z48rI#@VkK7QDTPQg&G7-9X4&Ss7GN9a7Pg5Yj7xnrY09LJs?4ezZV?N^sw2&9HAss zZ?DemT+CJ5@&&Tpmx0!L zW=Dw`S{pQoEG;;h-=VgVDVV5j0t~|FGElpW*->JK+T|KVmRhAjCy!J|eg)GoaoY?S zgwbW-wuRYIVussR4Wfrz9Zu<`!{3!m!^G_>z#xn+1GlT09VKSCh zlMiPj+}WXyD9`jv3=4ok7+nU2MP^5d8HObd0)rj;%JDO#XA zDIrg<HqbsNH$aXM0O3YN=myi%kp(D9yjJo z7gvn=(!~>+e41lW!{F>EBawXp)SYAolI1AcdcwfBXg6&-N$A3w8-^e|Ir>iN|Lh<$ z1sH@8w5_k3UEB^}F?G)(uH%Tdw4&NhXWwae286d+I@iNPd`?$RPv-{Agp}Y=?w%st zs6mjQ)r1AJZ(`-oIYD%OcNew!adDtDG9TPYa>ItrCFQo~at$r0$^HC(?h^x(L)bKs=aYEoOm^a=I z_jqX%&MFh=R*(;a3+Ai%pQ>te$FdHEXORngv0^&1@dxgE5;|bDW!(waE-;$d#9wTy zm{49tNoud62U12JNkXiY+gDpw=eh@M>r!I!c*t~u#yUlO9sFBv`p=%I+P6-gG~W;8 zgdZ!Zf2^p^m2UELUvzruV?Ae6_p<{b`)mdIKOTO%1^@s6 literal 0 HcmV?d00001 diff --git a/clients/unity/simple_sample/ProjectSettings/QualitySettings.asset b/clients/unity/simple_sample/ProjectSettings/QualitySettings.asset new file mode 100644 index 0000000000000000000000000000000000000000..4a262b3a2bedc361a8b44f509615082850ea9b94 GIT binary patch literal 4716 zcmeHL-Etc>6jmtE0tMRgQ(FE4wB_fbPz=4Kv6H4@CNnX0OMBN*cI8-%cIDA(L)@!e z_JS8ESA7&7pnau=^Brkz*=+Ivj5V{?&wl4SN1vqio)zNsYeHNwLWnnnI7gKbKV83Z z{paBg@$%^CXodRU)Ad^|jrNm)@?MvFmFUSz3A%p-0~BHr;!ucJsk;Ab={rA);?d6T zA1d=(I#-)Uk`-=(5e0SA)}<%(dhMJleRRd(R~QVoV65?!k}gDp(KlNV(08m4l-bsMBfoBI>O+OM60C@9z*Zxf z+dsp4ojnnAS5?;3UfYrh-#!uCcNY7h0l#x1cwJVR%vA{D-4^K3SlNWSp(`)TEUaDF z#q(>2S?wBC<_{Dk2(0H@SON6vz}HTt8xd=Y0)G{V>6<&|X5p)b!zcYQnP;ea)ZVFIo_V9MjXTuUsR*h8oJ+OdphZrhS>%iNkg^z9P(2 z4Z^gkaV6!6?XlGH`2tT@Q$%EmdJVO!JTK0*1rXdWF3#69)`YXN)*j9`2@kL+^MZXF z2B%EuVsBO|vt`a3?7IXKn_M-{(J>?j{^xKl%Tj@*0!sy!3M>^^DzH@G|E>UXX5_HQ zQ8($`T+vHhT4wJ_C;~@f|LdYHMqDFe`dDNx_I|&D=(fuXPzd9LtF!0 zjE$PTEW)mh3u9^NbUL@tUyFl?>5jEIeB)|3LM*GjP=|3gAwb|fWS-c;hZ50KlCs`m zjSnZ#FXaq8fAtzIruU|N{{+4W0NqE^11xke2f}=F=Z^xQ(v~14^xPX>3VrfP1(e dsNGpxYi`5m!`{xr&dndVkG0eN5!+!t{{k3Ffdl{m literal 0 HcmV?d00001 diff --git a/clients/unity/simple_sample/ProjectSettings/TagManager.asset b/clients/unity/simple_sample/ProjectSettings/TagManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..1e809a75d051476074624f88d4aa6bff655b6d02 GIT binary patch literal 5352 zcmc(hXHyeV6oxPME-3Z}_KGB-S_4)TD_}3I5JD7#CIJOo?EF-Jh4GwwvNI>idnWtM zJG1QO-Y4&UxC8I3bIq5WYyRV$TS@m(y1S0HSX<{r%>6BuN)7b+CSAip`bLlq(y5&5 z5ArETOC@G`Fyo5OwbE@iHCC9;xk8Z6d&aNPyuUBVy)Tyw=A8WGoJHmJkm1im1KC0% z?(&)Wlv_fd7t_VVGb`jdU&v*$X*V7e0>2k?Ji;8lSMRm7yv}P4SDiz9Eu%Fao+(H6EYZ0*b}GSfj!%G2W=2*anq@#Wn&0 ziY2^Qv%)R0O%cR4s~jx01rSiI!;5WIxFxnNg4lMIgT;0L0*ZBdv7HLH#CAmx+pTi2 z*d9PYu`VyxqHs&Bm6&>eV|!H&7TX61DAw)8_AA^HI}kzapvu8whX7F)8_83BNs0A% ztHX-rw&!E1F0mst7amtb5|`LfVt9lcKUbF6F`lBKiCU{(Z*^Qy&stU|RF-AcrgC^+ z9+g%nWwMS{Od7vk!IoBxnDAG$wBjlUYb5|tdss2)`wj(LTAdNJx>OF<>IMYRlD6+r zu%*=-LF<&t!CI#Q0kov+&nVc^IvYXjoXWvk=K%qu2olAgb)U`vZ$HS20!RykPf3Lt=%v^>4z`Qf9AvVC=J4G`f^itkB$TGwceN67JW zWkFo$DH@spTGH`@!g|;`ts5%L(&Be>9(vPCty=x{USizRo2r=O)SX%c~4%WI4h}zSNOUpk{u%-1dg4QFIgS8$50%%FgKT)uy z^)!OkGnIq2o&y4CNz0Ea*wPA!;jR3Y#Q%veR1Ve}0|d~LmLFHJrIjM4p4NoQ!CGlR z04-_xNd;S4nFv}hRSwpA1qh%eEkC7TOY3z6t*pwyTGN04TGH}w6l`g|ji8lNIan(X z2%se`Ur?~6H4{N=R^?!=cYpv|((>;WY-!C!(3)2{SnC5IfR?oUM+IA2pCV{|RykPf z3m|H>64LTT1zTEQiQ%pMmBhXEP32&%?|=YW((*qPY-#-@rk>U>m4mf@1A?c*WPV?UF&T6z~dJ&?CC?j#08ynrwR z!_2V%JoW=}b)Z%QP%+U2pwnnJx|=4RaUADNT{1rRv~+|ow(@|H2<2N!a)3l+MdOQ! zAGKT1?sU16t7z=4rLDv^Odc~K#Vp^bKt!;;vs_!WC5+@g5$9>7u|!x-^Hl7Jv!{>R z8Y&f>zS|0^@<*F?Y5r^_luQ=Txn!RUvO2qth|vGZ*_Z$mU;<2l2`~XBzyz286JP>N TfC>CFf$HPhyWeho;4*jt@+UG+ literal 0 HcmV?d00001 diff --git a/library/xml b/library/xml index 24d29ef54..42736fe49 160000 --- a/library/xml +++ b/library/xml @@ -1 +1 @@ -Subproject commit 24d29ef54a4f60efb26fd9608c5cb11dfcd4d940 +Subproject commit 42736fe494e7edeb884caa45a8669996a0eafb11 diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index ee4bd9390..b8469c4e1 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -13,6 +13,7 @@ endif() OPTION(BUILD_ISOWORLD "Build isoworld (needs a checkout first)." OFF) if(BUILD_ISOWORLD) + DFHACK_PLUGIN(isoworldremote isoworldremote.cpp PROTOBUFS isoworldremote) add_subdirectory (isoworld) IF(UNIX) if (APPLE) @@ -148,7 +149,6 @@ if (BUILD_SUPPORTED) DFHACK_PLUGIN(trueTransformation trueTransformation.cpp) DFHACK_PLUGIN(infiniteSky infiniteSky.cpp) DFHACK_PLUGIN(createitem createitem.cpp) - DFHACK_PLUGIN(isoworldremote isoworldremote.cpp PROTOBUFS isoworldremote) DFHACK_PLUGIN(buildingplan buildingplan.cpp) DFHACK_PLUGIN(resume resume.cpp) DFHACK_PLUGIN(dwarfmonitor dwarfmonitor.cpp) diff --git a/plugins/isoworld b/plugins/isoworld index aa3b1bd51..29fad1ef8 160000 --- a/plugins/isoworld +++ b/plugins/isoworld @@ -1 +1 @@ -Subproject commit aa3b1bd51f269c07b3235392fd7ed21fe9171f3f +Subproject commit 29fad1ef8e7e2aceb2e68c93a3993933168fe885 diff --git a/plugins/stonesense b/plugins/stonesense index 0d41614ff..dbcc80ff3 160000 --- a/plugins/stonesense +++ b/plugins/stonesense @@ -1 +1 @@ -Subproject commit 0d41614ff3dae9245e786ad667b0e463fe0dea3e +Subproject commit dbcc80ff364978e9e5fec13e425b0af84c403f10