diff --git a/Assets/_PROJECT/Prefabs/ModelGeneration/Printable.prefab b/Assets/_PROJECT/Prefabs/ModelGeneration/Printable.prefab index e895a356..0f24ce62 100644 --- a/Assets/_PROJECT/Prefabs/ModelGeneration/Printable.prefab +++ b/Assets/_PROJECT/Prefabs/ModelGeneration/Printable.prefab @@ -1,81 +1,5 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1 &191445694185635432 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5366069888055802935} - - component: {fileID: 3859184247018527702} - - component: {fileID: 4706461719203293390} - m_Layer: 0 - m_Name: Image - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5366069888055802935 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 191445694185635432} - 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_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 9089378608032997654} - m_RootOrder: -1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0.35, y: 0.35} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &3859184247018527702 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 191445694185635432} - m_CullTransparentMesh: 1 ---- !u!114 &4706461719203293390 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 191445694185635432} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 0} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 --- !u!1 &1729028776279376009 GameObject: m_ObjectHideFlags: 0 @@ -88,7 +12,7 @@ GameObject: - component: {fileID: 7594134409976187304} - component: {fileID: 1297641575955202044} - component: {fileID: 6521999952126795650} - m_Layer: 0 + m_Layer: 2 m_Name: Printable m_TagString: Untagged m_Icon: {fileID: 0} @@ -107,8 +31,8 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 9089378608032997654} - {fileID: 3957909802885323975} + - {fileID: 3252674962452689824} m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -287,7 +211,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: bb8ba6b5820955f4a95511b55c3a8db9, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &6791306317367082968 +--- !u!1 &2119860429913564602 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -295,10 +219,10 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 9089378608032997654} - - component: {fileID: 3612923806949016747} - - component: {fileID: 5397926117381239953} - - component: {fileID: 4316554082218252814} + - component: {fileID: 3252674962452689824} + - component: {fileID: 6732376546868400302} + - component: {fileID: 668304854638700674} + - component: {fileID: 6488625860246538072} m_Layer: 0 m_Name: ImageDisplayCanvas m_TagString: Untagged @@ -306,34 +230,34 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &9089378608032997654 +--- !u!224 &3252674962452689824 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6791306317367082968} - m_LocalRotation: {x: 0, y: -0.7071068, z: -0.7071068, w: 0} - m_LocalPosition: {x: 0, y: 0, z: -0.0016155243} + m_GameObject: {fileID: 2119860429913564602} + m_LocalRotation: {x: -0.49999997, y: -0.5000005, z: 0.49999997, w: -0.49999958} + m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 5366069888055802935} + - {fileID: 5419759324473382426} m_Father: {fileID: 3870989277732630730} m_RootOrder: -1 - m_LocalEulerAnglesHint: {x: 270, y: 0, z: 180} + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 270} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: -0, y: 0.015545189} + m_AnchoredPosition: {x: 0, y: 0.0141} m_SizeDelta: {x: 100, y: 100} m_Pivot: {x: 0.5, y: 0.5} ---- !u!223 &3612923806949016747 +--- !u!223 &6732376546868400302 Canvas: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6791306317367082968} + m_GameObject: {fileID: 2119860429913564602} m_Enabled: 1 serializedVersion: 3 m_RenderMode: 2 @@ -349,13 +273,13 @@ Canvas: m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 ---- !u!114 &5397926117381239953 +--- !u!114 &668304854638700674 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6791306317367082968} + m_GameObject: {fileID: 2119860429913564602} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} @@ -372,13 +296,13 @@ MonoBehaviour: m_DefaultSpriteDPI: 96 m_DynamicPixelsPerUnit: 1 m_PresetInfoIsWorld: 1 ---- !u!114 &4316554082218252814 +--- !u!114 &6488625860246538072 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6791306317367082968} + m_GameObject: {fileID: 2119860429913564602} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} @@ -389,6 +313,82 @@ MonoBehaviour: m_BlockingMask: serializedVersion: 2 m_Bits: 4294967295 +--- !u!1 &4848143069676538940 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5419759324473382426} + - component: {fileID: 8399332010298584884} + - component: {fileID: 5040108080439486778} + m_Layer: 0 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5419759324473382426 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4848143069676538940} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3252674962452689824} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0.4, y: 0.4} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8399332010298584884 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4848143069676538940} + m_CullTransparentMesh: 1 +--- !u!114 &5040108080439486778 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4848143069676538940} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 --- !u!1 &8445441351388109183 GameObject: m_ObjectHideFlags: 0 @@ -401,7 +401,7 @@ GameObject: - component: {fileID: 4361987431377336869} - component: {fileID: 3411055828343993123} - component: {fileID: 7071286287119029704} - m_Layer: 0 + m_Layer: 2 m_Name: PrintableBody m_TagString: Untagged m_Icon: {fileID: 0} diff --git a/Assets/_PROJECT/Scenes/DeltaBuilding_base.unity b/Assets/_PROJECT/Scenes/DeltaBuilding_base.unity index 0771007a..0d933e21 100644 --- a/Assets/_PROJECT/Scenes/DeltaBuilding_base.unity +++ b/Assets/_PROJECT/Scenes/DeltaBuilding_base.unity @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6228744224992c84fc1a6de12e9565de32617c947d58b7e1ab7f0456d12b75fe -size 68556404 +oid sha256:5caa620ac27007fe51e2051f7d03a0d52c92423729d530fa458e145880317be9 +size 68559909 diff --git a/Assets/_PROJECT/Scripts/ModeGeneration/ShapeDetection/ComputerPrinter.cs b/Assets/_PROJECT/Scripts/ModeGeneration/ShapeDetection/ComputerPrinter.cs index 875a6bdc..958118b7 100644 --- a/Assets/_PROJECT/Scripts/ModeGeneration/ShapeDetection/ComputerPrinter.cs +++ b/Assets/_PROJECT/Scripts/ModeGeneration/ShapeDetection/ComputerPrinter.cs @@ -10,7 +10,6 @@ public class ComputerPrinter : MonoBehaviour public Transform ejectionDestination; public Printable printablePrefab; public float ejectionDuration = 1.0f; - public int ignorePlayerCollisionLayer = 2; // Start is called before the first frame update void Start() @@ -32,11 +31,6 @@ public class ComputerPrinter : MonoBehaviour Printable printable = Instantiate(printablePrefab, ejectionOrigin.position, Quaternion.identity); printable.AttachTexture(generatedTexture); - printable.gameObject.layer = ignorePlayerCollisionLayer; - foreach (Transform childTrans in printable.transform.GetComponentInChildren()) - { - childTrans.gameObject.layer = ignorePlayerCollisionLayer; - } printable.transform.DOMove(ejectionDestination.position, ejectionDuration).OnComplete(() => { diff --git a/Assets/_PROJECT/Scripts/ModeGeneration/ShapeDetection/Printer3D.cs b/Assets/_PROJECT/Scripts/ModeGeneration/ShapeDetection/Printer3D.cs index 80dec9da..da5467c5 100644 --- a/Assets/_PROJECT/Scripts/ModeGeneration/ShapeDetection/Printer3D.cs +++ b/Assets/_PROJECT/Scripts/ModeGeneration/ShapeDetection/Printer3D.cs @@ -1,3 +1,4 @@ +using FMOD.Studio; using System; using System.Collections; using System.Collections.Generic; @@ -9,12 +10,15 @@ public class Printer3D : MonoBehaviour public int ignorePlayerCollisionLayer = 2; public string shapeScannerTag = "ShapeScannable"; + private bool isPrinting = false; + private EventInstance printingSound; private GameObject GeneratedModel; // Start is called before the first frame update void Start() { - + printingSound = AudioManager.Instance.CreateInstance(FMODEvents.Instance.Printing); + printingSound.setParameterByName("3DPrinterPrintingJob", 1); } // Update is called once per frame @@ -25,6 +29,10 @@ public class Printer3D : MonoBehaviour public async void PrintObject(Texture2D texture) { + isPrinting = true; + printingSound.start(); + printingSound.setParameterByName("3DPrinterPrintingJob", 0); + string encodedTexture = Convert.ToBase64String(texture.EncodeToJPG()); byte[] encodedModel = await TrellisClient.Instance.GenerateModel(encodedTexture); @@ -36,6 +44,9 @@ public class Printer3D : MonoBehaviour GeneratedModel.transform.position = Vector3.zero; } GeneratedModel = spawnedObject; + + printingSound.setParameterByName("3DPrinterPrintingJob", 1); + isPrinting = false; } private void InitializeSpawnedObject(GameObject spawnedObject) @@ -59,4 +70,9 @@ public class Printer3D : MonoBehaviour spawnedObjectParent.AddComponent(); } + + public bool IsPrinting() + { + return isPrinting; + } } diff --git a/Assets/_PROJECT/Scripts/ModeGeneration/ShapeDetection/Printer3DInputHole.cs b/Assets/_PROJECT/Scripts/ModeGeneration/ShapeDetection/Printer3DInputHole.cs index 265d8d8f..7f6ed946 100644 --- a/Assets/_PROJECT/Scripts/ModeGeneration/ShapeDetection/Printer3DInputHole.cs +++ b/Assets/_PROJECT/Scripts/ModeGeneration/ShapeDetection/Printer3DInputHole.cs @@ -1,10 +1,14 @@ -using System.Collections; -using System.Collections.Generic; +using DG.Tweening; using UnityEngine; +using UnityEngine.XR.Interaction.Toolkit; public class Printer3DInputHole : MonoBehaviour { public Printer3D printer; + public XRInteractionManager interactionManager; + public Transform insertionOrigin; + public Transform insertionDestination; + public float insertionDuration = 1f; // Start is called before the first frame update void Start() @@ -26,10 +30,56 @@ public class Printer3DInputHole : MonoBehaviour Printable printable = parent.GetComponent(); if (printable != null) { - printer.PrintObject(printable.GetTexture()); - Destroy(printable.gameObject); + if (printer.IsPrinting()) + { + Debug.Log("priner is busy!"); + } else + { + ReleaseFromPlayer(printable); + InsertPrintable(printable); + } } } - + } + + private void ReleaseFromPlayer(Printable printable) + { + + var grab = printable.GetComponent(); + var rb = printable.GetComponent(); + + // 1) If currently held, force release from the interactor + if (grab != null && grab.isSelected) + { + var interactor = grab.firstInteractorSelecting; // the hand/controller currently holding it + if (interactor != null) + { + // Transfer ownership: tell the manager to stop the selection + interactionManager.SelectExit(interactor, grab); + } + } + + // 2) Make sure physics doesn't fight the tween (optional but recommended) + if (rb != null) + { + rb.isKinematic = true; // prevent forces during tween + rb.velocity = Vector3.zero; + rb.angularVelocity = Vector3.zero; + } + + // 3) Optionally disable grabbing during the tween so the player can't re-grab mid-flight + if (grab != null) grab.enabled = false; + } + + private void InsertPrintable(Printable printable) + { + Transform printableTransform = printable.transform; + printableTransform.position = insertionOrigin.position; + printableTransform.rotation = insertionOrigin.rotation; + printableTransform.DOMove(insertionDestination.position, insertionDuration).OnComplete(() => + { + printer.PrintObject(printable.GetTexture()); + Destroy(printable.gameObject); + }); } }