From e9c250730185e61308b1741423a6f04c5aac9941 Mon Sep 17 00:00:00 2001
From: "bocska.karina" <bocska.karina@hallgato.ppke.hu>
Date: Fri, 13 Sep 2024 18:51:39 +0200
Subject: [PATCH] refactor: clean up blockdeform

---
 .vscode/settings.json            | 128 ++++++++------
 Assets/Prefabs/Block.prefab      |   1 +
 Assets/Scenes/SampleScene.unity  |  14 +-
 Assets/Scrips/BlockDeform.cs     | 283 +++++++------------------------
 Assets/Scrips/DeformAnchor.cs    |   7 +-
 Assets/Scrips/DeformAnchorOld.cs |   2 +-
 6 files changed, 154 insertions(+), 281 deletions(-)

diff --git a/.vscode/settings.json b/.vscode/settings.json
index a556466..aac5914 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,55 +1,75 @@
 {
-    "files.exclude": {
-        "**/.DS_Store": true,
-        "**/.git": true,
-        "**/.gitmodules": true,
-        "**/*.booproj": true,
-        "**/*.pidb": true,
-        "**/*.suo": true,
-        "**/*.user": true,
-        "**/*.userprefs": true,
-        "**/*.unityproj": true,
-        "**/*.dll": true,
-        "**/*.exe": true,
-        "**/*.pdf": true,
-        "**/*.mid": true,
-        "**/*.midi": true,
-        "**/*.wav": true,
-        "**/*.gif": true,
-        "**/*.ico": true,
-        "**/*.jpg": true,
-        "**/*.jpeg": true,
-        "**/*.png": true,
-        "**/*.psd": true,
-        "**/*.tga": true,
-        "**/*.tif": true,
-        "**/*.tiff": true,
-        "**/*.3ds": true,
-        "**/*.3DS": true,
-        "**/*.fbx": true,
-        "**/*.FBX": true,
-        "**/*.lxo": true,
-        "**/*.LXO": true,
-        "**/*.ma": true,
-        "**/*.MA": true,
-        "**/*.obj": true,
-        "**/*.OBJ": true,
-        "**/*.asset": true,
-        "**/*.cubemap": true,
-        "**/*.flare": true,
-        "**/*.mat": true,
-        "**/*.meta": true,
-        "**/*.prefab": true,
-        "**/*.unity": true,
-        "build/": true,
-        "Build/": true,
-        "Library/": true,
-        "library/": true,
-        "obj/": true,
-        "Obj/": true,
-        "ProjectSettings/": true,
-        "temp/": true,
-        "Temp/": true
-    },
-    "dotnet.defaultSolution": "szakdolgozat.sln"
-}
\ No newline at end of file
+  "files.exclude": {
+    "**/.DS_Store": true,
+    "**/.git": true,
+    "**/.gitmodules": true,
+    "**/*.booproj": true,
+    "**/*.pidb": true,
+    "**/*.suo": true,
+    "**/*.user": true,
+    "**/*.userprefs": true,
+    "**/*.unityproj": true,
+    "**/*.dll": true,
+    "**/*.exe": true,
+    "**/*.pdf": true,
+    "**/*.mid": true,
+    "**/*.midi": true,
+    "**/*.wav": true,
+    "**/*.gif": true,
+    "**/*.ico": true,
+    "**/*.jpg": true,
+    "**/*.jpeg": true,
+    "**/*.png": true,
+    "**/*.psd": true,
+    "**/*.tga": true,
+    "**/*.tif": true,
+    "**/*.tiff": true,
+    "**/*.3ds": true,
+    "**/*.3DS": true,
+    "**/*.fbx": true,
+    "**/*.FBX": true,
+    "**/*.lxo": true,
+    "**/*.LXO": true,
+    "**/*.ma": true,
+    "**/*.MA": true,
+    "**/*.obj": true,
+    "**/*.OBJ": true,
+    "**/*.asset": true,
+    "**/*.cubemap": true,
+    "**/*.flare": true,
+    "**/*.mat": true,
+    "**/*.meta": true,
+    "**/*.prefab": true,
+    "**/*.unity": true,
+    "build/": true,
+    "Build/": true,
+    "Library/": true,
+    "library/": true,
+    "obj/": true,
+    "Obj/": true,
+    "ProjectSettings/": true,
+    "temp/": true,
+    "Temp/": true
+  },
+  "dotnet.defaultSolution": "szakdolgozat.sln",
+  "workbench.colorCustomizations": {
+    "activityBar.activeBackground": "#5a263a",
+    "activityBar.background": "#5a263a",
+    "activityBar.foreground": "#e7e7e7",
+    "activityBar.inactiveForeground": "#e7e7e799",
+    "activityBarBadge.background": "#48702f",
+    "activityBarBadge.foreground": "#e7e7e7",
+    "commandCenter.border": "#e7e7e799",
+    "sash.hoverBorder": "#5a263a",
+    "statusBar.background": "#361723",
+    "statusBar.foreground": "#e7e7e7",
+    "statusBarItem.hoverBackground": "#5a263a",
+    "statusBarItem.remoteBackground": "#361723",
+    "statusBarItem.remoteForeground": "#e7e7e7",
+    "titleBar.activeBackground": "#361723",
+    "titleBar.activeForeground": "#e7e7e7",
+    "titleBar.inactiveBackground": "#36172399",
+    "titleBar.inactiveForeground": "#e7e7e799"
+  },
+  "peacock.color": "#361723"
+}
diff --git a/Assets/Prefabs/Block.prefab b/Assets/Prefabs/Block.prefab
index 13d8ed4..9188e3b 100644
--- a/Assets/Prefabs/Block.prefab
+++ b/Assets/Prefabs/Block.prefab
@@ -99,6 +99,7 @@ MonoBehaviour:
   m_EditorClassIdentifier: 
   deformAnchorPrefab: {fileID: 2720765159515821108, guid: 46377d8bcd3914149bbb7c475d721f56, type: 3}
   wrapDistance: 0.01
