diff --git a/Assets/Resources/Prefabs/Facts/Ring.prefab b/Assets/Resources/Prefabs/Facts/Ring.prefab index 071a3d5dd9fb01439c83426985e3e4460cc00071..da4ef280fe05d78ddab91efc533e8a97c85c8af9 100644 --- a/Assets/Resources/Prefabs/Facts/Ring.prefab +++ b/Assets/Resources/Prefabs/Facts/Ring.prefab @@ -12,7 +12,7 @@ GameObject: - component: {fileID: 154494299464322201} - component: {fileID: 1254072669719294581} - component: {fileID: 5033072517473897711} - m_Layer: 5 + m_Layer: 14 m_Name: Text m_TagString: Untagged m_Icon: {fileID: 0} @@ -198,7 +198,7 @@ GameObject: - component: {fileID: 8736718377918556088} - component: {fileID: 3274869260965504490} - component: {fileID: 4622529340520030698} - m_Layer: 16 + m_Layer: 14 m_Name: Mesh m_TagString: SnapZone m_Icon: {fileID: 0} @@ -328,13 +328,14 @@ GameObject: - component: {fileID: 2239887596765845809} - component: {fileID: 2358573561192576705} - component: {fileID: 7622934778317457235} - m_Layer: 16 + - component: {fileID: 7100019936063167720} + m_Layer: 14 m_Name: LineHighlight m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!4 &4775945639457863304 Transform: m_ObjectHideFlags: 0 @@ -344,7 +345,7 @@ Transform: 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_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 3821173845951859578} m_RootOrder: 1 @@ -356,7 +357,7 @@ MeshFilter: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 7320042660989930446} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} + m_Mesh: {fileID: 0} --- !u!23 &2358573561192576705 MeshRenderer: m_ObjectHideFlags: 0 @@ -410,6 +411,23 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: a6b9fc46f5bfe6b4eb4adf01e6b65bac, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!114 &7100019936063167720 +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: 35327f6b479454149a20587eb03337f8, type: 3} + m_Name: + m_EditorClassIdentifier: + torusRadius: 1 + ringRadius: 0.026 + ringSegmentCount: 50 + segmentSideCount: 30 + torusMesh: {fileID: 2239887596765845809} --- !u!1 &7644263571880024739 GameObject: m_ObjectHideFlags: 0 @@ -420,7 +438,7 @@ GameObject: m_Component: - component: {fileID: 2014127074789226423} - component: {fileID: 2449733549921447938} - m_Layer: 16 + m_Layer: 14 m_Name: Ring m_TagString: Selectable m_Icon: {fileID: 0} @@ -471,13 +489,14 @@ GameObject: - component: {fileID: 5121703917865025706} - component: {fileID: 213008266423099231} - component: {fileID: 2162055944849665559} - m_Layer: 16 + - component: {fileID: 8620085494464208677} + m_Layer: 14 m_Name: LineInner m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!4 &5121703917865025706 Transform: m_ObjectHideFlags: 0 @@ -487,7 +506,7 @@ Transform: 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_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 3821173845951859578} m_RootOrder: 0 @@ -499,7 +518,7 @@ MeshFilter: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 8117705180640636930} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} + m_Mesh: {fileID: 0} --- !u!23 &2162055944849665559 MeshRenderer: m_ObjectHideFlags: 0 @@ -541,3 +560,20 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} +--- !u!114 &8620085494464208677 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8117705180640636930} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 35327f6b479454149a20587eb03337f8, type: 3} + m_Name: + m_EditorClassIdentifier: + torusRadius: 1 + ringRadius: 0.025 + ringSegmentCount: 50 + segmentSideCount: 30 + torusMesh: {fileID: 213008266423099231} diff --git a/Assets/Resources/Prefabs/MainPlayer.prefab b/Assets/Resources/Prefabs/MainPlayer.prefab index da71fdeb793a6cb6601a3ebc5a6b7cce3c4f46ab..b880e2da30bfd2903db972f244383fb4812d161c 100644 --- a/Assets/Resources/Prefabs/MainPlayer.prefab +++ b/Assets/Resources/Prefabs/MainPlayer.prefab @@ -6104,7 +6104,7 @@ MonoBehaviour: Sprite: {fileID: 21300000, guid: 61c389e99e8388e4e93070d2f5e6275f, type: 3} ignoreLayerMask: serializedVersion: 2 - m_Bits: 24064 + m_Bits: 7680 Cursor: {fileID: 7593098362214606413} --- !u!1 &6514918780467523717 GameObject: @@ -6156,7 +6156,7 @@ MonoBehaviour: Sprite: {fileID: 21300000, guid: d456617ba2282854d9570dcebcc2b279, type: 3} ignoreLayerMask: serializedVersion: 2 - m_Bits: 115217 + m_Bits: 529 Cursor: {fileID: 7593098362214606413} --- !u!1 &6538023868683449154 GameObject: diff --git a/Assets/Scripts/InteractionEngine/FactHandling/FactSpawner.cs b/Assets/Scripts/InteractionEngine/FactHandling/FactSpawner.cs index 357e4800b5d1557eded044aa4f4a21751896b42d..c238d9852489d5015d95d3a6858c4a14e00629d7 100644 --- a/Assets/Scripts/InteractionEngine/FactHandling/FactSpawner.cs +++ b/Assets/Scripts/InteractionEngine/FactHandling/FactSpawner.cs @@ -219,7 +219,7 @@ public Fact SpawnRing(Fact fact) ring.transform.position = middlePoint; //Rotate Ring according to normal - ring.transform.rotation = Quaternion.FromToRotation(Vector3.forward, normal); + ring.transform.up = normal; //Set radii torus.torusRadius = radius; @@ -236,6 +236,10 @@ public Fact SpawnRing(Fact fact) FactObj.URI = circleFact.Id; circleFact.Representation = ring; + //update MeshCollider to fit torus + MeshCollider meshCol = ring.GetComponentInChildren<MeshCollider>(); + meshCol.sharedMesh = meshCol.gameObject.GetComponent<MeshFilter>().mesh; + return circleFact; } diff --git a/Assets/Scripts/InteractionEngine/WorldCursor.cs b/Assets/Scripts/InteractionEngine/WorldCursor.cs index bacedf21bc2ab6185f1e2ca7e98f1a4d52ef04bb..dd1feec0431c1816abd5719a867709848dcbdcbb 100644 --- a/Assets/Scripts/InteractionEngine/WorldCursor.cs +++ b/Assets/Scripts/InteractionEngine/WorldCursor.cs @@ -5,6 +5,7 @@ using UnityEngine; using UnityEngine.Events; using UnityEngine.EventSystems; +using System.Linq; using static GadgetManager; public class WorldCursor : MonoBehaviour @@ -144,7 +145,7 @@ void Update() multipleHits[i] = buffer; } - + for (int i = 0; i < multipleHits.Length; i++) { @@ -162,6 +163,32 @@ void Update() multipleHits[i].point = Math3d.ProjectPointOnLine(p1.Point, lineFact.Dir, multipleHits[i].point); } + else if (multipleHits[i].collider.gameObject.layer == LayerMask.NameToLayer("Ring")) + { + #region Ring + var id = multipleHits[i].transform.GetComponent<FactObject>().URI; + CircleFact circleFact = StageStatic.stage.factState[id] as CircleFact; + PointFact middlePoint = StageStatic.stage.factState[circleFact.Pid1] as PointFact; + var normal = circleFact.normal; + + // generate circle + int pointCount = multipleHits[i].transform.GetComponentInParent<TorusGenerator>().ringSegmentCount; + Vector3[] circle = new Vector3[pointCount]; + float slice = (2f * Mathf.PI) / pointCount; + for (int j = 0; j < pointCount; j++) + { + // generate possible snappoints one the "corners" of the torus mesh + float angle = j * slice; + circle[j] = new Vector3(circleFact.radius * Mathf.Sin(angle), 0, circleFact.radius * Mathf.Cos(angle)) + middlePoint.Point; + + // rotate snappoint according to circle normal + circle[j] = Quaternion.LookRotation(new Vector3(-normal.z, 0, normal.x), normal) * circle[j]; + } + + // get closest cornerPoint + multipleHits[i].point = circle.OrderBy(p => Vector3.Distance(p, multipleHits[i].point)).First(); + #endregion Ring + } else { multipleHits[i].point = multipleHits[i].collider.transform.position; diff --git a/Assets/Scripts/MeshGenerator/TorusGenerator.cs b/Assets/Scripts/MeshGenerator/TorusGenerator.cs index 607f783b525d2d3d42e94321ca07337e45aa7594..996574c010e12f6eeb44b4f816ba4d7325904845 100644 --- a/Assets/Scripts/MeshGenerator/TorusGenerator.cs +++ b/Assets/Scripts/MeshGenerator/TorusGenerator.cs @@ -25,6 +25,14 @@ protected override void GenerateShape() if (torusMesh.sharedMesh != null) torusMesh.sharedMesh.Clear(); torusMesh.mesh = CreateMesh(CreateTorus(torusRadius, ringRadius, ringSegmentCount, segmentSideCount)); + + //TODO for testing -- remove + try + { + MeshCollider meshCol = GetComponentInChildren<MeshCollider>(); + meshCol.sharedMesh = torusMesh.mesh; + } + catch (Exception e) { } } private static (Vector3[] vertices, int[] triangles) CreateTorus(float torusRadius, float ringRadius, int ringSegmentCount, int segmentSideCount) diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset index 962b7a8889bbb7c77fc117e3121a190fae59bdce..d95bd60240e920d6d7cf565a05bd30e906e9da45 100644 --- a/ProjectSettings/TagManager.asset +++ b/ProjectSettings/TagManager.asset @@ -24,13 +24,13 @@ TagManager: - Line - Angle - Ray - - TalkingZone - - Tree - - SnapZone - - + - Ring - - - + - TalkingZone + - Tree + - SnapZone - - -