From 84714536eda520452c3290a2ea5f9e28d7e00e2a Mon Sep 17 00:00:00 2001
From: unknown <john.schihada@hotmail.com>
Date: Mon, 2 Dec 2019 17:06:07 +0100
Subject: [PATCH] Added some basic ToolMode-Functionality for switching between
 marking points/lines/angles

---
 Assets/Graphics.meta                          |   8 -
 .../InteractionEngine/CommunicationEvents.cs  |   4 +
 Assets/InteractionEngine/FactSpawner.cs       |  70 +++-
 Assets/InteractionEngine/ToolMode.cs          |  11 +
 Assets/InteractionEngine/ToolMode.cs.meta     |  11 +
 Assets/InteractionEngine/ToolModeText.cs      |  47 +++
 Assets/InteractionEngine/ToolModeText.cs.meta |  11 +
 Assets/InteractionEngine/WorldCursor.cs       |  28 +-
 Assets/Prefabs/Sphere.prefab                  |   4 +-
 Assets/Scenes.meta                            |   8 -
 Assets/TreeWorld.unity                        | 368 +++++++++++++++++-
 ProjectSettings/InputManager.asset            |  16 +
 ProjectSettings/TagManager.asset              |   4 +-
 13 files changed, 553 insertions(+), 37 deletions(-)
 delete mode 100644 Assets/Graphics.meta
 create mode 100644 Assets/InteractionEngine/ToolMode.cs
 create mode 100644 Assets/InteractionEngine/ToolMode.cs.meta
 create mode 100644 Assets/InteractionEngine/ToolModeText.cs
 create mode 100644 Assets/InteractionEngine/ToolModeText.cs.meta
 delete mode 100644 Assets/Scenes.meta

diff --git a/Assets/Graphics.meta b/Assets/Graphics.meta
deleted file mode 100644
index 2f27852d..00000000
--- a/Assets/Graphics.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: eec83b50c1e0c604aa91430f72c8dbb0
-folderAsset: yes
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Assets/InteractionEngine/CommunicationEvents.cs b/Assets/InteractionEngine/CommunicationEvents.cs
index ce198fc6..02c54cf9 100644
--- a/Assets/InteractionEngine/CommunicationEvents.cs
+++ b/Assets/InteractionEngine/CommunicationEvents.cs
@@ -12,9 +12,13 @@ public  class PointEvent : UnityEvent<RaycastHit,int>
     public class HitEvent : UnityEvent<RaycastHit>
     {
 
+    }
+    public class ToolModeEvent : UnityEvent<ToolMode> {
+
     }
 
     public static HitEvent TriggerEvent = new HitEvent();
+    public static ToolModeEvent ToolModeChangedEvent = new ToolModeEvent();
     public static PointEvent AddEvent = new PointEvent();
     public static PointEvent RemoveEvent = new PointEvent();
 
diff --git a/Assets/InteractionEngine/FactSpawner.cs b/Assets/InteractionEngine/FactSpawner.cs
index 5cdd3ac9..6f6227fc 100644
--- a/Assets/InteractionEngine/FactSpawner.cs
+++ b/Assets/InteractionEngine/FactSpawner.cs
@@ -6,16 +6,15 @@
 
 public class FactSpawner : MonoBehaviour
 {
-    public GameObject PointRepresentation;
+    public GameObject FactRepresentation;
     public string[] Facts = new String[100];
-
-
-
+    public GameObject[] GameObjectFacts = new GameObject[100];
 
     void Start()
     {
         CommunicationEvents.TriggerEvent.AddListener(OnHit);
-        CommunicationEvents.AddEvent.AddListener(SpawnPoint);
+        CommunicationEvents.ToolModeChangedEvent.AddListener(OnToolModeChanged);
+        CommunicationEvents.AddEvent.AddListener(SpawnFact);
         CommunicationEvents.RemoveEvent.AddListener(DeletePoint);
     }
 
@@ -31,16 +30,24 @@ public int GetFirstEmptyID()
    
     }
 
