Merge branch 'main' into DO-68-패널-관련-버그-픽스
This commit is contained in:
commit
9e262d5499
@ -62,6 +62,15 @@ public class GameUIController : MonoBehaviour
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void OnClickRevengeRequestButton()
|
||||||
|
{
|
||||||
|
GameManager.Instance.panelManager.OpenConfirmPanel("재대결 신청을\n하시겠습니까?", () =>
|
||||||
|
{
|
||||||
|
GameManager.Instance.panelManager.OpenLoadingPanel(true, true, false, false);
|
||||||
|
_multiplayManager.RequestRevengeRequest();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public void OnClickSettingsButton()
|
public void OnClickSettingsButton()
|
||||||
{
|
{
|
||||||
GameManager.Instance.panelManager.OpenSettingsPanel();
|
GameManager.Instance.panelManager.OpenSettingsPanel();
|
||||||
|
@ -1,5 +1,80 @@
|
|||||||
%YAML 1.1
|
%YAML 1.1
|
||||||
%TAG !u! tag:unity3d.com,2011:
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!1 &634998020045031155
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 7672225859872789597}
|
||||||
|
- component: {fileID: 4740804549096936842}
|
||||||
|
- component: {fileID: 4136038457757579293}
|
||||||
|
m_Layer: 5
|
||||||
|
m_Name: Image Background
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 0
|
||||||
|
--- !u!224 &7672225859872789597
|
||||||
|
RectTransform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 634998020045031155}
|
||||||
|
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: 4501886400186872935}
|
||||||
|
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: 1080, y: 1920}
|
||||||
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
|
--- !u!222 &4740804549096936842
|
||||||
|
CanvasRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 634998020045031155}
|
||||||
|
m_CullTransparentMesh: 1
|
||||||
|
--- !u!114 &4136038457757579293
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 634998020045031155}
|
||||||
|
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: a99fa85777f9a5b4d86b859277707544, type: 3}
|
||||||
|
m_Type: 0
|
||||||
|
m_PreserveAspect: 0
|
||||||
|
m_FillCenter: 1
|
||||||
|
m_FillMethod: 4
|
||||||
|
m_FillAmount: 1
|
||||||
|
m_FillClockwise: 1
|
||||||
|
m_FillOrigin: 0
|
||||||
|
m_UseSpriteMesh: 0
|
||||||
|
m_PixelsPerUnitMultiplier: 1
|
||||||
--- !u!1 &1888922292368658029
|
--- !u!1 &1888922292368658029
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -95,7 +170,7 @@ MonoBehaviour:
|
|||||||
m_fontSize: 60
|
m_fontSize: 60
|
||||||
m_fontSizeBase: 60
|
m_fontSizeBase: 60
|
||||||
m_fontWeight: 400
|
m_fontWeight: 400
|
||||||
m_enableAutoSizing: 0
|
m_enableAutoSizing: 1
|
||||||
m_fontSizeMin: 18
|
m_fontSizeMin: 18
|
||||||
m_fontSizeMax: 72
|
m_fontSizeMax: 72
|
||||||
m_fontStyle: 0
|
m_fontStyle: 0
|
||||||
@ -165,6 +240,8 @@ RectTransform:
|
|||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children:
|
m_Children:
|
||||||
|
- {fileID: 7672225859872789597}
|
||||||
|
- {fileID: 5931655356592755266}
|
||||||
- {fileID: 7400499721686926711}
|
- {fileID: 7400499721686926711}
|
||||||
- {fileID: 3975591051107611802}
|
- {fileID: 3975591051107611802}
|
||||||
- {fileID: 5598745296817777379}
|
- {fileID: 5598745296817777379}
|
||||||
@ -197,14 +274,14 @@ MonoBehaviour:
|
|||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
m_Material: {fileID: 0}
|
m_Material: {fileID: 0}
|
||||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
m_Color: {r: 1, g: 1, b: 1, a: 0}
|
||||||
m_RaycastTarget: 1
|
m_RaycastTarget: 1
|
||||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||||
m_Maskable: 1
|
m_Maskable: 1
|
||||||
m_OnCullStateChanged:
|
m_OnCullStateChanged:
|
||||||
m_PersistentCalls:
|
m_PersistentCalls:
|
||||||
m_Calls: []
|
m_Calls: []
|
||||||
m_Sprite: {fileID: 21300000, guid: a99fa85777f9a5b4d86b859277707544, type: 3}
|
m_Sprite: {fileID: 0}
|
||||||
m_Type: 0
|
m_Type: 0
|
||||||
m_PreserveAspect: 0
|
m_PreserveAspect: 0
|
||||||
m_FillCenter: 1
|
m_FillCenter: 1
|
||||||
@ -241,10 +318,85 @@ MonoBehaviour:
|
|||||||
- {fileID: 21300000, guid: 4fbfde8fa7f268d46aaf3ba594cc3eea, type: 3}
|
- {fileID: 21300000, guid: 4fbfde8fa7f268d46aaf3ba594cc3eea, type: 3}
|
||||||
- {fileID: 21300000, guid: cbd52561c19af16428d3e5c61048e4e4, type: 3}
|
- {fileID: 21300000, guid: cbd52561c19af16428d3e5c61048e4e4, type: 3}
|
||||||
- {fileID: 21300000, guid: e18c394847e2c3d4b8af043437d3c5ab, type: 3}
|
- {fileID: 21300000, guid: e18c394847e2c3d4b8af043437d3c5ab, type: 3}
|
||||||
fullText: "\uBD88\uB7EC\uC624\uB294 \uC911..."
|
|
||||||
interval: 0.5
|
|
||||||
flipDuration: 0.3
|
flipDuration: 0.3
|
||||||
delayBetweenFlips: 1
|
delayBetweenFlips: 1
|
||||||
|
imageBackground: {fileID: 634998020045031155}
|
||||||
|
simpleBackground: {fileID: 3738728334186617240}
|
||||||
|
--- !u!1 &3738728334186617240
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 5931655356592755266}
|
||||||
|
- component: {fileID: 4398238821743250823}
|
||||||
|
- component: {fileID: 1591676098588350328}
|
||||||
|
m_Layer: 5
|
||||||
|
m_Name: Simple Background
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!224 &5931655356592755266
|
||||||
|
RectTransform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 3738728334186617240}
|
||||||
|
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: 4501886400186872935}
|
||||||
|
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: 1080, y: 1920}
|
||||||
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
|
--- !u!222 &4398238821743250823
|
||||||
|
CanvasRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 3738728334186617240}
|
||||||
|
m_CullTransparentMesh: 1
|
||||||
|
--- !u!114 &1591676098588350328
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 3738728334186617240}
|
||||||
|
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.78431374}
|
||||||
|
m_RaycastTarget: 1
|
||||||
|
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
m_Maskable: 1
|
||||||
|
m_OnCullStateChanged:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
m_Sprite: {fileID: 0}
|
||||||
|
m_Type: 0
|
||||||
|
m_PreserveAspect: 0
|
||||||
|
m_FillCenter: 1
|
||||||
|
m_FillMethod: 4
|
||||||
|
m_FillAmount: 1
|
||||||
|
m_FillClockwise: 1
|
||||||
|
m_FillOrigin: 0
|
||||||
|
m_UseSpriteMesh: 0
|
||||||
|
m_PixelsPerUnitMultiplier: 1
|
||||||
--- !u!1 &4677795762614618252
|
--- !u!1 &4677795762614618252
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
@ -1727,7 +1727,7 @@ MonoBehaviour:
|
|||||||
m_OnCullStateChanged:
|
m_OnCullStateChanged:
|
||||||
m_PersistentCalls:
|
m_PersistentCalls:
|
||||||
m_Calls: []
|
m_Calls: []
|
||||||
m_text: kjm
|
m_text: "\uBC15\uD638\uB7AD"
|
||||||
m_isRightToLeft: 0
|
m_isRightToLeft: 0
|
||||||
m_fontAsset: {fileID: 11400000, guid: 85a19688db53c77469fc4406b01045da, type: 2}
|
m_fontAsset: {fileID: 11400000, guid: 85a19688db53c77469fc4406b01045da, type: 2}
|
||||||
m_sharedMaterial: {fileID: -2477908578676791210, guid: 85a19688db53c77469fc4406b01045da, type: 2}
|
m_sharedMaterial: {fileID: -2477908578676791210, guid: 85a19688db53c77469fc4406b01045da, type: 2}
|
||||||
|
2803
Assets/Resources/Prefabs/Test [Canvas] Game UI.prefab
Normal file
2803
Assets/Resources/Prefabs/Test [Canvas] Game UI.prefab
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 65aac0e22fe25aa42b9cf7df776a854d
|
||||||
|
PrefabImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -1,5 +1,5 @@
|
|||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: 65aac0e22fe25aa42b9cf7df776a854d
|
guid: 269b81c4cdffc44428d200c3788621fd
|
||||||
PrefabImporter:
|
PrefabImporter:
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
userData:
|
userData:
|
||||||
|
@ -130,91 +130,91 @@ PrefabInstance:
|
|||||||
serializedVersion: 3
|
serializedVersion: 3
|
||||||
m_TransformParent: {fileID: 0}
|
m_TransformParent: {fileID: 0}
|
||||||
m_Modifications:
|
m_Modifications:
|
||||||
- target: {fileID: 626368541760032086, guid: 65aac0e22fe25aa42b9cf7df776a854d, type: 3}
|
- target: {fileID: 626368541760032086, guid: 269b81c4cdffc44428d200c3788621fd, type: 3}
|
||||||
propertyPath: m_Name
|
propertyPath: m_Name
|
||||||
value: Canvas
|
value: Canvas
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 1516328599079970136, guid: 65aac0e22fe25aa42b9cf7df776a854d, type: 3}
|
- target: {fileID: 1516328599079970136, guid: 269b81c4cdffc44428d200c3788621fd, type: 3}
|
||||||
propertyPath: m_Sprite
|
propertyPath: m_Sprite
|
||||||
value:
|
value:
|
||||||
objectReference: {fileID: 21300000, guid: 81e6604d6664acf4cab1ff13043e5b54, type: 3}
|
objectReference: {fileID: 21300000, guid: 81e6604d6664acf4cab1ff13043e5b54, type: 3}
|
||||||
- target: {fileID: 6113787613246818512, guid: 65aac0e22fe25aa42b9cf7df776a854d, type: 3}
|
- target: {fileID: 6113787613246818512, guid: 269b81c4cdffc44428d200c3788621fd, type: 3}
|
||||||
propertyPath: m_Pivot.x
|
propertyPath: m_Pivot.x
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 6113787613246818512, guid: 65aac0e22fe25aa42b9cf7df776a854d, type: 3}
|
- target: {fileID: 6113787613246818512, guid: 269b81c4cdffc44428d200c3788621fd, type: 3}
|
||||||
propertyPath: m_Pivot.y
|
propertyPath: m_Pivot.y
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 6113787613246818512, guid: 65aac0e22fe25aa42b9cf7df776a854d, type: 3}
|
- target: {fileID: 6113787613246818512, guid: 269b81c4cdffc44428d200c3788621fd, type: 3}
|
||||||
propertyPath: m_AnchorMax.x
|
propertyPath: m_AnchorMax.x
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 6113787613246818512, guid: 65aac0e22fe25aa42b9cf7df776a854d, type: 3}
|
- target: {fileID: 6113787613246818512, guid: 269b81c4cdffc44428d200c3788621fd, type: 3}
|
||||||
propertyPath: m_AnchorMax.y
|
propertyPath: m_AnchorMax.y
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 6113787613246818512, guid: 65aac0e22fe25aa42b9cf7df776a854d, type: 3}
|
- target: {fileID: 6113787613246818512, guid: 269b81c4cdffc44428d200c3788621fd, type: 3}
|
||||||
propertyPath: m_AnchorMin.x
|
propertyPath: m_AnchorMin.x
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 6113787613246818512, guid: 65aac0e22fe25aa42b9cf7df776a854d, type: 3}
|
- target: {fileID: 6113787613246818512, guid: 269b81c4cdffc44428d200c3788621fd, type: 3}
|
||||||
propertyPath: m_AnchorMin.y
|
propertyPath: m_AnchorMin.y
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 6113787613246818512, guid: 65aac0e22fe25aa42b9cf7df776a854d, type: 3}
|
- target: {fileID: 6113787613246818512, guid: 269b81c4cdffc44428d200c3788621fd, type: 3}
|
||||||
propertyPath: m_SizeDelta.x
|
propertyPath: m_SizeDelta.x
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 6113787613246818512, guid: 65aac0e22fe25aa42b9cf7df776a854d, type: 3}
|
- target: {fileID: 6113787613246818512, guid: 269b81c4cdffc44428d200c3788621fd, type: 3}
|
||||||
propertyPath: m_SizeDelta.y
|
propertyPath: m_SizeDelta.y
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 6113787613246818512, guid: 65aac0e22fe25aa42b9cf7df776a854d, type: 3}
|
- target: {fileID: 6113787613246818512, guid: 269b81c4cdffc44428d200c3788621fd, type: 3}
|
||||||
propertyPath: m_LocalPosition.x
|
propertyPath: m_LocalPosition.x
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 6113787613246818512, guid: 65aac0e22fe25aa42b9cf7df776a854d, type: 3}
|
- target: {fileID: 6113787613246818512, guid: 269b81c4cdffc44428d200c3788621fd, type: 3}
|
||||||
propertyPath: m_LocalPosition.y
|
propertyPath: m_LocalPosition.y
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 6113787613246818512, guid: 65aac0e22fe25aa42b9cf7df776a854d, type: 3}
|
- target: {fileID: 6113787613246818512, guid: 269b81c4cdffc44428d200c3788621fd, type: 3}
|
||||||
propertyPath: m_LocalPosition.z
|
propertyPath: m_LocalPosition.z
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 6113787613246818512, guid: 65aac0e22fe25aa42b9cf7df776a854d, type: 3}
|
- target: {fileID: 6113787613246818512, guid: 269b81c4cdffc44428d200c3788621fd, type: 3}
|
||||||
propertyPath: m_LocalRotation.w
|
propertyPath: m_LocalRotation.w
|
||||||
value: 1
|
value: 1
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 6113787613246818512, guid: 65aac0e22fe25aa42b9cf7df776a854d, type: 3}
|
- target: {fileID: 6113787613246818512, guid: 269b81c4cdffc44428d200c3788621fd, type: 3}
|
||||||
propertyPath: m_LocalRotation.x
|
propertyPath: m_LocalRotation.x
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 6113787613246818512, guid: 65aac0e22fe25aa42b9cf7df776a854d, type: 3}
|
- target: {fileID: 6113787613246818512, guid: 269b81c4cdffc44428d200c3788621fd, type: 3}
|
||||||
propertyPath: m_LocalRotation.y
|
propertyPath: m_LocalRotation.y
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 6113787613246818512, guid: 65aac0e22fe25aa42b9cf7df776a854d, type: 3}
|
- target: {fileID: 6113787613246818512, guid: 269b81c4cdffc44428d200c3788621fd, type: 3}
|
||||||
propertyPath: m_LocalRotation.z
|
propertyPath: m_LocalRotation.z
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 6113787613246818512, guid: 65aac0e22fe25aa42b9cf7df776a854d, type: 3}
|
- target: {fileID: 6113787613246818512, guid: 269b81c4cdffc44428d200c3788621fd, type: 3}
|
||||||
propertyPath: m_AnchoredPosition.x
|
propertyPath: m_AnchoredPosition.x
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 6113787613246818512, guid: 65aac0e22fe25aa42b9cf7df776a854d, type: 3}
|
- target: {fileID: 6113787613246818512, guid: 269b81c4cdffc44428d200c3788621fd, type: 3}
|
||||||
propertyPath: m_AnchoredPosition.y
|
propertyPath: m_AnchoredPosition.y
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 6113787613246818512, guid: 65aac0e22fe25aa42b9cf7df776a854d, type: 3}
|
- target: {fileID: 6113787613246818512, guid: 269b81c4cdffc44428d200c3788621fd, type: 3}
|
||||||
propertyPath: m_LocalEulerAnglesHint.x
|
propertyPath: m_LocalEulerAnglesHint.x
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 6113787613246818512, guid: 65aac0e22fe25aa42b9cf7df776a854d, type: 3}
|
- target: {fileID: 6113787613246818512, guid: 269b81c4cdffc44428d200c3788621fd, type: 3}
|
||||||
propertyPath: m_LocalEulerAnglesHint.y
|
propertyPath: m_LocalEulerAnglesHint.y
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 6113787613246818512, guid: 65aac0e22fe25aa42b9cf7df776a854d, type: 3}
|
- target: {fileID: 6113787613246818512, guid: 269b81c4cdffc44428d200c3788621fd, type: 3}
|
||||||
propertyPath: m_LocalEulerAnglesHint.z
|
propertyPath: m_LocalEulerAnglesHint.z
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
@ -222,7 +222,7 @@ PrefabInstance:
|
|||||||
m_RemovedGameObjects: []
|
m_RemovedGameObjects: []
|
||||||
m_AddedGameObjects: []
|
m_AddedGameObjects: []
|
||||||
m_AddedComponents: []
|
m_AddedComponents: []
|
||||||
m_SourcePrefab: {fileID: 100100000, guid: 65aac0e22fe25aa42b9cf7df776a854d, type: 3}
|
m_SourcePrefab: {fileID: 100100000, guid: 269b81c4cdffc44428d200c3788621fd, type: 3}
|
||||||
--- !u!1 &1100315178
|
--- !u!1 &1100315178
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
@ -25,6 +25,12 @@
|
|||||||
DrawConfirmed,
|
DrawConfirmed,
|
||||||
DrawRejected,
|
DrawRejected,
|
||||||
DrawRejectionConfirmed,
|
DrawRejectionConfirmed,
|
||||||
|
ReceiveRevengeRequest, // 재대결 요청 수신
|
||||||
|
RevengeRequestSent, // 재대결 요청 전송 확인
|
||||||
|
RevengeAccepted, // 재대결 수락 수신
|
||||||
|
RevengeConfirmed, // 재대결 수락 전송 확인
|
||||||
|
RevengeRejected, // 재대결 거절 수신
|
||||||
|
RevengeRejectionConfirmed, // 재대결 거절 전송 확인
|
||||||
ReceiveTimeout // 상대방이 타임 아웃일 때
|
ReceiveTimeout // 상대방이 타임 아웃일 때
|
||||||
};
|
};
|
||||||
}
|
}
|
@ -22,7 +22,6 @@ public abstract class BasePlayerState
|
|||||||
gameLogic.fioTimer.PauseTimer();
|
gameLogic.fioTimer.PauseTimer();
|
||||||
gameLogic.SetNewBoardValue(playerType, row, col);
|
gameLogic.SetNewBoardValue(playerType, row, col);
|
||||||
gameLogic.CountStoneCounter();
|
gameLogic.CountStoneCounter();
|
||||||
|
|
||||||
if (_isMultiplay)
|
if (_isMultiplay)
|
||||||
{
|
{
|
||||||
_multiplayManager.SendPlayerMove(_roomId, new Vector2Int(row, col));
|
_multiplayManager.SendPlayerMove(_roomId, new Vector2Int(row, col));
|
||||||
@ -177,7 +176,7 @@ public class MultiPlayerState: BasePlayerState
|
|||||||
gameLogic.UpdateForbiddenMoves();
|
gameLogic.UpdateForbiddenMoves();
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
gameLogic.currentTurn = _playerType;
|
// gameLogic.currentTurn = _playerType;
|
||||||
// gameLogic.stoneController.OnStoneClickedDelegate = (row, col) =>
|
// gameLogic.stoneController.OnStoneClickedDelegate = (row, col) =>
|
||||||
// {
|
// {
|
||||||
// HandleMove(gameLogic, row, col);
|
// HandleMove(gameLogic, row, col);
|
||||||
@ -247,8 +246,11 @@ public class GameLogic : IDisposable
|
|||||||
private int _lastRow;
|
private int _lastRow;
|
||||||
private int _lastCol;
|
private int _lastCol;
|
||||||
|
|
||||||
|
// 멀티 플레이 관련
|
||||||
public MultiplayManager _multiplayManager;
|
public MultiplayManager _multiplayManager;
|
||||||
private string _roomId;
|
private string _roomId;
|
||||||
|
private string opponentNickname;
|
||||||
|
private int opponentImageIndex;
|
||||||
|
|
||||||
|
|
||||||
#region Renju Members
|
#region Renju Members
|
||||||
@ -331,6 +333,7 @@ public class GameLogic : IDisposable
|
|||||||
// break;
|
// break;
|
||||||
case Enums.GameType.MultiPlay:
|
case Enums.GameType.MultiPlay:
|
||||||
// 메인 스레드에서 실행 - UI 업데이트는 메인 스레드에서 실행 필요
|
// 메인 스레드에서 실행 - UI 업데이트는 메인 스레드에서 실행 필요
|
||||||
|
bool isFirstPlayer;
|
||||||
UnityMainThreadDispatcher.Instance().Enqueue(() =>
|
UnityMainThreadDispatcher.Instance().Enqueue(() =>
|
||||||
{
|
{
|
||||||
GameManager.Instance.panelManager.OpenLoadingPanel(true, true);
|
GameManager.Instance.panelManager.OpenLoadingPanel(true, true);
|
||||||
@ -353,14 +356,17 @@ public class GameLogic : IDisposable
|
|||||||
Debug.Log("Join Room 응답값이 null 입니다");
|
Debug.Log("Join Room 응답값이 null 입니다");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
_roomId = joinRoomData.roomId;
|
||||||
|
|
||||||
// 선공, 후공 처리
|
// 선공, 후공 처리
|
||||||
bool isFirstPlayer = joinRoomData.isBlack;
|
isFirstPlayer = joinRoomData.isBlack;
|
||||||
|
|
||||||
|
opponentNickname = joinRoomData.opponentNickname;
|
||||||
|
opponentImageIndex = joinRoomData.opponentImageIndex;
|
||||||
if (isFirstPlayer)
|
if (isFirstPlayer)
|
||||||
{
|
{
|
||||||
Debug.Log("해당 플레이어가 선공 입니다");
|
Debug.Log("해당 플레이어가 선공 입니다");
|
||||||
firstPlayerState = new PlayerState(true, _multiplayManager, joinRoomData.roomId);
|
firstPlayerState = new PlayerState(true, _multiplayManager, _roomId);
|
||||||
secondPlayerState = new MultiPlayerState(false, _multiplayManager);
|
secondPlayerState = new MultiPlayerState(false, _multiplayManager);
|
||||||
UnityMainThreadDispatcher.Instance().Enqueue(() =>
|
UnityMainThreadDispatcher.Instance().Enqueue(() =>
|
||||||
{
|
{
|
||||||
@ -375,7 +381,7 @@ public class GameLogic : IDisposable
|
|||||||
{
|
{
|
||||||
Debug.Log("해당 플레이어가 후공 입니다");
|
Debug.Log("해당 플레이어가 후공 입니다");
|
||||||
firstPlayerState = new MultiPlayerState(true, _multiplayManager);
|
firstPlayerState = new MultiPlayerState(true, _multiplayManager);
|
||||||
secondPlayerState = new PlayerState(false, _multiplayManager, joinRoomData.roomId);
|
secondPlayerState = new PlayerState(false, _multiplayManager, _roomId);
|
||||||
|
|
||||||
UnityMainThreadDispatcher.Instance().Enqueue(() =>
|
UnityMainThreadDispatcher.Instance().Enqueue(() =>
|
||||||
{
|
{
|
||||||
@ -413,7 +419,8 @@ public class GameLogic : IDisposable
|
|||||||
}
|
}
|
||||||
// 선공, 후공 처리
|
// 선공, 후공 처리
|
||||||
isFirstPlayer = startGameData.isBlack;
|
isFirstPlayer = startGameData.isBlack;
|
||||||
|
opponentNickname = startGameData.opponentNickname;
|
||||||
|
opponentImageIndex = startGameData.opponentImageIndex;
|
||||||
if (isFirstPlayer)
|
if (isFirstPlayer)
|
||||||
{
|
{
|
||||||
Debug.Log("해당 플레이어가 선공 입니다");
|
Debug.Log("해당 플레이어가 선공 입니다");
|
||||||
@ -481,7 +488,7 @@ public class GameLogic : IDisposable
|
|||||||
Debug.Log("상대방의 무승부 요청 들어옴");
|
Debug.Log("상대방의 무승부 요청 들어옴");
|
||||||
UnityMainThreadDispatcher.Instance().Enqueue(() =>
|
UnityMainThreadDispatcher.Instance().Enqueue(() =>
|
||||||
{
|
{
|
||||||
GameManager.Instance.panelManager.OpenDrawConfirmPanel("무승부 요청을 승락하시겠습니까?", () =>
|
GameManager.Instance.panelManager.OpenDrawConfirmPanel("무승부 요청을 승낙하시겠습니까?", () =>
|
||||||
{
|
{
|
||||||
GameManager.Instance.panelManager.OpenEffectPanel(Enums.GameResult.Draw);
|
GameManager.Instance.panelManager.OpenEffectPanel(Enums.GameResult.Draw);
|
||||||
EndGame(Enums.GameResult.Draw);
|
EndGame(Enums.GameResult.Draw);
|
||||||
@ -496,7 +503,7 @@ public class GameLogic : IDisposable
|
|||||||
Debug.Log("무승부 요청 전송 완료");
|
Debug.Log("무승부 요청 전송 완료");
|
||||||
break;
|
break;
|
||||||
case Constants.MultiplayManagerState.DrawAccepted:
|
case Constants.MultiplayManagerState.DrawAccepted:
|
||||||
Debug.Log("무승부 요청이 승락이 들어옴");
|
Debug.Log("무승부 요청이 승낙이 들어옴");
|
||||||
UnityMainThreadDispatcher.Instance().Enqueue(() =>
|
UnityMainThreadDispatcher.Instance().Enqueue(() =>
|
||||||
{
|
{
|
||||||
GameManager.Instance.panelManager.OpenEffectPanel(Enums.GameResult.Draw);
|
GameManager.Instance.panelManager.OpenEffectPanel(Enums.GameResult.Draw);
|
||||||
@ -504,7 +511,7 @@ public class GameLogic : IDisposable
|
|||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
case Constants.MultiplayManagerState.DrawConfirmed:
|
case Constants.MultiplayManagerState.DrawConfirmed:
|
||||||
Debug.Log("무승부 요청 승락 완료");
|
Debug.Log("무승부 요청 승낙 완료");
|
||||||
break;
|
break;
|
||||||
case Constants.MultiplayManagerState.DrawRejected:
|
case Constants.MultiplayManagerState.DrawRejected:
|
||||||
Debug.Log("무승부 요청이 거부가 들어옴");
|
Debug.Log("무승부 요청이 거부가 들어옴");
|
||||||
@ -525,8 +532,88 @@ public class GameLogic : IDisposable
|
|||||||
EndGame(Enums.GameResult.Win);
|
EndGame(Enums.GameResult.Win);
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
case Constants.MultiplayManagerState.RevengeRequestSent:
|
||||||
|
Debug.Log("재대결 요청: 전송 완료");
|
||||||
|
break;
|
||||||
|
case Constants.MultiplayManagerState.ReceiveRevengeRequest:
|
||||||
|
Debug.Log("상대방의 재대결 요청이 들어옴");
|
||||||
|
UnityMainThreadDispatcher.Instance().Enqueue(() =>
|
||||||
|
{
|
||||||
|
GameManager.Instance.panelManager.OpenDrawConfirmPanel("상대방의 재대결 요청을\n승낙하시겠습니까?", () =>
|
||||||
|
{
|
||||||
|
_multiplayManager.AcceptRevenge();
|
||||||
|
}, () =>
|
||||||
|
{
|
||||||
|
_multiplayManager.RejectRevenge();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case Constants.MultiplayManagerState.RevengeAccepted:
|
||||||
|
Debug.Log("재대결 요청: 승낙이 들어옴");
|
||||||
|
var revengeAcceptedData = data as RevengeData;
|
||||||
|
|
||||||
|
// TODO: 응답값 없을 때 서버에서 다시 받아오기 or AI 플레이로 넘기는 처리 필요
|
||||||
|
if (revengeAcceptedData == null)
|
||||||
|
{
|
||||||
|
Debug.Log("RevengeAccepted 응답값이 null 입니다");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
ReplayManager.Instance.InitReplayData(UserManager.Instance.Nickname,"nicknameB");
|
|
||||||
|
// 선공, 후공 처리
|
||||||
|
isFirstPlayer = revengeAcceptedData.isBlack;
|
||||||
|
|
||||||
|
UnityMainThreadDispatcher.Instance().Enqueue(() =>
|
||||||
|
{
|
||||||
|
GameManager.Instance.panelManager.OpenConfirmPanel("상대방이\n재대결을 승낙하였습니다.\n게임이 다시 시작됩니다.", () =>
|
||||||
|
{
|
||||||
|
InitBoardForRevenge(isFirstPlayer);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case Constants.MultiplayManagerState.RevengeConfirmed:
|
||||||
|
Debug.Log("재대결 요청: 승낙 완료");
|
||||||
|
var revengConfirmedData = data as RevengeData;
|
||||||
|
|
||||||
|
// TODO: 응답값 없을 때 서버에서 다시 받아오기 or AI 플레이로 넘기는 처리 필요
|
||||||
|
if (revengConfirmedData == null)
|
||||||
|
{
|
||||||
|
Debug.Log("RevengeConfirmed 응답값이 null 입니다");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 선공, 후공 처리
|
||||||
|
isFirstPlayer = revengConfirmedData.isBlack;
|
||||||
|
|
||||||
|
UnityMainThreadDispatcher.Instance().Enqueue(() =>
|
||||||
|
{
|
||||||
|
GameManager.Instance.panelManager.OpenConfirmPanel("재대결 요청을\n승낙하였습니다.\n게임이 다시 시작됩니다.", () =>
|
||||||
|
{
|
||||||
|
InitBoardForRevenge(isFirstPlayer);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case Constants.MultiplayManagerState.RevengeRejected:
|
||||||
|
Debug.Log("재대결 요청: 거부가 들어옴");
|
||||||
|
UnityMainThreadDispatcher.Instance().Enqueue(() =>
|
||||||
|
{
|
||||||
|
GameManager.Instance.panelManager.OpenConfirmPanel("상대방이\n재대결 요청을\n거부하였습니다.", () =>
|
||||||
|
{
|
||||||
|
GameManager.Instance.panelManager.CloseLoadingPanel();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case Constants.MultiplayManagerState.RevengeRejectionConfirmed:
|
||||||
|
Debug.Log("재대결 요청: 거부 완료");
|
||||||
|
UnityMainThreadDispatcher.Instance().Enqueue(() =>
|
||||||
|
{
|
||||||
|
GameManager.Instance.panelManager.OpenConfirmPanel("재대결 요청을\n거부하였습니다.", () =>
|
||||||
|
{
|
||||||
|
GameManager.Instance.panelManager.CloseLoadingPanel();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
ReplayManager.Instance.InitReplayData(UserManager.Instance.Nickname,opponentNickname);
|
||||||
|
|
||||||
});
|
});
|
||||||
_multiplayManager.RegisterPlayer(UserManager.Instance.Nickname, UserManager.Instance.Rating, UserManager.Instance.imageIndex);
|
_multiplayManager.RegisterPlayer(UserManager.Instance.Nickname, UserManager.Instance.Rating, UserManager.Instance.imageIndex);
|
||||||
@ -537,6 +624,55 @@ public class GameLogic : IDisposable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void InitBoardForRevenge(bool isFirstPlayer)
|
||||||
|
{
|
||||||
|
//보드 초기화
|
||||||
|
_board = new Enums.PlayerType[15, 15];
|
||||||
|
_totalStoneCounter = 0;
|
||||||
|
stoneController.InitStones();
|
||||||
|
RequestDrawChance = false;
|
||||||
|
|
||||||
|
selectedRow = -1;
|
||||||
|
selectedCol = -1;
|
||||||
|
|
||||||
|
// 금수 감지기 초기화
|
||||||
|
_forbiddenDetector.RenjuForbiddenMove(_board);
|
||||||
|
|
||||||
|
_lastRow = -1;
|
||||||
|
_lastCol = -1;
|
||||||
|
|
||||||
|
//timer 초기화
|
||||||
|
fioTimer.InitTimer();
|
||||||
|
|
||||||
|
if (isFirstPlayer)
|
||||||
|
{
|
||||||
|
Debug.Log("해당 플레이어가 선공 입니다");
|
||||||
|
firstPlayerState = new PlayerState(true, _multiplayManager, _roomId);
|
||||||
|
secondPlayerState = new MultiPlayerState(false, _multiplayManager);
|
||||||
|
GameManager.Instance.InitPlayersName(UserManager.Instance.Nickname, opponentNickname);
|
||||||
|
GameManager.Instance.InitProfileImages(UserManager.Instance.imageIndex, opponentImageIndex);
|
||||||
|
|
||||||
|
// 리플레이 데이터 업데이트
|
||||||
|
ReplayManager.Instance.InitReplayData(UserManager.Instance.Nickname, opponentNickname, UserManager.Instance.imageIndex, opponentImageIndex);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.Log("해당 플레이어가 후공 입니다");
|
||||||
|
firstPlayerState = new MultiPlayerState(true, _multiplayManager);
|
||||||
|
secondPlayerState = new PlayerState(false, _multiplayManager, _roomId);
|
||||||
|
GameManager.Instance.InitPlayersName(opponentNickname, UserManager.Instance.Nickname);
|
||||||
|
GameManager.Instance.InitProfileImages(opponentImageIndex, UserManager.Instance.imageIndex);
|
||||||
|
|
||||||
|
// 리플레이 데이터 업데이트
|
||||||
|
ReplayManager.Instance.InitReplayData(opponentNickname, UserManager.Instance.Nickname, opponentImageIndex, UserManager.Instance.imageIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
GameManager.Instance.panelManager.CloseLoadingPanel();
|
||||||
|
|
||||||
|
// 첫 번째 플레이어(유저)부터 시작
|
||||||
|
SetState(firstPlayerState);
|
||||||
|
}
|
||||||
|
|
||||||
//AI닉네임 랜덤 생성
|
//AI닉네임 랜덤 생성
|
||||||
private string RandomAINickname()
|
private string RandomAINickname()
|
||||||
{
|
{
|
||||||
|
@ -122,7 +122,7 @@ public class GameManager : Singleton<GameManager>
|
|||||||
|
|
||||||
public bool GetRequestDrawChance()
|
public bool GetRequestDrawChance()
|
||||||
{
|
{
|
||||||
if (_gameLogic == null){ return false;}
|
if (_gameLogic == null) return false;
|
||||||
return _gameLogic.RequestDrawChance;
|
return _gameLogic.RequestDrawChance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,6 +61,14 @@ public class MessageData
|
|||||||
public string message { get; set; }
|
public string message { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class RevengeData
|
||||||
|
{
|
||||||
|
[JsonProperty("message")]
|
||||||
|
public string message { get; set; }
|
||||||
|
[JsonProperty("isBlack")]
|
||||||
|
public Boolean isBlack { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
public class MultiplayManager : IDisposable
|
public class MultiplayManager : IDisposable
|
||||||
{
|
{
|
||||||
private SocketIOUnity _socket;
|
private SocketIOUnity _socket;
|
||||||
@ -91,12 +99,20 @@ public class MultiplayManager : IDisposable
|
|||||||
_socket.On("doSurrender", DoSurrender);
|
_socket.On("doSurrender", DoSurrender);
|
||||||
_socket.On("surrenderConfirmed", SurrenderConfirmed);
|
_socket.On("surrenderConfirmed", SurrenderConfirmed);
|
||||||
_socket.On("receiveTimeout", ReceiveTimeout);
|
_socket.On("receiveTimeout", ReceiveTimeout);
|
||||||
|
// 무승부 관련
|
||||||
_socket.On("receiveDrawRequest", ReceiveDrawRequest);
|
_socket.On("receiveDrawRequest", ReceiveDrawRequest);
|
||||||
_socket.On("drawRequestSent", DrawRequestSent);
|
_socket.On("drawRequestSent", DrawRequestSent);
|
||||||
_socket.On("drawAccepted", DrawAccepted);
|
_socket.On("drawAccepted", DrawAccepted);
|
||||||
_socket.On("drawConfirmed", DrawConfirmed);
|
_socket.On("drawConfirmed", DrawConfirmed);
|
||||||
_socket.On("drawRejected", DrawRejected);
|
_socket.On("drawRejected", DrawRejected);
|
||||||
_socket.On("drawRejectionConfirmed", DrawRejectionConfirmed);
|
_socket.On("drawRejectionConfirmed", DrawRejectionConfirmed);
|
||||||
|
// 재대결 관련
|
||||||
|
_socket.On("receiveRevengeRequest", ReceiveRevengeRequest);
|
||||||
|
_socket.On("revengeRequestSent", RevengeRequestSent);
|
||||||
|
_socket.On("revengeAccepted", RevengeAccepted);
|
||||||
|
_socket.On("revengeConfirmed", RevengeConfirmed);
|
||||||
|
_socket.On("revengeRejected", RevengeRejected);
|
||||||
|
_socket.On("revengeRejectionConfirmed", RevengeRejectionConfirmed);
|
||||||
|
|
||||||
_socket.Connect();
|
_socket.Connect();
|
||||||
}
|
}
|
||||||
@ -153,7 +169,6 @@ public class MultiplayManager : IDisposable
|
|||||||
private void DoOpponent(SocketIOResponse response)
|
private void DoOpponent(SocketIOResponse response)
|
||||||
{
|
{
|
||||||
var data = response.GetValue<MoveData>();
|
var data = response.GetValue<MoveData>();
|
||||||
|
|
||||||
if (data != null && data.position != null)
|
if (data != null && data.position != null)
|
||||||
{
|
{
|
||||||
Vector2Int opponentPosition = new Vector2Int(data.position.x, data.position.y);
|
Vector2Int opponentPosition = new Vector2Int(data.position.x, data.position.y);
|
||||||
@ -205,7 +220,7 @@ public class MultiplayManager : IDisposable
|
|||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(_roomId))
|
if (string.IsNullOrEmpty(_roomId))
|
||||||
{
|
{
|
||||||
Debug.LogError("LeaveRoom 호출 실패: _roomId가 설정되지 않음");
|
Debug.LogError("RequestSurrender 호출 실패: _roomId가 설정되지 않음");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
_socket.Emit("requestSurrender",new { roomId = _roomId });
|
_socket.Emit("requestSurrender",new { roomId = _roomId });
|
||||||
@ -232,7 +247,7 @@ public class MultiplayManager : IDisposable
|
|||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(_roomId))
|
if (string.IsNullOrEmpty(_roomId))
|
||||||
{
|
{
|
||||||
Debug.LogError("LeaveRoom 호출 실패: _roomId가 설정되지 않음");
|
Debug.LogError("SendTimeout 호출 실패: _roomId가 설정되지 않음");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
_socket.Emit("sendTimeout",new { roomId = _roomId });
|
_socket.Emit("sendTimeout",new { roomId = _roomId });
|
||||||
@ -249,6 +264,8 @@ public class MultiplayManager : IDisposable
|
|||||||
_onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.ReceiveTimeout, data.message);
|
_onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.ReceiveTimeout, data.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region 무승부
|
||||||
|
|
||||||
public void RequestDraw()
|
public void RequestDraw()
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(_roomId))
|
if (string.IsNullOrEmpty(_roomId))
|
||||||
@ -321,6 +338,84 @@ public class MultiplayManager : IDisposable
|
|||||||
_onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.DrawRejectionConfirmed, data.message);
|
_onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.DrawRejectionConfirmed, data.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region 재대결
|
||||||
|
|
||||||
|
public void RequestRevengeRequest()
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(_roomId))
|
||||||
|
{
|
||||||
|
Debug.LogError("requestDraw 호출 실패: _roomId가 설정되지 않음");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_socket.Emit("requestRevenge",new { roomId = _roomId });
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ReceiveRevengeRequest(SocketIOResponse response)
|
||||||
|
{
|
||||||
|
var data = response.GetValue<MessageData>();
|
||||||
|
|
||||||
|
_onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.ReceiveRevengeRequest, data.message);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RevengeRequestSent(SocketIOResponse response)
|
||||||
|
{
|
||||||
|
var data = response.GetValue<MessageData>();
|
||||||
|
|
||||||
|
_onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.RevengeRequestSent, data.message);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AcceptRevenge()
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(_roomId))
|
||||||
|
{
|
||||||
|
Debug.LogError("acceptRevenge 호출 실패: _roomId가 설정되지 않음");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_socket.Emit("acceptRevenge", new { roomId = _roomId });
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RevengeAccepted(SocketIOResponse response)
|
||||||
|
{
|
||||||
|
var data = response.GetValue<RevengeData>();
|
||||||
|
|
||||||
|
_onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.RevengeAccepted, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RevengeConfirmed(SocketIOResponse response)
|
||||||
|
{
|
||||||
|
var data = response.GetValue<RevengeData>();
|
||||||
|
|
||||||
|
_onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.RevengeConfirmed, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RejectRevenge()
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(_roomId))
|
||||||
|
{
|
||||||
|
Debug.LogError("rejectRevenge 호출 실패: _roomId가 설정되지 않음");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_socket.Emit("rejectRevenge", new { roomId = _roomId });
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RevengeRejected(SocketIOResponse response)
|
||||||
|
{
|
||||||
|
var data = response.GetValue<MessageData>();
|
||||||
|
|
||||||
|
_onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.RevengeRejected, data.message);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RevengeRejectionConfirmed(SocketIOResponse response)
|
||||||
|
{
|
||||||
|
var data = response.GetValue<MessageData>();
|
||||||
|
|
||||||
|
_onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.RevengeRejectionConfirmed, data.message);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
if (_socket != null)
|
if (_socket != null)
|
||||||
@ -328,6 +423,7 @@ public class MultiplayManager : IDisposable
|
|||||||
_socket.Disconnect();
|
_socket.Disconnect();
|
||||||
_socket.Dispose();
|
_socket.Dispose();
|
||||||
_socket = null;
|
_socket = null;
|
||||||
|
_roomId = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||||||
using System.Threading;
|
using System.Threading;
|
||||||
using DG.Tweening;
|
using DG.Tweening;
|
||||||
using TMPro;
|
using TMPro;
|
||||||
|
using Unity.VisualScripting;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.UI;
|
using UnityEngine.UI;
|
||||||
|
|
||||||
@ -15,21 +16,49 @@ public class LoadingPanelController : MonoBehaviour
|
|||||||
[SerializeField] private Sprite[] dragonSprites;
|
[SerializeField] private Sprite[] dragonSprites;
|
||||||
[SerializeField] private Sprite[] tigerSprites;
|
[SerializeField] private Sprite[] tigerSprites;
|
||||||
|
|
||||||
[SerializeField] private string fullText = "불러오는 중..."; // 원하는 문구를 인스펙터에서 설정 가능
|
private string _fullText = "불러오는 중...";
|
||||||
[SerializeField] private float interval = 0.4f; // 글자 추가 속도 조정 가능
|
private readonly string[] _loadingMessages = {
|
||||||
|
"흑돌을 닦는 중...",
|
||||||
|
"백돌을 닦는 중...",
|
||||||
|
"알을 반짝반짝 닦는 중...",
|
||||||
|
"방석을 터는 중...",
|
||||||
|
"오목 룰북을 읽는 중...",
|
||||||
|
"한 수 깊이 생각하는 중...",
|
||||||
|
"흑돌과 백돌을 구분하는 중...",
|
||||||
|
"돌이 동글동글한지 확인하는 중..."
|
||||||
|
};
|
||||||
|
|
||||||
|
private string _watingText = "상대방을 기다리는 중...";
|
||||||
|
private float interval = 0.2f;
|
||||||
[SerializeField] float flipDuration = 0.3f; // 회전 시간
|
[SerializeField] float flipDuration = 0.3f; // 회전 시간
|
||||||
[SerializeField] float delayBetweenFlips = 1f; // 이미지 변경 주기
|
[SerializeField] float delayBetweenFlips = 1f; // 이미지 변경 주기
|
||||||
|
|
||||||
|
[SerializeField] private GameObject imageBackground;
|
||||||
|
[SerializeField] private GameObject simpleBackground;
|
||||||
|
|
||||||
private int currentLength = 0;
|
private int currentLength = 0;
|
||||||
private CancellationTokenSource cancellationTokenSource;
|
private CancellationTokenSource cancellationTokenSource;
|
||||||
|
|
||||||
// 타 컴포넌트에서 애니메이션 효과 설정을 위해 호출(RotateImages와 FlipImages 혼용은 불가능: DORotate가 서로 충돌함)
|
// 타 컴포넌트에서 애니메이션 효과 설정을 위해 호출(RotateImages와 FlipImages 혼용은 불가능: DORotate가 서로 충돌함)
|
||||||
public void StartLoading(bool animatedImage, bool animatedText, bool animatedFlip)
|
/// <summary>
|
||||||
|
/// 로딩 패널 보이기
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="animatedImage">캐릭터들이 좌우로 회전하는 효과</param>
|
||||||
|
/// <param name="animatedText">한글자씩 나타나는 효과</param>
|
||||||
|
/// <param name="animatedFlip">캐릭터들이 뒤집히면서 표정이 바뀌는 효과</param>
|
||||||
|
/// <param name="isBackgroundImage">배경 이미지 여부 설정</param>
|
||||||
|
public void StartLoading(bool animatedImage, bool animatedText, bool animatedFlip, bool isBackgroundImage)
|
||||||
{
|
{
|
||||||
// 패널 활성화
|
// 패널 활성화
|
||||||
gameObject.SetActive(true);
|
gameObject.SetActive(true);
|
||||||
cancellationTokenSource = new CancellationTokenSource();
|
cancellationTokenSource = new CancellationTokenSource();
|
||||||
|
|
||||||
|
// 배경 이미지 여부 설정
|
||||||
|
imageBackground.SetActive(isBackgroundImage);
|
||||||
|
simpleBackground.SetActive(!isBackgroundImage);
|
||||||
|
|
||||||
|
_fullText = !isBackgroundImage ? _watingText : _fullText; // 인게임에서 사용하는 경우 맨 처음 텍스트 고정
|
||||||
|
|
||||||
if (animatedImage) RotateImages(); // 캐릭터들이 좌우로 회전하는 효과
|
if (animatedImage) RotateImages(); // 캐릭터들이 좌우로 회전하는 효과
|
||||||
if (animatedText) StartCoroutine(AnimateLoadingText()); // 한글자씩 나타나는 효과
|
if (animatedText) StartCoroutine(AnimateLoadingText()); // 한글자씩 나타나는 효과
|
||||||
if (animatedFlip) FlipImages(); // 캐릭터들이 뒤집히면서 표정이 바뀌는 효과
|
if (animatedFlip) FlipImages(); // 캐릭터들이 뒤집히면서 표정이 바뀌는 효과
|
||||||
@ -63,14 +92,15 @@ public class LoadingPanelController : MonoBehaviour
|
|||||||
while (!cancellationTokenSource.IsCancellationRequested)
|
while (!cancellationTokenSource.IsCancellationRequested)
|
||||||
{
|
{
|
||||||
// 글자 하나씩 추가
|
// 글자 하나씩 추가
|
||||||
currentLength = (currentLength + 1) % (fullText.Length + 1); // 글자 하나씩 추가 (0 ~ fullText.Length 반복)
|
currentLength = (currentLength + 1) % (_fullText.Length + 1); // 글자 하나씩 추가 (0 ~ fullText.Length 반복)
|
||||||
loadingText.text = fullText.Substring(0, currentLength); // 부분 문자열 표시
|
loadingText.text = _fullText.Substring(0, currentLength); // 부분 문자열 표시
|
||||||
yield return new WaitForSeconds(interval); // 0.2초마다 변경
|
yield return new WaitForSeconds(interval); // 0.2초마다 변경
|
||||||
|
|
||||||
// 모든 글자가 다 표시되면 1초 대기
|
// 모든 글자가 다 표시되면 1초 대기
|
||||||
if (currentLength == fullText.Length)
|
if (currentLength == _fullText.Length)
|
||||||
{
|
{
|
||||||
yield return new WaitForSeconds(1f); // 1초 대기
|
yield return new WaitForSeconds(1f); // 1초 대기
|
||||||
|
_fullText = _loadingMessages[Random.Range(0, _loadingMessages.Length)]; // 랜덤 메시지 선택
|
||||||
currentLength = 0; // 다시 처음부터 시작
|
currentLength = 0; // 다시 처음부터 시작
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ public class MainPanelManager : MonoBehaviour
|
|||||||
_userManager = userManagerObj.AddComponent<UserManager>();
|
_userManager = userManagerObj.AddComponent<UserManager>();
|
||||||
}
|
}
|
||||||
// 로딩 화면 추가(자동 로그인 응답 전까지)
|
// 로딩 화면 추가(자동 로그인 응답 전까지)
|
||||||
GameManager.Instance.panelManager.OpenLoadingPanel(false, false, true);
|
GameManager.Instance.panelManager.OpenLoadingPanel(false, true, true);
|
||||||
|
|
||||||
// 자동 로그인
|
// 자동 로그인
|
||||||
TryAutoSignin();
|
TryAutoSignin();
|
||||||
|
@ -157,7 +157,7 @@ public class PanelManager : MonoBehaviour
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OpenLoadingPanel(bool rotateImage = false, bool animatedText = false, bool flipImage = false)
|
public void OpenLoadingPanel(bool rotateImage = false, bool animatedText = false, bool flipImage = false, bool isBackgroundImage = true)
|
||||||
{
|
{
|
||||||
SetCanvas();
|
SetCanvas();
|
||||||
if (_canvas != null)
|
if (_canvas != null)
|
||||||
@ -166,6 +166,7 @@ public class PanelManager : MonoBehaviour
|
|||||||
{
|
{
|
||||||
// 기존 로딩 패널이 활성화되어 있으면 먼저 닫기
|
// 기존 로딩 패널이 활성화되어 있으면 먼저 닫기
|
||||||
CloseLoadingPanel();
|
CloseLoadingPanel();
|
||||||
|
Destroy(loadingPanelObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
loadingPanelObject = GetPanel("Loading Panel");
|
loadingPanelObject = GetPanel("Loading Panel");
|
||||||
@ -174,7 +175,7 @@ public class PanelManager : MonoBehaviour
|
|||||||
loadingPanelController = loadingPanelObject.GetComponent<LoadingPanelController>();
|
loadingPanelController = loadingPanelObject.GetComponent<LoadingPanelController>();
|
||||||
if (loadingPanelController != null)
|
if (loadingPanelController != null)
|
||||||
{
|
{
|
||||||
loadingPanelController.StartLoading(rotateImage, animatedText, flipImage);
|
loadingPanelController.StartLoading(rotateImage, animatedText, flipImage, isBackgroundImage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user