From 54e017e08388aeb42f880795dce27bae3c18c8e5 Mon Sep 17 00:00:00 2001 From: Marius Kern <mariusskern@gmail.com> Date: Fri, 8 Mar 2024 13:03:03 +0100 Subject: [PATCH] new fact --- .../Resources/Prefabs/Facts/TestPoint.prefab | 494 ++++++++++++++++++ .../Prefabs/Facts/TestPoint.prefab.meta | 7 + Assets/Scenes/Worlds/RiverWorld.unity | 8 +- .../FactHandling/FactSpawner.cs | 12 + .../FactHandling/Facts/Fact.cs | 3 + .../FactHandling/Facts/TestPointFact.cs | 102 ++++ .../FactHandling/Facts/TestPointFact.cs.meta | 11 + .../InteractionEngine/Gadgets/TestGadget.cs | 3 +- .../CommunicationProtocoll/MMTConstants.cs | 1 + 9 files changed, 639 insertions(+), 2 deletions(-) create mode 100644 Assets/Resources/Prefabs/Facts/TestPoint.prefab create mode 100644 Assets/Resources/Prefabs/Facts/TestPoint.prefab.meta create mode 100644 Assets/Scripts/InteractionEngine/FactHandling/Facts/TestPointFact.cs create mode 100644 Assets/Scripts/InteractionEngine/FactHandling/Facts/TestPointFact.cs.meta diff --git a/Assets/Resources/Prefabs/Facts/TestPoint.prefab b/Assets/Resources/Prefabs/Facts/TestPoint.prefab new file mode 100644 index 00000000..6b258137 --- /dev/null +++ b/Assets/Resources/Prefabs/Facts/TestPoint.prefab @@ -0,0 +1,494 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &537518992981541273 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7110486964728869325} + - component: {fileID: 1900283440179814243} + - component: {fileID: 1075046474335495899} + - component: {fileID: 8087426936968725520} + - component: {fileID: 114239372808020652} + - component: {fileID: 6183343481027254878} + m_Layer: 10 + m_Name: TestPoint + m_TagString: Selectable + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7110486964728869325 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 537518992981541273} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.012604177, y: 0.8909064, z: -0.31583664} + m_LocalScale: {x: 4.49, y: 4.49, z: 4.49} + m_ConstrainProportionsScale: 1 + m_Children: + - {fileID: 338274751687282010} + - {fileID: 5939570736350582895} + - {fileID: 206589483256967431} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1900283440179814243 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 537518992981541273} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1075046474335495899 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 537518992981541273} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 8ae9adf4dc782964387385c1e8c0eb72, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!135 &8087426936968725520 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 537518992981541273} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &114239372808020652 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 537518992981541273} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 626c435b76e0d334f959ede8b54b07ac, type: 3} + m_Name: + m_EditorClassIdentifier: + _URI: + FactText: + - {fileID: 4028707725789292921} + StringLabelFormats: + - '{0}' + Default: {fileID: 2100000, guid: 8ae9adf4dc782964387385c1e8c0eb72, type: 2} + Selected: {fileID: 2100000, guid: 34a95baef388bb8458c97a626b732f9f, type: 2} + Hint: {fileID: 2100000, guid: 8621b710d7d1d5041bc6bfd0cc37cdff, type: 2} + Solution: {fileID: 2100000, guid: 2a003f0807acc1142965bb21bdc824f6, type: 2} + renderer: + - {fileID: 1075046474335495899} +--- !u!114 &6183343481027254878 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 537518992981541273} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac85f04c60d42c147be42fd4d0420c21, type: 3} + m_Name: + m_EditorClassIdentifier: + ServerScriptGObj: {fileID: 0} +--- !u!1 &942938646191423391 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 206589483256967431} + - component: {fileID: 6333161707715706899} + - component: {fileID: 4028707725789292921} + - component: {fileID: 2878035603844960510} + m_Layer: 10 + m_Name: LabelText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &206589483256967431 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 942938646191423391} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7110486964728869325} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0.887} + m_SizeDelta: {x: 2, y: 0.5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!23 &6333161707715706899 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 942938646191423391} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!114 &4028707725789292921 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 942938646191423391} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9541d86e2fd84c1d9990edf0852d74ab, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Test + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 4 + m_fontSizeBase: 4 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 0 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 1 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + _SortingLayer: 0 + _SortingLayerID: 0 + _SortingOrder: 0 + m_hasFontAssetChanged: 0 + m_renderer: {fileID: 6333161707715706899} + m_maskType: 0 +--- !u!114 &2878035603844960510 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 942938646191423391} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8cf5a358dacd3b54ab093ee289dd9ba2, type: 3} + m_Name: + m_EditorClassIdentifier: + Cam1: {fileID: 0} + Cam2: {fileID: 0} + BackUPCam: {fileID: 0} +--- !u!1 &7522635739010457072 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 338274751687282010} + - component: {fileID: 7801512564954744306} + - component: {fileID: 8231516868387511546} + m_Layer: 10 + m_Name: PointSphere + m_TagString: Selectable + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &338274751687282010 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7522635739010457072} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.1, y: 0.1, z: 0.1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7110486964728869325} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7801512564954744306 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7522635739010457072} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8231516868387511546 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7522635739010457072} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c7daa82e15f0cf04d92d0f41ce84f9df, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &7718914877039665658 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5939570736350582895} + - component: {fileID: 87526001619117826} + - component: {fileID: 8470693708050556402} + m_Layer: 10 + m_Name: LabelStickCylinder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5939570736350582895 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7718914877039665658} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.295, z: 0} + m_LocalScale: {x: 0.02, y: 0.3, z: 0.02} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7110486964728869325} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &87526001619117826 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7718914877039665658} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8470693708050556402 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7718914877039665658} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c7daa82e15f0cf04d92d0f41ce84f9df, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} diff --git a/Assets/Resources/Prefabs/Facts/TestPoint.prefab.meta b/Assets/Resources/Prefabs/Facts/TestPoint.prefab.meta new file mode 100644 index 00000000..db2d9cac --- /dev/null +++ b/Assets/Resources/Prefabs/Facts/TestPoint.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 998991ab9f28e764691da393b005cab3 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/Worlds/RiverWorld.unity b/Assets/Scenes/Worlds/RiverWorld.unity index 310738dd..1b5e278c 100644 --- a/Assets/Scenes/Worlds/RiverWorld.unity +++ b/Assets/Scenes/Worlds/RiverWorld.unity @@ -38,7 +38,7 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.44084534, g: 0.48955458, b: 0.56959116, a: 1} + m_IndirectSpecularColor: {r: 0.44100717, g: 0.4898312, b: 0.5698877, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: @@ -60617,6 +60617,12 @@ PrefabInstance: propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} + - target: {fileID: 2872381745209199267, guid: b07552db700124a4680401e6fb94c186, + type: 3} + propertyPath: TestPoint + value: + objectReference: {fileID: 537518992981541273, guid: 998991ab9f28e764691da393b005cab3, + type: 3} - target: {fileID: 2885104145836066559, guid: b07552db700124a4680401e6fb94c186, type: 3} propertyPath: m_AnchorMax.y diff --git a/Assets/Scripts/InteractionEngine/FactHandling/FactSpawner.cs b/Assets/Scripts/InteractionEngine/FactHandling/FactSpawner.cs index 50feaccb..a46103e9 100644 --- a/Assets/Scripts/InteractionEngine/FactHandling/FactSpawner.cs +++ b/Assets/Scripts/InteractionEngine/FactHandling/FactSpawner.cs @@ -10,6 +10,7 @@ public class FactSpawner : MonoBehaviour { public GameObject Sphere, + TestPoint, Line, Ray, Angle, @@ -38,6 +39,8 @@ public void SpawnFactRepresentation(Fact fact) { case PointFact PointFact: SpawnPoint(PointFact); break; + case TestPointFact TestPointFact: + SpawnTestPoint(TestPointFact); break; case LineFact LineFact: SpawnLine(LineFact); break; //case RightAngleFact AngleFact: //needed for Hint System @@ -68,6 +71,15 @@ public void SpawnPoint(PointFact fact) point.transform.SetPositionAndRotation(fact.Position, fact.Rotation); } + public void SpawnTestPoint(TestPointFact fact) + { + GameObject point = GameObject.Instantiate(TestPoint); + fact.WorldRepresentation = point.GetComponent<FactObject3D>(); + fact.WorldRepresentation.Fact = fact; + + point.transform.SetPositionAndRotation(fact.Position, fact.Rotation); + } + public void SpawnLine(LineFact fact) { //Change FactRepresentation to Line diff --git a/Assets/Scripts/InteractionEngine/FactHandling/Facts/Fact.cs b/Assets/Scripts/InteractionEngine/FactHandling/Facts/Fact.cs index c10ea05d..cd74075f 100644 --- a/Assets/Scripts/InteractionEngine/FactHandling/Facts/Fact.cs +++ b/Assets/Scripts/InteractionEngine/FactHandling/Facts/Fact.cs @@ -19,6 +19,8 @@ public static class ParsingDictionary GeneralFact.parseFact }, { MMTConstants.Point, PointFact.parseFact }, + { MMTConstants.TestPoint, + TestPointFact.parseFact }, { MMTConstants.Metric, LineFact.parseFact }, { MMTConstants.Angle, @@ -81,6 +83,7 @@ public static class ParsingDictionary /// </summary> [JsonConverter(typeof(JsonSubtypes), "s_type")] [JsonSubtypes.KnownSubType(typeof(PointFact), nameof(PointFact))] +[JsonSubtypes.KnownSubType(typeof(TestPointFact), nameof(TestPointFact))] [JsonSubtypes.KnownSubType(typeof(LineFact), nameof(LineFact))] [JsonSubtypes.KnownSubType(typeof(RayFact), nameof(RayFact))] [JsonSubtypes.KnownSubType(typeof(OnLineFact), nameof(OnLineFact))] diff --git a/Assets/Scripts/InteractionEngine/FactHandling/Facts/TestPointFact.cs b/Assets/Scripts/InteractionEngine/FactHandling/Facts/TestPointFact.cs new file mode 100644 index 00000000..4eed2526 --- /dev/null +++ b/Assets/Scripts/InteractionEngine/FactHandling/Facts/TestPointFact.cs @@ -0,0 +1,102 @@ +using Newtonsoft.Json; +using REST_JSON_API; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +/// <summary> +/// Point in 3D Space +/// </summary> +public class TestPointFact : FactWrappedCRTP<TestPointFact> +{ + /// <summary> Position </summary> + public Vector3 Point; + /// <summary> Orientation for <see cref="Fact.WorldRepresentation"/> </summary> + [JsonProperty] + private Vector3 Normal; + + /// <summary> + /// Standard Constructor: + /// Initiates <see cref="Point"/>, <see cref="Normal"/>, <see cref="Fact._URI"/> and creates MMT %Fact Server-Side + /// </summary> + /// <param name="Point">sets <see cref="Point"/></param> + /// <param name="Normal">sets <see cref="Normal"/></param> + [JsonConstructor] + public TestPointFact(Vector3 Point, Vector3 Normal) : base() + { + this.Point = Point; + this.Normal = Normal; + } + + /// <summary> + /// Bypasses initialization of new MMT %Fact by using existend URI, _which is not checked for existence_. + /// <see cref="Normal"/> set to <c>Vector3.up</c> + /// </summary> + /// <param name="Point">sets <see cref="Point"/></param> + /// <param name="ServerDefinition">MMT URI as OMS</param> + public TestPointFact(Vector3 Point, SOMDoc ServerDefinition) : base() + { + this.Point = Point; + this.Normal = Vector3.up; + this.ServerDefinition = ServerDefinition; + } + + /// \copydoc Fact.parseFact(ScrollFact) + public new static IEnumerator parseFact(List<Fact> ret, MMTFact fact) + { + if (((MMTGeneralFact)fact).defines is not OMA defines) + yield break; + ParsingDictionary.parseTermsToId.TryAdd(defines.ToString(), fact.@ref.uri); + + ret.Add(new TestPointFact(SOMDoc.MakeVector3(defines), fact.@ref)); + } + + protected override void RecalculateTransform() + { + Position = Point; + { // Rotation + Vector3 notNormal = Vector3.forward != Normal ? Vector3.forward : Vector3.up; + Rotation = Quaternion.LookRotation( + Vector3.Cross(Normal, notNormal), + Normal + ); + } + } + + /// \copydoc Fact.hasDependentFacts + public override bool HasDependentFacts => false; + + /// \copydoc Fact.getDependentFactIds + protected override string[] GetDependentFactIds() + => new string[] { }; + + /// \copydoc Fact.GetHashCode + public override int GetHashCode() + => this.Point.GetHashCode(); + + /// \copydoc Fact.Equivalent(Fact, Fact) + protected override bool EquivalentWrapped(TestPointFact f1, TestPointFact f2) + => Math3d.IsApproximatelyEqual(f1.Point, f2.Point); + + protected override Fact _ReInitializeMe(Dictionary<string, string> old_to_new) + => new TestPointFact(this.Point, this.Normal); + + public override MMTFact MakeMMTDeclaration() + { + SOMDoc tp = new OMS(MMTConstants.Point); + + return new MMTGeneralFact(_LastLabel, tp, Defines()); + } + + public override SOMDoc Defines() + => new OMA( + new OMS(MMTConstants.Tuple), + new[] { + new OMLIT<float>(Point.x), + new OMLIT<float>(Point.y), + new OMLIT<float>(Point.z), + } + ); +} \ No newline at end of file diff --git a/Assets/Scripts/InteractionEngine/FactHandling/Facts/TestPointFact.cs.meta b/Assets/Scripts/InteractionEngine/FactHandling/Facts/TestPointFact.cs.meta new file mode 100644 index 00000000..39223b8c --- /dev/null +++ b/Assets/Scripts/InteractionEngine/FactHandling/Facts/TestPointFact.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1f6eff440ee539143a0667b6ecc169e3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/InteractionEngine/Gadgets/TestGadget.cs b/Assets/Scripts/InteractionEngine/Gadgets/TestGadget.cs index f08f3cce..d2b14576 100644 --- a/Assets/Scripts/InteractionEngine/Gadgets/TestGadget.cs +++ b/Assets/Scripts/InteractionEngine/Gadgets/TestGadget.cs @@ -9,7 +9,8 @@ public class TestGadget : Gadget protected override void _Hit(RaycastHit[] hit) { - string pid = FactAdder.AddPointFact(hit[0], gadget: this).Id; + // string pid = FactAdder.AddPointFact(hit[0], gadget: this).Id; + string pid = ((TestPointFact) FactAdder.AddFactIfNotFound(new TestPointFact(hit[0].point, hit[0].normal), out _, false, this, null)).Id; for (int i = 0; i < hit.Length; i++) { diff --git a/Assets/Scripts/MMTServer/CommunicationProtocoll/MMTConstants.cs b/Assets/Scripts/MMTServer/CommunicationProtocoll/MMTConstants.cs index 17258675..8d3934ac 100644 --- a/Assets/Scripts/MMTServer/CommunicationProtocoll/MMTConstants.cs +++ b/Assets/Scripts/MMTServer/CommunicationProtocoll/MMTConstants.cs @@ -10,6 +10,7 @@ namespace REST_JSON_API public static class MMTConstants { public static readonly string Point = "http://mathhub.info/MitM/core/geometry?3DGeometry?point"; + public static readonly string TestPoint = "http://mathhub.info/MitM/core/geometry?3DGeometry?testPoint"; public static readonly string ScalarProduct = "http://mathhub.info/MitM/core/geometry?3DGeometry?scalar_productI"; public static readonly string PointSubtractI = "http://mathhub.info/MitM/core/geometry?3DGeometry?point_subtractI"; public static readonly string PointAddI = "http://mathhub.info/MitM/core/geometry?3DGeometry?point_addI"; -- GitLab