+    public void SpawnFact(RaycastHit hit, int id) {
+        SpawnPoint(hit, id);
+    }
+
 
     public void SpawnPoint(RaycastHit hit, int id)
     {
         Debug.Log(id);
-        GameObject point = GameObject.Instantiate(PointRepresentation);
+        GameObject point = GameObject.Instantiate(FactRepresentation);
         point.transform.position = hit.point;
         point.transform.up = hit.normal;
         string letter = ((Char)(64+id+1)).ToString();
         point.GetComponentInChildren<TextMeshPro>().text = letter;
+        //If a new Point was spawned -> We are in MarkPointMode -> Then we want the collider to be disabled
+        point.GetComponentInChildren<SphereCollider>().enabled = false;
         Facts[id] = letter;
+        GameObjectFacts[id] = point;
+
     }
 
     public void DeletePoint(RaycastHit hit, int id)
@@ -58,7 +65,7 @@ public void OnHit(RaycastHit hit)
             //hit existing point, so delete it
             char letter = hit.transform.gameObject.GetComponentInChildren<TextMeshPro>().text.ToCharArray()[0];
             int id = letter - 65;
-            CommunicationEvents.RemoveEvent.Invoke(hit,id);
+            CommunicationEvents.RemoveEvent.Invoke(hit, id);
         }
         else
         {
@@ -67,6 +74,55 @@ public void OnHit(RaycastHit hit)
         }
     }
 
+    public void OnToolModeChanged(ToolMode ActiveToolMode) {
+        switch (ActiveToolMode) {
+            case ToolMode.MarkPointMode:
+            //If MarkPointMode is activated we want to have the ability to mark the point
+            //everywhere, independent of already existing facts
+                foreach (GameObject GameObjectFact in this.GameObjectFacts) {
+                    GameObjectFact.GetComponentInChildren<Collider>().enabled = false;
+                }
+                break;
+            case ToolMode.CreateLineMode:
+            //If CreateLineMode is activated we want to have the ability to select points for the Line
+            //but we don't want to have the ability to select Lines or Angles
+                foreach (GameObject GameObjectFact in this.GameObjectFacts)
+                {
+                    if (GameObjectFact.tag == "Line" || GameObjectFact.tag == "Angle")
+                    {
+                        GameObjectFact.GetComponentInChildren<Collider>().enabled = false;
+                    }
+                    else if (GameObjectFact.tag == "Point") {
+                        GameObjectFact.GetComponentInChildren<Collider>().enabled = true;
+                    }
+                }
+                break;
+            case ToolMode.CreateAngleMode:
+            //If CreateAngleMode is activated we want to have the ability to select Lines for the Angle
+            //but we don't want to have the ability to select Points or Angles
+                foreach (GameObject GameObjectFact in this.GameObjectFacts)
+                {
+                    if (GameObjectFact.tag == "Point" || GameObjectFact.tag == "Angle")
+                    {
+                        GameObjectFact.GetComponentInChildren<Collider>().enabled = false;
+                    }
+                    else if (GameObjectFact.tag == "Line")
+                    {
+                        GameObjectFact.GetComponentInChildren<Collider>().enabled = true;
+                    }
+                }
+                break;
+            case ToolMode.DeleteMode:
+            //If DeleteMode is activated we want to have the ability to delete every Fact
+            //independent of the concrete type of fact
+                foreach (GameObject GameObjectFact in this.GameObjectFacts)
+                {
+                    GameObjectFact.GetComponentInChildren<Collider>().enabled = true;
+                }
+                break;
+        }
+    }
+
       
 
 }
