Skip to content
Snippets Groups Projects
Commit 3ed9fa15 authored by Marco Zimmer's avatar Marco Zimmer
Browse files

+ Added AllowedScrolls in Stage;

parent c6b19076
Branches
No related tags found
No related merge requests found
Showing
with 93 additions and 81 deletions
......@@ -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,
......
......@@ -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);
......
......@@ -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
)];
}
......
......@@ -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;
......
......@@ -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()
{
......
......@@ -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);
......
fileFormatVersion: 2
guid: f6c56cda17d48fa47a0c06cea90accba
guid: dadf4ac08a30dfa43aa57ac646a68767
MonoImporter:
externalObjects: {}
serializedVersion: 2
......
......@@ -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);
}
}
......@@ -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)));
}
}
......
......@@ -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))
......
......@@ -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))
......
......@@ -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
......@@ -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;
}
}
......@@ -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);
......
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);
}
......
......@@ -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]
......
......@@ -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
{"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
{"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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment