From c07d6db69119afee72223cc765cfb8ad079018f2 Mon Sep 17 00:00:00 2001
From: Lim0_C <dladudcks22@naver.com>
Date: Thu, 27 Mar 2025 14:22:47 +0900
Subject: [PATCH 1/2] =?UTF-8?q?DO-46=20[Feat}=20=EB=A9=80=ED=8B=B0=20?=
 =?UTF-8?q?=EB=AC=B4=EC=8A=B9=EB=B6=80=20=EC=9A=94=EC=B2=AD=20=EA=B8=B0?=
 =?UTF-8?q?=EB=8A=A5=20=EA=B5=AC=ED=98=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Assets/GameUIController.cs                    |   8 +
 .../Prefabs/Effects/Draw Effect Panel.prefab  |   6 +-
 .../Prefabs/Effects/Lose Effect Panel.prefab  |   6 +-
 .../Prefabs/Effects/Win Effect Panel.prefab   |   6 +-
 .../Prefabs/Panels/Draw Confirm Panel.prefab  | 852 ++++++++++++++++++
 .../Panels/Draw Confirm Panel.prefab.meta     |   7 +
 .../Prefabs/Panels/Main Panel.prefab          |   6 +-
 .../Resources/Prefabs/[Canvas] Game UI.prefab |  10 +-
 Assets/Script/Common/Constants.cs             |   8 +-
 Assets/Script/Game/GameLogic.cs               |  40 +
 Assets/Script/Game/MultiplayManager.cs        |  78 ++
 .../DrawConfirmPanelController.cs             |  39 +
 .../DrawConfirmPanelController.cs.meta        |  11 +
 .../Script/UI/PanelController/PanelManager.cs |  12 +
 14 files changed, 1071 insertions(+), 18 deletions(-)
 create mode 100644 Assets/Resources/Prefabs/Panels/Draw Confirm Panel.prefab
 create mode 100644 Assets/Resources/Prefabs/Panels/Draw Confirm Panel.prefab.meta
 create mode 100644 Assets/Script/UI/PanelController/DrawConfirmPanelController.cs
 create mode 100644 Assets/Script/UI/PanelController/DrawConfirmPanelController.cs.meta

diff --git a/Assets/GameUIController.cs b/Assets/GameUIController.cs
index 14d15b5..423b1df 100644
--- a/Assets/GameUIController.cs
+++ b/Assets/GameUIController.cs
@@ -46,6 +46,14 @@ public class GameUIController : MonoBehaviour
         });
     }
 
+    public void OnClickDrawRequestButton()
+    {
+        GameManager.Instance.panelManager.OpenConfirmPanel("무승부 신청을 하시겠습니까?", () =>
+        {
+            _multiplayManager.RequestDraw();
+        });
+    }
+
     public void OnClickSettingsButton()
     {
         GameManager.Instance.panelManager.OpenSettingsPanel();
diff --git a/Assets/Resources/Prefabs/Effects/Draw Effect Panel.prefab b/Assets/Resources/Prefabs/Effects/Draw Effect Panel.prefab
index c1d50fe..de8681f 100644
--- a/Assets/Resources/Prefabs/Effects/Draw Effect Panel.prefab	
+++ b/Assets/Resources/Prefabs/Effects/Draw Effect Panel.prefab	
@@ -527,7 +527,7 @@ GameObject:
   - component: {fileID: 8635639988778983738}
   - component: {fileID: 4545556044007292713}
   - component: {fileID: 6152865991947934791}
-  - component: {fileID: 3813612584874639807}
+  - component: {fileID: -2390623514170132953}
   m_Layer: 5
   m_Name: Draw Effect Panel
   m_TagString: Untagged
@@ -576,7 +576,7 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   m_Material: {fileID: 0}
-  m_Color: {r: 0, g: 0, b: 0, a: 0.5882353}
+  m_Color: {r: 0, g: 0, b: 0, a: 0.74509805}
   m_RaycastTarget: 1
   m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
   m_Maskable: 1
@@ -625,7 +625,7 @@ MonoBehaviour:
   tigerOpenEyes: {fileID: 1508819185250841244}
   tigerCloseEyes: {fileID: 399504369641388738}
   flipDuration: 0.3
---- !u!61 &3813612584874639807
+--- !u!61 &-2390623514170132953
 BoxCollider2D:
   m_ObjectHideFlags: 0
   m_CorrespondingSourceObject: {fileID: 0}
diff --git a/Assets/Resources/Prefabs/Effects/Lose Effect Panel.prefab b/Assets/Resources/Prefabs/Effects/Lose Effect Panel.prefab
index d845fd9..23d30fc 100644
--- a/Assets/Resources/Prefabs/Effects/Lose Effect Panel.prefab	
+++ b/Assets/Resources/Prefabs/Effects/Lose Effect Panel.prefab	
@@ -450,7 +450,7 @@ GameObject:
   - component: {fileID: 8635639988778983738}
   - component: {fileID: 4545556044007292713}
   - component: {fileID: 3229800624310508893}
-  - component: {fileID: 6984539173991577744}
+  - component: {fileID: -8338910938938253639}
   m_Layer: 5
   m_Name: Lose Effect Panel
   m_TagString: Untagged
@@ -500,7 +500,7 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   m_Material: {fileID: 0}
-  m_Color: {r: 0, g: 0, b: 0, a: 0.5882353}
+  m_Color: {r: 0, g: 0, b: 0, a: 0.74509805}
   m_RaycastTarget: 1
   m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
   m_Maskable: 1
@@ -547,7 +547,7 @@ MonoBehaviour:
   characterOpenEyes: {fileID: 1632927645355555415}
   characterCloseEyes: {fileID: 3881260292094838299}
   depressedEffect: {fileID: 155037671892554820}
---- !u!61 &6984539173991577744
+--- !u!61 &-8338910938938253639
 BoxCollider2D:
   m_ObjectHideFlags: 0
   m_CorrespondingSourceObject: {fileID: 0}
diff --git a/Assets/Resources/Prefabs/Effects/Win Effect Panel.prefab b/Assets/Resources/Prefabs/Effects/Win Effect Panel.prefab
index 75a7c3f..da4c3e8 100644
--- a/Assets/Resources/Prefabs/Effects/Win Effect Panel.prefab	
+++ b/Assets/Resources/Prefabs/Effects/Win Effect Panel.prefab	
@@ -788,7 +788,7 @@ GameObject:
   - component: {fileID: 8635639988778983738}
   - component: {fileID: 3127148509640414758}
   - component: {fileID: 4545556044007292713}
-  - component: {fileID: 7229651074095795597}
+  - component: {fileID: -8628578634938139601}
   m_Layer: 5
   m_Name: Win Effect Panel
   m_TagString: Untagged
@@ -838,7 +838,7 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   m_Material: {fileID: 0}
-  m_Color: {r: 0, g: 0, b: 0, a: 0.5882353}
+  m_Color: {r: 0, g: 0, b: 0, a: 0.74509805}
   m_RaycastTarget: 1
   m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
   m_Maskable: 1
@@ -891,7 +891,7 @@ CanvasGroup:
   m_Interactable: 1
   m_BlocksRaycasts: 1
   m_IgnoreParentGroups: 0
---- !u!61 &7229651074095795597
+--- !u!61 &-8628578634938139601
 BoxCollider2D:
   m_ObjectHideFlags: 0
   m_CorrespondingSourceObject: {fileID: 0}
diff --git a/Assets/Resources/Prefabs/Panels/Draw Confirm Panel.prefab b/Assets/Resources/Prefabs/Panels/Draw Confirm Panel.prefab
new file mode 100644
index 0000000..e943069
--- /dev/null
+++ b/Assets/Resources/Prefabs/Panels/Draw Confirm Panel.prefab	
@@ -0,0 +1,852 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &1788897315818053684
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 7542555801726495289}
+  - component: {fileID: 2282488759583336750}
+  - component: {fileID: 773857893073654059}
+  m_Layer: 5
+  m_Name: Messege Text
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &7542555801726495289
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1788897315818053684}
+  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: 1049729465715420315}
+  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: 38}
+  m_SizeDelta: {x: 480, y: 150}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &2282488759583336750
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1788897315818053684}
+  m_CullTransparentMesh: 1
+--- !u!114 &773857893073654059
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1788897315818053684}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, 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_text: messege text
+  m_isRightToLeft: 0
+  m_fontAsset: {fileID: 11400000, guid: 85a19688db53c77469fc4406b01045da, type: 2}
+  m_sharedMaterial: {fileID: -2477908578676791210, guid: 85a19688db53c77469fc4406b01045da, type: 2}
+  m_fontSharedMaterials: []
+  m_fontMaterial: {fileID: 0}
+  m_fontMaterials: []
+  m_fontColor32:
+    serializedVersion: 2
+    rgba: 4278190080
+  m_fontColor: {r: 0, g: 0, b: 0, a: 1}
+  m_enableVertexGradient: 0
+  m_colorMode: 3
+  m_fontColorGradient:
+    topLeft: {r: 1, g: 1, b: 1, a: 1}
+    topRight: {r: 1, g: 1, b: 1, a: 1}
+    bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+    bottomRight: {r: 1, g: 1, b: 1, a: 1}
+  m_fontColorGradientPreset: {fileID: 0}
+  m_spriteAsset: {fileID: 0}
+  m_tintAllSprites: 0
+  m_StyleSheet: {fileID: 0}
+  m_TextStyleHashCode: -1183493901
+  m_overrideHtmlColors: 0
+  m_faceColor:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontSize: 36
+  m_fontSizeBase: 36
+  m_fontWeight: 400
+  m_enableAutoSizing: 0
+  m_fontSizeMin: 18
+  m_fontSizeMax: 72
+  m_fontStyle: 0
+  m_HorizontalAlignment: 2
+  m_VerticalAlignment: 512
+  m_textAlignment: 65535
+  m_characterSpacing: 0
+  m_wordSpacing: 0
+  m_lineSpacing: 0
+  m_lineSpacingMax: 0
+  m_paragraphSpacing: 0
+  m_charWidthMaxAdj: 0
+  m_enableWordWrapping: 1
+  m_wordWrappingRatios: 0.4
+  m_overflowMode: 0
+  m_linkedTextComponent: {fileID: 0}
+  parentLinkedComponent: {fileID: 0}
+  m_enableKerning: 1
+  m_enableExtraPadding: 0
+  checkPaddingRequired: 0
+  m_isRichText: 1
+  m_parseCtrlCharacters: 1
+  m_isOrthographic: 1
+  m_isCullingEnabled: 0
+  m_horizontalMapping: 0
+  m_verticalMapping: 0
+  m_uvLineOffset: 0
+  m_geometrySortingOrder: 0
+  m_IsTextObjectScaleStatic: 0
+  m_VertexBufferAutoSizeReduction: 0
+  m_useMaxVisibleDescender: 1
+  m_pageToDisplay: 1
+  m_margin: {x: 0, y: 0, z: 0, w: 0}
+  m_isUsingLegacyAnimationComponent: 0
+  m_isVolumetricText: 0
+  m_hasFontAssetChanged: 0
+  m_baseMaterial: {fileID: 0}
+  m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!1 &2317228258542092256
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 965302526599391686}
+  - component: {fileID: 8494676347912440962}
+  - component: {fileID: 1257633341820217709}
+  - component: {fileID: 1753961836956471979}
+  m_Layer: 5
+  m_Name: Yes Button
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &965302526599391686
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2317228258542092256}
+  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:
+  - {fileID: 1946490149580320571}
+  m_Father: {fileID: 1049729465715420315}
+  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: -100, y: -120}
+  m_SizeDelta: {x: 140, y: 80}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8494676347912440962
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2317228258542092256}
+  m_CullTransparentMesh: 1
+--- !u!114 &1257633341820217709
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2317228258542092256}
+  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: 0.9607844, b: 0.8980393, 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: 21300000, guid: 05a670e614d7817429ee256ceb7efbe6, type: 3}
+  m_Type: 1
+  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!114 &1753961836956471979
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2317228258542092256}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_WrapAround: 0
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 2
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 21300000, guid: 1cc2af2fc6476554ca42fb2ddfd7727f, type: 3}
+    m_PressedSprite: {fileID: 21300000, guid: 1cc2af2fc6476554ca42fb2ddfd7727f, type: 3}
+    m_SelectedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_SelectedTrigger: Selected
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 1257633341820217709}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls:
+      - m_Target: {fileID: 4442644643121240978}
+        m_TargetAssemblyTypeName: DrawConfirmPanelController, Assembly-CSharp
+        m_MethodName: OnClickConfirmButton
+        m_Mode: 1
+        m_Arguments:
+          m_ObjectArgument: {fileID: 0}
+          m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+          m_IntArgument: 0
+          m_FloatArgument: 0
+          m_StringArgument: 
+          m_BoolArgument: 0
+        m_CallState: 2
+--- !u!1 &3698158704839373389
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 9064896642958720613}
+  - component: {fileID: 2999493526827262555}
+  - component: {fileID: 7391042004064192362}
+  m_Layer: 5
+  m_Name: Text (TMP)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &9064896642958720613
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3698158704839373389}
+  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: 985363981920635096}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 7.5}
+  m_SizeDelta: {x: 0, y: -15}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &2999493526827262555
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3698158704839373389}
+  m_CullTransparentMesh: 1
+--- !u!114 &7391042004064192362
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3698158704839373389}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, 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_text: "\uC544\uB2C8\uC694"
+  m_isRightToLeft: 0
+  m_fontAsset: {fileID: 11400000, guid: 85a19688db53c77469fc4406b01045da, type: 2}
+  m_sharedMaterial: {fileID: -2477908578676791210, guid: 85a19688db53c77469fc4406b01045da, type: 2}
+  m_fontSharedMaterials: []
+  m_fontMaterial: {fileID: 0}
+  m_fontMaterials: []
+  m_fontColor32:
+    serializedVersion: 2
+    rgba: 4278190080
+  m_fontColor: {r: 0, g: 0, b: 0, a: 1}
+  m_enableVertexGradient: 0
+  m_colorMode: 3
+  m_fontColorGradient:
+    topLeft: {r: 1, g: 1, b: 1, a: 1}
+    topRight: {r: 1, g: 1, b: 1, a: 1}
+    bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+    bottomRight: {r: 1, g: 1, b: 1, a: 1}
+  m_fontColorGradientPreset: {fileID: 0}
+  m_spriteAsset: {fileID: 0}
+  m_tintAllSprites: 0
+  m_StyleSheet: {fileID: 0}
+  m_TextStyleHashCode: -1183493901
+  m_overrideHtmlColors: 0
+  m_faceColor:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontSize: 36
+  m_fontSizeBase: 36
+  m_fontWeight: 400
+  m_enableAutoSizing: 0
+  m_fontSizeMin: 18
+  m_fontSizeMax: 72
+  m_fontStyle: 0
+  m_HorizontalAlignment: 2
+  m_VerticalAlignment: 512
+  m_textAlignment: 65535
+  m_characterSpacing: 0
+  m_wordSpacing: 0
+  m_lineSpacing: 0
+  m_lineSpacingMax: 0
+  m_paragraphSpacing: 0
+  m_charWidthMaxAdj: 0
+  m_enableWordWrapping: 1
+  m_wordWrappingRatios: 0.4
+  m_overflowMode: 0
+  m_linkedTextComponent: {fileID: 0}
+  parentLinkedComponent: {fileID: 0}
+  m_enableKerning: 1
+  m_enableExtraPadding: 0
+  checkPaddingRequired: 0
+  m_isRichText: 1
+  m_parseCtrlCharacters: 1
+  m_isOrthographic: 1
+  m_isCullingEnabled: 0
+  m_horizontalMapping: 0
+  m_verticalMapping: 0
+  m_uvLineOffset: 0
+  m_geometrySortingOrder: 0
+  m_IsTextObjectScaleStatic: 0
+  m_VertexBufferAutoSizeReduction: 0
+  m_useMaxVisibleDescender: 1
+  m_pageToDisplay: 1
+  m_margin: {x: 0, y: 0, z: 0, w: 0}
+  m_isUsingLegacyAnimationComponent: 0
+  m_isVolumetricText: 0
+  m_hasFontAssetChanged: 0
+  m_baseMaterial: {fileID: 0}
+  m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!1 &4661890517030743811
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1946490149580320571}
+  - component: {fileID: 3931044922440075362}
+  - component: {fileID: 555572636850183268}
+  m_Layer: 5
+  m_Name: Text (TMP)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1946490149580320571
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4661890517030743811}
+  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: 965302526599391686}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 7.4999886}
+  m_SizeDelta: {x: 0, y: -15.000023}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &3931044922440075362
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4661890517030743811}
+  m_CullTransparentMesh: 1
+--- !u!114 &555572636850183268
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4661890517030743811}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, 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_text: "\uC608"
+  m_isRightToLeft: 0
+  m_fontAsset: {fileID: 11400000, guid: 85a19688db53c77469fc4406b01045da, type: 2}
+  m_sharedMaterial: {fileID: -2477908578676791210, guid: 85a19688db53c77469fc4406b01045da, type: 2}
+  m_fontSharedMaterials: []
+  m_fontMaterial: {fileID: 0}
+  m_fontMaterials: []
+  m_fontColor32:
+    serializedVersion: 2
+    rgba: 4278190080
+  m_fontColor: {r: 0, g: 0, b: 0, a: 1}
+  m_enableVertexGradient: 0
+  m_colorMode: 3
+  m_fontColorGradient:
+    topLeft: {r: 1, g: 1, b: 1, a: 1}
+    topRight: {r: 1, g: 1, b: 1, a: 1}
+    bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+    bottomRight: {r: 1, g: 1, b: 1, a: 1}
+  m_fontColorGradientPreset: {fileID: 0}
+  m_spriteAsset: {fileID: 0}
+  m_tintAllSprites: 0
+  m_StyleSheet: {fileID: 0}
+  m_TextStyleHashCode: -1183493901
+  m_overrideHtmlColors: 0
+  m_faceColor:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontSize: 36
+  m_fontSizeBase: 36
+  m_fontWeight: 400
+  m_enableAutoSizing: 0
+  m_fontSizeMin: 18
+  m_fontSizeMax: 72
+  m_fontStyle: 0
+  m_HorizontalAlignment: 2
+  m_VerticalAlignment: 512
+  m_textAlignment: 65535
+  m_characterSpacing: 0
+  m_wordSpacing: 0
+  m_lineSpacing: 0
+  m_lineSpacingMax: 0
+  m_paragraphSpacing: 0
+  m_charWidthMaxAdj: 0
+  m_enableWordWrapping: 1
+  m_wordWrappingRatios: 0.4
+  m_overflowMode: 0
+  m_linkedTextComponent: {fileID: 0}
+  parentLinkedComponent: {fileID: 0}
+  m_enableKerning: 1
+  m_enableExtraPadding: 0
+  checkPaddingRequired: 0
+  m_isRichText: 1
+  m_parseCtrlCharacters: 1
+  m_isOrthographic: 1
+  m_isCullingEnabled: 0
+  m_horizontalMapping: 0
+  m_verticalMapping: 0
+  m_uvLineOffset: 0
+  m_geometrySortingOrder: 0
+  m_IsTextObjectScaleStatic: 0
+  m_VertexBufferAutoSizeReduction: 0
+  m_useMaxVisibleDescender: 1
+  m_pageToDisplay: 1
+  m_margin: {x: 0, y: 0, z: 0, w: 0}
+  m_isUsingLegacyAnimationComponent: 0
+  m_isVolumetricText: 0
+  m_hasFontAssetChanged: 0
+  m_baseMaterial: {fileID: 0}
+  m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!1 &8145365568262946399
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5614572128744664879}
+  - component: {fileID: 3728636385802151783}
+  - component: {fileID: 3609920769045485995}
+  - component: {fileID: 949980890983110046}
+  - component: {fileID: 4442644643121240978}
+  m_Layer: 5
+  m_Name: Draw Confirm Panel
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &5614572128744664879
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8145365568262946399}
+  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:
+  - {fileID: 1049729465715420315}
+  m_Father: {fileID: 0}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &3728636385802151783
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8145365568262946399}
+  m_CullTransparentMesh: 1
+--- !u!114 &3609920769045485995
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8145365568262946399}
+  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: 0, g: 0, b: 0, a: 0.74509805}
+  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: 10907, guid: 0000000000000000f000000000000000, type: 0}
+  m_Type: 1
+  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!225 &949980890983110046
+CanvasGroup:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8145365568262946399}
+  m_Enabled: 1
+  m_Alpha: 1
+  m_Interactable: 1
+  m_BlocksRaycasts: 1
+  m_IgnoreParentGroups: 0
+--- !u!114 &4442644643121240978
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8145365568262946399}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 1ebb6563d04ba2b44b06891880cbe0b6, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  panelRectTransform: {fileID: 1049729465715420315}
+  messageText: {fileID: 773857893073654059}
+--- !u!1 &8611399693750823341
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1049729465715420315}
+  - component: {fileID: 6012768702964141829}
+  - component: {fileID: 5029524648726594707}
+  m_Layer: 5
+  m_Name: Panel
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1049729465715420315
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8611399693750823341}
+  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:
+  - {fileID: 7542555801726495289}
+  - {fileID: 965302526599391686}
+  - {fileID: 985363981920635096}
+  m_Father: {fileID: 5614572128744664879}
+  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: 600, y: 400}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &6012768702964141829
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8611399693750823341}
+  m_CullTransparentMesh: 1
+--- !u!114 &5029524648726594707
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8611399693750823341}
+  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: 21300000, guid: e89f6694961e7574b98368e14934a8b1, type: 3}
+  m_Type: 1
+  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 &8664974708086771355
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 985363981920635096}
+  - component: {fileID: 6738990646649674804}
+  - component: {fileID: 4523293559331202638}
+  - component: {fileID: 3091834035832018361}
+  m_Layer: 5
+  m_Name: No Button
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &985363981920635096
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8664974708086771355}
+  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:
+  - {fileID: 9064896642958720613}
+  m_Father: {fileID: 1049729465715420315}
+  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: 100, y: -120}
+  m_SizeDelta: {x: 140, y: 80}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &6738990646649674804
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8664974708086771355}
+  m_CullTransparentMesh: 1
+--- !u!114 &4523293559331202638
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8664974708086771355}
+  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: 0.9607844, b: 0.8980393, 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: 21300000, guid: 05a670e614d7817429ee256ceb7efbe6, type: 3}
+  m_Type: 1
+  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!114 &3091834035832018361
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8664974708086771355}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_WrapAround: 0
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 2
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 21300000, guid: 1cc2af2fc6476554ca42fb2ddfd7727f, type: 3}
+    m_PressedSprite: {fileID: 21300000, guid: 1cc2af2fc6476554ca42fb2ddfd7727f, type: 3}
+    m_SelectedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_SelectedTrigger: Selected
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 4523293559331202638}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls:
+      - m_Target: {fileID: 4442644643121240978}
+        m_TargetAssemblyTypeName: DrawConfirmPanelController, Assembly-CSharp
+        m_MethodName: OnClickCloseButton
+        m_Mode: 1
+        m_Arguments:
+          m_ObjectArgument: {fileID: 0}
+          m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+          m_IntArgument: 0
+          m_FloatArgument: 0
+          m_StringArgument: 
+          m_BoolArgument: 0
+        m_CallState: 2
diff --git a/Assets/Resources/Prefabs/Panels/Draw Confirm Panel.prefab.meta b/Assets/Resources/Prefabs/Panels/Draw Confirm Panel.prefab.meta
new file mode 100644
index 0000000..5ca8bf0
--- /dev/null
+++ b/Assets/Resources/Prefabs/Panels/Draw Confirm Panel.prefab.meta	
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: a498b5b3f7af42d4d974507473a6f8a0
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Resources/Prefabs/Panels/Main Panel.prefab b/Assets/Resources/Prefabs/Panels/Main Panel.prefab
index ca0fdef..72c53db 100644
--- a/Assets/Resources/Prefabs/Panels/Main Panel.prefab	
+++ b/Assets/Resources/Prefabs/Panels/Main Panel.prefab	
@@ -1457,7 +1457,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 0
+  m_IsActive: 1
 --- !u!224 &405965270916774547
 RectTransform:
   m_ObjectHideFlags: 0
@@ -1713,7 +1713,7 @@ MonoBehaviour:
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
-  m_text: "\uD654\uB791\uB098\uBE44"
+  m_text: tester
   m_isRightToLeft: 0
   m_fontAsset: {fileID: 11400000, guid: 85a19688db53c77469fc4406b01045da, type: 2}
   m_sharedMaterial: {fileID: -2477908578676791210, guid: 85a19688db53c77469fc4406b01045da, type: 2}
@@ -1799,7 +1799,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 1
+  m_IsActive: 0
 --- !u!224 &8172929902404983356
 RectTransform:
   m_ObjectHideFlags: 0
diff --git a/Assets/Resources/Prefabs/[Canvas] Game UI.prefab b/Assets/Resources/Prefabs/[Canvas] Game UI.prefab
index 1be1e23..294c097 100644
--- a/Assets/Resources/Prefabs/[Canvas] Game UI.prefab	
+++ b/Assets/Resources/Prefabs/[Canvas] Game UI.prefab	
@@ -36,7 +36,7 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 0, y: 1}
-  m_AnchoredPosition: {x: 50, y: -85}
+  m_AnchoredPosition: {x: 50, y: -20}
   m_SizeDelta: {x: 238, y: 150}
   m_Pivot: {x: 0, y: 1}
 --- !u!222 &4747539784995484548
@@ -338,7 +338,7 @@ MonoBehaviour:
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
-  m_text: "\uC7AC\uB300\uACB0"
+  m_text: "\uBB34\uC2B9\uBD80"
   m_isRightToLeft: 0
   m_fontAsset: {fileID: 11400000, guid: 85a19688db53c77469fc4406b01045da, type: 2}
   m_sharedMaterial: {fileID: -2477908578676791210, guid: 85a19688db53c77469fc4406b01045da, type: 2}
@@ -789,7 +789,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 0
+  m_IsActive: 1
 --- !u!224 &3928015243027423495
 RectTransform:
   m_ObjectHideFlags: 0
@@ -807,7 +807,7 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 0, y: 1}
-  m_AnchoredPosition: {x: 50, y: -85}
+  m_AnchoredPosition: {x: 50, y: -170}
   m_SizeDelta: {x: 238, y: 150}
   m_Pivot: {x: 0, y: 1}
 --- !u!222 &3058652260737614200
@@ -894,7 +894,7 @@ MonoBehaviour:
       m_Calls:
       - m_Target: {fileID: 3933575647777291622}
         m_TargetAssemblyTypeName: GameUIController, Assembly-CSharp
-        m_MethodName: OnClickRetryButton
+        m_MethodName: OnClickDrawRequestButton
         m_Mode: 1
         m_Arguments:
           m_ObjectArgument: {fileID: 0}