diff --git a/Assets/InteractionEngine/ToolMode.cs b/Assets/InteractionEngine/ToolMode.cs
new file mode 100644
index 00000000..11961dcd
--- /dev/null
+++ b/Assets/InteractionEngine/ToolMode.cs
@@ -0,0 +1,11 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public enum ToolMode
+{
+    MarkPointMode,
+    CreateLineMode,
+    CreateAngleMode,
+    DeleteMode
+}
diff --git a/Assets/InteractionEngine/ToolMode.cs.meta b/Assets/InteractionEngine/ToolMode.cs.meta
new file mode 100644
index 00000000..86db4b8e
--- /dev/null
+++ b/Assets/InteractionEngine/ToolMode.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 30cfeaacf23740b49ab9ab1f64921837
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/InteractionEngine/ToolModeText.cs b/Assets/InteractionEngine/ToolModeText.cs
new file mode 100644
index 00000000..3fefd92c
--- /dev/null
+++ b/Assets/InteractionEngine/ToolModeText.cs
@@ -0,0 +1,47 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class ToolModeText : MonoBehaviour
+{
+    private bool timerActive { get; set; }
+    private float timer { get; set; }
+    private float timerDuration = 3.0f;
+
+    // Start is called before the first frame update
+    void Start()
+    {
+        gameObject.GetComponentInChildren<UnityEngine.UI.Text>().CrossFadeAlpha(0.0f, 0.0f, false);
+        gameObject.GetComponentInChildren<UnityEngine.UI.Text>().CrossFadeAlpha(1.0f, 0.9f, false);
+        this.timerActive = true;
+        this.timer = 0;
+        CommunicationEvents.ToolModeChangedEvent.AddListener(OnToolModeChanged);
+    }
+
+    // Update is called once per frame
+    void Update()
+    {
+        //If the Timer is Active, check if timerDuration is reached and set the Text inactive
+        if (this.timerActive)
+        {
+            this.timer += Time.deltaTime;
+            if (this.timer >= this.timerDuration)
+            {
+                //gameObject.SetActive(false);
+                gameObject.GetComponentInChildren<UnityEngine.UI.Text>().CrossFadeAlpha(0.0f, 0.3f, false);
+                this.timerActive = false;
+                this.timer = 0;
+            }
+        }
+    }
+
+    void OnToolModeChanged(ToolMode ActiveToolMode) {
+        //When ToolMode changes: Start a new Timer for showing up the Text for it
+        gameObject.GetComponentInChildren<UnityEngine.UI.Text>().text = "ToolMode = " + ActiveToolMode;
+        //gameObject.SetActive(true);
+        gameObject.GetComponentInChildren<UnityEngine.UI.Text>().CrossFadeAlpha(1.0f, 0.3f, false);
+        this.timerActive = true;
+        this.timer = 0;
+    }
+}
diff --git a/Assets/InteractionEngine/ToolModeText.cs.meta b/Assets/InteractionEngine/ToolModeText.cs.meta
new file mode 100644
index 00000000..4b39f075
--- /dev/null
+++ b/Assets/InteractionEngine/ToolModeText.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 38927f5b66d24cc428e39ffa454b0bfb
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/InteractionEngine/WorldCursor.cs b/Assets/InteractionEngine/WorldCursor.cs
index caebadb5..ba68fb30 100644
--- a/Assets/InteractionEngine/WorldCursor.cs
+++ b/Assets/InteractionEngine/WorldCursor.cs
@@ -1,19 +1,20 @@
-using System.Collections;
+using System;
+using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.Events;
 
 public class WorldCursor : MonoBehaviour
 {
-
-
     private RaycastHit Hit;
     private Camera Cam;
+    private ToolMode ActiveToolMode{get; set;}
 
     void Start()
     {
         Cam = Camera.main;
- 
+        //Set MarkPointMode as the default ActiveToolMode
+        this.ActiveToolMode = ToolMode.MarkPointMode;
     }
 
     // Update is called once per frame
@@ -39,7 +40,8 @@ void Update()
             transform.up = -Cam.transform.forward;
         }
 
-
+        //Check if the ToolMode was switched
+        CheckToolModeSelection();
         
     }
 
@@ -52,6 +54,22 @@ void CheckMouseButtons()
 
     }
 
+    void CheckToolModeSelection() {
+        if (Input.GetButtonDown("ToolMode")) {
+            //Change the ActiveToolMode dependent on which Mode was selected
+            if ((int)this.ActiveToolMode == Enum.GetNames(typeof(ToolMode)).Length - 1)
+            {
+                this.ActiveToolMode = 0;
+            }
+            else {
+                this.ActiveToolMode++;
+            }
+
+            //Invoke the Handler for the Facts
+            CommunicationEvents.ToolModeChangedEvent.Invoke(this.ActiveToolMode);
+        }
+    }
+
  
 
 }