+  grabTransparency: 0.5
 --- !u!64 &3268846158774871891
 MeshCollider:
   m_ObjectHideFlags: 0
diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity
index 776b10c..c07b744 100644
--- a/Assets/Scenes/SampleScene.unity
+++ b/Assets/Scenes/SampleScene.unity
@@ -18756,7 +18756,7 @@ PrefabInstance:
       objectReference: {fileID: 0}
     - target: {fileID: 1984668758913251958, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3}
       propertyPath: m_AnchoredPosition.x
-      value: 0
+      value: 44.7
       objectReference: {fileID: 0}
     - target: {fileID: 1984668758913251958, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3}
       propertyPath: m_AnchoredPosition.y
@@ -18784,7 +18784,7 @@ PrefabInstance:
       objectReference: {fileID: 0}
     - target: {fileID: 1984668759388320319, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3}
       propertyPath: m_AnchoredPosition.x
-      value: 0
+      value: 40
       objectReference: {fileID: 0}
     - target: {fileID: 1984668759388320319, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3}
       propertyPath: m_AnchoredPosition.y
@@ -18820,7 +18820,7 @@ PrefabInstance:
       objectReference: {fileID: 0}
     - target: {fileID: 1984668759906836222, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3}
       propertyPath: m_AnchoredPosition.x
-      value: 0
+      value: 40
       objectReference: {fileID: 0}
     - target: {fileID: 1984668759906836222, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3}
       propertyPath: m_AnchoredPosition.y
@@ -18840,7 +18840,7 @@ PrefabInstance:
       objectReference: {fileID: 0}
     - target: {fileID: 1984668759991436502, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3}
       propertyPath: m_AnchoredPosition.x
-      value: 0
+      value: 40
       objectReference: {fileID: 0}
     - target: {fileID: 1984668759991436502, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3}
       propertyPath: m_AnchoredPosition.y
