Skip to content
Snippets Groups Projects
Commit 84714536 authored by John Schihada's avatar John Schihada
Browse files

Added some basic ToolMode-Functionality for switching between marking points/lines/angles

parent af90c9bc
No related branches found
No related tags found
No related merge requests found
......@@ -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();
......
......@@ -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;
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public enum ToolMode
{
MarkPointMode,
CreateLineMode,
CreateAngleMode,
DeleteMode
}
fileFormatVersion: 2
guid: eec83b50c1e0c604aa91430f72c8dbb0
folderAsset: yes
DefaultImporter:
guid: 30cfeaacf23740b49ab9ab1f64921837
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
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;
}
}
fileFormatVersion: 2
guid: ac72be71662640f4ab0aaf102090fb95
folderAsset: yes
DefaultImporter:
guid: 38927f5b66d24cc428e39ffa454b0bfb
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
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);
}
}
}
......@@ -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}
......
......@@ -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
......
......@@ -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
......@@ -3,7 +3,9 @@
--- !u!78 &1
TagManager:
serializedVersion: 2
tags: []
tags:
- ToolModeDisplay
- Point
layers:
- Default
- TransparentFX
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment