diff --git a/Assets/Plugins/PluginAssembly.asmdef b/Assets/Plugins/PluginAssembly.asmdef new file mode 100644 index 0000000000000000000000000000000000000000..d3861c77709c292766f8fe108751c02ad03bd8eb --- /dev/null +++ b/Assets/Plugins/PluginAssembly.asmdef @@ -0,0 +1,14 @@ +{ + "name": "PluginAssembly", + "rootNamespace": "", + "references": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": true, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/Plugins/PluginAssembly.asmdef.meta b/Assets/Plugins/PluginAssembly.asmdef.meta new file mode 100644 index 0000000000000000000000000000000000000000..dd16f9611c82642ca424044c5f5b0ad4c45e2f2e --- /dev/null +++ b/Assets/Plugins/PluginAssembly.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4db3019411610f640ae53ea9ba8dab0a +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Prefabs/UI/Facts/Factscreen.prefab b/Assets/Resources/Prefabs/UI/Facts/Factscreen.prefab index 6d5da8be2f117f3d45b95b6d0f2ae2a5a1bac2af..83d0aba49e81111698827859f494a1fb85c02985 100644 --- a/Assets/Resources/Prefabs/UI/Facts/Factscreen.prefab +++ b/Assets/Resources/Prefabs/UI/Facts/Factscreen.prefab @@ -493,7 +493,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: -33793.79} + m_AnchoredPosition: {x: 0, y: -41183.812} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 1} --- !u!114 &8823539307371861913 diff --git a/Assets/ScriptableObjects/Gadgets/PointerDataContainerGadgetInit.asset b/Assets/ScriptableObjects/Gadgets/PointerDataContainerGadgetInit.asset index a8e6e5eb35ef62d649f0a3e7e5bc33ed3f378b46..c9dd35f66c46667f799abbd56ce474c37095e089 100644 --- a/Assets/ScriptableObjects/Gadgets/PointerDataContainerGadgetInit.asset +++ b/Assets/ScriptableObjects/Gadgets/PointerDataContainerGadgetInit.asset @@ -20,7 +20,7 @@ MonoBehaviour: ButtonIndx: 1 LayerHitMask: serializedVersion: 2 - m_Bits: 1572913 + m_Bits: 1581105 SecondaryLayerMask: serializedVersion: 2 m_Bits: 0 diff --git a/Assets/Scripts/InteractionEngine/FactHandling/FactObject.cs b/Assets/Scripts/InteractionEngine/FactHandling/FactObject.cs index 039cd1189da79f818d8bf83403ef41dcfc119888..c4986953c485043159a46a6b86c1fddad106d919 100644 --- a/Assets/Scripts/InteractionEngine/FactHandling/FactObject.cs +++ b/Assets/Scripts/InteractionEngine/FactHandling/FactObject.cs @@ -162,7 +162,7 @@ public void CoroutineCascadeForMeAndChildrenAllRenderer(Func<FactObject, Rendere CascadeForMeAndChildren((FactObject fo) => fo.ForAllRenderer((Renderer ren) => - StartCoroutine(func(fo, ren)) + this.StartCoroutine(func(fo, ren)) )); } } diff --git a/Assets/Scripts/InteractionEngine/Gadgets/Remover.cs b/Assets/Scripts/InteractionEngine/Gadgets/Remover.cs index 710785eebce538547c66675e47c2c437dda99947..359c463eded1aa02e5e29785976cfeefae6a10e3 100644 --- a/Assets/Scripts/InteractionEngine/Gadgets/Remover.cs +++ b/Assets/Scripts/InteractionEngine/Gadgets/Remover.cs @@ -1,5 +1,6 @@ using System.Collections; using System.Collections.Generic; +using System.Linq; using UnityEngine; using static CommunicationEvents; @@ -12,13 +13,17 @@ public class Remover : Gadget public override void _Hit(RaycastHit[] hit) { - // It's probably better to keep this only on the first hit and not multiple hits - string hid = hit[0].transform.GetComponent<FactObject>()?.URI; - if (hid == null) - return; + bool samestep = false; + foreach (string uri in hit.Select(h => h.transform.GetComponent<FactObject>()?.URI)) + { + if(uri == null) + continue; - Workflow.Add(hid); - StageStatic.stage.factState.Remove(Workflow[0], samestep: false, gadget: this); + Workflow.Add(uri); + StageStatic.stage.factState.Remove(Workflow.Last(), samestep, gadget: this); + + samestep = true; + } ResetGadget(); } diff --git a/Assets/Scripts/InteractionEngine/ShinyThings.cs b/Assets/Scripts/InteractionEngine/ShinyThings.cs index f3bbe29d3bdf50ca7017dc663a28571256660951..4a10ae48c706306d1bb8d6845d62a5563bf6c690 100644 --- a/Assets/Scripts/InteractionEngine/ShinyThings.cs +++ b/Assets/Scripts/InteractionEngine/ShinyThings.cs @@ -7,7 +7,7 @@ public class ShinyThings : MonoBehaviour { public WorldCursor Cursor; //Attributes for Highlighting of Facts when Mouse-Over - private FactObject lastFactSelection; + private List<FactObject> LastFactSelection = new(); //Variables for Pushout-Highlighting private static float timerDuration = 2.5f; @@ -34,10 +34,7 @@ private void Awake() CommunicationEvents.AnimateExistingAsSolutionEvent.AddListener(HighlightWithFireworks); rain = rain_wait = IEnumeratorExtensions.yield_break; - } - public void Start() - { if (Cursor == null) Cursor = GetComponent<WorldCursor>(); @@ -49,30 +46,30 @@ public void Start() public void Update() { - foreach(var hit in Cursor.Hits) - HighlightCurserHit(hit); + if (Cursor?.Hits != null) + HighlightCurserHit(Cursor.Hits); } - private void HighlightCurserHit(RaycastHit hit) + private void HighlightCurserHit(RaycastHit[] hits) { - FactObject selected_fact_obj = hit.transform?.GetComponentInChildren<FactObject>(); + List<FactObject> selected_fact_objs = hits + .Select(h => h.transform?.GetComponentInChildren<FactObject>()) + .Where(f => f != null) + .ToList(); - //Set the last Fact unselected - if (this.lastFactSelection != null - && (selected_fact_obj == null || this.lastFactSelection != selected_fact_obj)) - { - ApplyMaterial(lastFactSelection, lastFactSelection.Default); - this.lastFactSelection = null; - } + //Set the last Facts unselected + foreach (var lastFact in LastFactSelection) + if (lastFact != null + && !selected_fact_objs.Contains(lastFact)) + ApplyMaterial(lastFact, lastFact.Default); - //Set the Fact that was Hit as selected - if (selected_fact_obj != null && hit.transform != null - && (hit.transform.CompareTag("Selectable") || hit.transform.CompareTag("SnapZone")) - && (this.lastFactSelection == null || this.lastFactSelection != selected_fact_obj)) - { - ApplyMaterial(selected_fact_obj, selected_fact_obj.Selected); - this.lastFactSelection = selected_fact_obj; - } + //Set the Facts that were Hit as selected + foreach (var fact_obj in selected_fact_objs) + if (!LastFactSelection.Contains(fact_obj)) + ApplyMaterial(fact_obj, fact_obj.Selected); + + LastFactSelection = selected_fact_objs; + return; void ApplyMaterial(FactObject root, Material new_mat) => root.CoroutineCascadeForMeAndChildrenAllRenderer( @@ -109,7 +106,7 @@ public void HighlightWithFireworks(Fact fact, FactObject.FactMaterials mat) IEnumerator BlossomAndDie() { GameObject firework = GameObject.Instantiate - ( Fireworks_Animation + (Fireworks_Animation , fact.Representation.transform ); diff --git a/Assets/Scripts/InteractionEngine/WorldCursor.cs b/Assets/Scripts/InteractionEngine/WorldCursor.cs index 96eefbace24c60009ea1da5b04ea2bc8bbf943e3..e90f4caf0b7466f69b633ea449a0b192ac7807da 100644 --- a/Assets/Scripts/InteractionEngine/WorldCursor.cs +++ b/Assets/Scripts/InteractionEngine/WorldCursor.cs @@ -11,7 +11,7 @@ public class WorldCursor : MonoBehaviour // TODO experimentell for multiple hits public RaycastHit[] Hits; - public float CollisionDistance = 0.1f; + public float IntersectionDistance = 0.1f; public string deactivateSnapKey; private Camera Cam; @@ -118,9 +118,15 @@ void Update() break; // we had at least 1 succesfull case } - if (i + 1 < Hits.Length - && Hits[i + 1].distance - Hits[i + 0].distance < CollisionDistance) - { // we have two objects intersecting + if (i == Hits.Length) + return; // no valid Hit + + Hits = Hits.Skip(i) + .TakeWhile(h => h.distance - Hits[i].distance < IntersectionDistance) + .ToArray(); + + if (Hits.Length > 1) + { // we have two or more objects intersecting if (facts[i + 0] is RayFact rayFact1 && facts[i + 1] is RayFact rayFact2) { @@ -128,21 +134,14 @@ void Update() , rayFact2.Point1.Point, rayFact2.Dir , rayFact1.Point1.Point, rayFact1.Dir)) { - Hits[i].point = intersectionPoint; + Hits[i + 0].point = intersectionPoint; + Hits[i + 1].point = intersectionPoint; } } //TODO: check for other types of intersection. Future Work } - int nr_hits = Hits.Length - i; - if (i == Hits.Length) - { - i = 0; - nr_hits = 1; - } - Hits = Hits.Slice(i, nr_hits).ToArray(); - transform.up = Hits[0].normal; transform.position = Hits[0].point + .01f * Hits[0].normal; diff --git a/Assets/Scripts/UI/MainMenue/MenueLoader.cs b/Assets/Scripts/UI/MainMenue/MenueLoader.cs index 2a661342d8ed4fae3f5eca42827e2fc370b7ec54..54e60417ef9f8326f9fd8c7fd28d89d68ccc51b6 100644 --- a/Assets/Scripts/UI/MainMenue/MenueLoader.cs +++ b/Assets/Scripts/UI/MainMenue/MenueLoader.cs @@ -33,7 +33,7 @@ public void RevertMode() /// <param name="select">Page to switch to</param> public void SetMode(int select) { - gameObject.SetActiveAllChildren(false); + Pages.SetActiveAllChildren(false); mode_last = mode; mode = select; diff --git a/UserSettings/EditorUserSettings.asset b/UserSettings/EditorUserSettings.asset index ebc89c2c6e854f451500f10d795f696d9cc45664..dc93d9123a6d75673f0833bc7e502b6f7fe387cf 100644 --- a/UserSettings/EditorUserSettings.asset +++ b/UserSettings/EditorUserSettings.asset @@ -30,10 +30,10 @@ EditorUserSettings: value: 00540c020302515f0b0f5f2711265c44171519797e7c7463787d4d63e1b8303c flags: 0 RecentlyUsedSceneGuid-8: - value: 57505505560608585a56557116730644404e4d7b7c7b7562787e4f66e4b1313e + value: 0709560454055c0d0c5e5c2444740b4413154a72792d22627c714963e0b6373d flags: 0 RecentlyUsedSceneGuid-9: - value: 0709560454055c0d0c5e5c2444740b4413154a72792d22627c714963e0b6373d + value: 57505505560608585a56557116730644404e4d7b7c7b7562787e4f66e4b1313e flags: 0 RecentlyUsedScenePath-0: value: 22424703114646680e0b0227036c681f041b1c39631c3435281e1221eee47a2decee22f0