@@ -18876,7 +18876,7 @@ PrefabInstance:
       objectReference: {fileID: 0}
     - target: {fileID: 1984668760453204319, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3}
       propertyPath: m_AnchoredPosition.x
-      value: 0
+      value: 44.7
       objectReference: {fileID: 0}
     - target: {fileID: 1984668760453204319, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3}
       propertyPath: m_AnchoredPosition.y
@@ -18896,7 +18896,7 @@ PrefabInstance:
       objectReference: {fileID: 0}
     - target: {fileID: 1984668760497519799, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3}
       propertyPath: m_AnchoredPosition.x
-      value: 0
+      value: 40
       objectReference: {fileID: 0}
     - target: {fileID: 1984668760497519799, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3}
       propertyPath: m_AnchoredPosition.y
@@ -18924,7 +18924,7 @@ PrefabInstance:
       objectReference: {fileID: 0}
     - target: {fileID: 1984668760711245992, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3}
       propertyPath: m_AnchoredPosition.x
-      value: 0
+      value: 40
       objectReference: {fileID: 0}
     - target: {fileID: 1984668760711245992, guid: 65eb6b98091a5734ba9d9ca871cef69a, type: 3}
       propertyPath: m_AnchoredPosition.y
diff --git a/Assets/Scrips/BlockDeform.cs b/Assets/Scrips/BlockDeform.cs
index 922559a..6f530ec 100644
--- a/Assets/Scrips/BlockDeform.cs
+++ b/Assets/Scrips/BlockDeform.cs
@@ -1,33 +1,36 @@
 using System;
 using System.Collections.Generic;
 using UnityEngine;
