diff --git a/Assets/GameUIController.cs b/Assets/GameUIController.cs index 14d15b5..9ce3324 100644 --- a/Assets/GameUIController.cs +++ b/Assets/GameUIController.cs @@ -46,6 +46,22 @@ public class GameUIController : MonoBehaviour }); } + public void OnClickDrawRequestButton() + { + if (GameManager.Instance.GetRequestDrawChance()) + { + GameManager.Instance.panelManager.OpenConfirmPanel("무승부 신청을 하시겠습니까?", () => + { + _multiplayManager.RequestDraw(); + }); + GameManager.Instance.SetRequestDrawChanceFalse(); + } + else + { + GameManager.Instance.panelManager.OpenConfirmPanel("무승부 요청이 제한돼있습니다.",()=>{}); + } + } + 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 de8b421..72c53db 100644 --- a/Assets/Resources/Prefabs/Panels/Main Panel.prefab +++ b/Assets/Resources/Prefabs/Panels/Main Panel.prefab @@ -1104,7 +1104,7 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_text: "1\uAE09" + m_text: "18\uAE09" m_isRightToLeft: 0 m_fontAsset: {fileID: 11400000, guid: 85a19688db53c77469fc4406b01045da, type: 2} m_sharedMaterial: {fileID: -2477908578676791210, guid: 85a19688db53c77469fc4406b01045da, type: 2} @@ -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: "\uD14C\uC2A4\uD2B8\uC0BC\uBC88" + 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 a15f242..d7e84ab 100644 --- a/Assets/Script/Common/Constants.cs +++ b/Assets/Script/Common/Constants.cs @@ -19,6 +19,12 @@ EndGame, // 상대방이 접속을 끊거나 방을 나갔을 때 DoSurrender, // 상대방이 항복했을 때 SurrenderConfirmed, // 항복 요청이 성공적으로 전송되었을 때 + ReceiveDrawRequest, + DrawRequestSent, + DrawAccepted, + DrawConfirmed, + DrawRejected, + DrawRejectionConfirmed, ReceiveTimeout // 상대방이 타임 아웃일 때 }; } \ No newline at end of file diff --git a/Assets/Script/Game/GameLogic.cs b/Assets/Script/Game/GameLogic.cs index 61f7e79..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; @@ -468,6 +476,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; case Constants.MultiplayManagerState.ReceiveTimeout: Debug.Log("상대방이 타임 아웃 됨"); @@ -499,7 +547,6 @@ public class GameLogic : MonoBehaviour return AI_NAMIES[index]; } - public void SwitchToSinglePlayer() { _multiplayManager?.Dispose(); @@ -507,7 +554,6 @@ public class GameLogic : MonoBehaviour // 기존 멀티플레이 상태 초기화 _multiplayManager = null; _roomId = null; - this.gameType = Enums.GameType.SinglePlay; // 싱글 플레이 상태로 변경 firstPlayerState = new PlayerState(true); 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 _camera = GameObject.FindObjectOfType().gameObject; _gameUIController = GameObject.FindObjectOfType(); _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 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 diff --git a/Assets/Script/Game/MultiplayManager.cs b/Assets/Script/Game/MultiplayManager.cs index 445dfa5..ca9846d 100644 --- a/Assets/Script/Game/MultiplayManager.cs +++ b/Assets/Script/Game/MultiplayManager.cs @@ -91,6 +91,12 @@ public class MultiplayManager : IDisposable _socket.On("doSurrender", DoSurrender); _socket.On("surrenderConfirmed", SurrenderConfirmed); _socket.On("receiveTimeout", ReceiveTimeout); + _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(); } @@ -243,6 +249,78 @@ public class MultiplayManager : IDisposable _onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.ReceiveTimeout, 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(); + + _onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.ReceiveDrawRequest, data.message); + } + + private void DrawRequestSent(SocketIOResponse response) + { + var data = response.GetValue(); + + _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(); + + _onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.DrawAccepted, data.message); + } + + private void DrawConfirmed(SocketIOResponse response) + { + var data = response.GetValue(); + + _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(); + + _onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.DrawRejected, data.message); + } + + private void DrawRejectionConfirmed(SocketIOResponse response) + { + var data = response.GetValue(); + + _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(); + } + + /// + /// Confirm 버튼 클릭시 호출되는 함수 + /// + public void OnClickConfirmButton() + { + Hide(() => onConfirmButtonClick?.Invoke()); + } + + /// + /// X 버튼 클릭시 호출되는 함수 + /// + 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 b3c421e..fffed63 100644 --- a/Assets/Script/UI/PanelController/PanelManager.cs +++ b/Assets/Script/UI/PanelController/PanelManager.cs @@ -216,6 +216,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() + .Show(message, onConfirmButtonClick, onContradictButtonClick); + } + } + public void OpenSettingsPanel() { if (_canvas != null)