diff --git a/Assets/Script/Common/Constants.cs b/Assets/Script/Common/Constants.cs
index 328ac54..2d5966a 100644
--- a/Assets/Script/Common/Constants.cs
+++ b/Assets/Script/Common/Constants.cs
@@ -18,6 +18,12 @@
         ExitRoom,       // 자신이 방을 빠져 나왔을 때
         EndGame,        // 상대방이 접속을 끊거나 방을 나갔을 때
         DoSurrender,      // 상대방이 항복했을 때
-        SurrenderConfirmed // 항복 요청이 성공적으로 전송되었을 때
+        SurrenderConfirmed, // 항복 요청이 성공적으로 전송되었을 때
+        ReceiveDrawRequest,
+        DrawRequestSent,
+        DrawAccepted,
+        DrawConfirmed,
+        DrawRejected,
+        DrawRejectionConfirmed
     };
 }
\ No newline at end of file
diff --git a/Assets/Script/Game/GameLogic.cs b/Assets/Script/Game/GameLogic.cs
index fb5afb7..625bdab 100644
--- a/Assets/Script/Game/GameLogic.cs
+++ b/Assets/Script/Game/GameLogic.cs
@@ -461,6 +461,46 @@ public class GameLogic : MonoBehaviour
                             GameManager.Instance.panelManager.OpenEffectPanel(Enums.GameResult.Lose);
                             EndGame(Enums.GameResult.Lose);
                         });
