diff --git a/Assets/Resources/Prefabs/Facts/Ring.prefab b/Assets/Resources/Prefabs/Facts/Ring.prefab new file mode 100644 index 0000000000000000000000000000000000000000..071a3d5dd9fb01439c83426985e3e4460cc00071 --- /dev/null +++ b/Assets/Resources/Prefabs/Facts/Ring.prefab @@ -0,0 +1,543 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1001283044610252316 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8698932133077106484} + - component: {fileID: 154494299464322201} + - component: {fileID: 1254072669719294581} + - component: {fileID: 5033072517473897711} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8698932133077106484 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1001283044610252316} + 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_Children: [] + m_Father: {fileID: 2014127074789226423} + m_RootOrder: 1 + 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: 1} + m_SizeDelta: {x: 4, y: 1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!23 &154494299464322201 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1001283044610252316} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + 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: 1 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!114 &1254072669719294581 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1001283044610252316} + 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: 4294967293 + m_fontColor: {r: 0.993, 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 + m_hasFontAssetChanged: 0 + m_renderer: {fileID: 154494299464322201} + m_maskType: 0 + _SortingLayer: 0 + _SortingLayerID: 0 + _SortingOrder: 0 +--- !u!114 &5033072517473897711 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1001283044610252316} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8cf5a358dacd3b54ab093ee289dd9ba2, type: 3} + m_Name: + m_EditorClassIdentifier: + Cam: {fileID: 0} +--- !u!1 &7067472111420977835 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3821173845951859578} + - component: {fileID: 6307794999199274257} + - component: {fileID: 4181090182545414655} + - component: {fileID: 8736718377918556088} + - component: {fileID: 3274869260965504490} + - component: {fileID: 4622529340520030698} + m_Layer: 16 + m_Name: Mesh + m_TagString: SnapZone + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3821173845951859578 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7067472111420977835} + 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_Children: + - {fileID: 5121703917865025706} + - {fileID: 4775945639457863304} + m_Father: {fileID: 2014127074789226423} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6307794999199274257 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7067472111420977835} + m_Mesh: {fileID: 0} +--- !u!23 &4181090182545414655 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7067472111420977835} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + 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!114 &8736718377918556088 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7067472111420977835} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 626c435b76e0d334f959ede8b54b07ac, type: 3} + m_Name: + m_EditorClassIdentifier: + URI: +--- !u!64 &3274869260965504490 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7067472111420977835} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 0} +--- !u!95 &4622529340520030698 +Animator: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7067472111420977835} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: 7f5a2c4324ecb83488857feb7887b5a7, type: 2} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorControllerStateOnDisable: 0 +--- !u!1 &7320042660989930446 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4775945639457863304} + - component: {fileID: 2239887596765845809} + - component: {fileID: 2358573561192576705} + - component: {fileID: 7622934778317457235} + m_Layer: 16 + m_Name: LineHighlight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4775945639457863304 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7320042660989930446} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.96, y: 0.51, z: 0.51} + m_Children: [] + m_Father: {fileID: 3821173845951859578} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2239887596765845809 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7320042660989930446} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2358573561192576705 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7320042660989930446} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + 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: 1 + 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 &7622934778317457235 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7320042660989930446} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a6b9fc46f5bfe6b4eb4adf01e6b65bac, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &7644263571880024739 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2014127074789226423} + - component: {fileID: 2449733549921447938} + m_Layer: 16 + m_Name: Ring + m_TagString: Selectable + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2014127074789226423 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7644263571880024739} + 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_Children: + - {fileID: 3821173845951859578} + - {fileID: 8698932133077106484} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2449733549921447938 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7644263571880024739} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 35327f6b479454149a20587eb03337f8, type: 3} + m_Name: + m_EditorClassIdentifier: + torusRadius: 1 + ringRadius: 0.05 + ringSegmentCount: 50 + segmentSideCount: 30 + torusMesh: {fileID: 6307794999199274257} +--- !u!1 &8117705180640636930 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5121703917865025706} + - component: {fileID: 213008266423099231} + - component: {fileID: 2162055944849665559} + m_Layer: 16 + m_Name: LineInner + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &5121703917865025706 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8117705180640636930} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.95, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 3821173845951859578} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &213008266423099231 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8117705180640636930} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2162055944849665559 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8117705180640636930} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + 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: a8a7bf60a30970f469a9c9d3ae2de6ef, 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/Ring.prefab.meta b/Assets/Resources/Prefabs/Facts/Ring.prefab.meta new file mode 100644 index 0000000000000000000000000000000000000000..1b40fa4116a7d339fd3b3bf488a26bdb9c868429 --- /dev/null +++ b/Assets/Resources/Prefabs/Facts/Ring.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0ed2a320a46601c4bab6c097b0b09add +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Prefabs/MainPlayer.prefab b/Assets/Resources/Prefabs/MainPlayer.prefab index 52f2044e19d1852d9b14dd1d7ce3fce1dbd6d383..da71fdeb793a6cb6601a3ebc5a6b7cce3c4f46ab 100644 --- a/Assets/Resources/Prefabs/MainPlayer.prefab +++ b/Assets/Resources/Prefabs/MainPlayer.prefab @@ -2636,6 +2636,7 @@ MonoBehaviour: Line: {fileID: 2317807655120713368, guid: 40cb67df39988e8499ecf4d88171c358, type: 3} Ray: {fileID: 2317807655120713368, guid: b4b800ce09755eb47b31018b5d9d8d3a, type: 3} Angle: {fileID: 7144232170300037021, guid: 303a593e7b3272a40a7d1a71b1f0639c, type: 3} + Ring: {fileID: 7644263571880024739, guid: 0ed2a320a46601c4bab6c097b0b09add, type: 3} --- !u!114 &7000905242735826308 MonoBehaviour: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/InteractionEngine/FactHandling/FactSpawner.cs b/Assets/Scripts/InteractionEngine/FactHandling/FactSpawner.cs index 71d9586da22189ff475df187ff2e5aa5e51e8693..da48ca59fb41c3dc8034d52cbb9e4890ff11f04f 100644 --- a/Assets/Scripts/InteractionEngine/FactHandling/FactSpawner.cs +++ b/Assets/Scripts/InteractionEngine/FactHandling/FactSpawner.cs @@ -11,7 +11,8 @@ public GameObject Sphere, Line, Ray, - Angle; + Angle, + Ring; private GameObject FactRepresentation; //private Camera camera; @@ -37,19 +38,15 @@ public void FactAction(Fact fact) { public Func<Fact, Fact> getAction(Fact fact) { - switch (fact) + return fact switch { - case PointFact pointFact: - return SpawnPoint; - case LineFact lineFact: - return SpawnLine; - case AngleFact angleFact: - return SpawnAngle; - case RayFact rayFact: - return SpawnRay; - default: - return null; - } + PointFact pointFact => SpawnPoint, + LineFact lineFact => SpawnLine, + AngleFact angleFact => SpawnAngle, + RayFact rayFact => SpawnRay, + CircleFact circleFact => SpawnRing, + _ => null, + }; } @@ -199,6 +196,50 @@ public Fact SpawnAngle(Fact fact) return angleFact; } + public Fact SpawnRing(Fact fact) + { + CircleFact circleFact = (CircleFact)fact; + + PointFact middlePointFact = StageStatic.stage.factState[circleFact.Pid1] as PointFact; + PointFact basePointFact = StageStatic.stage.factState[circleFact.Pid2] as PointFact; + + Vector3 middlePoint = middlePointFact.Point; + Vector3 normal = circleFact.normal; + float radius = circleFact.radius; + + //Change FactRepresentation to Ring + this.FactRepresentation = Ring; + GameObject ring = Instantiate(FactRepresentation); + + var torus = ring.GetComponent<TorusGenerator>(); + var tmpText = ring.GetComponentInChildren<TextMeshPro>(); + var FactObj = ring.GetComponentInChildren<FactObject>(); + + //Move Ring to middlePoint + ring.transform.position = middlePoint; + + //Rotate Ring according to normal + ring.transform.rotation = Quaternion.LookRotation(Vector3.forward, normal); // TODO TSc works? + + //Set radii + torus.torusRadius = radius; + + //string letter = ((Char)(64 + lineFact.Id + 1)).ToString(); + //line.GetComponentInChildren<TextMeshPro>().text = letter; + string text = + $"\u25EF {middlePointFact.Label}{basePointFact.Label}" + + $"r = {radius}, C = {2 * radius * Math.PI}"; + tmpText.text = text; + //move TMP Text so it is on the edge of the circle + tmpText.rectTransform.position = tmpText.rectTransform.position - new Vector3(0, 0, -radius); + + FactObj.URI = circleFact.Id; + circleFact.Representation = ring; + + return circleFact; + } + + public void DeleteObject(Fact fact) { GameObject factRepresentation = fact.Representation; diff --git a/Assets/Scripts/MeshGenerator.meta b/Assets/Scripts/MeshGenerator.meta new file mode 100644 index 0000000000000000000000000000000000000000..89bb05c3cc8024bb76ff0c3f3adbd5e610971d52 --- /dev/null +++ b/Assets/Scripts/MeshGenerator.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5b58b5e5719ff2c42b415975c4c578f6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/MeshGenerator/CircleGenerator.cs b/Assets/Scripts/MeshGenerator/CircleGenerator.cs new file mode 100644 index 0000000000000000000000000000000000000000..a7ae73621c7c1814f3649ef3cb920c7d952baede --- /dev/null +++ b/Assets/Scripts/MeshGenerator/CircleGenerator.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using System.Linq; + +public class CircleGenerator : ShapeGenerator +{ + #region InspectorVariables + [Header("Circle values")] + [Range(0,100)] public Vector3 midPoint = Vector3.zero; + [Range(0,100)] public float radius = 1f; + + [Header("Technical")] + [Range(3,1000)] public int sideCount = 500; + + [Header("Parts")] + public MeshFilter circleMesh; + #endregion InspectorVariables + + #region Implementation + protected override void GenerateShape() + { + Vector3[] circle = GetCirclePoints(radius, sideCount, Vector3.zero); + + if (circleMesh.sharedMesh != null) + circleMesh.sharedMesh.Clear(); + circleMesh.mesh = CreateMesh(CreatePlane(circle)); + } + #endregion Implementation +} diff --git a/Assets/Scripts/MeshGenerator/CircleGenerator.cs.meta b/Assets/Scripts/MeshGenerator/CircleGenerator.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..541b038577a6b0b8128bdf423ee60d7ebe14a7f1 --- /dev/null +++ b/Assets/Scripts/MeshGenerator/CircleGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 405087c38b8537e43bcc99727c5325ec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/CircleSegmentGenerator.cs b/Assets/Scripts/MeshGenerator/CircleSegmentGenerator.cs similarity index 100% rename from Assets/Scripts/CircleSegmentGenerator.cs rename to Assets/Scripts/MeshGenerator/CircleSegmentGenerator.cs diff --git a/Assets/Scripts/CircleSegmentGenerator.cs.meta b/Assets/Scripts/MeshGenerator/CircleSegmentGenerator.cs.meta similarity index 100% rename from Assets/Scripts/CircleSegmentGenerator.cs.meta rename to Assets/Scripts/MeshGenerator/CircleSegmentGenerator.cs.meta diff --git a/Assets/Scripts/MeshGenerator/ConeGenerator.cs b/Assets/Scripts/MeshGenerator/ConeGenerator.cs new file mode 100644 index 0000000000000000000000000000000000000000..717cd56f47be2883e74198b4da2007083e828bdf --- /dev/null +++ b/Assets/Scripts/MeshGenerator/ConeGenerator.cs @@ -0,0 +1,79 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using System.Linq; + +public class ConeGenerator : ShapeGenerator +{ + #region InspectorVariables + [Header("Cone values")] + [Range(0,100)] public float bottomRadius = 1f; + [Range(0,100)] public float topRadius = 0f; + public Vector3 topPosition = new Vector3(0, 1f, 0); + + [Header("Technical")] + [Range(3,1000)] public int sideCount = 500; + public bool generateTop = true; + public bool generateBottom = false; + + [Header("Parts")] + public MeshFilter topMesh; + public MeshFilter sideMesh; + public MeshFilter bottomMesh; + #endregion InspectorVariables + + #region Implementation + protected override void GenerateShape() + { + Vector3[] bottomCircle = GetCirclePoints(bottomRadius, sideCount); + Vector3[] topCircle = GetCirclePoints(topRadius, sideCount, topPosition); + + //side + if (sideMesh.sharedMesh != null) + sideMesh.sharedMesh.Clear(); + sideMesh.mesh = CreateMesh(CreateConeSide(sideCount, bottomCircle, topCircle)); + + //top + if (topMesh.sharedMesh != null) + topMesh.sharedMesh.Clear(); + if (generateTop) + topMesh.mesh = CreateMesh(CreatePlane(topCircle, false)); + + //bottom + if (bottomMesh.sharedMesh != null) + bottomMesh.sharedMesh.Clear(); + if (generateBottom) + bottomMesh.mesh = CreateMesh(CreatePlane(bottomCircle, true)); + } + + private static (Vector3[], int[]) CreateConeSide(int sideCount, Vector3[] bottomCircle, Vector3[] topCircle) + { + Vector3[] vertices = new Vector3[sideCount * 4]; + int[] triangles = new int[sideCount * 6]; + + //generate vertices + for (int i = 0; i < sideCount; i++) + { + vertices[i * 4] = bottomCircle[i]; + vertices[i * 4 + 1] = bottomCircle[(i + 1) % sideCount]; + vertices[i * 4 + 2] = topCircle[i]; + vertices[i * 4 + 3] = topCircle[(i + 1) % sideCount]; + } + + //generate triangles + for (int t = 0, i = 0; t < triangles.Length; t += 6, i += 4) + { + triangles[t] = i; + triangles[t + 1] = i + 1; + triangles[t + 2] = i + 2; + + triangles[t + 3] = i + 1; + triangles[t + 4] = i + 3; + triangles[t + 5] = i + 2; + } + + return (vertices, triangles); + } + #endregion Implementation +} diff --git a/Assets/Scripts/MeshGenerator/ConeGenerator.cs.meta b/Assets/Scripts/MeshGenerator/ConeGenerator.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..051f14ed236df585c4974baea7529a8e48ec2114 --- /dev/null +++ b/Assets/Scripts/MeshGenerator/ConeGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 171f36100fbf6384591cca35fc917317 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/MeshGenerator/ShapeGenerator.cs b/Assets/Scripts/MeshGenerator/ShapeGenerator.cs new file mode 100644 index 0000000000000000000000000000000000000000..95df89967b37667505a2d157decf2a8c03b7c6f5 --- /dev/null +++ b/Assets/Scripts/MeshGenerator/ShapeGenerator.cs @@ -0,0 +1,49 @@ +using System.Linq; +using UnityEngine; + +public abstract class ShapeGenerator : MonoBehaviour +{ + #region UnityMethods + void Start() => GenerateShape(); + + void OnValidate() => GenerateShape(); + #endregion UnityMethods + + protected abstract void GenerateShape(); + + #region Helper + protected static Mesh CreateMesh((Vector3[] vertices, int[] triangles) meshValues) + { + Mesh mesh = new Mesh(); + (mesh.vertices, mesh.triangles) = (meshValues.vertices, meshValues.triangles); + mesh.RecalculateNormals(); //fix lighting + return mesh; + } + + protected static Vector3[] GetCirclePoints(float circleRadius, int pointCount) => GetCirclePoints(circleRadius, pointCount, Vector3.zero); + protected static Vector3[] GetCirclePoints(float circleRadius, int pointCount, Vector3 offset) + { + Vector3[] circle = new Vector3[pointCount]; + float slice = (2f * Mathf.PI) / pointCount; + for (int i = 0; i < pointCount; i++) + { + float angle = i * slice; + circle[i] = new Vector3(circleRadius * Mathf.Sin(angle), 0, circleRadius * Mathf.Cos(angle)) + offset; + } + return circle; + } + + protected static (Vector3[], int[]) CreatePlane(Vector3[] points, bool invert = false) + { + Vector3[] vertices = points; + int[] triangles = new int[(vertices.Length - 2) * 3]; + for (int i = 1; i < vertices.Length - 1; i++) + { + triangles[(i - 1) * 3 + 0] = 0; + triangles[(i - 1) * 3 + 1] = i; + triangles[(i - 1) * 3 + 2] = (i + 1); + } + return (vertices, invert ? triangles.Reverse().ToArray() : triangles); + } + #endregion Helper +} diff --git a/Assets/Scripts/MeshGenerator/ShapeGenerator.cs.meta b/Assets/Scripts/MeshGenerator/ShapeGenerator.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..801bbbe10d583d40817cf8fd256a9ae0e50875cf --- /dev/null +++ b/Assets/Scripts/MeshGenerator/ShapeGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 931a85887ddf84f42879941013774a43 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/MeshGenerator/TorusGenerator.cs b/Assets/Scripts/MeshGenerator/TorusGenerator.cs new file mode 100644 index 0000000000000000000000000000000000000000..607f783b525d2d3d42e94321ca07337e45aa7594 --- /dev/null +++ b/Assets/Scripts/MeshGenerator/TorusGenerator.cs @@ -0,0 +1,70 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using System.Linq; +using System; + +public class TorusGenerator : ShapeGenerator +{ + #region InspectorVariables + [Header("Torus values")] + [Range(0, 100)] public float torusRadius = 1f; + [Range(0, 10)] public float ringRadius = 0.1f; + + [Header("Technical")] + [Range(8, 150)] public int ringSegmentCount = 50; + [Range(3, 100)] public int segmentSideCount = 30; + + [Header("Parts")] + public MeshFilter torusMesh; + #endregion InspectorVariables + + #region Implementation + protected override void GenerateShape() + { + if (torusMesh.sharedMesh != null) + torusMesh.sharedMesh.Clear(); + torusMesh.mesh = CreateMesh(CreateTorus(torusRadius, ringRadius, ringSegmentCount, segmentSideCount)); + } + + private static (Vector3[] vertices, int[] triangles) CreateTorus(float torusRadius, float ringRadius, int ringSegmentCount, int segmentSideCount) + { + Vector3[] vertices = new Vector3[ringSegmentCount * segmentSideCount * 4]; + int[] triangles = new int[ringSegmentCount * segmentSideCount * 6]; + + //generate vertices + float iStep = (2f * Mathf.PI) / ringSegmentCount; + float jStep = (2f * Mathf.PI) / segmentSideCount; + for (int i = 0; i < ringSegmentCount; i++) + { + for (int j = 0; j < segmentSideCount; j++) + { + vertices[(i * segmentSideCount + j) * 4] = GetPointOnTorus(torusRadius, ringRadius, i * iStep, j * jStep); + vertices[(i * segmentSideCount + j) * 4 + 1] = GetPointOnTorus(torusRadius, ringRadius, i * iStep, (j + 1) * jStep); + vertices[(i * segmentSideCount + j) * 4 + 2] = GetPointOnTorus(torusRadius, ringRadius, (i + 1) * iStep, j * jStep); + vertices[(i * segmentSideCount + j) * 4 + 3] = GetPointOnTorus(torusRadius, ringRadius, (i + 1) * iStep, (j + 1) * jStep); + } + } + + //generate triangles + for (int t = 0, i = 0; t < triangles.Length; t += 6, i += 4) + { + triangles[t] = i; + triangles[t+1] = i + 1; + triangles[t+2] = i + 2; + + triangles[t+3] = i + 1; + triangles[t+4] = i + 3; + triangles[t+5] = i + 2; + } + + return (vertices, triangles); + } + + private static Vector3 GetPointOnTorus(float torusRadius, float ringRadius, float u, float v) + { + float r = (torusRadius + ringRadius * Mathf.Sin(v)); + return new Vector3(r * Mathf.Sin(u), ringRadius * Mathf.Cos(v), r * Mathf.Cos(u)); + } + #endregion Implementation +} \ No newline at end of file diff --git a/Assets/Scripts/MeshGenerator/TorusGenerator.cs.meta b/Assets/Scripts/MeshGenerator/TorusGenerator.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..18b11716a25ffa239097fb1fb32c93fe67fdb3a8 --- /dev/null +++ b/Assets/Scripts/MeshGenerator/TorusGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 35327f6b479454149a20587eb03337f8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UserSettings/EditorUserSettings.asset b/UserSettings/EditorUserSettings.asset index 8938eb318bb43ddcedec33549da5fbd3497d84f9..81152c307bc638438d2d57c3a1ba2f6166d029a1 100644 --- a/UserSettings/EditorUserSettings.asset +++ b/UserSettings/EditorUserSettings.asset @@ -18,10 +18,10 @@ EditorUserSettings: value: 22424703114646680e0b0227036c721518021d39631b32313f3d2e30f0e53136acf238e0f323 flags: 0 RecentlyUsedScenePath-4: - value: 22424703114646680e0b0227036c681f041b1c39631a2f26283b2a3cf0ec3076f7e93ffdfe + value: 22424703114646680e0b0227036c721518021d39630527392304183df7e57a2decee22f0 flags: 0 RecentlyUsedScenePath-5: - value: 22424703114646680e0b0227036c721518021d39630527392304183df7e57a2decee22f0 + value: 22424703114646680e0b0227036c681f041b1c39631a2f26283b2a3cf0ec3076f7e93ffdfe flags: 0 vcSharedLogLevel: value: 0d5e400f0650