diff --git a/Assets/Prefabs/Sphere.prefab b/Assets/Prefabs/Sphere.prefab
index eb1dcae4..34ea5d5c 100644
--- a/Assets/Prefabs/Sphere.prefab
+++ b/Assets/Prefabs/Sphere.prefab
@@ -14,7 +14,7 @@ GameObject:
   - component: {fileID: 8087426936968725520}
   m_Layer: 10
   m_Name: Sphere
-  m_TagString: Untagged
+  m_TagString: Point
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
@@ -207,7 +207,7 @@ MonoBehaviour:
       m_Calls: []
   m_text: Test
   m_isRightToLeft: 0
-  m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
+  m_fontAsset: {fileID: 0}
   m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
   m_fontSharedMaterials: []
   m_fontMaterial: {fileID: 0}
diff --git a/Assets/Scenes.meta b/Assets/Scenes.meta
deleted file mode 100644
index 157e8818..00000000
--- a/Assets/Scenes.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: ac72be71662640f4ab0aaf102090fb95
-folderAsset: yes
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Assets/TreeWorld.unity b/Assets/TreeWorld.unity
index 295e7b1e..b9d7940f 100644
--- a/Assets/TreeWorld.unity
+++ b/Assets/TreeWorld.unity
@@ -544,6 +544,72 @@ Transform:
   m_Father: {fileID: 1451305264}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0}
+--- !u!1 &424784665
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 424784668}
+  - component: {fileID: 424784667}
+  - component: {fileID: 424784666}
+  m_Layer: 0
+  m_Name: EventSystem
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &424784666
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 424784665}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_HorizontalAxis: Horizontal
+  m_VerticalAxis: Vertical
+  m_SubmitButton: Submit
+  m_CancelButton: Cancel
+  m_InputActionsPerSecond: 10
+  m_RepeatDelay: 0.5
+  m_ForceModuleActive: 0
+--- !u!114 &424784667
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 424784665}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_FirstSelected: {fileID: 0}
+  m_sendNavigationEvents: 1
+  m_DragThreshold: 10
+--- !u!4 &424784668
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 424784665}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 8
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &535944724
 GameObject:
   m_ObjectHideFlags: 0
@@ -846,6 +912,11 @@ PrefabInstance:
   m_Modification:
     m_TransformParent: {fileID: 0}
     m_Modifications:
+    - target: {fileID: 4170768672499845195, guid: 9cb473a50d07f1245b0f6a7ee2557d4f,
+        type: 3}
+      propertyPath: m_Name
+      value: Cursor
+      objectReference: {fileID: 0}
     - target: {fileID: 1324548122521590688, guid: 9cb473a50d07f1245b0f6a7ee2557d4f,
         type: 3}
       propertyPath: Event.m_PersistentCalls.m_Calls.Array.size
@@ -942,11 +1013,6 @@ PrefabInstance:
       propertyPath: RemoveEvent.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName
       value: UnityEngine.Object, UnityEngine
       objectReference: {fileID: 0}
-    - target: {fileID: 4170768672499845195, guid: 9cb473a50d07f1245b0f6a7ee2557d4f,
-        type: 3}
-      propertyPath: m_Name
-      value: Cursor
-      objectReference: {fileID: 0}
     - target: {fileID: 3052661700889384477, guid: 9cb473a50d07f1245b0f6a7ee2557d4f,
         type: 3}
       propertyPath: m_RootOrder
@@ -974,6 +1040,96 @@ PrefabInstance:
       objectReference: {fileID: 2100000, guid: d9c43ce51f1a01d41a18fae03c0d406c, type: 2}
     m_RemovedComponents: []
   m_SourcePrefab: {fileID: 100100000, guid: 9cb473a50d07f1245b0f6a7ee2557d4f, type: 3}
