diff --git a/Assets/Resources/Prefabs/UI/Ingame/GadgetCanvas.prefab b/Assets/Resources/Prefabs/UI/Ingame/GadgetCanvas.prefab index 1f19e8ec9f0683a3e63136b9b21a5ea495b2d81a..d587dedb6ae3175b173545b76f0e3025a5b0f1db 100644 --- a/Assets/Resources/Prefabs/UI/Ingame/GadgetCanvas.prefab +++ b/Assets/Resources/Prefabs/UI/Ingame/GadgetCanvas.prefab @@ -186,7 +186,7 @@ MonoBehaviour: m_GameObject: {fileID: 5250976265380185965} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f6c56cda17d48fa47a0c06cea90accba, type: 3} + m_Script: {fileID: 11500000, guid: dadf4ac08a30dfa43aa57ac646a68767, type: 3} m_Name: m_EditorClassIdentifier: _GadgetButton: {fileID: 5345241908758045532, guid: 4804ff343c7a9724abfb4587ac7da08a, diff --git a/Assets/Scripts/GenerateDemoFiles.cs b/Assets/Scripts/GenerateDemoFiles.cs index cf03341e85ab541acec74332a441e7993a9b3a02..16e6f4813b8423af5a8eb4102402c873703104d5 100644 --- a/Assets/Scripts/GenerateDemoFiles.cs +++ b/Assets/Scripts/GenerateDemoFiles.cs @@ -9,14 +9,19 @@ public class GenerateDemoFiles public static void GenerateAll() { if (!firstcall) return; - firstcall = false; + if (GameObject.FindObjectOfType<GadgetBehaviour>(true) == null) { + Debug.LogError("Cannot GenerateDemoFiles without populated GadgetManager"); + return; + } Debug.LogWarning("Generating and Overwriting Stage Files"); - GenerateDemoA(); - GenerateDemoB(); + firstcall = false; + + GenerateTreeStage(); + GenerateRiverStage(); } - public static void GenerateDemoA() + public static void GenerateTreeStage() { // Params float minimalSolutionHight = 6; @@ -57,15 +62,16 @@ public static void GenerateDemoA() new List<SolutionOrganizer.SubSolution> { new SolutionOrganizer.SubSolution(new HashSet<string> { target_Id }, null, null, new LineFactHightDirectionComparer()) }; - // Set Gadgets + // Set Gadgets/ Scrolls StageStatic.stage.AllowedGadgets = null; + StageStatic.stage.AllowedScrolls = null; // Save StageStatic.SetMode(StageStatic.Mode.Create); StageStatic.stage.store(); } - public static void GenerateDemoB() + public static void GenerateRiverStage() { // Params float minimalSolutionHight = 6; @@ -109,8 +115,9 @@ public static void GenerateDemoB() new SolutionOrganizer.SubSolution(null, new List<int> { 1 }, new List<int> { 0 }, new LineFactHightComparer()), }; - // Set Gadgets + // Set Gadgets/ Scrolls StageStatic.stage.AllowedGadgets = new() { new Pointer(), new Tape(), new AngleTool(), new LineTool(), new LotTool(), new Pendulum(), new Remover() }; + StageStatic.stage.AllowedScrolls = new() { "OppositeLen" }; // Save StageStatic.SetMode(StageStatic.Mode.Create); diff --git a/Assets/Scripts/InteractionEngine/FactHandling/FactManager.cs b/Assets/Scripts/InteractionEngine/FactHandling/FactManager.cs index dec8045d6b02a29daed04ce7d63bd97b4b3cac20..234273d9e758e4104a635ac4e70a98060aa677e7 100644 --- a/Assets/Scripts/InteractionEngine/FactHandling/FactManager.cs +++ b/Assets/Scripts/InteractionEngine/FactHandling/FactManager.cs @@ -21,7 +21,7 @@ public static Fact AddFactIfNotFound(Fact fact, out bool exists, bool samestep, return StageStatic.stage.factState[ StageStatic.stage.factState.Add( fact, out exists, samestep - , gadget ?? (scroll_label == null ? GadgetManager.ActiveGadget : null) + , gadget ?? (scroll_label == null ? GadgetBehaviour.ActiveGadget : null) , scroll_label )]; } diff --git a/Assets/Scripts/InteractionEngine/Gadgets/AngleTool.cs b/Assets/Scripts/InteractionEngine/Gadgets/AngleTool.cs index 330f60ee99560fdc3b78b1d76f3aa3ebefb4f6ee..190a32b5689e500cfe3c83b6bc8f4207e57a7112 100644 --- a/Assets/Scripts/InteractionEngine/Gadgets/AngleTool.cs +++ b/Assets/Scripts/InteractionEngine/Gadgets/AngleTool.cs @@ -56,10 +56,10 @@ protected override void _ResetGadget() protected override void _ActivateLineDrawing() { //In AngleMode with 3 Points we want to draw nearly a rectangle so we add a startPoint and an Endpoint to this preview - GadgetManager.LineRenderer.positionCount = curveDrawingVertexCount + 2; + GadgetBehaviour.LineRenderer.positionCount = curveDrawingVertexCount + 2; - GadgetManager.LineRenderer.startWidth = 0.05f; - GadgetManager.LineRenderer.endWidth = 0.05f; + GadgetBehaviour.LineRenderer.startWidth = 0.05f; + GadgetBehaviour.LineRenderer.endWidth = 0.05f; curveRadius = 0.3f * (AnglePoints[0].Point - AnglePoints[1].Point).magnitude; } @@ -69,10 +69,10 @@ protected override void _UpdateLineDrawing() //Start: AngleMiddlePoint -> FirstPoint of Curve SetPosition(0, AnglePoints[1].Point); //End: LastPoint of Curve -> AngleMiddlePoint - SetPosition(GadgetManager.LineRenderer.positionCount - 1, AnglePoints[1].Point); + SetPosition(GadgetBehaviour.LineRenderer.positionCount - 1, AnglePoints[1].Point); //Circle: p + r(cost)v1 + r(sint)v2: t real, v1&v2 unit orthogonal, r radius - Vector3 v1 = (GadgetManager.Cursor.transform.position - AnglePoints[1].Point).normalized; + Vector3 v1 = (GadgetBehaviour.Cursor.transform.position - AnglePoints[1].Point).normalized; Vector3 _v2 = (AnglePoints[0].Point - AnglePoints[1].Point); Vector3 v2 = (_v2 - Math3d.ProjectPointOnLine(Vector3.zero, v1, _v2)).normalized; float increment = 2 * Mathf.PI / (curveDrawingVertexCount-1) * Vector3.Angle(v1, _v2) / 360; diff --git a/Assets/Scripts/InteractionEngine/Gadgets/Gadget.cs b/Assets/Scripts/InteractionEngine/Gadgets/Gadget.cs index ae69b469911ce0b2b701307f0ba83567ddd17fab..f4aadcf6a9c6af13baabaea44af6766d4b094aaf 100644 --- a/Assets/Scripts/InteractionEngine/Gadgets/Gadget.cs +++ b/Assets/Scripts/InteractionEngine/Gadgets/Gadget.cs @@ -92,7 +92,7 @@ public Gadget() public void Init(bool overrite) { if ( init_success - || GadgetManager.DataContainerGadgetDict == null) + || GadgetBehaviour.DataContainerGadgetDict == null) return; Type this_type = this.GetType(); @@ -103,12 +103,12 @@ public void Init(bool overrite) } var GadgetID = GadgetTypeToIDs[this_type]; - if (!GadgetManager.DataContainerGadgetDict.ContainsKey(GadgetID)) + if (!GadgetBehaviour.DataContainerGadgetDict.ContainsKey(GadgetID)) { Debug.LogError("No " + GadgetID.ToString() + "in assigned " + typeof(DataContainerGadgetCollection).Name + "!"); return; } - var data_cache = GadgetManager.DataContainerGadgetDict[GadgetID]; + var data_cache = GadgetBehaviour.DataContainerGadgetDict[GadgetID]; if (overrite || Rank == int.MinValue) Rank = data_cache.Rank; @@ -124,12 +124,12 @@ public void Init(bool overrite) SecondaryLayerMask = data_cache.SecondaryLayerMask; if (overrite || ButtonIndx < 0) ButtonIndx = - data_cache.ButtonIndx < GadgetManager.ButtonSprites.Length + data_cache.ButtonIndx < GadgetBehaviour.ButtonSprites.Length && data_cache.ButtonIndx >= 0 ? data_cache.ButtonIndx : 0; if (overrite || MaterialIndx < 0) MaterialIndx = - data_cache.MaterialIndx < GadgetManager.Materials.Length + data_cache.MaterialIndx < GadgetBehaviour.Materials.Length && data_cache.MaterialIndx >= 0 ? data_cache.MaterialIndx : 0; @@ -144,8 +144,8 @@ public void Awake() public void Enable() { - GadgetManager.Cursor.setLayerMask(~IgnoreLayerMask.value); - GadgetManager.Cursor.MaxRange = MaxRange; + GadgetBehaviour.Cursor.setLayerMask(~IgnoreLayerMask.value); + GadgetBehaviour.Cursor.MaxRange = MaxRange; ResetGadget(); _Enable(); @@ -162,7 +162,7 @@ public void Update() if (!CommunicationEvents.GadgetCanBeUsed) return; - if (GadgetManager.LineRenderer.enabled) + if (GadgetBehaviour.LineRenderer.enabled) UpdateLineDrawing(); _Update(); @@ -190,16 +190,16 @@ public virtual void _Hit(RaycastHit hit) { } protected void ActivateLineDrawing() { - GadgetManager.LineRenderer.enabled = true; - GadgetManager.LineRenderer.material = GadgetManager.Materials[MaterialIndx]; + GadgetBehaviour.LineRenderer.enabled = true; + GadgetBehaviour.LineRenderer.material = GadgetBehaviour.Materials[MaterialIndx]; _ActivateLineDrawing(); } protected void DeactivateLineDrawing() { - GadgetManager.LineRenderer.positionCount = 0; - GadgetManager.LineRenderer.enabled = false; + GadgetBehaviour.LineRenderer.positionCount = 0; + GadgetBehaviour.LineRenderer.enabled = false; _DeactivateLineDrawing(); } @@ -214,9 +214,9 @@ protected virtual void _DeactivateLineDrawing() { } protected virtual void _UpdateLineDrawing() { } protected Vector3 GetPosition(int i) - => GadgetManager.LineRenderer.GetPosition(i); + => GadgetBehaviour.LineRenderer.GetPosition(i); protected void SetPosition(int i, Vector3 v) - => GadgetManager.LineRenderer.SetPosition(i, v); + => GadgetBehaviour.LineRenderer.SetPosition(i, v); public void ResetGadget() { diff --git a/Assets/Scripts/InteractionEngine/Gadgets/GadgetManager.cs b/Assets/Scripts/InteractionEngine/Gadgets/GadgetBehaviour.cs similarity index 89% rename from Assets/Scripts/InteractionEngine/Gadgets/GadgetManager.cs rename to Assets/Scripts/InteractionEngine/Gadgets/GadgetBehaviour.cs index 04dd41f3f7736eb417fae2f0d0c4a6dffdf0cd55..feb0f1c9969631efb506d73e3d21cb882a873eda 100644 --- a/Assets/Scripts/InteractionEngine/Gadgets/GadgetManager.cs +++ b/Assets/Scripts/InteractionEngine/Gadgets/GadgetBehaviour.cs @@ -7,10 +7,10 @@ using UnityEngine.UI; -public class GadgetManager : MonoBehaviour, ISerializationCallbackReceiver +public class GadgetBehaviour : MonoBehaviour, ISerializationCallbackReceiver { // could be worked around of. But as long as not needed: this is better - public static GadgetManager Singelton = null; + public static GadgetBehaviour Singelton = null; /// <summary>Which cursor to use</summary> /// <remarks>When not set in Inspector, will be searching for any <see cref="WorldCursor"/>.</remarks> @@ -88,6 +88,16 @@ private void Awake() void Start() { + void CreateButton(int gid) + { + GameObject button = GameObject.Instantiate(GadgetButton, parent: ParentMe.transform); + + button.GetComponent<Image>().sprite = ButtonSprites[gadgets[gid].ButtonIndx]; + var cache = gameObject.transform.parent.parent as RectTransform; + (buttons[gid] = button.GetComponent<Button>()) + .onClick.AddListener(() => ActivateGadget(gid)); + } + gadgets = ( StageStatic.stage.AllowedGadgets == null || StageStatic.stage.AllowedGadgets.Count == 0 @@ -146,17 +156,6 @@ void OnEnable() gadgets[ActiveGadgetInd].Enable(); } - private void CreateButton(int gid) - { - GameObject button = GameObject.Instantiate(GadgetButton); - button.transform.SetParent(ParentMe.transform); - - button.GetComponent<Image>().sprite = ButtonSprites[gadgets[gid].ButtonIndx]; - var cache = gameObject.transform.parent.parent as RectTransform; - (buttons[gid] = button.GetComponent<Button>()) - .onClick.AddListener(() => ActivateGadget(gid)); - } - public static void ActivateGadget(int gid) { ParentMe.SetActive(true); diff --git a/Assets/Scripts/InteractionEngine/Gadgets/GadgetManager.cs.meta b/Assets/Scripts/InteractionEngine/Gadgets/GadgetBehaviour.cs.meta similarity index 83% rename from Assets/Scripts/InteractionEngine/Gadgets/GadgetManager.cs.meta rename to Assets/Scripts/InteractionEngine/Gadgets/GadgetBehaviour.cs.meta index 8a20e777ad8cfa0232ff46796c366feda41d2605..4ea57ac7c4f376f9f20023a56844dc7f897de67c 100644 --- a/Assets/Scripts/InteractionEngine/Gadgets/GadgetManager.cs.meta +++ b/Assets/Scripts/InteractionEngine/Gadgets/GadgetBehaviour.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f6c56cda17d48fa47a0c06cea90accba +guid: dadf4ac08a30dfa43aa57ac646a68767 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Scripts/InteractionEngine/Gadgets/LineTool.cs b/Assets/Scripts/InteractionEngine/Gadgets/LineTool.cs index d5e8aa449c9eef94c1ef824227c42419cf15871f..b6c879946a11f4debc91e17c383569a3ccbbf001 100644 --- a/Assets/Scripts/InteractionEngine/Gadgets/LineTool.cs +++ b/Assets/Scripts/InteractionEngine/Gadgets/LineTool.cs @@ -46,11 +46,11 @@ protected override void _ResetGadget() protected override void _ActivateLineDrawing() { - GadgetManager.LineRenderer.enabled = true; - GadgetManager.LineRenderer.positionCount = 2; + GadgetBehaviour.LineRenderer.enabled = true; + GadgetBehaviour.LineRenderer.positionCount = 2; - GadgetManager.LineRenderer.startWidth = 0.095f; - GadgetManager.LineRenderer.endWidth = 0.095f; + GadgetBehaviour.LineRenderer.startWidth = 0.095f; + GadgetBehaviour.LineRenderer.endWidth = 0.095f; //Add the position of the Fact for the start of the Line SetPosition(0, LineModeFirstPointSelected.Representation.transform.position); //The second point is the same point at the moment @@ -60,6 +60,6 @@ protected override void _ActivateLineDrawing() //Updates the second-point of the Line when First Point was selected in LineMode protected override void _UpdateLineDrawing() { - SetPosition(1, GadgetManager.Cursor.transform.position); + SetPosition(1, GadgetBehaviour.Cursor.transform.position); } } diff --git a/Assets/Scripts/InteractionEngine/Gadgets/LotTool.cs b/Assets/Scripts/InteractionEngine/Gadgets/LotTool.cs index 0727a40f460ae92abc90dcb3e43e8814af060b22..358479644c384c6a0890e053bad4445da72cd6b8 100644 --- a/Assets/Scripts/InteractionEngine/Gadgets/LotTool.cs +++ b/Assets/Scripts/InteractionEngine/Gadgets/LotTool.cs @@ -102,13 +102,13 @@ protected override void _ResetGadget() protected override void _ActivateLineDrawing() { - GadgetManager.LineRenderer.positionCount = 3; + GadgetBehaviour.LineRenderer.positionCount = 3; - GadgetManager.LineRenderer.startWidth = 0.095f; - GadgetManager.LineRenderer.endWidth = 0.095f; + GadgetBehaviour.LineRenderer.startWidth = 0.095f; + GadgetBehaviour.LineRenderer.endWidth = 0.095f; //start at curser - SetPosition(0, GadgetManager.Cursor.transform.position); + SetPosition(0, GadgetBehaviour.Cursor.transform.position); //Project curser perpendicular on Line for intersection-point SetPosition(1, Math3d.ProjectPointOnLine(LotModeLinePointA.Point, LotModeLineSelected.Dir, GetPosition(0))); //end at Point on the line (i.c.o. projection beeing outside a finite line) @@ -121,11 +121,11 @@ protected override void _UpdateLineDrawing() if (LotModeIsPointSelected) { SetPosition(1, LotModeIntersectionPoint.Point); - SetPosition(0, Math3d.ProjectPointOnLine(GadgetManager.Cursor.transform.position, LotModeLineSelected.Dir, GetPosition(1))); + SetPosition(0, Math3d.ProjectPointOnLine(GadgetBehaviour.Cursor.transform.position, LotModeLineSelected.Dir, GetPosition(1))); } else { - SetPosition(0, GadgetManager.Cursor.transform.position); + SetPosition(0, GadgetBehaviour.Cursor.transform.position); SetPosition(1, Math3d.ProjectPointOnLine(LotModeLinePointA.Point, LotModeLineSelected.Dir, GetPosition(0))); } } diff --git a/Assets/Scripts/InteractionEngine/Gadgets/Pendulum.cs b/Assets/Scripts/InteractionEngine/Gadgets/Pendulum.cs index 1d1f6e3e4fec70d2697588e00e46ce4cd452e296..db62f8b9cb1b79af8a43f50d8521111bd25ba496 100644 --- a/Assets/Scripts/InteractionEngine/Gadgets/Pendulum.cs +++ b/Assets/Scripts/InteractionEngine/Gadgets/Pendulum.cs @@ -31,16 +31,16 @@ public override void _Hit(RaycastHit hit) protected override void _ActivateLineDrawing() { - GadgetManager.LineRenderer.positionCount = 2; + GadgetBehaviour.LineRenderer.positionCount = 2; - GadgetManager.LineRenderer.startWidth = 0.095f; - GadgetManager.LineRenderer.endWidth = 0.095f; + GadgetBehaviour.LineRenderer.startWidth = 0.095f; + GadgetBehaviour.LineRenderer.endWidth = 0.095f; } //Updates the points of the Lines when baseLine was selected in LineMode protected override void _UpdateLineDrawing() { - SetPosition(0, GadgetManager.Cursor.transform.position); + SetPosition(0, GadgetBehaviour.Cursor.transform.position); //Raycast downwoard if (Physics.Raycast(GetPosition(0), Vector3.down, out RaycastHit ground, Mathf.Infinity, this.SecondaryLayerMask.value)) diff --git a/Assets/Scripts/InteractionEngine/Gadgets/PoleTool.cs b/Assets/Scripts/InteractionEngine/Gadgets/PoleTool.cs index ef8c86868634c706c375f4644e3dc64e1d07cefa..644e3d16dbc7c79a3658878c973d1a972bf0584f 100644 --- a/Assets/Scripts/InteractionEngine/Gadgets/PoleTool.cs +++ b/Assets/Scripts/InteractionEngine/Gadgets/PoleTool.cs @@ -20,7 +20,7 @@ public override void _Enable() public override void _Hit(RaycastHit hit) { if (!Physics.Raycast( - GadgetManager.Cursor.transform.position + Vector3.up * (float)Math3d.vectorPrecission + GadgetBehaviour.Cursor.transform.position + Vector3.up * (float)Math3d.vectorPrecission , Vector3.down, MaxHeight + (float)Math3d.vectorPrecission , LayerMask.GetMask(new string[]{"Default", "Tree"}))) return; @@ -40,16 +40,16 @@ public override void _Hit(RaycastHit hit) protected override void _ActivateLineDrawing() { - GadgetManager.LineRenderer.positionCount = 2; + GadgetBehaviour.LineRenderer.positionCount = 2; - GadgetManager.LineRenderer.startWidth = 0.095f; - GadgetManager.LineRenderer.endWidth = 0.095f; + GadgetBehaviour.LineRenderer.startWidth = 0.095f; + GadgetBehaviour.LineRenderer.endWidth = 0.095f; } //Updates the points of the Lines when baseLine was selected in LineMode protected override void _UpdateLineDrawing() { - SetPosition(0, GadgetManager.Cursor.transform.position); + SetPosition(0, GadgetBehaviour.Cursor.transform.position); //Raycast upwoard if (Physics.Raycast(GetPosition(0), Vector3.up, out RaycastHit ceiling, poleHeight, this.SecondaryLayerMask.value)) diff --git a/Assets/Scripts/InteractionEngine/Gadgets/Tape.cs b/Assets/Scripts/InteractionEngine/Gadgets/Tape.cs index 44dfccb89633174d50e2ead9fbd47996c9dcac9d..19898d6b7bbcd74443e79ea587f382bade373d3c 100644 --- a/Assets/Scripts/InteractionEngine/Gadgets/Tape.cs +++ b/Assets/Scripts/InteractionEngine/Gadgets/Tape.cs @@ -45,10 +45,10 @@ protected override void _ResetGadget() protected override void _ActivateLineDrawing() { - GadgetManager.LineRenderer.positionCount = 2; + GadgetBehaviour.LineRenderer.positionCount = 2; - GadgetManager.LineRenderer.startWidth = 0.095f; - GadgetManager.LineRenderer.endWidth = 0.095f; + GadgetBehaviour.LineRenderer.startWidth = 0.095f; + GadgetBehaviour.LineRenderer.endWidth = 0.095f; //Add the position of the Fact for the start of the Line SetPosition(0, TapeModeFirstPointSelected.Representation.transform.position); //The second point is the same point at the moment @@ -58,6 +58,6 @@ protected override void _ActivateLineDrawing() //Updates the second-point of the Line when First Point was selected in LineMode protected override void _UpdateLineDrawing() { - SetPosition(1, GadgetManager.Cursor.transform.position); + SetPosition(1, GadgetBehaviour.Cursor.transform.position); } } \ No newline at end of file diff --git a/Assets/Scripts/InteractionEngine/ToolModeText.cs b/Assets/Scripts/InteractionEngine/ToolModeText.cs index 3d8c8b08b9fb41ab06604f822f485dc46b6b72f7..f1728cf3892b56eeb9d6be912d4fa42ebabf587a 100644 --- a/Assets/Scripts/InteractionEngine/ToolModeText.cs +++ b/Assets/Scripts/InteractionEngine/ToolModeText.cs @@ -11,6 +11,6 @@ void Start() void OnToolModeChanged(int id) { //When ToolMode changes: Change Text of active gadget - gameObject.GetComponentInChildren<UnityEngine.UI.Text>().text = GadgetManager.gadgets[id].UiName; + gameObject.GetComponentInChildren<UnityEngine.UI.Text>().text = GadgetBehaviour.gadgets[id].UiName; } } diff --git a/Assets/Scripts/InteractionEngine/WorldCursor.cs b/Assets/Scripts/InteractionEngine/WorldCursor.cs index c34a6e4003bd832c22b8a7db1eb786ce6aff5495..0432bef8116f4d772436b0a7d4162d753cc8e546 100644 --- a/Assets/Scripts/InteractionEngine/WorldCursor.cs +++ b/Assets/Scripts/InteractionEngine/WorldCursor.cs @@ -5,7 +5,7 @@ using UnityEngine; using UnityEngine.Events; using UnityEngine.EventSystems; -using static GadgetManager; +using static GadgetBehaviour; using UnityEngine.InputSystem; using static UIconfig; @@ -171,7 +171,7 @@ void CheckMouseButtons1(bool OnSnap = false, bool onLine = false) { CommunicationEvents.TriggerEvent.Invoke(Hit); } - else if (GadgetManager.ActiveGadget is Pointer) + else if (GadgetBehaviour.ActiveGadget is Pointer) { if (!onLine) Hit.collider.enabled = false; CommunicationEvents.TriggerEvent.Invoke(Hit); diff --git a/Assets/Scripts/InventoryStuff/DisplayScrolls.cs b/Assets/Scripts/InventoryStuff/DisplayScrolls.cs index ae6a58960e4f9fcd1a446c3ac362f91aef3b1825..5de2ac5208f084bad8e370515d5aa2af75983773 100644 --- a/Assets/Scripts/InventoryStuff/DisplayScrolls.cs +++ b/Assets/Scripts/InventoryStuff/DisplayScrolls.cs @@ -1,6 +1,7 @@ using System.Collections; using System.Collections.Generic; using System.IO; +using System.Linq; using TMPro; using UnityEngine; using UnityEngine.Networking; @@ -11,6 +12,7 @@ public class DisplayScrolls : MonoBehaviour public int tryScrollListTimes = 2; static public List<Scroll> AvailableScrolls; + static public List<Scroll> AllowedScrolls; public GameObject[] ScrollButtons; public GameObject ScrollPrefab; public GameObject DetailScreen; @@ -93,19 +95,23 @@ IEnumerator getScrollsfromServer() void BuildScrolls(string jsonString) { AvailableScrolls = Scroll.FromJSON(jsonString); - ScrollButtons = new GameObject[AvailableScrolls.Count]; + AllowedScrolls = AvailableScrolls + .Where(s => StageStatic.stage.AllowedScrolls?.Contains(s.label) ?? true) + .ToList(); + + ScrollButtons = new GameObject[AllowedScrolls.Count()]; //Build Selection-GUI of Scrolls - for (int i = 0; i < AvailableScrolls.Count; i++) + for (int i = 0; i < AllowedScrolls.Count; i++) { var obj = Instantiate(ScrollPrefab, Vector3.zero, Quaternion.identity, transform); obj.GetComponent<RectTransform>().localPosition = GetPosition(i); - obj.GetComponent<ScrollClickedScript>().scroll = AvailableScrolls[i]; + obj.GetComponent<ScrollClickedScript>().scroll = AllowedScrolls[i]; obj.GetComponent<ScrollClickedScript>().DetailScreen = this.DetailScreen; - obj.transform.GetChild(0).gameObject.GetComponent<TextMeshProUGUI>().text = AvailableScrolls[i].label; + obj.transform.GetChild(0).gameObject.GetComponent<TextMeshProUGUI>().text = AllowedScrolls[i].label; ScrollButtons[i] = obj; } - Scroll preferredStartScroll = AvailableScrolls.Find(x => x.label.Equals(preferredStartScrollName)); + Scroll preferredStartScroll = AllowedScrolls.Find(x => x.label.Equals(preferredStartScrollName)); if (preferredStartScroll != null) this.DetailScreen.GetComponent<ScrollDetails>().setScroll(preferredStartScroll); } diff --git a/Assets/Scripts/Loading/Stage.cs b/Assets/Scripts/Loading/Stage.cs index 8891c205e8358639b8f72faac0554d021e05938d..8c1cbdb687ae0fbb74761d20268194de058bc9f2 100644 --- a/Assets/Scripts/Loading/Stage.cs +++ b/Assets/Scripts/Loading/Stage.cs @@ -50,8 +50,8 @@ public class Stage: IJSONsavable<Stage> public SaveGame savegame = null; public List<PlayerRecord> solution_approches = new(); - public List<string> AllowedScrolls = new(); - public List<Gadget> AllowedGadgets = new(); + public List<string> AllowedScrolls = null; + public List<Gadget> AllowedGadgets = null; #region makros/shortcuts @@ -60,7 +60,7 @@ public class Stage: IJSONsavable<Stage> /// </summary> [JsonIgnore] //TODO? update color if changed - public bool completed_once { get { return player_record_list != null && player_record_list.Values.Any(s => s.solved == true); } } + public bool completed_once { get => player_record_list != null && player_record_list.Values.Any(s => s.solved == true); } /// <summary> Current Stage progress.</summary> [JsonIgnore] diff --git a/Assets/Scripts/UI/InGame/ToolmodeSelector_bttn_mobile.cs b/Assets/Scripts/UI/InGame/ToolmodeSelector_bttn_mobile.cs index 7f3d44dd84e37f54317e03604165358bbccda1e3..7a3ed35a70e609ec30fe0950f834371af7de1da7 100644 --- a/Assets/Scripts/UI/InGame/ToolmodeSelector_bttn_mobile.cs +++ b/Assets/Scripts/UI/InGame/ToolmodeSelector_bttn_mobile.cs @@ -8,8 +8,8 @@ public class ToolmodeSelector_bttn_mobile : MonoBehaviour { public void Tool_nextright() - => GadgetManager.ActivateGadget(GadgetManager.ActiveGadgetInd + 1); + => GadgetBehaviour.ActivateGadget(GadgetBehaviour.ActiveGadgetInd + 1); public void Tool_nextleft() - => GadgetManager.ActivateGadget(GadgetManager.ActiveGadgetInd - 1); + => GadgetBehaviour.ActivateGadget(GadgetBehaviour.ActiveGadgetInd - 1); } \ No newline at end of file diff --git a/Assets/Stages/TechDemo A.JSON b/Assets/Stages/TechDemo A.JSON index 066220d74adea3fc6ffcf9a68f82ee0fe39d65c2..ca0e0f0f0d422efdcd97f7e465fca063b90fdd8b 100644 --- a/Assets/Stages/TechDemo A.JSON +++ b/Assets/Stages/TechDemo A.JSON @@ -1 +1 @@ -{"category":"Demo Category","number":1,"description":"Tree Stage","scene":"RiverWorld","use_install_folder":true,"solution":{"ValidationSet":[{"MasterIDs":["http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1320"],"SolutionIndex":[],"RelationIndex":[],"ComparerString":"LineFactHightDirectionComparer"}],"WorkflowGadgetDict":{"-1":null},"FactDict":{"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1318":{"s_type":"PointFact","Point":{"x":0.0,"y":0.0,"z":0.0,"magnitude":0.0,"sqrMagnitude":0.0},"Normal":{"x":0.0,"y":1.0,"z":0.0,"magnitude":1.0,"sqrMagnitude":1.0},"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1318","Label":"A","hasCustomLabel":false,"LabelId":1},"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1319":{"s_type":"PointFact","Point":{"x":0.0,"y":6.0,"z":0.0,"normalized":{"x":0.0,"y":1.0,"z":0.0,"magnitude":1.0,"sqrMagnitude":1.0},"magnitude":6.0,"sqrMagnitude":36.0},"Normal":{"x":0.0,"y":1.0,"z":0.0,"magnitude":1.0,"sqrMagnitude":1.0},"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1319","Label":"B","hasCustomLabel":false,"LabelId":2},"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1320":{"s_type":"LineFact","Distance":6.0,"Pid1":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1318","Pid2":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1319","Dir":{"x":0.0,"y":1.0,"z":0.0,"magnitude":1.0,"sqrMagnitude":1.0},"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1320","Label":"[AB]","hasCustomLabel":false,"LabelId":0}},"MetaInf":{"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1318":{"workflow_id":0,"active":true},"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1319":{"workflow_id":1,"active":true},"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1320":{"workflow_id":2,"active":true}},"Workflow":[{"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1318","samestep":false,"steplink":3,"creation":true,"gadget_rank":-1,"scroll_label":null},{"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1319","samestep":true,"steplink":0,"creation":true,"gadget_rank":-1,"scroll_label":null},{"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1320","samestep":true,"steplink":0,"creation":true,"gadget_rank":-1,"scroll_label":null}],"marker":3,"worksteps":1,"backlog":0,"soft_resetted":false,"invoke":true,"MaxLabelId":2,"UnusedLabelIds":[],"name":null,"path":null},"solution_approches":[],"AllowedScrolls":[],"AllowedGadgets":null,"name":"TechDemo A","path":null} \ No newline at end of file +{"category":"Demo Category","number":1,"description":"Tree Stage","scene":"RiverWorld","use_install_folder":true,"solution":{"ValidationSet":[{"MasterIDs":["http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1320"],"SolutionIndex":[],"RelationIndex":[],"ComparerString":"LineFactHightDirectionComparer"}],"WorkflowGadgetDict":{"-1":null},"FactDict":{"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1318":{"s_type":"PointFact","Point":{"x":0.0,"y":0.0,"z":0.0,"magnitude":0.0,"sqrMagnitude":0.0},"Normal":{"x":0.0,"y":1.0,"z":0.0,"magnitude":1.0,"sqrMagnitude":1.0},"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1318","Label":"A","hasCustomLabel":false,"LabelId":1},"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1319":{"s_type":"PointFact","Point":{"x":0.0,"y":6.0,"z":0.0,"normalized":{"x":0.0,"y":1.0,"z":0.0,"magnitude":1.0,"sqrMagnitude":1.0},"magnitude":6.0,"sqrMagnitude":36.0},"Normal":{"x":0.0,"y":1.0,"z":0.0,"magnitude":1.0,"sqrMagnitude":1.0},"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1319","Label":"B","hasCustomLabel":false,"LabelId":2},"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1320":{"s_type":"LineFact","Distance":6.0,"Pid1":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1318","Pid2":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1319","Dir":{"x":0.0,"y":1.0,"z":0.0,"magnitude":1.0,"sqrMagnitude":1.0},"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1320","Label":"[AB]","hasCustomLabel":false,"LabelId":0}},"MetaInf":{"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1318":{"workflow_id":0,"active":true},"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1319":{"workflow_id":1,"active":true},"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1320":{"workflow_id":2,"active":true}},"Workflow":[{"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1318","samestep":false,"steplink":3,"creation":true,"gadget_rank":-1,"scroll_label":null},{"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1319","samestep":true,"steplink":0,"creation":true,"gadget_rank":-1,"scroll_label":null},{"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1320","samestep":true,"steplink":0,"creation":true,"gadget_rank":-1,"scroll_label":null}],"marker":3,"worksteps":1,"backlog":0,"soft_resetted":false,"invoke":true,"MaxLabelId":2,"UnusedLabelIds":[],"name":null,"path":null},"solution_approches":[],"AllowedScrolls":null,"AllowedGadgets":null,"name":"TechDemo A","path":null} \ No newline at end of file diff --git a/Assets/Stages/TechDemo B.JSON b/Assets/Stages/TechDemo B.JSON index e6206127ccb7fe2ba9eda4f725457bae52e567d6..8cf6b969409d42ee87b2512ffd3f1dad1b7f6b77 100644 --- a/Assets/Stages/TechDemo B.JSON +++ b/Assets/Stages/TechDemo B.JSON @@ -1 +1 @@ -{"category":"Demo Category","number":2,"description":"River Stage","scene":"RiverWorld","use_install_folder":true,"solution":{"ValidationSet":[{"MasterIDs":["http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1323"],"SolutionIndex":[],"RelationIndex":[],"ComparerString":"LineFactHightDirectionComparer"},{"MasterIDs":["http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1323"],"SolutionIndex":[],"RelationIndex":[],"ComparerString":"LineSpanningOverRiverWorldComparer"},{"MasterIDs":[],"SolutionIndex":[1],"RelationIndex":[0],"ComparerString":"LineFactHightComparer"}],"WorkflowGadgetDict":{"-1":null},"FactDict":{"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1321":{"s_type":"PointFact","Point":{"x":0.0,"y":0.0,"z":0.0,"magnitude":0.0,"sqrMagnitude":0.0},"Normal":{"x":0.0,"y":1.0,"z":0.0,"magnitude":1.0,"sqrMagnitude":1.0},"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1321","Label":"A","hasCustomLabel":false,"LabelId":1},"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1322":{"s_type":"PointFact","Point":{"x":0.0,"y":6.0,"z":0.0,"normalized":{"x":0.0,"y":1.0,"z":0.0,"magnitude":1.0,"sqrMagnitude":1.0},"magnitude":6.0,"sqrMagnitude":36.0},"Normal":{"x":0.0,"y":1.0,"z":0.0,"magnitude":1.0,"sqrMagnitude":1.0},"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1322","Label":"B","hasCustomLabel":false,"LabelId":2},"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1323":{"s_type":"LineFact","Distance":6.0,"Pid1":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1321","Pid2":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1322","Dir":{"x":0.0,"y":1.0,"z":0.0,"magnitude":1.0,"sqrMagnitude":1.0},"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1323","Label":"[AB]","hasCustomLabel":false,"LabelId":0}},"MetaInf":{"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1321":{"workflow_id":0,"active":true},"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1322":{"workflow_id":1,"active":true},"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1323":{"workflow_id":2,"active":true}},"Workflow":[{"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1321","samestep":false,"steplink":3,"creation":true,"gadget_rank":-1,"scroll_label":null},{"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1322","samestep":true,"steplink":0,"creation":true,"gadget_rank":-1,"scroll_label":null},{"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1323","samestep":true,"steplink":0,"creation":true,"gadget_rank":-1,"scroll_label":null}],"marker":3,"worksteps":1,"backlog":0,"soft_resetted":false,"invoke":true,"MaxLabelId":2,"UnusedLabelIds":[],"name":null,"path":null},"solution_approches":[],"AllowedScrolls":[],"AllowedGadgets":[{"s_type":"Pointer","Rank":1,"UiName":"Pointer","MaxRange":"Infinity","MaxHeight":"Infinity","ButtonIndx":1,"MaterialIndx":0,"IgnoreLayerMask":{"value":24066},"SecondaryLayerMask":{"value":0}},{"s_type":"Tape","Rank":2,"UiName":"Tape","MaxRange":2.5,"MaxHeight":2.5,"ButtonIndx":2,"MaterialIndx":0,"IgnoreLayerMask":{"value":96770},"SecondaryLayerMask":{"value":0}},{"s_type":"AngleTool","Rank":3,"UiName":"Angle Tool","MaxRange":"Infinity","MaxHeight":"Infinity","ButtonIndx":3,"MaterialIndx":1,"IgnoreLayerMask":{"value":96770},"SecondaryLayerMask":{"value":0}},{"s_type":"LineTool","Rank":4,"UiName":"Line Tool","MaxRange":"Infinity","MaxHeight":"Infinity","ButtonIndx":4,"MaterialIndx":0,"IgnoreLayerMask":{"value":96770},"SecondaryLayerMask":{"value":0}},{"s_type":"LotTool","Rank":5,"UiName":"Lot Tool","MaxRange":"Infinity","MaxHeight":"Infinity","ButtonIndx":5,"MaterialIndx":0,"IgnoreLayerMask":{"value":86530},"SecondaryLayerMask":{"value":0}},{"s_type":"Pendulum","Rank":6,"UiName":"Pendulum","MaxRange":"Infinity","MaxHeight":"Infinity","ButtonIndx":6,"MaterialIndx":0,"IgnoreLayerMask":{"value":96770},"SecondaryLayerMask":{"value":1}},{"s_type":"Remover","Rank":8,"UiName":"Delete Fact","MaxRange":"Infinity","MaxHeight":"Infinity","ButtonIndx":8,"MaterialIndx":0,"IgnoreLayerMask":{"value":115219},"SecondaryLayerMask":{"value":0}}],"name":"TechDemo B","path":null} \ No newline at end of file +{"category":"Demo Category","number":2,"description":"River Stage","scene":"RiverWorld","use_install_folder":true,"solution":{"ValidationSet":[{"MasterIDs":["http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1323"],"SolutionIndex":[],"RelationIndex":[],"ComparerString":"LineFactHightDirectionComparer"},{"MasterIDs":["http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1323"],"SolutionIndex":[],"RelationIndex":[],"ComparerString":"LineSpanningOverRiverWorldComparer"},{"MasterIDs":[],"SolutionIndex":[1],"RelationIndex":[0],"ComparerString":"LineFactHightComparer"}],"WorkflowGadgetDict":{"-1":null},"FactDict":{"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1321":{"s_type":"PointFact","Point":{"x":0.0,"y":0.0,"z":0.0,"magnitude":0.0,"sqrMagnitude":0.0},"Normal":{"x":0.0,"y":1.0,"z":0.0,"magnitude":1.0,"sqrMagnitude":1.0},"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1321","Label":"A","hasCustomLabel":false,"LabelId":1},"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1322":{"s_type":"PointFact","Point":{"x":0.0,"y":6.0,"z":0.0,"normalized":{"x":0.0,"y":1.0,"z":0.0,"magnitude":1.0,"sqrMagnitude":1.0},"magnitude":6.0,"sqrMagnitude":36.0},"Normal":{"x":0.0,"y":1.0,"z":0.0,"magnitude":1.0,"sqrMagnitude":1.0},"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1322","Label":"B","hasCustomLabel":false,"LabelId":2},"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1323":{"s_type":"LineFact","Distance":6.0,"Pid1":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1321","Pid2":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1322","Dir":{"x":0.0,"y":1.0,"z":0.0,"magnitude":1.0,"sqrMagnitude":1.0},"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1323","Label":"[AB]","hasCustomLabel":false,"LabelId":0}},"MetaInf":{"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1321":{"workflow_id":0,"active":true},"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1322":{"workflow_id":1,"active":true},"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1323":{"workflow_id":2,"active":true}},"Workflow":[{"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1321","samestep":false,"steplink":3,"creation":true,"gadget_rank":-1,"scroll_label":null},{"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1322","samestep":true,"steplink":0,"creation":true,"gadget_rank":-1,"scroll_label":null},{"Id":"http://mathhub.info/FrameIT/frameworld?DefaultSituationSpace/SituationTheory1?fact1323","samestep":true,"steplink":0,"creation":true,"gadget_rank":-1,"scroll_label":null}],"marker":3,"worksteps":1,"backlog":0,"soft_resetted":false,"invoke":true,"MaxLabelId":2,"UnusedLabelIds":[],"name":null,"path":null},"solution_approches":[],"AllowedScrolls":["OppositeLen"],"AllowedGadgets":[{"s_type":"Pointer","Rank":1,"UiName":"Pointer","MaxRange":"Infinity","MaxHeight":"Infinity","ButtonIndx":1,"MaterialIndx":0,"IgnoreLayerMask":{"value":24066},"SecondaryLayerMask":{"value":0}},{"s_type":"Tape","Rank":2,"UiName":"Tape","MaxRange":2.5,"MaxHeight":2.5,"ButtonIndx":2,"MaterialIndx":0,"IgnoreLayerMask":{"value":96770},"SecondaryLayerMask":{"value":0}},{"s_type":"AngleTool","Rank":3,"UiName":"Angle Tool","MaxRange":"Infinity","MaxHeight":"Infinity","ButtonIndx":3,"MaterialIndx":1,"IgnoreLayerMask":{"value":96770},"SecondaryLayerMask":{"value":0}},{"s_type":"LineTool","Rank":4,"UiName":"Line Tool","MaxRange":"Infinity","MaxHeight":"Infinity","ButtonIndx":4,"MaterialIndx":0,"IgnoreLayerMask":{"value":96770},"SecondaryLayerMask":{"value":0}},{"s_type":"LotTool","Rank":5,"UiName":"Lot Tool","MaxRange":"Infinity","MaxHeight":"Infinity","ButtonIndx":5,"MaterialIndx":0,"IgnoreLayerMask":{"value":86530},"SecondaryLayerMask":{"value":0}},{"s_type":"Pendulum","Rank":6,"UiName":"Pendulum","MaxRange":"Infinity","MaxHeight":"Infinity","ButtonIndx":6,"MaterialIndx":0,"IgnoreLayerMask":{"value":96770},"SecondaryLayerMask":{"value":1}},{"s_type":"Remover","Rank":8,"UiName":"Delete Fact","MaxRange":"Infinity","MaxHeight":"Infinity","ButtonIndx":8,"MaterialIndx":0,"IgnoreLayerMask":{"value":115219},"SecondaryLayerMask":{"value":0}}],"name":"TechDemo B","path":null} \ No newline at end of file