+                        break;
+                    case Constants.MultiplayManagerState.ReceiveDrawRequest:
+                        Debug.Log("상대방의 무승부 요청 들어옴");
+                        UnityMainThreadDispatcher.Instance().Enqueue(() =>
+                        {
+                            GameManager.Instance.panelManager.OpenDrawConfirmPanel("무승부 요청을 승락하시겠습니까?", () =>
+                            {
+                                GameManager.Instance.panelManager.OpenEffectPanel(Enums.GameResult.Draw);
+                                EndGame(Enums.GameResult.Draw);
+                                _multiplayManager.AcceptDraw();
+                            }, () =>
+                            {
+                                _multiplayManager.RejectDraw();
+                            });
+                        });
+                        break;
+                    case Constants.MultiplayManagerState.DrawRequestSent:
+                        Debug.Log("무승부 요청 전송 완료");
+                        break;
+                    case Constants.MultiplayManagerState.DrawAccepted:
+                        Debug.Log("무승부 요청이 승락이 들어옴");
+                        UnityMainThreadDispatcher.Instance().Enqueue(() =>
+                        {
+                            GameManager.Instance.panelManager.OpenEffectPanel(Enums.GameResult.Draw);
+                            EndGame(Enums.GameResult.Draw);
+                        });
+                        break;
+                    case Constants.MultiplayManagerState.DrawConfirmed:
+                        Debug.Log("무승부 요청 승락 완료");
+                        break;
+                    case Constants.MultiplayManagerState.DrawRejected:
+                        Debug.Log("무승부 요청이 거부가 들어옴");
+                        UnityMainThreadDispatcher.Instance().Enqueue(() =>
+                        {
+                            GameManager.Instance.panelManager.OpenConfirmPanel("무승부 요청을 거부하였습니다.", () => { });
+                        });
+                        break;
+                    case Constants.MultiplayManagerState.DrawRejectionConfirmed:
+                        Debug.Log("무승부 요청 거부 완료");
+                        
                         break;
                 }
                 ReplayManager.Instance.InitReplayData(UserManager.Instance.Nickname,"nicknameB");
diff --git a/Assets/Script/Game/MultiplayManager.cs b/Assets/Script/Game/MultiplayManager.cs
index c5a8eab..93cd65b 100644
--- a/Assets/Script/Game/MultiplayManager.cs
+++ b/Assets/Script/Game/MultiplayManager.cs
@@ -90,6 +90,12 @@ public class MultiplayManager : IDisposable
             _socket.On("doOpponent", DoOpponent);
             _socket.On("doSurrender", DoSurrender);
             _socket.On("surrenderConfirmed", SurrenderConfirmed);
+            _socket.On("receiveDrawRequest", ReceiveDrawRequest);
+            _socket.On("drawRequestSent", DrawRequestSent);
+            _socket.On("drawAccepted", DrawAccepted);
+            _socket.On("drawConfirmed", DrawConfirmed);
+            _socket.On("drawRejected", DrawRejected);
+            _socket.On("drawRejectionConfirmed", DrawRejectionConfirmed);
 
             _socket.Connect();
         }
