diff --git a/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore.meta b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore.meta
new file mode 100644
index 00000000..188de8b8
--- /dev/null
+++ b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: bd9f4941b19037f4a88460b874a8a3e1
+folderAsset: yes
+timeCreated: 1538755212
+licenseType: Store
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common.meta b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common.meta
new file mode 100644
index 00000000..443aab92
--- /dev/null
+++ b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 0aa2a0733358abb4c90587d3628d0ff9
+folderAsset: yes
+timeCreated: 1538657332
+licenseType: Store
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design.meta b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design.meta
new file mode 100644
index 00000000..071c2eb6
--- /dev/null
+++ b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: d4ff0b9c7cca6004d96e43fd71a2ec44
+folderAsset: yes
+DefaultImporter:
+ userData:
diff --git a/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/DesignAttributes.cs b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/DesignAttributes.cs
new file mode 100644
index 00000000..83942883
--- /dev/null
+++ b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/DesignAttributes.cs
@@ -0,0 +1,112 @@
+using System;
+
+namespace ParadoxNotion.Design
+{
+
+ ///Marker attribute to include generic type or a type's generic methods in the AOT spoof generation
+ [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Interface | AttributeTargets.Delegate)]
+ public class SpoofAOTAttribute : Attribute { }
+
+ ///To exclude a type from being listed. Abstract classes are not listed anyway.
+ [AttributeUsage(AttributeTargets.Class)]
+ public class DoNotListAttribute : Attribute { }
+
+ ///When a type should for some reason be marked as protected so to always have one instance active.
+ [AttributeUsage(AttributeTargets.Class)]
+ public class ProtectedSingletonAttribute : Attribute { }
+
+ ///Use for execution prioratizing when it matters.
+ [AttributeUsage(AttributeTargets.Class)]
+ public class ExecutionPriorityAttribute : Attribute
+ {
+ readonly public int priority;
+ public ExecutionPriorityAttribute(int priority) {
+ this.priority = priority;
+ }
+ }
+
+ ///Marks a generic type to be exposed at it's base definition rather than wrapping all preferred types around it.
+ [AttributeUsage(AttributeTargets.Class)]
+ public class ExposeAsDefinitionAttribute : Attribute { }
+
+ ///Marks a field to be exposed for inspection even if private (within the context of custom inspector).
+ ///In custom inspector, private fields even if with [SerializedField] are not exposed by default.
+ [AttributeUsage(AttributeTargets.Field)]
+ public class ExposeFieldAttribute : Attribute { }
+
+ ///Options attribute for list inspector editors
+ [AttributeUsage(AttributeTargets.Field)]
+ public class ListInspectorOptionAttribute : Attribute
+ {
+ readonly public bool allowAdd;
+ readonly public bool allowRemove;
+ readonly public bool showFoldout;
+ public ListInspectorOptionAttribute(bool allowAdd, bool allowRemove, bool alwaysExpanded) {
+ this.allowAdd = allowAdd;
+ this.allowRemove = allowRemove;
+ this.showFoldout = alwaysExpanded;
+ }
+ }
+
+ ///----------------------------------------------------------------------------------------------
+
+ ///Use for friendly names and optional priority in relation to naming only
+ [AttributeUsage(AttributeTargets.All)]
+ public class NameAttribute : Attribute
+ {
+ readonly public string name;
+ readonly public int priority;
+ public NameAttribute(string name, int priority = 0) {
+ this.name = name;
+ this.priority = priority;
+ }
+ }
+
+ ///Use for categorization
+ [AttributeUsage(AttributeTargets.All)]
+ public class CategoryAttribute : Attribute
+ {
+ readonly public string category;
+ public CategoryAttribute(string category) {
+ this.category = category;
+ }
+ }
+
+ ///Use to give a description
+ [AttributeUsage(AttributeTargets.All)]
+ public class DescriptionAttribute : Attribute
+ {
+ readonly public string description;
+ public DescriptionAttribute(string description) {
+ this.description = description;
+ }
+ }
+
+ ///When a type is associated with an icon
+ [AttributeUsage(AttributeTargets.Class)]
+ public class IconAttribute : Attribute
+ {
+ readonly public string iconName;
+ readonly public bool fixedColor;
+ readonly public string runtimeIconTypeCallback;
+ readonly public Type fromType;
+ public IconAttribute(string iconName = "", bool fixedColor = false, string runtimeIconTypeCallback = "") {
+ this.iconName = iconName;
+ this.fixedColor = fixedColor;
+ this.runtimeIconTypeCallback = runtimeIconTypeCallback;
+ }
+ public IconAttribute(Type fromType) {
+ this.fromType = fromType;
+ }
+ }
+
+ ///When a type is associated with a color (provide in hex string without "#")
+ [AttributeUsage(AttributeTargets.Class)]
+ public class ColorAttribute : Attribute
+ {
+ readonly public string hexColor;
+ public ColorAttribute(string hexColor) {
+ this.hexColor = hexColor;
+ }
+ }
+}
\ No newline at end of file
diff --git a/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/DesignAttributes.cs.meta b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/DesignAttributes.cs.meta
new file mode 100644
index 00000000..b33bb15a
--- /dev/null
+++ b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/DesignAttributes.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a6a1b03fabc29f2479f8b63c5ae861f2
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
diff --git a/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/DrawerAttributes.cs b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/DrawerAttributes.cs
new file mode 100644
index 00000000..e103603a
--- /dev/null
+++ b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/DrawerAttributes.cs
@@ -0,0 +1,155 @@
+using System;
+
+namespace ParadoxNotion.Design
+{
+ ///Derive this to create custom attributes to be drawn with an AttributeDrawer.
+ [AttributeUsage(AttributeTargets.Field)]
+ abstract public class DrawerAttribute : Attribute
+ {
+ virtual public int priority { get { return int.MaxValue; } }
+ virtual public bool isDecorator { get { return false; } }
+ }
+
+ ///----------------------------------------------------------------------------------------------
+
+ ///Will dim control for bool, int, float, string if its default value (or empty for string)
+ [AttributeUsage(AttributeTargets.Field)]
+ public class HeaderAttribute : DrawerAttribute
+ {
+ readonly public string title;
+ public override bool isDecorator { get { return true; } }
+ public HeaderAttribute(string title) {
+ this.title = title;
+ }
+ }
+
+ ///Will dim control for bool, int, float, string if its default value (or empty for string)
+ [AttributeUsage(AttributeTargets.Field)]
+ public class DimIfDefaultAttribute : DrawerAttribute
+ {
+ public override bool isDecorator { get { return true; } }
+ public override int priority { get { return 0; } }
+ }
+
+ ///Use on top of any field to show it only if the provided field is equal to the provided check value
+ [AttributeUsage(AttributeTargets.Field)]
+ public class ShowIfAttribute : DrawerAttribute
+ {
+ readonly public string fieldName;
+ readonly public int checkValue;
+ public override bool isDecorator { get { return true; } }
+ public override int priority { get { return 1; } }
+ public ShowIfAttribute(string fieldName, int checkValue) {
+ this.fieldName = fieldName;
+ this.checkValue = checkValue;
+ }
+ }
+
+ ///Helper attribute. Denotes that the field is required not to be null or string.empty
+ [AttributeUsage(AttributeTargets.Field)]
+ public class RequiredFieldAttribute : DrawerAttribute
+ {
+ public override bool isDecorator { get { return false; } }
+ public override int priority { get { return 2; } }
+ }
+
+ ///Show a button above field
+ [AttributeUsage(AttributeTargets.Field)]
+ public class ShowButtonAttribute : DrawerAttribute
+ {
+ readonly public string buttonTitle;
+ readonly public string methodName;
+ public override bool isDecorator { get { return true; } }
+ public override int priority { get { return 3; } }
+ public ShowButtonAttribute(string buttonTitle, string methodnameCallback) {
+ this.buttonTitle = buttonTitle;
+ this.methodName = methodnameCallback;
+ }
+ }
+
+ ///Will invoke a callback method when the field is changed
+ [AttributeUsage(AttributeTargets.Field)]
+ public class CallbackAttribute : DrawerAttribute
+ {
+ readonly public string methodName;
+ public override bool isDecorator { get { return true; } }
+ public override int priority { get { return 4; } }
+ public CallbackAttribute(string methodName) {
+ this.methodName = methodName;
+ }
+ }
+
+ ///----------------------------------------------------------------------------------------------
+
+ ///Will clamp float or int value to min
+ [AttributeUsage(AttributeTargets.Field)]
+ public class MinValueAttribute : DrawerAttribute
+ {
+ public override int priority { get { return 5; } }
+ readonly public float min;
+ public MinValueAttribute(float min) {
+ this.min = min;
+ }
+ public MinValueAttribute(int min) {
+ this.min = min;
+ }
+ }
+
+ ///----------------------------------------------------------------------------------------------
+
+ ///Makes float, int or string field show in a delayed control
+ [AttributeUsage(AttributeTargets.Field)]
+ public class DelayedFieldAttribute : DrawerAttribute { }
+
+ ///Makes the int field show as layerfield
+ [AttributeUsage(AttributeTargets.Field)]
+ public class LayerFieldAttribute : DrawerAttribute { }
+
+ ///Makes the string field show as tagfield
+ [AttributeUsage(AttributeTargets.Field)]
+ public class TagFieldAttribute : DrawerAttribute { }
+
+ ///Makes the string field show as text field with specified number of lines
+ [AttributeUsage(AttributeTargets.Field)]
+ public class TextAreaFieldAttribute : DrawerAttribute
+ {
+ readonly public int numberOfLines;
+ public TextAreaFieldAttribute(int numberOfLines) {
+ this.numberOfLines = numberOfLines;
+ }
+ }
+
+ ///Use on top of any type of field to restict values to the provided ones through a popup by providing a params array of options.
+ [AttributeUsage(AttributeTargets.Field)]
+ public class PopupFieldAttribute : DrawerAttribute
+ {
+ readonly public object[] options;
+ public PopupFieldAttribute(params object[] options) {
+ this.options = options;
+ }
+ }
+
+ ///Makes the float or integer field show as slider
+ [AttributeUsage(AttributeTargets.Field)]
+ public class SliderFieldAttribute : DrawerAttribute
+ {
+ readonly public float min;
+ readonly public float max;
+ public SliderFieldAttribute(float min, float max) {
+ this.min = min;
+ this.max = max;
+ }
+ public SliderFieldAttribute(int min, int max) {
+ this.min = min;
+ this.max = max;
+ }
+ }
+
+ ///Forces the field to show as a Unity Object field. Usefull for interface fields
+ [AttributeUsage(AttributeTargets.Field)]
+ public class ForceObjectFieldAttribute : DrawerAttribute { }
+
+ ///Can be used on an interface type field to popup select a concrete implementation.
+ [AttributeUsage(AttributeTargets.Field)]
+ public class ReferenceFieldAttribute : DrawerAttribute { }
+}
\ No newline at end of file
diff --git a/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/DrawerAttributes.cs.meta b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/DrawerAttributes.cs.meta
new file mode 100644
index 00000000..cfa4ace4
--- /dev/null
+++ b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/DrawerAttributes.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 3f408bebe1629994794006aa2e272ae5
+timeCreated: 1513958511
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor.meta b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor.meta
new file mode 100644
index 00000000..1af88f66
--- /dev/null
+++ b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: be3277af62533fc4c8d68065c61db942
+folderAsset: yes
+timeCreated: 1538665292
+licenseType: Store
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/DefinesManager.cs b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/DefinesManager.cs
new file mode 100644
index 00000000..5ec6d4b9
--- /dev/null
+++ b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/DefinesManager.cs
@@ -0,0 +1,55 @@
+#if UNITY_EDITOR
+
+using System.Linq;
+using UnityEditor;
+
+namespace ParadoxNotion.Design
+{
+
+ ///Utility for handling player setting defines
+ public static class DefinesManager
+ {
+
+ ///Is define..defined in player settings for current target?
+ public static bool HasDefineForCurrentTargetGroup(string define) {
+ var currentTarget = BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget);
+ var defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(currentTarget).Split(';');
+ return defines.Contains(define);
+ }
+
+ ///Set define for current target
+ public static void SetDefineActiveForCurrentTargetGroup(string define, bool enable) {
+ var currentTarget = BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget);
+ SetDefineActiveForTargetGroup(currentTarget, define, enable);
+ }
+
+ ///Set define for target
+ public static void SetDefineActiveForTargetGroup(BuildTargetGroup target, string define, bool enable) {
+ var defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(target).Split(';').ToList();
+ if ( enable == true && !defines.Contains(define) ) {
+ defines.Add(define);
+ }
+ if ( enable == false ) {
+ defines.Remove(define);
+ }
+ PlayerSettings.SetScriptingDefineSymbolsForGroup(target, string.Join(";", defines));
+ }
+
+ ///Toggle define in player settings for all targets
+ public static void SetDefineActiveForAllTargetGroups(string define, bool enable) {
+ foreach ( BuildTargetGroup target in System.Enum.GetValues(typeof(BuildTargetGroup)) ) {
+ if ( target == BuildTargetGroup.Unknown ) {
+ continue;
+ }
+
+ if ( typeof(BuildTargetGroup).GetField(target.ToString()).IsDefined(typeof(System.ObsoleteAttribute), true) ) {
+ continue;
+ }
+
+ SetDefineActiveForTargetGroup(target, define, enable);
+ }
+ }
+ }
+}
+
+#endif
\ No newline at end of file
diff --git a/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/DefinesManager.cs.meta b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/DefinesManager.cs.meta
new file mode 100644
index 00000000..a7022ebc
--- /dev/null
+++ b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/DefinesManager.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 133797bc4f2687b42a8a5f1baa7ba63f
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources.meta b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources.meta
new file mode 100644
index 00000000..0a40ebd5
--- /dev/null
+++ b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 781130fb96acf5f4384bd574f6cd9704
+folderAsset: yes
+timeCreated: 1538665299
+licenseType: Store
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/Community.png b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/Community.png
new file mode 100644
index 00000000..6d997a13
Binary files /dev/null and b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/Community.png differ
diff --git a/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/Community.png.meta b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/Community.png.meta
new file mode 100644
index 00000000..76302afe
--- /dev/null
+++ b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/Community.png.meta
@@ -0,0 +1,104 @@
+fileFormatVersion: 2
+guid: 17c9c4eff9e8ef144ba8beb631fefc75
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: 1
+ mipBias: -100
+ wrapU: 1
+ wrapV: 1
+ wrapW: -1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 2
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/Empty.png b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/Empty.png
new file mode 100644
index 00000000..a87a808b
Binary files /dev/null and b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/Empty.png differ
diff --git a/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/Empty.png.meta b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/Empty.png.meta
new file mode 100644
index 00000000..b00d5af9
--- /dev/null
+++ b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/Empty.png.meta
@@ -0,0 +1,56 @@
+fileFormatVersion: 2
+guid: ae3fd876b2e88a94e9391b1ad6bbf549
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 1
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ cubemapConvolution: 0
+ cubemapConvolutionSteps: 7
+ cubemapConvolutionExponent: 1.5
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 1024
+ textureSettings:
+ filterMode: 1
+ aniso: 1
+ mipBias: -1
+ wrapMode: 1
+ nPOTScale: 0
+ lightmap: 0
+ rGBM: 0
+ compressionQuality: 50
+ allowsAlphaSplitting: 0
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 2
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ outline: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/FlowCanvasHeader.png b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/FlowCanvasHeader.png
new file mode 100644
index 00000000..f75083e4
Binary files /dev/null and b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/FlowCanvasHeader.png differ
diff --git a/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/FlowCanvasHeader.png.meta b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/FlowCanvasHeader.png.meta
new file mode 100644
index 00000000..82e4a8a5
--- /dev/null
+++ b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/FlowCanvasHeader.png.meta
@@ -0,0 +1,58 @@
+fileFormatVersion: 2
+guid: d0aaf9b1e5a05024d9fe4e3215b9f73f
+timeCreated: 1464506051
+licenseType: Store
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 1
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ cubemapConvolution: 0
+ cubemapConvolutionSteps: 7
+ cubemapConvolutionExponent: 1.5
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: 0
+ aniso: 1
+ mipBias: -1
+ wrapMode: 1
+ nPOTScale: 0
+ lightmap: 0
+ rGBM: 0
+ compressionQuality: 50
+ allowsAlphaSplitting: 0
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 2
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ outline: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/Manual.png b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/Manual.png
new file mode 100644
index 00000000..665c8ca3
Binary files /dev/null and b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/Manual.png differ
diff --git a/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/Manual.png.meta b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/Manual.png.meta
new file mode 100644
index 00000000..b165af4b
--- /dev/null
+++ b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/Manual.png.meta
@@ -0,0 +1,103 @@
+fileFormatVersion: 2
+guid: 7db3c001bdf39ca46ab6bb3bbfe58d00
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 10
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: -100
+ wrapU: 1
+ wrapV: 1
+ wrapW: -1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 2
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/NodeCanvasHeader.png b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/NodeCanvasHeader.png
new file mode 100644
index 00000000..c7022b7c
Binary files /dev/null and b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/NodeCanvasHeader.png differ
diff --git a/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/NodeCanvasHeader.png.meta b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/NodeCanvasHeader.png.meta
new file mode 100644
index 00000000..fbba04e9
--- /dev/null
+++ b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/NodeCanvasHeader.png.meta
@@ -0,0 +1,104 @@
+fileFormatVersion: 2
+guid: f0b6a905426516149a73490df47637cc
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 0
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 2
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/Resources.png b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/Resources.png
new file mode 100644
index 00000000..6c8af280
Binary files /dev/null and b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/Resources.png differ
diff --git a/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/Resources.png.meta b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/Resources.png.meta
new file mode 100644
index 00000000..d51fad86
--- /dev/null
+++ b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/Resources.png.meta
@@ -0,0 +1,103 @@
+fileFormatVersion: 2
+guid: 18c197a350b700d4f96e039071ffd2b6
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 10
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: -100
+ wrapU: 1
+ wrapV: 1
+ wrapW: -1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 2
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/Support.png b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/Support.png
new file mode 100644
index 00000000..bf86376e
Binary files /dev/null and b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/Support.png differ
diff --git a/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/Support.png.meta b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/Support.png.meta
new file mode 100644
index 00000000..9deb97a1
--- /dev/null
+++ b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/Editor/Resources/Support.png.meta
@@ -0,0 +1,103 @@
+fileFormatVersion: 2
+guid: 70b53005eb048f14ab18fcbb26bf6774
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 10
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: -100
+ wrapU: 1
+ wrapV: 1
+ wrapW: -1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 2
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/PartialEditor.meta b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/PartialEditor.meta
new file mode 100644
index 00000000..61e7a0c4
--- /dev/null
+++ b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/PartialEditor.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: 3774cc9cbacfc4a41b0fb7fa91f7950f
+folderAsset: yes
+DefaultImporter:
+ userData:
diff --git a/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/PartialEditor/AOTClassesGenerator.cs b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/PartialEditor/AOTClassesGenerator.cs
new file mode 100644
index 00000000..2981d708
--- /dev/null
+++ b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/PartialEditor/AOTClassesGenerator.cs
@@ -0,0 +1,242 @@
+#if UNITY_EDITOR
+
+using System;
+using System.IO;
+using System.Text;
+using System.Linq;
+using UnityEngine;
+using System.Collections.Generic;
+using System.Reflection;
+
+namespace ParadoxNotion.Design
+{
+
+ public static class AOTClassesGenerator
+ {
+
+ //always spoof those for shake of convenience
+ static readonly List defaultSpoofTypes = new List
+ {
+ typeof(bool),
+ typeof(float),
+ typeof(int),
+ typeof(Vector2),
+ typeof(Vector3),
+ typeof(Vector4),
+ typeof(Quaternion),
+ typeof(Keyframe),
+ typeof(Bounds),
+ typeof(Color),
+ typeof(Rect),
+ typeof(ContactPoint),
+ typeof(ContactPoint2D),
+ typeof(Collision),
+ typeof(Collision2D),
+ typeof(RaycastHit),
+ typeof(RaycastHit2D),
+ typeof(Ray),
+ typeof(Space),
+ };
+
+ ///Custom generic types to spoof were we cant use [SpoofAOT]
+ static readonly List customGenericSpoof = new List
+ {
+ typeof(System.Action<>),
+ typeof(System.Func<>),
+ typeof(UnityEngine.Events.UnityAction<>),
+ typeof(IList<>),
+ typeof(List<>),
+ typeof(Nullable<>),
+ };
+
+ ///Generates AOT classes file out of preferred types list
+ public static void GenerateAOTClasses(string path, Type[] targetTypes) {
+
+ if ( string.IsNullOrEmpty(path) ) {
+ return;
+ }
+
+ var spoofTypes = defaultSpoofTypes.Where(t => t.IsValueType).ToList();
+ spoofTypes.AddRange(targetTypes.Where(t => t.IsValueType && !spoofTypes.Contains(t)));
+ spoofTypes = spoofTypes.Distinct().ToList();
+ var types = ReflectionTools.GetAllTypes(true).Where(t => t.RTIsDefined(typeof(SpoofAOTAttribute), true)).Distinct();
+
+ var nTypes = 0;
+ var nMethods = 0;
+
+ var sb = new StringBuilder();
+
+ sb.AppendLine("#pragma warning disable 0219, 0168, 0612");
+ sb.AppendLine("namespace ParadoxNotion.Internal{");
+ sb.AppendLine();
+ sb.AppendLine("\t//Auto generated classes for AOT support, where using undeclared generic classes with value types is limited. These are not actualy used but rather just declared for the compiler");
+ sb.AppendLine("\tpartial class AOTDummy{");
+ sb.AppendLine();
+ sb.AppendLine("\t\tobject o = null;");
+
+ sb.AppendLine("\t\t///----------------------------------------------------------------------------------------------");
+
+ //Generic Types
+ foreach ( var type in types ) {
+ if ( !type.IsAbstract && type.IsGenericTypeDefinition && type.RTGetGenericArguments().Length == 1 ) {
+
+ var constrains = type.RTGetGenericArguments()[0].GetGenericParameterConstraints();
+
+ if ( constrains.Length == 0 || constrains[0].IsValueType || constrains[0] == typeof(Enum) ) {
+
+ if ( typeof(Delegate).IsAssignableFrom(type) ) {
+ nTypes++;
+ sb.AppendLine(string.Format("\t\tvoid {0}()", type.FriendlyName(true).Replace(".", "_").Replace("", "_Delegate")) + "{");
+ foreach ( var spoofType in spoofTypes ) {
+ var a = type.FriendlyName(true).Replace("", "<" + spoofType.FullName + ">").Replace("+", ".");
+ var b = "_" + type.FriendlyName(true).Replace(".", "_").Replace("", "_" + spoofType.FullName.Replace(".", "_").Replace("+", "_"));
+ sb.AppendLine(string.Format("\t\t\t{0} {1};", a, b));
+ }
+ sb.AppendLine("\t\t}");
+
+ } else {
+
+ foreach ( var spoofType in spoofTypes ) {
+ if ( constrains.Length == 1 && constrains[0] == typeof(Enum) && !spoofType.IsEnum ) { continue; }
+ nTypes++;
+ var a = type.FriendlyName(true).Replace("", "<" + spoofType.FullName + ">").Replace("+", ".");
+ var b = type.FriendlyName(true).Replace(".", "_").Replace("", "_" + spoofType.FullName.Replace(".", "_").Replace("+", "_"));
+ sb.AppendLine(string.Format("\t\t{0} {1};", a, b));
+ }
+ }
+
+ sb.AppendLine();
+ }
+ }
+ }
+
+ sb.AppendLine("\t\t///----------------------------------------------------------------------------------------------");
+
+ //Generic Methods
+ foreach ( var type in types ) {
+ var index = 0;
+ foreach ( var method in type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.DeclaredOnly) ) {
+
+ if ( method.IsObsolete() ) { continue; }
+
+ if ( method.IsGenericMethodDefinition && method.RTGetGenericArguments().Length == 1 ) {
+
+ var constrains = method.RTGetGenericArguments()[0].GetGenericParameterConstraints();
+
+ if ( constrains.Length == 0 || constrains[0].IsValueType ) {
+
+ index++;
+
+ var decType = method.DeclaringType;
+ var varName = "_" + decType.FullName.Replace(".", "_");
+ sb.AppendLine(string.Format("\t\tvoid {0}_{1}_{2}()", decType.FullName.Replace(".", "_"), method.Name, index) + " {");
+ if ( !method.IsStatic ) {
+ sb.AppendLine(string.Format("\t\t\t{0} {1} = default({2});", decType.FullName, varName, decType.FullName));
+ }
+
+ foreach ( var spoofType in spoofTypes ) {
+ nMethods++;
+ var a = method.IsStatic ? decType.FullName : varName;
+ var b = method.Name;
+ var c = spoofType.FullName.Replace("+", ".");
+ var paramsString = "";
+ var parameters = method.GetParameters();
+ for ( var i = 0; i < parameters.Length; i++ ) {
+ var parameter = parameters[i];
+ var toString = parameter.ParameterType.FullName;
+ if ( parameter.ParameterType.IsGenericParameter ) {
+ toString = spoofType.FullName;
+ }
+ if ( parameter.ParameterType.IsGenericType ) {
+ toString = parameter.ParameterType.FriendlyName(true).Replace("", "<" + spoofType.FullName + ">");
+ toString = toString.Replace("[[T]]", "");
+ }
+ toString = toString.Replace("+", ".");
+ paramsString += string.Format("({0})o", toString);
+ if ( i < parameters.Length - 1 ) {
+ paramsString += ", ";
+ }
+ }
+ var d = paramsString;
+ sb.AppendLine(string.Format("\t\t\t{0}.{1}<{2}>( {3} );", a, b, c, d));
+ }
+
+ sb.AppendLine("\t\t}");
+ sb.AppendLine();
+ }
+ }
+ }
+ }
+
+ sb.AppendLine("\t\t///----------------------------------------------------------------------------------------------");
+
+ //custom stuff
+ sb.AppendLine("\t\tvoid CustomSpoof(){");
+ foreach ( var spoofType in spoofTypes ) {
+ var sName = spoofType.FullName.Replace("+", ".");
+ var fName = spoofType.FullName.Replace(".", "_").Replace("+", "_");
+ foreach ( var genericType in customGenericSpoof ) {
+ nTypes++;
+ var a = genericType.FriendlyName(true).Replace("", "<" + sName + ">");
+ var b = genericType.FriendlyName(true).Replace(".", "_").Replace("", "_") + fName;
+ sb.AppendLine(string.Format("\t\t\t{0} {1};", a, b));
+ }
+ nTypes++;
+ sb.AppendLine(string.Format("\t\t\tSystem.Collections.Generic.IDictionary IDict_{1};", sName, fName));
+ sb.AppendLine(string.Format("\t\t\tSystem.Collections.Generic.Dictionary Dict_{1};", sName, fName));
+ sb.AppendLine("\t\t\t///------");
+ }
+ sb.AppendLine("\t\t}");
+ sb.AppendLine("\t}");
+ sb.AppendLine("}");
+ sb.AppendLine();
+ sb.AppendLine(string.Format("//{0} Types | {1} Methods spoofed", nTypes, nMethods));
+ sb.AppendLine("#pragma warning restore 0219, 0168, 0612");
+
+ File.WriteAllText(path, sb.ToString());
+ }
+
+ ///Generates a link.xml file out of preferred types list
+ public static void GenerateLinkXML(string path, Type[] targetTypes) {
+
+ if ( string.IsNullOrEmpty(path) ) {
+ return;
+ }
+
+ var spoofTypes = defaultSpoofTypes;
+ spoofTypes.AddRange(targetTypes);
+ var pairs = new Dictionary>();
+ foreach ( var type in spoofTypes ) {
+ var asmName = type.Assembly.GetName().Name;
+ if ( !pairs.ContainsKey(asmName) ) {
+ pairs[asmName] = new List();
+ }
+ pairs[asmName].Add(type);
+ }
+
+ var sb = new StringBuilder();
+ sb.AppendLine("");
+
+ sb.AppendLine("\t");
+ sb.AppendLine("\t");
+
+ //get assembly from a common paradoxnotion *runtime* type
+ var paradoxAsmName = typeof(ParadoxNotion.Serialization.JSONSerializer).Assembly.GetName().Name;
+ sb.AppendLine(string.Format("\t", paradoxAsmName));
+ sb.AppendLine("\t");
+
+ foreach ( var pair in pairs ) {
+ sb.AppendLine(string.Format("\t", pair.Key));
+ foreach ( var type in pair.Value ) {
+ sb.AppendLine("\t\t");
+ }
+ sb.AppendLine("\t");
+ }
+ sb.AppendLine("");
+
+ File.WriteAllText(path, sb.ToString());
+ }
+ }
+}
+
+#endif
\ No newline at end of file
diff --git a/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/PartialEditor/AOTClassesGenerator.cs.meta b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/PartialEditor/AOTClassesGenerator.cs.meta
new file mode 100644
index 00000000..dd601cc8
--- /dev/null
+++ b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/PartialEditor/AOTClassesGenerator.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 3b148b00f34f1a94488008fd63cdd171
+timeCreated: 1430214156
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/PartialEditor/AssetTracker.cs b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/PartialEditor/AssetTracker.cs
new file mode 100644
index 00000000..b457f0a2
--- /dev/null
+++ b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/PartialEditor/AssetTracker.cs
@@ -0,0 +1,86 @@
+#if UNITY_EDITOR
+
+using System.Collections.Generic;
+using UnityEditor;
+using System.Linq;
+
+namespace ParadoxNotion.Design
+{
+
+ ///Can track assets of specific type when required. This is faster than requesting AssetDabase all the time and can also be used in separate thread.
+ public class AssetTracker : AssetPostprocessor
+ {
+ public static event System.Action onAssetsImported;
+ public static event System.Action onAssetsDeleted;
+ public static event System.Action onAssetsMoved;
+
+ public static Dictionary trackedAssets { get; private set; }
+ public static List trackedTypes { get; private set; }
+
+ ///Call this to start tracking assets of specified type (and assignables to that)
+ public static void BeginTrackingAssetsOfType(System.Type type) {
+ if ( trackedAssets == null ) { trackedAssets = new Dictionary(); }
+ if ( trackedTypes == null ) { trackedTypes = new List(); }
+
+ if ( trackedTypes.Contains(type) ) {
+ UnityEngine.Debug.LogError("Asset type is already tracked: " + type);
+ return;
+ }
+
+ trackedTypes.Add(type);
+
+ //we need to immediately fetch them here now
+ var assetGUIDS = AssetDatabase.FindAssets(string.Format("t:{0}", type.Name));
+ foreach ( var guid in assetGUIDS ) {
+ var path = AssetDatabase.GUIDToAssetPath(guid);
+ var asset = AssetDatabase.LoadAssetAtPath(path, type);
+ trackedAssets[path] = asset;
+ }
+ }
+
+ //unity callback
+ static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) {
+ AssetsImported(importedAssets);
+ if ( onAssetsImported != null ) { onAssetsImported(importedAssets); }
+
+ AssetsDeleted(deletedAssets);
+ if ( onAssetsDeleted != null ) { onAssetsDeleted(deletedAssets); }
+
+ AssetsMoved(movedAssets, movedFromAssetPaths);
+ if ( onAssetsMoved != null ) { onAssetsMoved(movedAssets, movedFromAssetPaths); }
+
+ }
+
+ //..
+ static void AssetsImported(string[] paths) {
+ if ( trackedTypes == null ) { return; }
+ foreach ( var path in paths ) {
+ var asset = AssetDatabase.LoadAssetAtPath(path, typeof(UnityEngine.Object));
+ if ( asset != null && trackedTypes.Any(t => t.IsAssignableFrom(asset.GetType())) ) {
+ trackedAssets[path] = asset;
+ }
+ }
+ }
+
+ //..
+ static void AssetsDeleted(string[] paths) {
+ if ( trackedTypes == null ) { return; }
+ foreach ( var path in paths ) {
+ if ( trackedAssets.ContainsKey(path) ) {
+ trackedAssets.Remove(path);
+ }
+ }
+ }
+
+ //..
+ static void AssetsMoved(string[] moveToPaths, string[] moveFromPaths) {
+ if ( trackedTypes == null ) { return; }
+ AssetsDeleted(moveFromPaths);
+ AssetsImported(moveToPaths);
+ }
+
+
+ }
+}
+
+#endif
\ No newline at end of file
diff --git a/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/PartialEditor/AssetTracker.cs.meta b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/PartialEditor/AssetTracker.cs.meta
new file mode 100644
index 00000000..5d59f97f
--- /dev/null
+++ b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/PartialEditor/AssetTracker.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 09cec26775978914c969e7c507315723
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/PartialEditor/AttributeDrawers.cs b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/PartialEditor/AttributeDrawers.cs
new file mode 100644
index 00000000..814fba74
--- /dev/null
+++ b/EintooAR/Assets/Plugins/ParadoxNotion/CanvasCore/Common/Design/PartialEditor/AttributeDrawers.cs
@@ -0,0 +1,256 @@
+#if UNITY_EDITOR
+
+using UnityEngine;
+using UnityEditor;
+using System.Linq;
+
+namespace ParadoxNotion.Design
+{
+ ///Used to create header / separators similar to Unity's Header attribute
+ public class HeaderDrawer : AttributeDrawer
+ {
+ public override object OnGUI(GUIContent content, object instance) {
+ GUILayout.Space(8);
+ GUILayout.Label(string.Format("- {0}", attribute.title));
+ return MoveNextDrawer();
+ }
+ }
+
+ ///Will dim control for bool, int, float, string if its default value (or empty for string)
+ public class DimIfDefaultDrawer : AttributeDrawer
+ {
+ public override object OnGUI(GUIContent content, object instance) {
+ var dim = false;
+
+ if ( fieldInfo.FieldType.IsClass ) {
+ dim = instance == null;
+ }
+
+ if ( fieldInfo.FieldType == typeof(bool) ) {
+ dim = (bool)instance == false;
+ }
+
+ if ( fieldInfo.FieldType == typeof(int) ) {
+ dim = (int)instance == 0;
+ }
+
+ if ( fieldInfo.FieldType == typeof(float) ) {
+ dim = (float)instance == 0;
+ }
+
+ if ( fieldInfo.FieldType == typeof(string) ) {
+ dim = string.IsNullOrEmpty((string)instance);
+ }
+
+ if ( dim ) { GUI.color = GUI.color.WithAlpha(0.5f); }
+ instance = MoveNextDrawer();
+ GUI.color = Color.white;
+ return instance;
+ }
+ }
+
+ ///Will show value only if another field or prop is equal to target
+ public class ShowIfDrawer : AttributeDrawer
+ {
+ public override object OnGUI(GUIContent content, object instance) {
+ var member = context.GetType().RTGetFieldOrProp(attribute.fieldName);
+ if ( member != null ) {
+ var memberValue = member.RTGetFieldOrPropValue(context);
+ var memberType = memberValue?.GetType();
+ int intValue;
+ if ( memberType == null || !memberType.IsValueType ) {
+ intValue = memberValue != null ? 1 : 0;
+ } else {
+ intValue = (int)System.Convert.ChangeType(memberValue, typeof(int));
+ }
+ if ( intValue != attribute.checkValue ) {
+ return instance; //return instance without any editor (thus hide it)
+ }
+ }
+ return MoveNextDrawer();
+ }
+ }
+
+ ///Will show in red if value is null or empty
+ public class RequiredFieldDrawer : AttributeDrawer
+ {
+ public override object OnGUI(GUIContent content, object instance) {
+ var isNull = instance == null || instance.Equals(null) || ( ( instance is string ) && string.IsNullOrEmpty((string)instance) );
+ instance = MoveNextDrawer();
+ if ( isNull ) { EditorUtils.MarkLastFieldError("An instance is required."); }
+ return instance;
+ }
+ }
+
+ ///Will show a button above field
+ public class ShowButtonDrawer : AttributeDrawer
+ {
+ public override object OnGUI(GUIContent content, object instance) {
+ if ( !string.IsNullOrEmpty(attribute.methodName) ) {
+ var method = info.wrapperInstanceContext.GetType().RTGetMethod(attribute.methodName);
+ if ( method != null && method.GetParameters().Length == 0 ) {
+ if ( GUILayout.Button(attribute.buttonTitle) ) {
+ method.Invoke(info.wrapperInstanceContext, null);
+ }
+ } else {
+ GUILayout.Label(string.Format("Can't find ShowIf method '{0}'.", attribute.methodName));
+ }
+ }
+ return MoveNextDrawer();
+ }
+ }
+
+ ///Will invoke a callback method when value change
+ public class CallbackDrawer : AttributeDrawer
+ {
+ public override object OnGUI(GUIContent content, object instance) {
+ var newValue = MoveNextDrawer();
+ if ( !Equals(newValue, instance) ) {
+ var method = info.wrapperInstanceContext.GetType().RTGetMethod(attribute.methodName);
+ if ( method != null && method.GetParameters().Length == 0 ) {
+ fieldInfo.SetValue(context, newValue); //manual set field before invoke
+ method.Invoke(info.wrapperInstanceContext, null);
+ } else {
+ GUILayout.Label(string.Format("Can't find Callback method '{0}'.", attribute.methodName));
+ }
+ }
+ return newValue;
+ }
+ }
+
+ ///----------------------------------------------------------------------------------------------
+
+ ///Will clamp float or int value to min
+ public class MinValueDrawer : AttributeDrawer
+ {
+ public override object OnGUI(GUIContent content, object instance) {
+ if ( fieldInfo.FieldType == typeof(float) ) {
+ return Mathf.Max((float)MoveNextDrawer(), (float)attribute.min);
+ }
+ if ( fieldInfo.FieldType == typeof(int) ) {
+ return Mathf.Max((int)MoveNextDrawer(), (int)attribute.min);
+ }
+ return MoveNextDrawer();
+ }
+ }
+
+ ///----------------------------------------------------------------------------------------------
+
+ ///Will make float, int or string field show in a delayed control
+ public class DelayedFieldDrawer : AttributeDrawer
+ {
+ public override object OnGUI(GUIContent content, object instance) {
+ if ( fieldInfo.FieldType == typeof(float) ) {
+ return EditorGUILayout.DelayedFloatField(content, (float)instance);
+ }
+ if ( fieldInfo.FieldType == typeof(int) ) {
+ return EditorGUILayout.DelayedIntField(content, (int)instance);
+ }
+ if ( fieldInfo.FieldType == typeof(string) ) {
+ return EditorGUILayout.DelayedTextField(content, (string)instance);
+ }
+ return MoveNextDrawer();
+ }
+ }
+
+ ///Will force to use ObjectField editor, usefull for interfaces
+ public class ForceObjectFieldDrawer : AttributeDrawer
+ {
+ public override object OnGUI(GUIContent content, object instance) {
+ if ( typeof(UnityEngine.Object).IsAssignableFrom(fieldInfo.FieldType) || fieldInfo.FieldType.IsInterface ) {
+ return EditorGUILayout.ObjectField(content, instance as UnityEngine.Object, fieldInfo.FieldType, true);
+ }
+ return MoveNextDrawer();
+ }
+ }
+
+ ///Will restrict selection on provided values
+ public class PopupFieldDrawer : AttributeDrawer
+ {
+ public override object OnGUI(GUIContent content, object instance) {
+ if ( attribute.options != null && attribute.options.Length > 0 ) {
+ var optType = attribute.options[0].GetType();
+ if ( fieldInfo.FieldType.IsAssignableFrom(optType) ) {
+ return EditorUtils.Popup