+--- !u!1 &1143784613
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1143784614}
+  - component: {fileID: 1143784616}
+  - component: {fileID: 1143784617}
+  - component: {fileID: 1143784615}
+  m_Layer: 5
+  m_Name: ToolModeText
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1143784614
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1143784613}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1920747393}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 1, y: 1}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: -125, y: -30}
+  m_SizeDelta: {x: 250, y: 60}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1143784615
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1143784613}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.9529412, g: 0.54509807, b: 0, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 16
+    m_FontStyle: 1
+    m_BestFit: 0
+    m_MinSize: 1
+    m_MaxSize: 40
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 0
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: ToolMode = MarkPointMode
+--- !u!222 &1143784616
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1143784613}
+  m_CullTransparentMesh: 0
+--- !u!114 &1143784617
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1143784613}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 38927f5b66d24cc428e39ffa454b0bfb, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
 --- !u!1 &1451305263
 GameObject:
   m_ObjectHideFlags: 0
@@ -1038,7 +1194,7 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 5c41d44ed1851e14089a3b6e37cba740, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  PointRepresentation: {fileID: 537518992981541273, guid: 8174216d5fd9a9744ad2e05d475c071a,
+  FactRepresentation: {fileID: 537518992981541273, guid: 8174216d5fd9a9744ad2e05d475c071a,
     type: 3}
   Facts:
   - 
@@ -1141,6 +1297,107 @@ MonoBehaviour:
   - 
   - 
   - 
+  GameObjectFacts:
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
 --- !u!1 &1675643434
 GameObject:
   m_ObjectHideFlags: 0
@@ -1232,6 +1489,105 @@ Transform:
   m_Father: {fileID: 684756692}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1920747389
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1920747393}
+  - component: {fileID: 1920747392}
+  - component: {fileID: 1920747391}
+  - component: {fileID: 1920747390}
+  m_Layer: 5
+  m_Name: Canvas
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &1920747390
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1920747389}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_IgnoreReversedGraphics: 1
+  m_BlockingObjects: 0
+  m_BlockingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+--- !u!114 &1920747391
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1920747389}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_UiScaleMode: 0
+  m_ReferencePixelsPerUnit: 100
+  m_ScaleFactor: 1
+  m_ReferenceResolution: {x: 800, y: 600}
+  m_ScreenMatchMode: 0
+  m_MatchWidthOrHeight: 0
+  m_PhysicalUnit: 3
+  m_FallbackScreenDPI: 96
+  m_DefaultSpriteDPI: 96
+  m_DynamicPixelsPerUnit: 1
+--- !u!223 &1920747392
+Canvas:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1920747389}
+  m_Enabled: 1
+  serializedVersion: 3
+  m_RenderMode: 0
+  m_Camera: {fileID: 0}
+  m_PlaneDistance: 100
+  m_PixelPerfect: 0
+  m_ReceivesEvents: 1
+  m_OverrideSorting: 0
+  m_OverridePixelPerfect: 0
+  m_SortingBucketNormalizedSize: 0
+  m_AdditionalShaderChannelsFlag: 0
+  m_SortingLayerID: 0
+  m_SortingOrder: 0
+  m_TargetDisplay: 0
+--- !u!224 &1920747393
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1920747389}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 0, y: 0, z: 0}
+  m_Children:
+  - {fileID: 1143784614}
+  m_Father: {fileID: 0}
+  m_RootOrder: 9
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0, y: 0}
 --- !u!1 &2019831178
 GameObject:
   m_ObjectHideFlags: 0
diff --git a/ProjectSettings/InputManager.asset b/ProjectSettings/InputManager.asset
index 17c8f538..cc6b240b 100644
--- a/ProjectSettings/InputManager.asset
+++ b/ProjectSettings/InputManager.asset
@@ -293,3 +293,19 @@ InputManager:
     type: 0
     axis: 0
     joyNum: 0
+  - serializedVersion: 3
+    m_Name: ToolMode
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: t
+    altNegativeButton: 
+    altPositiveButton: 
+    gravity: 1000
+    dead: 0.001
+    sensitivity: 1000
+    snap: 0
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset
index bc487545..1cc35b48 100644
--- a/ProjectSettings/TagManager.asset
+++ b/ProjectSettings/TagManager.asset
@@ -3,7 +3,9 @@
 --- !u!78 &1
 TagManager:
   serializedVersion: 2
-  tags: []
+  tags:
+  - ToolModeDisplay
+  - Point
   layers:
   - Default
   - TransparentFX
-- 
GitLab