@@ -218,6 +224,78 @@ public class MultiplayManager : IDisposable
         _onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.SurrenderConfirmed, data.message);
     }
 
+    public void RequestDraw()
+    {
+        if (string.IsNullOrEmpty(_roomId))
+        {
+            Debug.LogError("requestDraw 호출 실패: _roomId가 설정되지 않음");
+            return;
+        }
+        _socket.Emit("requestDraw",new { roomId = _roomId });
+    }
+    
+    private void ReceiveDrawRequest(SocketIOResponse response)
+    {
+        var data = response.GetValue<MessageData>();
+        
+        _onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.ReceiveDrawRequest, data.message);
+    }
+    
+    private void DrawRequestSent(SocketIOResponse response)
+    {
+        var data = response.GetValue<MessageData>();
+        
+        _onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.DrawRequestSent, data.message);
+    }
+
+    public void AcceptDraw()
+    {
+        if (string.IsNullOrEmpty(_roomId))
+        {
+            Debug.LogError("acceptDraw 호출 실패: _roomId가 설정되지 않음");
+            return;
+        }
+        _socket.Emit("acceptDraw", new { roomId = _roomId });
+    }
+    
+    private void DrawAccepted(SocketIOResponse response)
+    {
+        var data = response.GetValue<MessageData>();
+        
+        _onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.DrawAccepted, data.message);
+    }
+
+    private void DrawConfirmed(SocketIOResponse response)
+    {
+        var data = response.GetValue<MessageData>();
+        
+        _onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.DrawConfirmed, data.message);
+    }
+
+    public void RejectDraw()
+    {
+        if (string.IsNullOrEmpty(_roomId))
+        {
+            Debug.LogError("rejectDraw 호출 실패: _roomId가 설정되지 않음");
+            return;
+        }
+        _socket.Emit("rejectDraw", new { roomId = _roomId });
+    }
+    
+    private void DrawRejected(SocketIOResponse response)
+    {
+        var data = response.GetValue<MessageData>();
+        
+        _onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.DrawRejected, data.message);
+    }
+
+    private void DrawRejectionConfirmed(SocketIOResponse response)
+    {
+        var data = response.GetValue<MessageData>();
+        
+        _onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.DrawRejectionConfirmed, data.message);
+    }
+
     public void Dispose()
     {
         if (_socket != null)
diff --git a/Assets/Script/UI/PanelController/DrawConfirmPanelController.cs b/Assets/Script/UI/PanelController/DrawConfirmPanelController.cs
new file mode 100644
index 0000000..4ff1379
--- /dev/null
+++ b/Assets/Script/UI/PanelController/DrawConfirmPanelController.cs
@@ -0,0 +1,39 @@
+using System.Collections;
+using System.Collections.Generic;
+using TMPro;
+using UnityEngine;
+
+public class DrawConfirmPanelController : PanelController
+{
+    [SerializeField] private TMP_Text messageText;  //자식 텍스트 변수
+
+    public delegate void OnConfirmButtonClick();
+    private OnConfirmButtonClick onConfirmButtonClick;
+    
+    public delegate void OnContradictButtonClick();
+    private OnContradictButtonClick onContradictButtonClick;
+
+    public void Show(string message, OnConfirmButtonClick onConfirmButtonClick, OnContradictButtonClick onContradictButtonClick)
+    {
+        messageText.text = message;
+        this.onConfirmButtonClick = onConfirmButtonClick;
+        this.onContradictButtonClick = onContradictButtonClick;
+        base.Show();
+    }
+    
+    /// <summary>
+    /// Confirm 버튼 클릭시 호출되는 함수
+    /// </summary>
+    public void OnClickConfirmButton()
+    {
+        Hide(() => onConfirmButtonClick?.Invoke());
+    }
+
+    /// <summary>
+    /// X 버튼 클릭시 호출되는 함수
+    /// </summary>
+    public void OnClickCloseButton()
+    {
+        Hide(() => onContradictButtonClick?.Invoke());
+    }
+}
\ No newline at end of file
diff --git a/Assets/Script/UI/PanelController/DrawConfirmPanelController.cs.meta b/Assets/Script/UI/PanelController/DrawConfirmPanelController.cs.meta
new file mode 100644
index 0000000..66429a1
--- /dev/null
+++ b/Assets/Script/UI/PanelController/DrawConfirmPanelController.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 1ebb6563d04ba2b44b06891880cbe0b6
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Script/UI/PanelController/PanelManager.cs b/Assets/Script/UI/PanelController/PanelManager.cs
index 6aada1c..c8592d9 100644
--- a/Assets/Script/UI/PanelController/PanelManager.cs
+++ b/Assets/Script/UI/PanelController/PanelManager.cs
@@ -187,6 +187,18 @@ public class PanelManager : MonoBehaviour
         }
     }
     