-using UnityEngine.XR.Interaction.Toolkit.Transformers;
-using static UnityEngine.XR.Interaction.Toolkit.Transformers.XRGeneralGrabTransformer;
 
 public class BlockDeform : MonoBehaviour
 {
     public GameObject deformAnchorPrefab;
     public float wrapDistance;
+    public float grabTransparency;
 
-    private Mesh mesh;
-    private GameObject[] deformAnchors = new GameObject[6];
+    private Mesh _mesh;
+    private readonly DeformAnchor[] _deformAnchors = new DeformAnchor[6];
 
-    public void HandleAnchorGrabbed(Transform endPosition, Vector3 startPosition, Vector3 normal){
+    private bool IsPointOnPlane(Vector3 point, Vector3 normal, Vector3 pointOnPlane, double epsilon)
+    {
+        double d = Vector3.Dot(normal, pointOnPlane);
+        double eq = normal.x * point.x + normal.y * point.y + normal.z * point.z - d;
 
-        // utility function to check if the point is on the grabbed anchor
-        bool isPointOnPlane(Vector3 point, double epsilon){
-            double d = Vector3.Dot(normal, startPosition);
-            double eq = normal.x * point.x + normal.y * point.y + normal.z * point.z - d;
+        if (Math.Abs(eq) < epsilon) return true;
+        else return false;
+    }
 
-            if(eq > -epsilon && eq < epsilon) return true;
-            else return false;
-        }
+    public void HandleAnchorGrabbed(Transform endPosition, Vector3 startPosition, DeformAnchor anchor)
+    {
+
+        Vector3 normal = anchor.GetNormal();
 
         // calculate deformation
-        Vector3[] deformedMeshVertices = mesh.vertices;
+        Vector3[] deformedMeshVertices = _mesh.vertices;
         for (int i = 0; i < deformedMeshVertices.Length; i++)
         {
-            if (isPointOnPlane(deformedMeshVertices[i] + this.transform.position, 0.1d)) {
+            if (IsPointOnPlane(deformedMeshVertices[i] + this.transform.position, normal, startPosition, 0.1d))
+            {
                 float distance = Vector3.Distance(startPosition, endPosition.position);
                 Vector3 displacement = normal * distance;
                 float direction = Vector3.Dot(endPosition.position - startPosition, normal);
@@ -35,264 +38,110 @@ public class BlockDeform : MonoBehaviour
             }
         }
 
-        // set new vertices for mesh
-        mesh.vertices = deformedMeshVertices;
-        mesh.RecalculateBounds();
-        MeshCollider collider = GetComponent<MeshCollider>();
-        collider.sharedMesh = mesh;
-
-        UpdateDeformAnchors();
-    }
-
-    bool IsPointOnPlane(Vector3 point, Vector3 normal, Vector3 pointOnPlane, double epsilon){
-        double d = Vector3.Dot(normal, pointOnPlane);
-        double eq = normal.x * point.x + normal.y * point.y + normal.z * point.z - d;
-
-        if(eq > -epsilon && eq < epsilon) return true;
-        else return false;
-    }
-    
-    private void UpdateDeformAnchors()
-    {
-        // collect vertices on the same plane as the anchor
-        for (int i = 0; i < deformAnchors.Length; i++)
+        // check if it's a valid grab
+        for (int i = 0; i < _deformAnchors.Length; i++)
         {
-            List<Vector3> vertices = new();
-            DeformAnchor deformAnchorScript = deformAnchors[i].GetComponent<DeformAnchor>();
-            
-            Vector3 anchorNormal = deformAnchorScript.GetNormal();
-            Vector3 anchorPosition = deformAnchorScript.GetPosition();
+            if (_deformAnchors[i] == anchor) continue;
 
-            foreach (Vector3 vertex in mesh.vertices)
+            float distance = Vector3.Distance(_deformAnchors[i].GetPosition(), anchor.GetPosition());
+            if (distance < wrapDistance * 10)
             {
-                if (IsPointOnPlane(vertex + transform.position, anchorNormal, anchorPosition, 0.1d)) {
-                    if(vertices.IndexOf(vertex) == -1) {
-                        vertices.Add(vertex);
-                    }
-                }
+                anchor.ResetPosition();
+                return;
             }
-
-            deformAnchorScript.SetMeshScale(vertices);
         }
-    }
 
-    public void HandleAnchorGrabbed(){
+        // set new vertices for mesh
+        _mesh.vertices = deformedMeshVertices;
+        _mesh.RecalculateBounds();
+        MeshCollider collider = GetComponent<MeshCollider>();
+        collider.sharedMesh = _mesh;
 
-        DeformMesh();
-        
+        UpdateDeformAnchors();
     }
 
-    private void DeformMesh(){
-        Vector3[] newVertices = mesh.vertices;
-        
-        float zPlus = deformAnchors[0].transform.localPosition.z - wrapDistance;
-        float zMinus = deformAnchors[1].transform.localPosition.z + wrapDistance;
-        
-        float yPlus = deformAnchors[2].transform.localPosition.y - wrapDistance;
-        float yMinus = deformAnchors[3].transform.localPosition.y + wrapDistance;
-        
-        float xPlus = deformAnchors[4].transform.localPosition.x - wrapDistance;
-        float xMinus = deformAnchors[5].transform.localPosition.x + wrapDistance;
 
-        if ((zPlus - zMinus) < wrapDistance*2 || (yPlus - yMinus) < wrapDistance*2 || (zPlus - zMinus) < wrapDistance * 2) {
-            foreach (GameObject deformAnchor in deformAnchors)
-            {
-                DeformAnchorOld deformAnchorScript = deformAnchor.GetComponent<DeformAnchorOld>();
-                deformAnchorScript.resetTransform();
-            }
-            // CenterDeformAnchors();
-            return;
-        }
-
-
-        for (int i = 0; i < newVertices.Length; i++)
-        {
-            newVertices[i].x = newVertices[i].x >= 0 ? xPlus : xMinus;
-            newVertices[i].y = newVertices[i].y >= 0 ? yPlus : yMinus;
-            newVertices[i].z = newVertices[i].z>= 0 ? zPlus : zMinus;
-        }
 
-        mesh.vertices = newVertices;
-        mesh.RecalculateBounds();
-        BoxCollider collider = this.GetComponent<BoxCollider>();
-        collider.size = new Vector3(xPlus - xMinus, yPlus - yMinus, zPlus - zMinus);
-        collider.center = mesh.bounds.center;
-
-        // StretchDeformAnchors();
-        CenterDeformAnchors();
-        ScaleDeformAnchors();
-    }
-
-    private void ScaleDeformAnchors()
+    private void UpdateDeformAnchors()
     {
-        Collider blockCollider = this.GetComponent<Collider>();
-        Vector3 boundSize = blockCollider.bounds.size;
-
-        deformAnchors[0].transform.localScale = deformAnchors[1].transform.localScale = new Vector3(boundSize.x, boundSize.y, 1);
-        deformAnchors[2].transform.localScale = deformAnchors[3].transform.localScale = new Vector3(boundSize.x, boundSize.z, 1);
-        deformAnchors[4].transform.localScale = deformAnchors[5].transform.localScale = new Vector3(boundSize.z, boundSize.y, 1);
-    }
+        // collect vertices on the same plane as the anchor
+        for (int i = 0; i < _deformAnchors.Length; i++)
+        {
+            List<Vector3> vertices = new();
 
-    private void StretchDeformAnchors()
-    {
-        mesh = this.GetComponent<MeshFilter>().mesh;
-        Vector3[] blockVertices = mesh.vertices;
+            Vector3 anchorNormal = _deformAnchors[i].GetNormal();
+            Vector3 anchorPosition = _deformAnchors[i].GetPosition();
 
-        for (int j = 0; j < deformAnchors.Length; j++)
-        {
-            Mesh anchorMesh = deformAnchors[j].GetComponent<MeshFilter>().mesh;
-            Vector3[] anchorVertices = anchorMesh.vertices;
-             
-            for (int i = 0; i < anchorVertices.Length; i++)
+            foreach (Vector3 vertex in _mesh.vertices)
             {
-                Vector3 closestVertex = blockVertices[0];
-                float distance = Vector3.Distance(anchorVertices[i], closestVertex);
-
-                foreach (Vector3 vertex in blockVertices)
+                if (IsPointOnPlane(vertex + transform.position, anchorNormal, anchorPosition, 0.1d))
                 {
-                    float newDist = Vector3.Distance(anchorVertices[i], vertex);
-                    if (newDist < distance) {
-                        distance = newDist;
-                        closestVertex = vertex;
+                    if (vertices.IndexOf(vertex) == -1)
+                    {
+                        vertices.Add(vertex);
                     }
                 }
-
-                anchorVertices[i] = closestVertex;
-                Debug.Log(anchorVertices[i].ToString() + "closest to" + closestVertex.ToString());
             }
 
-            Debug.Log("next vertex");
-
-            anchorMesh.vertices = anchorVertices;
-            anchorMesh.RecalculateBounds();
-            MeshCollider collider = deformAnchors[j].GetComponent<MeshCollider>();
-            collider.sharedMesh = anchorMesh;
+            _deformAnchors[i].SetMeshScale(vertices);
         }
-
     }
 
-
     // Start is called before the first frame update
     void Start()
     {
-        mesh = this.GetComponent<MeshFilter>().mesh;
+        _mesh = this.GetComponent<MeshFilter>().mesh;
 
         Collider blockCollider = this.GetComponent<Collider>();
-        DeformAnchor[] deformAnchorsScripts = new DeformAnchor[deformAnchors.Length];
+        DeformAnchor[] deformAnchorsScripts = new DeformAnchor[_deformAnchors.Length];
 
         for (int i = 0; i < 6; i++)
         {
-            deformAnchors[i] = Instantiate(deformAnchorPrefab, this.transform.position, Quaternion.identity);
-            deformAnchors[i].transform.parent = this.transform;
-            deformAnchors[i].transform.position = this.transform.position;
-            deformAnchorsScripts[i] = deformAnchors[i].GetComponent<DeformAnchor>();            
+            GameObject anchor = Instantiate(deformAnchorPrefab, this.transform.position, Quaternion.identity);
+            _deformAnchors[i] = anchor.GetComponent<DeformAnchor>();
+            _deformAnchors[i].transform.parent = this.transform;
+            _deformAnchors[i].transform.position = this.transform.position;
+            deformAnchorsScripts[i] = _deformAnchors[i].GetComponent<DeformAnchor>();
         }
 
         // z axis anchor setup
         deformAnchorsScripts[0].SetupAnchor(this, this.transform.forward, blockCollider.bounds.extents, wrapDistance);
         deformAnchorsScripts[1].SetupAnchor(this, -this.transform.forward, blockCollider.bounds.extents, wrapDistance);
-        // deformAnchors[0].transform.eulerAngles = new Vector3(180, 0, 0);
-        // deformAnchors[1].transform.eulerAngles = new Vector3(0, 0, 0);
-        
+
+
         // y axis achor setup
-        // deformAnchors[2].transform.eulerAngles = new Vector3(90, 0, 0);
-        // deformAnchors[3].transform.eulerAngles = new Vector3(-90, 0, 0);
         deformAnchorsScripts[2].SetupAnchor(this, this.transform.up, blockCollider.bounds.extents, wrapDistance);
         deformAnchorsScripts[3].SetupAnchor(this, -this.transform.up, blockCollider.bounds.extents, wrapDistance);
-        
+
         // x axis anchor setup
-        // deformAnchors[4].transform.eulerAngles = new Vector3(0, -90, 0);
-        // deformAnchors[5].transform.eulerAngles = new Vector3(0, 90, 0);
         deformAnchorsScripts[4].SetupAnchor(this, this.transform.right, blockCollider.bounds.extents, wrapDistance);
         deformAnchorsScripts[5].SetupAnchor(this, -this.transform.right, blockCollider.bounds.extents, wrapDistance);
 
     }
 
-    /*
-    // Start is called before the first frame update
-    void Start()
-    {
-        mesh = this.GetComponent<MeshFilter>().mesh;
-
-        Collider blockCollider = this.GetComponent<Collider>();
-        XRGeneralGrabTransformer[] anchorGrabs = new XRGeneralGrabTransformer[6];
-
-        for (int i = 0; i < 6; i++)
-        {
-            deformAnchors[i] = Instantiate(deformAnchorPrefab, blockCollider.bounds.center, Quaternion.identity);
-            deformAnchors[i].transform.parent = this.transform;
-
-
-            DeformAnchorOld deformAnchorScript = deformAnchors[i].GetComponent<DeformAnchorOld>();
-            deformAnchorScript.parentBlockDeform = this;
-            
-            anchorGrabs[i] = deformAnchors[i].GetComponent<XRGeneralGrabTransformer>();
-            anchorGrabs[i].constrainedAxisDisplacementMode = ConstrainedAxisDisplacementMode.WorldAxisRelative;
-        }
-
-        CenterDeformAnchors();
-
-        // z axis anchor setup
-        deformAnchors[0].transform.eulerAngles = new Vector3(180, 0, 0);
-        deformAnchors[1].transform.eulerAngles = new Vector3(0, 0, 0);
-        
-        anchorGrabs[0].permittedDisplacementAxes = anchorGrabs[1].permittedDisplacementAxes = ManipulationAxes.Z;
-
-        // y axis achor setup
-        deformAnchors[2].transform.eulerAngles = new Vector3(90, 0, 0);
-        deformAnchors[3].transform.eulerAngles = new Vector3(-90, 0, 0);
-        
-        anchorGrabs[2].permittedDisplacementAxes = anchorGrabs[3].permittedDisplacementAxes = ManipulationAxes.Y;
-
-        // x axis anchor setup
-        deformAnchors[4].transform.eulerAngles = new Vector3(0, -90, 0);
-        deformAnchors[5].transform.eulerAngles = new Vector3(0, 90, 0);
-
-        anchorGrabs[4].permittedDisplacementAxes = anchorGrabs[5].permittedDisplacementAxes = ManipulationAxes.X;
-
-    }
-    */
-
-    void CenterDeformAnchors() {
-
-        Collider blockCollider = this.GetComponent<Collider>();
-        for (int i = 0; i < deformAnchors.Length; i++)
-        {
-            deformAnchors[i].transform.position = blockCollider.bounds.center;
-        }
-
-
-        // z axis anchor setup
-        deformAnchors[0].transform.position += this.transform.forward * (blockCollider.bounds.extents.z + wrapDistance);
-        deformAnchors[1].transform.position -= this.transform.forward * (blockCollider.bounds.extents.z + wrapDistance);
-        
-        // y axis achor setup
-        deformAnchors[2].transform.position += this.transform.up * (blockCollider.bounds.extents.y + wrapDistance);
-        deformAnchors[3].transform.position -= this.transform.up * (blockCollider.bounds.extents.y + wrapDistance);
-        
-        // x axis anchor setup
-        deformAnchors[4].transform.position += this.transform.right * (blockCollider.bounds.extents.x + wrapDistance);
-        deformAnchors[5].transform.position -= this.transform.right * (blockCollider.bounds.extents.x + wrapDistance);
-
-    }
-
     // Update is called once per frame
     void Update()
     {
 
     }
 
-    private void FixedUpdate() {
-
+    public Vector3 GetPosition()
+    {
+        return transform.position;
     }
 
-    public void ExitGrab(){
-
 
+    public void EnableTransparency()
+    {
+        Color color = transform.GetComponent<Renderer>().material.GetColor("_BaseColor");
+        color.a = grabTransparency;
+        transform.GetComponent<Renderer>().material.SetColor("_BaseColor", color);
     }
 
-    public Vector3 GetPosition() {
-        return transform.position;
+    public void DisableTransparency()
+    {
+        Color color = transform.GetComponent<Renderer>().material.GetColor("_BaseColor");
+        color.a = 1.0f;
+        transform.GetComponent<Renderer>().material.SetColor("_BaseColor", color);
     }
-
 }
diff --git a/Assets/Scrips/DeformAnchor.cs b/Assets/Scrips/DeformAnchor.cs
index d402f86..9c58977 100644
--- a/Assets/Scrips/DeformAnchor.cs
+++ b/Assets/Scrips/DeformAnchor.cs
@@ -4,7 +4,6 @@ using System.Collections.Generic;
 using Unity.XR.CoreUtils;
 using UnityEngine;
 using UnityEngine.XR.Interaction.Toolkit;
-using UnityEngine.XR.Interaction.Toolkit.Transformers;
 
 public class DeformAnchor : MonoBehaviour
 {
@@ -54,7 +53,7 @@ public class DeformAnchor : MonoBehaviour
 
     private void HandleSelectExit(SelectExitEventArgs arg0)
     {
-        _blockDeform.HandleAnchorGrabbed(_position.transform, _previousPosition, _normal);
+        _blockDeform.HandleAnchorGrabbed(_position.transform, _previousPosition, this);
     }
 
     private void HandleSelectEnter(SelectEnterEventArgs arg0)
@@ -120,6 +119,10 @@ public class DeformAnchor : MonoBehaviour
         return _position.transform.position;
     }
 
+    public void ResetPosition() {
+        this.transform.position = _previousPosition + _normal * _offset;
+    }
+
     private void OnDrawGizmosSelected() {
         Gizmos.color = Color.yellow;
         Gizmos.DrawLine(transform.position, transform.position + _normal);
diff --git a/Assets/Scrips/DeformAnchorOld.cs b/Assets/Scrips/DeformAnchorOld.cs
index 027b272..ce32f14 100644
--- a/Assets/Scrips/DeformAnchorOld.cs
+++ b/Assets/Scrips/DeformAnchorOld.cs
@@ -38,7 +38,7 @@ public class DeformAnchorOld : MonoBehaviour
 
     private void HandleSelectExit(SelectExitEventArgs arg0)
     {
-        parentBlockDeform.HandleAnchorGrabbed();
+        // parentBlockDeform.HandleAnchorGrabbed();
         // parentBlockDeform.ExitGrab();
     }
 
-- 
GitLab