diff --git a/Assets/Resources/Prefabs/Facts/Triangle.prefab b/Assets/Resources/Prefabs/Facts/Triangle.prefab index d5b565602e21cabdbc32bddde705601fcd16bceb..4b7d809f3a8362bfe5c143ef7eff697ccab8d48d 100644 --- a/Assets/Resources/Prefabs/Facts/Triangle.prefab +++ b/Assets/Resources/Prefabs/Facts/Triangle.prefab @@ -13,7 +13,7 @@ GameObject: - component: {fileID: 5284903402926663935} - component: {fileID: 2574848627300415222} - component: {fileID: 7280041197286401157} - m_Layer: 15 + m_Layer: 21 m_Name: Mesh Down m_TagString: SnapZone m_Icon: {fileID: 0} @@ -27,15 +27,15 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 3319392661904935552} - m_LocalRotation: {x: -0.7071068, y: 0, z: 0, w: 0.7071068} - m_LocalPosition: {x: 0, y: -0.01, z: 0} - m_LocalScale: {x: 1, y: 0.01, z: 1} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.01} + m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - {fileID: 6787775389045427190} m_Father: {fileID: 3390467403729316765} m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!33 &1312883106029576503 MeshFilter: m_ObjectHideFlags: 0 @@ -133,7 +133,7 @@ GameObject: - component: {fileID: 6787775389045427190} - component: {fileID: 6626359674163989219} - component: {fileID: 4818731436791451552} - m_Layer: 15 + m_Layer: 21 m_Name: CircleHighlight m_TagString: Untagged m_Icon: {fileID: 0} @@ -216,7 +216,7 @@ GameObject: - component: {fileID: 8554957501859850914} - component: {fileID: 3164742056485930267} - component: {fileID: 1460740696286669547} - m_Layer: 15 + m_Layer: 21 m_Name: CircleHighlight m_TagString: Untagged m_Icon: {fileID: 0} @@ -301,7 +301,7 @@ GameObject: - component: {fileID: 1078883255209641429} - component: {fileID: 8526453253978894086} - component: {fileID: -7239156242830623982} - m_Layer: 15 + m_Layer: 21 m_Name: Mesh Up m_TagString: SnapZone m_Icon: {fileID: 0} @@ -315,15 +315,15 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 6262947649539239553} - m_LocalRotation: {x: -0.7071068, y: 0, z: 0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0.01, z: 0} - m_LocalScale: {x: 1, y: 0.01, z: 1} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.01} + m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - {fileID: 8554957501859850914} m_Father: {fileID: 3390467403729316765} m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!33 &7167210412035754299 MeshFilter: m_ObjectHideFlags: 0 @@ -419,9 +419,9 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 3390467403729316765} - - component: {fileID: 1812690906255965161} - component: {fileID: 6950663371922587874} - m_Layer: 15 + - component: {fileID: 1531054738416625324} + m_Layer: 21 m_Name: Triangle m_TagString: Selectable m_Icon: {fileID: 0} @@ -436,7 +436,7 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 6839596689016440457} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.019, y: 0, z: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: @@ -445,27 +445,6 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1812690906255965161 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6839596689016440457} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 405087c38b8537e43bcc99727c5325ec, type: 3} - m_Name: - m_EditorClassIdentifier: - Meshs: - - {fileID: 7167210412035754299} - - {fileID: 3164742056485930267} - - {fileID: 1312883106029576503} - - {fileID: 6626359674163989219} - NormalOffset: [] - AlternateNormals: 0 - radius: 1 - sideCount: 3 --- !u!114 &6950663371922587874 MonoBehaviour: m_ObjectHideFlags: 0 @@ -487,3 +466,25 @@ MonoBehaviour: Solution: {fileID: 2100000, guid: 2a003f0807acc1142965bb21bdc824f6, type: 2} renderer: - {fileID: 1078883255209641429} +--- !u!114 &1531054738416625324 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6839596689016440457} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 649f3f75f7c1fff4584f185c14c7ea79, type: 3} + m_Name: + m_EditorClassIdentifier: + Meshs: + - {fileID: 7167210412035754299} + - {fileID: 3164742056485930267} + - {fileID: 1312883106029576503} + - {fileID: 6626359674163989219} + NormalOffset: [] + AlternateNormals: 0 + ab: 1 + height: 1 + c: 0.5 diff --git a/Assets/Scenes/Worlds/RiverWorld.unity b/Assets/Scenes/Worlds/RiverWorld.unity index 91a0141a6fb402d967669569af516ac32e876a8a..410964600e43c4309a9fa9ad766d610a45b65936 100644 --- a/Assets/Scenes/Worlds/RiverWorld.unity +++ b/Assets/Scenes/Worlds/RiverWorld.unity @@ -62903,6 +62903,12 @@ PrefabInstance: type: 3} propertyPath: PrefabDataConfig.Array.data[34] value: + objectReference: {fileID: 2846439484187545958, guid: 5dc76e187eae4214697491bfb42773e8, + type: 3} + - target: {fileID: 6898471569945669422, guid: b07552db700124a4680401e6fb94c186, + type: 3} + propertyPath: PrefabDataConfig.Array.data[35] + value: objectReference: {fileID: 3080888058940174091, guid: 2ae89b30b18ea4b4ab86a9b7ddf21e09, type: 3} - target: {fileID: 6899268459312977207, guid: b07552db700124a4680401e6fb94c186, @@ -63351,6 +63357,12 @@ PrefabInstance: type: 3} propertyPath: PrefabDataConfig.Array.data[34] value: + objectReference: {fileID: 2846439484187545958, guid: 5dc76e187eae4214697491bfb42773e8, + type: 3} + - target: {fileID: 7743735189960969443, guid: b07552db700124a4680401e6fb94c186, + type: 3} + propertyPath: PrefabDataConfig.Array.data[35] + value: objectReference: {fileID: 3080888058940174091, guid: 2ae89b30b18ea4b4ab86a9b7ddf21e09, type: 3} - target: {fileID: 7748114935345543003, guid: b07552db700124a4680401e6fb94c186, diff --git a/Assets/Scripts/InteractionEngine/FactHandling/FactSpawner.cs b/Assets/Scripts/InteractionEngine/FactHandling/FactSpawner.cs index 4395f67f4aa07ad62ddcf70f71bc9fa9b924833e..6d0e8ab766a6b83f99d64fc169f2cc6fe18fc435 100644 --- a/Assets/Scripts/InteractionEngine/FactHandling/FactSpawner.cs +++ b/Assets/Scripts/InteractionEngine/FactHandling/FactSpawner.cs @@ -1,9 +1,11 @@ using System.Collections; using System.Collections.Generic; +using System.Drawing; using System.Linq; using TMPro; using Unity.Mathematics; using UnityEngine; +using UnityEngine.ProBuilder.Shapes; using static CommunicationEvents; public class FactSpawner : MonoBehaviour @@ -82,11 +84,18 @@ public void SpawnTriangle(TriangleFact2 fact) { GameObject triangle = GameObject.Instantiate(Triangle); + fact.WorldRepresentation = triangle.GetComponent<FactObject3D>(); + fact.WorldRepresentation.Fact = fact; triangle.transform.SetPositionAndRotation(fact.Position, fact.Rotation); - triangle.transform.localScale = Vector3.Scale(triangle.transform.localScale, fact.LocalScale); - triangle.GetComponentInChildren<TextMeshPro>().text = fact.GetLabel(StageStatic.stage.factState) + " = " + System.Math.Round(fact.Area, 2) + "m²"; + // triangle.transform.localScale = Vector3.Scale(triangle.transform.localScale, fact.LocalScale); + // triangle.GetComponentInChildren<TextMeshPro>().text = fact.GetLabel(StageStatic.stage.factState) + " = " + System.Math.Round(fact.Area, 2) + "m²"; + TriangleGenerator[] triangelGenerators = triangle.GetComponentsInChildren<TriangleGenerator>(); + foreach (var gen in triangelGenerators) + { + gen.c = fact.cPosition; + } } public void SpawnPoint(PointFact fact) diff --git a/Assets/Scripts/InteractionEngine/FactHandling/Facts/TriangleFact2.cs b/Assets/Scripts/InteractionEngine/FactHandling/Facts/TriangleFact2.cs index 6bfaf708d7e5618aa6bfd044148af2a3568176c7..a38c2747336ca6e25bcf5d88deac09366b5878fb 100644 --- a/Assets/Scripts/InteractionEngine/FactHandling/Facts/TriangleFact2.cs +++ b/Assets/Scripts/InteractionEngine/FactHandling/Facts/TriangleFact2.cs @@ -18,6 +18,8 @@ public class TriangleFact2 : FactWrappedCRTP<TriangleFact2> public Vector3 A, B, C, a, b, c; + public float cPosition; + public float Area = 0.0F; @@ -34,12 +36,15 @@ protected void calculate_vectors(){ b = C + Vector3.Project(B - C, A - C); c = A + Vector3.Project(C - A, B - A); + cPosition = Vector3.Distance(A, c) / Vector3.Distance(A, B); + Area = 0.5f * (Vector3.Distance(A, B) * Vector3.Distance(c, C)); Vector3 scale = new Vector3(Vector3.Distance(A, B), Vector3.Distance(c, C), 1.0F); LocalScale = scale; + /* Vector3 lineVec3 = B - A; Vector3 crossVec1And2 = Vector3.Cross(a - A, b - B); Vector3 crossVec3And2 = Vector3.Cross(lineVec3, b - B); @@ -54,6 +59,9 @@ protected void calculate_vectors(){ intersection = Vector3.zero; } Position = intersection; + */ + + Position = A; Rotation = Quaternion.LookRotation(Vector3.Cross((B - A), (C - A)), Vector3.up); //Rotation = Quaternion.LookRotation(forward, new Vector3(1.0F, 0.0F, 0.0F)); diff --git a/Assets/Scripts/MeshGenerator/ShapeGenerator.cs b/Assets/Scripts/MeshGenerator/ShapeGenerator.cs index 8e2d3095aca14a31dfc83c7149be30c34a5de925..03ed3fa29acfd300fc813e1a7ea59a142c09fc23 100644 --- a/Assets/Scripts/MeshGenerator/ShapeGenerator.cs +++ b/Assets/Scripts/MeshGenerator/ShapeGenerator.cs @@ -99,6 +99,20 @@ protected static Vector3[] GetCirclePoints(float circleRadius, int pointCount, V return circle; } + protected static Vector3[] GetTrianglePoints(float ab, float height, float c) + => GetTrianglePoints(ab, height, c, Vector3.zero); + + protected static Vector3[] GetTrianglePoints(float ab, float height, float c, Vector3 offset) + { + Vector3[] triangle = new Vector3[3]; + + triangle[0] = Vector3.zero + offset; + triangle[1] = new Vector3(ab, 0f, 0f) + offset; + triangle[2] = new Vector3(c * ab, height, 0f) + offset; + + return triangle; + } + /// <summary> /// Creates triangles for a set of vertecies of a flat, convex shape /// </summary> diff --git a/Assets/Scripts/MeshGenerator/TriangleGenerator.cs b/Assets/Scripts/MeshGenerator/TriangleGenerator.cs new file mode 100644 index 0000000000000000000000000000000000000000..3666065447dbe68942d0513e8240b04075dfc178 --- /dev/null +++ b/Assets/Scripts/MeshGenerator/TriangleGenerator.cs @@ -0,0 +1,39 @@ +using System; +using System.Linq; +using UnityEngine; + +public class TriangleGenerator : ShapeGenerator +{ + #region InspectorVariables + [Header("Triangle values")] + [Range(0, 100)] public float ab = 1f; + [Range(0, 100)] public float height = 1f; + [Range(0, 1)] public float c = 0.5f; + #endregion InspectorVariables + + #region Implementation + protected override (Vector3[] vertices, int[] triangles) GenerateTopology() + => CreateTriangle(ab, height, c); + + /// <summary> + /// Creates circle vertecies and triangles around the midPoint at (0,0,0) + /// </summary> + /// <param name="points"></param> + /// <param name="invert"></param> + /// <returns></returns> + public static (Vector3[], int[]) CreateTriangle(float ab, float height, float c, Vector3 offset, bool invert = false) + { + Vector3[] edge = GetTrianglePoints(ab, height, c); + Vector3[] vertices = + new Vector3[] { offset } + .AppendRange(edge) + .Append(edge[0]) + .ToArray(); + + return CreatePlane(vertices, invert); + } + + public static (Vector3[], int[]) CreateTriangle(float ab, float height, float c, bool invert = false) + => CreateTriangle(ab, height, c, Vector3.zero, invert); + #endregion Implementation +} diff --git a/Assets/Scripts/MeshGenerator/TriangleGenerator.cs.meta b/Assets/Scripts/MeshGenerator/TriangleGenerator.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..073157412d7988a2ec6706b5b67b15dccff95363 --- /dev/null +++ b/Assets/Scripts/MeshGenerator/TriangleGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 649f3f75f7c1fff4584f185c14c7ea79 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset index 200e61f66ac65754e32d641bcca9475ac1f220d3..f87645289604f36f758df27607805e5899bbdd62 100644 --- a/ProjectSettings/TagManager.asset +++ b/ProjectSettings/TagManager.asset @@ -33,7 +33,7 @@ TagManager: - TalkingZone - Tree - SnapZone - - + - Triangle - - -