+    public void OpenDrawConfirmPanel(string message, 
+        DrawConfirmPanelController.OnConfirmButtonClick onConfirmButtonClick, 
+        DrawConfirmPanelController.OnContradictButtonClick onContradictButtonClick)
+    {
+        if (_canvas != null)
+        {
+            var drawConfirmPanelObject = GetPanel("Draw Confirm Panel");
+            drawConfirmPanelObject.GetComponent<DrawConfirmPanelController>()
+                .Show(message, onConfirmButtonClick, onContradictButtonClick);
+        }
+    }
+    
     public void OpenSettingsPanel()
     {
         if (_canvas != null)

From e4a83fc73e8d1e9aee5978be1c877190b14dbd39 Mon Sep 17 00:00:00 2001
From: Lim0_C <dladudcks22@naver.com>
Date: Thu, 27 Mar 2025 15:39:10 +0900
Subject: [PATCH 2/2] =?UTF-8?q?DO-46=20[Feat}=20=EB=AC=B4=EC=8A=B9?=
 =?UTF-8?q?=EB=B6=80=20=EC=9A=94=EC=B2=AD=20=ED=9A=9F=EC=88=98=20=EC=A0=9C?=
 =?UTF-8?q?=ED=95=9C?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Assets/GameUIController.cs        | 14 +++++++++++---
 Assets/Script/Game/GameLogic.cs   | 11 +++++++++--
 Assets/Script/Game/GameManager.cs | 14 +++++++++++++-
 3 files changed, 33 insertions(+), 6 deletions(-)

diff --git a/Assets/GameUIController.cs b/Assets/GameUIController.cs
index 423b1df..9ce3324 100644
--- a/Assets/GameUIController.cs
+++ b/Assets/GameUIController.cs
@@ -48,10 +48,18 @@ public class GameUIController : MonoBehaviour
 
     public void OnClickDrawRequestButton()
     {
-        GameManager.Instance.panelManager.OpenConfirmPanel("무승부 신청을 하시겠습니까?", () =>
+        if (GameManager.Instance.GetRequestDrawChance())
         {
-            _multiplayManager.RequestDraw();
-        });
+            GameManager.Instance.panelManager.OpenConfirmPanel("무승부 신청을 하시겠습니까?", () =>
+            {
+                _multiplayManager.RequestDraw();
+            });
+            GameManager.Instance.SetRequestDrawChanceFalse();
+        }
+        else
+        {
+            GameManager.Instance.panelManager.OpenConfirmPanel("무승부 요청이 제한돼있습니다.",()=>{});
+        }
     }
 
     public void OnClickSettingsButton()
diff --git a/Assets/Script/Game/GameLogic.cs b/Assets/Script/Game/GameLogic.cs
index 4ecd89e..d2d0037 100644
--- a/Assets/Script/Game/GameLogic.cs
+++ b/Assets/Script/Game/GameLogic.cs
@@ -217,7 +217,7 @@ public class MultiPlayerState: BasePlayerState
     }
 }
 
-public class GameLogic : MonoBehaviour
+public class GameLogic : IDisposable
 {
     private Enums.PlayerType[,] _board;
     public StoneController stoneController;
@@ -226,6 +226,12 @@ public class GameLogic : MonoBehaviour
     //총 착수된 돌 카운터
     public int _totalStoneCounter;
     public int TotalStoneCounter{get{return _totalStoneCounter;}}
+    //무승부 요청 가능 여부
+    private bool _requestDrawChance;
+    public bool RequestDrawChance{
+        get { return _requestDrawChance;}
+        set { _requestDrawChance = value;}
+    }
     
     public BasePlayerState firstPlayerState;
     public BasePlayerState secondPlayerState;
@@ -244,6 +250,7 @@ public class GameLogic : MonoBehaviour
     public MultiplayManager _multiplayManager;
     private string _roomId;
     
+    
 #region Renju Members
     // 렌주룰 금수 검사기
     private RenjuForbiddenMoveDetector _forbiddenDetector;
@@ -259,6 +266,7 @@ public class GameLogic : MonoBehaviour
         this.stoneController = stoneController;
         this.gameType = gameType;
         _totalStoneCounter = 0;
+        RequestDrawChance = true;
         
         selectedRow = -1;
         selectedCol = -1;
@@ -539,7 +547,6 @@ public class GameLogic : MonoBehaviour
         return AI_NAMIES[index];
     }
     
-    
     public void SwitchToSinglePlayer()
     {
         _multiplayManager?.Dispose();
diff --git a/Assets/Script/Game/GameManager.cs b/Assets/Script/Game/GameManager.cs
index 90bacf5..b2dca0b 100644
--- a/Assets/Script/Game/GameManager.cs
+++ b/Assets/Script/Game/GameManager.cs
@@ -90,13 +90,13 @@ public class GameManager : Singleton<GameManager>
             _camera = GameObject.FindObjectOfType<Camera>().gameObject;
             _gameUIController = GameObject.FindObjectOfType<GameUIController>();
             _gameLogic = new GameLogic(_stoneController, _gameType, fioTimer);
-            
         }
         InitPanels();
     }
     //임시 재시작 재대결
     public void RetryGame()
     {
+        if (_gameLogic == null) return;
         _gameLogic.ResetBoard();
         _stoneController.InitStones();
         _gameLogic.SetState(_gameLogic.firstPlayerState);
@@ -119,4 +119,16 @@ public class GameManager : Singleton<GameManager>
         if (_gameUIController == null) return;
         _gameUIController.SetTurnIndicator(isFirstPlayer);
     }
+
+    public bool GetRequestDrawChance()
+    {
+        if (_gameLogic == null){ return false;}
+        return _gameLogic.RequestDrawChance;
+    }
+
+    public void SetRequestDrawChanceFalse()
+    {
+        if (_gameLogic == null) return;
+        _gameLogic.RequestDrawChance = false;
+    }
 }
\ No newline at end of file