From fad24cfdd8f9a530ca8b1bcfd067d60b6fce9df4 Mon Sep 17 00:00:00 2001
From: CuongNV <>
Date: Fri, 20 Mar 2026 13:52:55 +0700
Subject: [PATCH 1/9] add new logic chat Input
---
Assets/Scripts/ChatInputHandler.cs | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/Assets/Scripts/ChatInputHandler.cs b/Assets/Scripts/ChatInputHandler.cs
index 52ea285b5f..21b772865b 100644
--- a/Assets/Scripts/ChatInputHandler.cs
+++ b/Assets/Scripts/ChatInputHandler.cs
@@ -106,6 +106,7 @@ namespace BrewMonster.Scripts.ChatUI
if (strText.Length <= 0)
{
+ ClearTextInInputField();
//ChangeFocus();
return;
}
@@ -133,6 +134,7 @@ namespace BrewMonster.Scripts.ChatUI
SaveHistory(resolvedChannel, strText, nPack, nSlot, now);
+ ClearTextInInputField();
//ChangeFocus();
}
@@ -317,6 +319,14 @@ namespace BrewMonster.Scripts.ChatUI
private void SendPrivateChat(string target, string msg, int pack, int slot)
{
Debug.Log($"Whisper to {target}: {msg}");
+
+ // [Port] C++: CDlgChat::OnCommand_speak → privatechat branch
+ // Gửi tin nhắn mật (whisper) lên server qua GameSession.
+ UnityGameSession.Instance.GameSession.SendPrivateChatData(target, msg, 0, 0, pack, slot);
+
+ // Server không echo whisper lại cho chính mình → hiện local echo
+ string localEcho = $"[Whisper] → {target}: {msg}";
+ EventBus.Publish(new GameSession.ChatMessageEvent(localEcho, (byte)ChatChannel.GP_CHAT_WHISPER));
}
// =====================================================
@@ -410,9 +420,12 @@ namespace BrewMonster.Scripts.ChatUI
private bool IsPlayerBlacklisted(int idPlayer) => false; // Placeholder
- private void ChangeFocus()
+ private void ClearTextInInputField()
{
inputField.text = "";
+ }
+ private void ChangeFocus()
+ {
inputField.ActivateInputField();
}
From eef47bd6b4ee1132684c670aa1dbec4cb7e323a6 Mon Sep 17 00:00:00 2001
From: Chomper9981
Date: Fri, 20 Mar 2026 14:16:04 +0700
Subject: [PATCH 2/9] fix null proplem in quickBar
---
.../Scripts/Objet/Shortcut/CECShortcutSet.cs | 4 ++++
.../Scripts/UI/GamePlay/CdlgQuickBar.cs | 15 +++++++++++++--
2 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/Assets/PerfectWorld/Scripts/Objet/Shortcut/CECShortcutSet.cs b/Assets/PerfectWorld/Scripts/Objet/Shortcut/CECShortcutSet.cs
index cdddcd410b..4fd93fce73 100644
--- a/Assets/PerfectWorld/Scripts/Objet/Shortcut/CECShortcutSet.cs
+++ b/Assets/PerfectWorld/Scripts/Objet/Shortcut/CECShortcutSet.cs
@@ -762,6 +762,10 @@ namespace BrewMonster
///
public int GetShortcutNum()
{
+ if(m_aShortcuts == null || m_aShortcuts.Count == 0)
+ {
+ return 0;
+ }
return m_aShortcuts.Count;
}
diff --git a/Assets/PerfectWorld/Scripts/UI/GamePlay/CdlgQuickBar.cs b/Assets/PerfectWorld/Scripts/UI/GamePlay/CdlgQuickBar.cs
index 5157754cd9..b29d19d512 100644
--- a/Assets/PerfectWorld/Scripts/UI/GamePlay/CdlgQuickBar.cs
+++ b/Assets/PerfectWorld/Scripts/UI/GamePlay/CdlgQuickBar.cs
@@ -50,6 +50,10 @@ namespace BrewMonster
}
public bool UpdateShortcuts()
{
+ if(AUIImagePictureList == null || AUIImagePictureList.Count == 0)
+ {
+ return false;
+ }
CECShortcut pSC;
CECSCSkill pSCSkill;
AUIImagePicture pCell;
@@ -60,13 +64,15 @@ namespace BrewMonster
int nCurPanel9 = GetCurPanel1();
int nCurPanel8 = GetCurPanel2();
CECHostPlayer pHost = EC_Game.GetGameRun().GetHostPlayer();
- if (pHost == null) return false;
+ if (pHost == null)
+ return false;
var a_pSCS = new List();
var a_pszPanel = new List();
GetQuickBarNameAndSC(pHost, a_pszPanel, a_pSCS, nCurPanel9, nCurPanel8);
if (a_pSCS == null || a_pSCS.Count < 2)
return false;
+
if(currentListIndex >= a_pSCS.Count )
{
currentListIndex = 0;
@@ -80,7 +86,12 @@ namespace BrewMonster
// }
// currentOffsetIndex += a_pSCS[i].GetShortcutNum();
// }
- int nSlots = Mathf.Min(a_pSCS[currentListIndex].GetShortcutNum(), AUIImagePictureList.Count);
+ var shortcutNum = a_pSCS[currentListIndex]?.GetShortcutNum() ?? 0;
+ if(shortcutNum <= 0)
+ {
+ return false;
+ }
+ int nSlots = Mathf.Min(shortcutNum, AUIImagePictureList.Count);
for (int j = 0; j < nSlots; j++)
{
pCell = AUIImagePictureList[j];
From 3a8507c15bf6443b162a15c3200c1a45cf92e630 Mon Sep 17 00:00:00 2001
From: Tungdv
Date: Fri, 20 Mar 2026 14:40:50 +0700
Subject: [PATCH 3/9] fix: update rotation camera.
---
Assets/PerfectWorld/Prefab/UIManager.prefab | 737 +++++++++++++++++-
.../Scripts/Camera/CameraController.cs | 29 +-
2 files changed, 754 insertions(+), 12 deletions(-)
diff --git a/Assets/PerfectWorld/Prefab/UIManager.prefab b/Assets/PerfectWorld/Prefab/UIManager.prefab
index 7dead6e323..05731bb859 100644
--- a/Assets/PerfectWorld/Prefab/UIManager.prefab
+++ b/Assets/PerfectWorld/Prefab/UIManager.prefab
@@ -1645,6 +1645,144 @@ MonoBehaviour:
m_PersistentCalls:
m_Calls: []
m_IsOn: 1
+--- !u!1 &1045839107643599688
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2033674872254921759}
+ - component: {fileID: 8069579727880866334}
+ - component: {fileID: 6620799710162306469}
+ m_Layer: 0
+ m_Name: Text (TMP)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &2033674872254921759
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1045839107643599688}
+ 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: 2981619812095797695}
+ 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 &8069579727880866334
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1045839107643599688}
+ m_CullTransparentMesh: 1
+--- !u!114 &6620799710162306469
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1045839107643599688}
+ 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: 'TeamList
+
+'
+ m_isRightToLeft: 0
+ m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
+ m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
+ m_fontSharedMaterials: []
+ m_fontMaterial: {fileID: 0}
+ m_fontMaterials: []
+ m_fontColor32:
+ serializedVersion: 2
+ rgba: 4281479730
+ m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, 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: 21.28
+ m_fontSizeBase: 21.28
+ m_fontWeight: 400
+ m_enableAutoSizing: 0
+ m_fontSizeMin: 18
+ m_fontSizeMax: 72
+ m_fontStyle: 1
+ 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_TextWrappingMode: 1
+ m_wordWrappingRatios: 0.4
+ m_overflowMode: 0
+ m_linkedTextComponent: {fileID: 0}
+ parentLinkedComponent: {fileID: 0}
+ m_enableKerning: 0
+ m_ActiveFontFeatures: 6e72656b
+ m_enableExtraPadding: 0
+ checkPaddingRequired: 0
+ m_isRichText: 1
+ m_EmojiFallbackSupport: 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 &1131583467895984856
GameObject:
m_ObjectHideFlags: 0
@@ -1811,6 +1949,96 @@ MonoBehaviour:
m_EditorClassIdentifier:
m_HorizontalFit: 2
m_VerticalFit: 0
+--- !u!1 &1711802948161723625
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 9220106097710726625}
+ - component: {fileID: 5976931199524802529}
+ - component: {fileID: 2208333221963886493}
+ - component: {fileID: 4067255723383063663}
+ m_Layer: 5
+ m_Name: Background
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &9220106097710726625
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1711802948161723625}
+ 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: 5289536140938682150}
+ m_Father: {fileID: 6151180591865283643}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 10, y: -10}
+ m_SizeDelta: {x: 20, y: 20}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &5976931199524802529
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1711802948161723625}
+ m_CullTransparentMesh: 1
+--- !u!114 &2208333221963886493
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1711802948161723625}
+ 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: 10913, guid: 0000000000000000f000000000000000, type: 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!114 &4067255723383063663
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1711802948161723625}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_ShowMaskGraphic: 1
--- !u!1 &1907375868528687128
GameObject:
m_ObjectHideFlags: 0
@@ -1902,8 +2130,8 @@ MonoBehaviour:
_cinemachineCamera: {fileID: 0}
orbital: {fileID: 0}
minSwipeDistance: 0.1
- speedX: 60
- speedY: 500
+ speedX: 1
+ speedY: 1
--- !u!1 &2069415937652699839
GameObject:
m_ObjectHideFlags: 0
@@ -2551,6 +2779,8 @@ RectTransform:
- {fileID: 5949267495910746152}
- {fileID: 9121369084142034904}
- {fileID: 1416757586547742942}
+ - {fileID: 2981619812095797695}
+ - {fileID: 474522009178426906}
m_Father: {fileID: 2780428059708698453}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
@@ -4578,6 +4808,91 @@ RectTransform:
m_AnchoredPosition: {x: -51.4604, y: 331.42}
m_SizeDelta: {x: 1392.4191, y: 78.747}
m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &4190513404851613888
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 6151180591865283643}
+ - component: {fileID: 7549645077106389146}
+ m_Layer: 5
+ m_Name: BuffIconTemplate
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &6151180591865283643
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4190513404851613888}
+ 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: 9220106097710726625}
+ m_Father: {fileID: 1286775274583626603}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 20, y: 20}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &7549645077106389146
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4190513404851613888}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, 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: 1
+ 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: 0}
+ m_PressedSprite: {fileID: 0}
+ 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: 0
+ m_TargetGraphic: {fileID: 2208333221963886493}
+ toggleTransition: 1
+ graphic: {fileID: 8726279768806428061}
+ m_Group: {fileID: 0}
+ onValueChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_IsOn: 1
--- !u!1 &4417911400261492046
GameObject:
m_ObjectHideFlags: 0
@@ -5301,6 +5616,81 @@ MonoBehaviour:
m_OnClick:
m_PersistentCalls:
m_Calls: []
+--- !u!1 &5215554387261518978
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 5289536140938682150}
+ - component: {fileID: 1289986256659399408}
+ - component: {fileID: 8726279768806428061}
+ m_Layer: 5
+ m_Name: Checkmark
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &5289536140938682150
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5215554387261518978}
+ 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: 9220106097710726625}
+ 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: 20, y: 20}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &1289986256659399408
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5215554387261518978}
+ m_CullTransparentMesh: 1
+--- !u!114 &8726279768806428061
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5215554387261518978}
+ 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: -2152444580018807177, guid: 7c25a5fa6c0f21a4293b99a5a43b5441, 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 &5417864904386168706
GameObject:
m_ObjectHideFlags: 0
@@ -6133,6 +6523,93 @@ MonoBehaviour:
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!1 &5755894083666055960
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1286775274583626603}
+ - component: {fileID: 3183989163746272008}
+ - component: {fileID: 3208389950553122841}
+ - component: {fileID: 1527098877827873691}
+ m_Layer: 5
+ m_Name: Panel (1)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1286775274583626603
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5755894083666055960}
+ 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: 6151180591865283643}
+ m_Father: {fileID: 2907261990866691440}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 133.1923, y: -138.03845}
+ m_SizeDelta: {x: 0, y: 11}
+ m_Pivot: {x: 0, y: 0.5}
+--- !u!222 &3183989163746272008
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5755894083666055960}
+ m_CullTransparentMesh: 1
+--- !u!114 &3208389950553122841
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5755894083666055960}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Padding:
+ m_Left: 0
+ m_Right: 0
+ m_Top: 0
+ m_Bottom: 0
+ m_ChildAlignment: 0
+ m_Spacing: 25
+ m_ChildForceExpandWidth: 1
+ m_ChildForceExpandHeight: 1
+ m_ChildControlWidth: 0
+ m_ChildControlHeight: 0
+ m_ChildScaleWidth: 0
+ m_ChildScaleHeight: 0
+ m_ReverseArrangement: 0
+--- !u!114 &1527098877827873691
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5755894083666055960}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_HorizontalFit: 2
+ m_VerticalFit: 0
--- !u!1 &5885931642767984348
GameObject:
m_ObjectHideFlags: 0
@@ -7111,6 +7588,139 @@ MonoBehaviour:
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
+--- !u!1 &6935364586388739565
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2981619812095797695}
+ - component: {fileID: 7022235647947040483}
+ - component: {fileID: 7170763707434960647}
+ - component: {fileID: 257019303812019166}
+ m_Layer: 0
+ m_Name: team_list_btn
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &2981619812095797695
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6935364586388739565}
+ 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: 2033674872254921759}
+ m_Father: {fileID: 3233441867675090637}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0.5}
+ m_AnchorMax: {x: 0, y: 0.5}
+ m_AnchoredPosition: {x: 63.289795, y: 128.1304}
+ m_SizeDelta: {x: 101.855, y: 57.3622}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &7022235647947040483
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6935364586388739565}
+ m_CullTransparentMesh: 1
+--- !u!114 &7170763707434960647
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6935364586388739565}
+ 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: 10905, 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!114 &257019303812019166
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6935364586388739565}
+ 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: 1
+ 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: 0}
+ m_PressedSprite: {fileID: 0}
+ 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: 7170763707434960647}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls:
+ - m_Target: {fileID: 1890210201668811196}
+ m_TargetAssemblyTypeName: CECUIManager, Assembly-CSharp
+ m_MethodName: ShowUI
+ m_Mode: 5
+ m_Arguments:
+ m_ObjectArgument: {fileID: 0}
+ m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+ m_IntArgument: 0
+ m_FloatArgument: 0
+ m_StringArgument: Win_TeamMain
+ m_BoolArgument: 0
+ m_CallState: 2
--- !u!1 &6949335809637514808
GameObject:
m_ObjectHideFlags: 0
@@ -14513,6 +15123,116 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: a9e669c5ab4137449aacd686ed4d5d9f, type: 3}
m_Name:
m_EditorClassIdentifier:
+--- !u!1001 &7212941458430329239
+PrefabInstance:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Modification:
+ serializedVersion: 3
+ m_TransformParent: {fileID: 3233441867675090637}
+ m_Modifications:
+ - target: {fileID: 7101142292773392269, guid: 2060bbc2e61f6db4590ab041243b6294, type: 3}
+ propertyPath: m_Pivot.x
+ value: 0.5
+ objectReference: {fileID: 0}
+ - target: {fileID: 7101142292773392269, guid: 2060bbc2e61f6db4590ab041243b6294, type: 3}
+ propertyPath: m_Pivot.y
+ value: 0.5
+ objectReference: {fileID: 0}
+ - target: {fileID: 7101142292773392269, guid: 2060bbc2e61f6db4590ab041243b6294, type: 3}
+ propertyPath: m_AnchorMax.x
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 7101142292773392269, guid: 2060bbc2e61f6db4590ab041243b6294, type: 3}
+ propertyPath: m_AnchorMax.y
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 7101142292773392269, guid: 2060bbc2e61f6db4590ab041243b6294, type: 3}
+ propertyPath: m_AnchorMin.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7101142292773392269, guid: 2060bbc2e61f6db4590ab041243b6294, type: 3}
+ propertyPath: m_AnchorMin.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7101142292773392269, guid: 2060bbc2e61f6db4590ab041243b6294, type: 3}
+ propertyPath: m_SizeDelta.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7101142292773392269, guid: 2060bbc2e61f6db4590ab041243b6294, type: 3}
+ propertyPath: m_SizeDelta.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7101142292773392269, guid: 2060bbc2e61f6db4590ab041243b6294, type: 3}
+ propertyPath: m_LocalPosition.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7101142292773392269, guid: 2060bbc2e61f6db4590ab041243b6294, type: 3}
+ propertyPath: m_LocalPosition.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7101142292773392269, guid: 2060bbc2e61f6db4590ab041243b6294, type: 3}
+ propertyPath: m_LocalPosition.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7101142292773392269, guid: 2060bbc2e61f6db4590ab041243b6294, type: 3}
+ propertyPath: m_LocalRotation.w
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 7101142292773392269, guid: 2060bbc2e61f6db4590ab041243b6294, type: 3}
+ propertyPath: m_LocalRotation.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7101142292773392269, guid: 2060bbc2e61f6db4590ab041243b6294, type: 3}
+ propertyPath: m_LocalRotation.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7101142292773392269, guid: 2060bbc2e61f6db4590ab041243b6294, type: 3}
+ propertyPath: m_LocalRotation.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7101142292773392269, guid: 2060bbc2e61f6db4590ab041243b6294, type: 3}
+ propertyPath: m_AnchoredPosition.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7101142292773392269, guid: 2060bbc2e61f6db4590ab041243b6294, type: 3}
+ propertyPath: m_AnchoredPosition.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7101142292773392269, guid: 2060bbc2e61f6db4590ab041243b6294, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7101142292773392269, guid: 2060bbc2e61f6db4590ab041243b6294, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7101142292773392269, guid: 2060bbc2e61f6db4590ab041243b6294, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7292124547459743165, guid: 2060bbc2e61f6db4590ab041243b6294, type: 3}
+ propertyPath: m_SizeDelta.x
+ value: 6.26355
+ objectReference: {fileID: 0}
+ - target: {fileID: 9152579472324007262, guid: 2060bbc2e61f6db4590ab041243b6294, type: 3}
+ propertyPath: m_Name
+ value: Win_TeamMain
+ objectReference: {fileID: 0}
+ - target: {fileID: 9152579472324007262, guid: 2060bbc2e61f6db4590ab041243b6294, type: 3}
+ propertyPath: m_IsActive
+ value: 0
+ objectReference: {fileID: 0}
+ m_RemovedComponents: []
+ m_RemovedGameObjects: []
+ m_AddedGameObjects: []
+ m_AddedComponents: []
+ m_SourcePrefab: {fileID: 100100000, guid: 2060bbc2e61f6db4590ab041243b6294, type: 3}
+--- !u!224 &474522009178426906 stripped
+RectTransform:
+ m_CorrespondingSourceObject: {fileID: 7101142292773392269, guid: 2060bbc2e61f6db4590ab041243b6294, type: 3}
+ m_PrefabInstance: {fileID: 7212941458430329239}
+ m_PrefabAsset: {fileID: 0}
--- !u!1001 &7509275976277896982
PrefabInstance:
m_ObjectHideFlags: 0
@@ -15641,21 +16361,24 @@ PrefabInstance:
m_AddedGameObjects:
- targetCorrespondingSourceObject: {fileID: 6806681442789174374, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3}
insertIndex: 7
- addedObject: {fileID: 1505082503590519222}
+ addedObject: {fileID: 1286775274583626603}
- targetCorrespondingSourceObject: {fileID: 6806681442789174374, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3}
insertIndex: 8
- addedObject: {fileID: 5191021986578083479}
+ addedObject: {fileID: 1505082503590519222}
- targetCorrespondingSourceObject: {fileID: 6806681442789174374, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3}
insertIndex: 9
- addedObject: {fileID: 494610354563246192}
+ addedObject: {fileID: 5191021986578083479}
- targetCorrespondingSourceObject: {fileID: 6806681442789174374, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3}
insertIndex: 10
- addedObject: {fileID: 2090006027067688671}
+ addedObject: {fileID: 494610354563246192}
- targetCorrespondingSourceObject: {fileID: 6806681442789174374, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3}
insertIndex: 11
- addedObject: {fileID: 5264098290850076161}
+ addedObject: {fileID: 2090006027067688671}
- targetCorrespondingSourceObject: {fileID: 6806681442789174374, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3}
insertIndex: 12
+ addedObject: {fileID: 5264098290850076161}
+ - targetCorrespondingSourceObject: {fileID: 6806681442789174374, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3}
+ insertIndex: 13
addedObject: {fileID: 6421830357984996457}
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3}
diff --git a/Assets/PerfectWorld/Scripts/Camera/CameraController.cs b/Assets/PerfectWorld/Scripts/Camera/CameraController.cs
index 947466709a..fb48f6664e 100644
--- a/Assets/PerfectWorld/Scripts/Camera/CameraController.cs
+++ b/Assets/PerfectWorld/Scripts/Camera/CameraController.cs
@@ -26,17 +26,36 @@ namespace BrewMonster
#endif
}
+ //public void OnDrag(PointerEventData eventData)
+ //{
+ // delta = eventData.position - currentPos;
+
+ // if (delta.magnitude >= minSwipeDistance)
+ // {
+ // orbital.HorizontalAxis.Value += delta.x * speedX * Time.deltaTime;
+ // //orbital.HorizontalAxis.Value = Mathf.Clamp(orbital.HorizontalAxis.Value, -360f, 360f);
+ // orbital.VerticalAxis.Value -= delta.y * speedY * Time.deltaTime;
+ // orbital.VerticalAxis.Value = Mathf.Clamp(orbital.VerticalAxis.Value, -360f, 360f);
+ // }
+ // currentPos = eventData.position;
+ //}
+
public void OnDrag(PointerEventData eventData)
{
- delta = eventData.position - currentPos;
+ Vector2 newDelta = eventData.position - currentPos;
- if (delta.magnitude >= minSwipeDistance)
+ float velocity = newDelta.magnitude / Time.deltaTime; // tốc độ vuốt
+
+ if (newDelta.magnitude >= minSwipeDistance)
{
- orbital.HorizontalAxis.Value += delta.normalized.x * speedX * Time.deltaTime;
- //orbital.HorizontalAxis.Value = Mathf.Clamp(orbital.HorizontalAxis.Value, -360f, 360f);
- orbital.VerticalAxis.Value -= delta.normalized.y * speedY * Time.deltaTime;
+ float factor = velocity * 0.001f; // scale lại cho hợp lý
+
+ orbital.HorizontalAxis.Value += newDelta.x * speedX * factor;
+ orbital.VerticalAxis.Value -= newDelta.y * speedY * factor;
+
orbital.VerticalAxis.Value = Mathf.Clamp(orbital.VerticalAxis.Value, -360f, 360f);
}
+
currentPos = eventData.position;
}
From ca49c2b1c546514b9135cca95bceb543edccc950 Mon Sep 17 00:00:00 2001
From: Le Duc Anh
Date: Fri, 20 Mar 2026 15:07:59 +0700
Subject: [PATCH 4/9] camera controller option 2
---
.../Scripts/Camera/CameraController.cs | 63 ++++++++++++++-----
1 file changed, 46 insertions(+), 17 deletions(-)
diff --git a/Assets/PerfectWorld/Scripts/Camera/CameraController.cs b/Assets/PerfectWorld/Scripts/Camera/CameraController.cs
index 947466709a..6727615791 100644
--- a/Assets/PerfectWorld/Scripts/Camera/CameraController.cs
+++ b/Assets/PerfectWorld/Scripts/Camera/CameraController.cs
@@ -1,48 +1,54 @@
using Unity.Cinemachine;
using UnityEngine;
using UnityEngine.EventSystems;
+using UnityEngine.Serialization;
namespace BrewMonster
{
public class CameraController : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IDragHandler
{
public static CameraController Instance;
- [SerializeField]private CinemachineCamera _cinemachineCamera;
- [SerializeField]private CinemachineOrbitalFollow orbital;
- private Vector2 currentPos;
+ [SerializeField] private CinemachineCamera _cinemachineCamera;
+ [SerializeField] private CinemachineOrbitalFollow orbital;
private bool fingerDown = false;
- Vector2 delta = Vector2.zero;
- public float minSwipeDistance = 10f;
- public float speedX = 1f;
- public float speedY = 1f;
+ [FormerlySerializedAs("minSwipeDistance")]
+ [SerializeField, Min(0f)] private float dragDeadZone = 10f;
+ [FormerlySerializedAs("speedX")]
+ [SerializeField] private float horizontalRotationPerScreen = 60f;
+ [FormerlySerializedAs("speedY")]
+ [SerializeField] private float verticalRotationPerScreen = 500f;
+ [SerializeField, HideInInspector] private bool _migratedDeadZoneToNormalized;
public CinemachineOrbitalFollow Orbital { get => orbital;}
void OnEnable()
{
Instance = this;
-#if UNITY_EDITOR
- speedX = 500;
-#endif
+ MigrateLegacyDeadZone();
}
public void OnDrag(PointerEventData eventData)
{
- delta = eventData.position - currentPos;
-
- if (delta.magnitude >= minSwipeDistance)
+ if (!fingerDown || orbital == null)
{
- orbital.HorizontalAxis.Value += delta.normalized.x * speedX * Time.deltaTime;
+ return;
+ }
+
+ float screenReference = Mathf.Max(1f, Mathf.Min(Screen.width, Screen.height));
+ Vector2 normalizedDelta = eventData.delta / screenReference;
+ float normalizedDeadZone = Mathf.Max(0.0001f, dragDeadZone);
+
+ if (normalizedDelta.sqrMagnitude >= normalizedDeadZone * normalizedDeadZone)
+ {
+ orbital.HorizontalAxis.Value += normalizedDelta.x * horizontalRotationPerScreen;
//orbital.HorizontalAxis.Value = Mathf.Clamp(orbital.HorizontalAxis.Value, -360f, 360f);
- orbital.VerticalAxis.Value -= delta.normalized.y * speedY * Time.deltaTime;
+ orbital.VerticalAxis.Value -= normalizedDelta.y * verticalRotationPerScreen;
orbital.VerticalAxis.Value = Mathf.Clamp(orbital.VerticalAxis.Value, -360f, 360f);
}
- currentPos = eventData.position;
}
public void OnPointerDown(PointerEventData eventData)
{
- currentPos = eventData.position;
fingerDown = true;
}
@@ -51,6 +57,29 @@ namespace BrewMonster
fingerDown = false;
}
+ private void OnValidate()
+ {
+ MigrateLegacyDeadZone();
+ }
+
+ private void MigrateLegacyDeadZone()
+ {
+ if (_migratedDeadZoneToNormalized)
+ {
+ return;
+ }
+
+ // Older values were serialized in pixels; convert once to normalized short-side ratio.
+ if (dragDeadZone > 0.05f)
+ {
+ dragDeadZone /= 1080f;
+ }
+
+ dragDeadZone = Mathf.Max(0.0001f, dragDeadZone);
+
+ _migratedDeadZoneToNormalized = true;
+ }
+
private void Update()
{
//todo: should not always update
From bdf3a25858c73608b943e13dae528ce71712518f Mon Sep 17 00:00:00 2001
From: CuongNV <>
Date: Fri, 20 Mar 2026 15:28:03 +0700
Subject: [PATCH 5/9] update size text and image item_info
---
Assets/Prefabs/UI/item_info.prefab | 34 +++++++++++++++---------------
1 file changed, 17 insertions(+), 17 deletions(-)
diff --git a/Assets/Prefabs/UI/item_info.prefab b/Assets/Prefabs/UI/item_info.prefab
index f3a0636b48..efc7fa542f 100644
--- a/Assets/Prefabs/UI/item_info.prefab
+++ b/Assets/Prefabs/UI/item_info.prefab
@@ -36,8 +36,8 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
- m_AnchoredPosition: {x: 20, y: -402.765}
- m_SizeDelta: {x: 400, y: 805.53}
+ m_AnchoredPosition: {x: 20, y: -464.01}
+ m_SizeDelta: {x: 400, y: 928.02}
m_Pivot: {x: 0, y: 0.5}
--- !u!222 &4376431126769957786
CanvasRenderer:
@@ -213,7 +213,7 @@ RectTransform:
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 547.334, y: -28.5943}
- m_SizeDelta: {x: 163.80408, y: 49.0205}
+ m_SizeDelta: {x: 171, y: 64}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &7968706394531223960
CanvasRenderer:
@@ -332,7 +332,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: 20, y: -805.53}
+ m_AnchoredPosition: {x: 20, y: -928.02}
m_SizeDelta: {x: 450, y: 0}
m_Pivot: {x: 0, y: 0.5}
--- !u!222 &1207680936664328091
@@ -482,8 +482,8 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
- m_AnchoredPosition: {x: 0.000061035156, y: 0}
- m_SizeDelta: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 2.5}
+ m_SizeDelta: {x: -16, y: -15}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &2820616548424895708
CanvasRenderer:
@@ -540,15 +540,15 @@ MonoBehaviour:
m_faceColor:
serializedVersion: 2
rgba: 4294967295
- m_fontSize: 24
- m_fontSizeBase: 24
+ 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_VerticalAlignment: 8192
m_textAlignment: 65535
m_characterSpacing: 0
m_wordSpacing: 0
@@ -620,8 +620,8 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
- m_AnchoredPosition: {x: 547.334, y: -91.01306}
- m_SizeDelta: {x: 163.80408, y: 49.0205}
+ m_AnchoredPosition: {x: 547.334, y: -101}
+ m_SizeDelta: {x: 171, y: 64}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &7060942486687674079
CanvasRenderer:
@@ -746,7 +746,7 @@ RectTransform:
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 220.02612, y: -32.73999}
- m_SizeDelta: {x: 450, y: 0}
+ m_SizeDelta: {x: 450, y: 948.02}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &7489840247554268479
CanvasRenderer:
@@ -1025,8 +1025,8 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
- m_AnchoredPosition: {x: 0.000061035156, y: 0}
- m_SizeDelta: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 2.5}
+ m_SizeDelta: {x: -16, y: -15}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &3402785809763655235
CanvasRenderer:
@@ -1083,15 +1083,15 @@ MonoBehaviour:
m_faceColor:
serializedVersion: 2
rgba: 4294967295
- m_fontSize: 24
- m_fontSizeBase: 24
+ 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_VerticalAlignment: 8192
m_textAlignment: 65535
m_characterSpacing: 0
m_wordSpacing: 0
From 8099b87c71e93247b7dfb1994ca82ec63571e4a4 Mon Sep 17 00:00:00 2001
From: Tungdv
Date: Fri, 20 Mar 2026 15:50:59 +0700
Subject: [PATCH 6/9] fix: update camera detech collider.
---
.../Prefab/FreeLook Camera.prefab | 31 +++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/Assets/PerfectWorld/Prefab/FreeLook Camera.prefab b/Assets/PerfectWorld/Prefab/FreeLook Camera.prefab
index 8a581c914f..dbe6481ee8 100644
--- a/Assets/PerfectWorld/Prefab/FreeLook Camera.prefab
+++ b/Assets/PerfectWorld/Prefab/FreeLook Camera.prefab
@@ -13,6 +13,7 @@ GameObject:
- component: {fileID: 864878593467321995}
- component: {fileID: 3005089224860696078}
- component: {fileID: 9220823260634167621}
+ - component: {fileID: 6720462472486200866}
m_Layer: 0
m_Name: FreeLook Camera
m_TagString: Untagged
@@ -228,3 +229,33 @@ MonoBehaviour:
DecelTime: 0
PlayerIndex: -1
AutoEnableInputs: 0
+--- !u!114 &6720462472486200866
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5860545600847923144}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: ca7de3aefa901374ba29464584a3109a, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ CameraRadius: 0.4
+ Decollision:
+ Enabled: 0
+ ObstacleLayers:
+ serializedVersion: 2
+ m_Bits: 1
+ UseFollowTarget:
+ Enabled: 0
+ YOffset: 0
+ Damping: 0.5
+ SmoothingTime: 0
+ TerrainResolution:
+ Enabled: 1
+ TerrainLayers:
+ serializedVersion: 2
+ m_Bits: 200
+ MaximumRaycast: 10
+ Damping: 0.5
From c5ed99babc2758a554b03c5ebb354151a3ac6893 Mon Sep 17 00:00:00 2001
From: Tungdv
Date: Fri, 20 Mar 2026 15:58:21 +0700
Subject: [PATCH 7/9] fix: update camera detech collider.
---
Assets/PerfectWorld/Prefab/FreeLook Camera.prefab | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Assets/PerfectWorld/Prefab/FreeLook Camera.prefab b/Assets/PerfectWorld/Prefab/FreeLook Camera.prefab
index dbe6481ee8..6c049cf559 100644
--- a/Assets/PerfectWorld/Prefab/FreeLook Camera.prefab
+++ b/Assets/PerfectWorld/Prefab/FreeLook Camera.prefab
@@ -257,5 +257,5 @@ MonoBehaviour:
TerrainLayers:
serializedVersion: 2
m_Bits: 200
- MaximumRaycast: 10
- Damping: 0.5
+ MaximumRaycast: 5
+ Damping: 0.25
From ee75334b1de0d263a1bf3ae7cde012f1f69f2893 Mon Sep 17 00:00:00 2001
From: Chomper9981
Date: Fri, 20 Mar 2026 16:16:17 +0700
Subject: [PATCH 8/9] fix task trace position
---
.../PerfectWorld/Scripts/Task/UI/DlgTask.cs | 35 +++++++------------
Assets/Scripts/CECUIManager.cs | 4 +--
2 files changed, 15 insertions(+), 24 deletions(-)
diff --git a/Assets/PerfectWorld/Scripts/Task/UI/DlgTask.cs b/Assets/PerfectWorld/Scripts/Task/UI/DlgTask.cs
index 9e9d132c3a..6c927e7b96 100644
--- a/Assets/PerfectWorld/Scripts/Task/UI/DlgTask.cs
+++ b/Assets/PerfectWorld/Scripts/Task/UI/DlgTask.cs
@@ -201,8 +201,7 @@ namespace BrewMonster.Scripts.Task.UI
});
trigger.triggers.Add(entry);
- }
-
+ }
OnInitDialog();
}
@@ -513,7 +512,7 @@ namespace BrewMonster.Scripts.Task.UI
// Refresh UI immediately to reflect the change
// The server confirmation will trigger another refresh, but this gives immediate feedback
- RefreshTaskTrace();
+ RefreshTaskTrace(true);
// Clear selection if the abandoned task was selected
if (m_idSelTask == (int)topTaskId)
@@ -658,7 +657,7 @@ namespace BrewMonster.Scripts.Task.UI
//
public bool Tick()
{
- RefreshTaskTrace();
+ //RefreshTaskTrace();
// Time-window task refresh: while in Search view, refresh the list when server time crosses a minute boundary.
// This is throttled to avoid rebuilding large task lists every frame.
if (m_iType == 1)
@@ -758,16 +757,11 @@ namespace BrewMonster.Scripts.Task.UI
return true;
}
+
- public void TickTaskTrace()
- {
- if (m_TaskTraceCounter.IncCounter(EC_Game.GetRealTickTime())) {
- m_TaskTraceCounter.Reset();
- RefreshTaskTrace();
- }
- }
- public void RefreshTaskTrace()
+ public void RefreshTaskTrace(bool bShowTrace)
{
+ m_bShowTrace = bShowTrace;
// Get AUIManager, fallback to GetGameUIMan() if m_pAUIManager is not set yet
// 获取AUIManager,如果m_pAUIManager尚未设置则回退到GetGameUIMan()
AUIManager auiManager = GetAUIManager();
@@ -782,8 +776,11 @@ namespace BrewMonster.Scripts.Task.UI
DlgTaskTrace pDlgTaskTrace = auiManager.GetDialog("Win_QuestMinion") as DlgTaskTrace;
if (pDlgTaskTrace == null)
return;
- if (m_pTog_bShowTrace && !m_bShowTrace)
+ if (!m_bShowTrace)
+ {
+ pDlgTaskTrace.Show(false);
return;
+ }
ShowType showType = pDlgTaskTrace.GetShowType();
// bool bShow = showType == ShowType.ST_TRACED || showType == ShowType.ST_TITLE;
bool bShow =true;//for test
@@ -1379,18 +1376,12 @@ namespace BrewMonster.Scripts.Task.UI
if(auiManager != null)
{
AUIDialog pTrace = auiManager.GetDialog("Win_QuestMinion");
- if(pTrace.IsShow() == true)
- {
- m_pTog_bShowTrace.isOn = true;
- }
- else
- {
- m_pTog_bShowTrace.isOn = false;
- }
+ m_pTog_bShowTrace.SetIsOnWithoutNotify(pTrace.IsShow() == true);
+ //m_bShowTrace = pTrace.IsShow() == true;
}
else
{
- OnCommand_showtrace(null,true);
+ OnCommand_showtrace(null,false);
}
if (m_idSelTask != 0)
UpdateTask();
diff --git a/Assets/Scripts/CECUIManager.cs b/Assets/Scripts/CECUIManager.cs
index c55d81803a..2849c65333 100644
--- a/Assets/Scripts/CECUIManager.cs
+++ b/Assets/Scripts/CECUIManager.cs
@@ -106,9 +106,9 @@ public class CECUIManager : MonoSingleton
var dlgTaskTraceDialog = inGameUIMan.GetDialog("Win_QuestMinion");
if (dlgTaskDialog != null && dlgTaskDialog is BrewMonster.Scripts.Task.UI.DlgTask dlgTaskForTrace)
{
- if (dlgTaskTraceDialog != null && dlgTaskTraceDialog.IsShow())
+ if (dlgTaskTraceDialog != null)
{
- dlgTaskForTrace.RefreshTaskTrace();
+ dlgTaskForTrace.RefreshTaskTrace(dlgTaskTraceDialog.IsShow());
}
dlgTaskForTrace.Tick();
From 65afe0491801f19d4a1a1e79cf9fa948b53d613f Mon Sep 17 00:00:00 2001
From: VuNgocHaiC7
Date: Fri, 20 Mar 2026 16:47:14 +0700
Subject: [PATCH 9/9] update money in inventory when pickup money and button
confirm dlgAwarld for item_info setActive false
---
.../Scripts/Network/CSNetwork/GPDataType.cs | 5 +
.../Scripts/UI/DlgAward/CDlgAward.cs | 6 +-
Assets/Scripts/CECHostPlayer.Inventory.cs | 29 ++-
Assets/Scripts/CECHostPlayer.cs | 217 ++++++++++++++++++
4 files changed, 254 insertions(+), 3 deletions(-)
diff --git a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GPDataType.cs b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GPDataType.cs
index 09481fa9a6..7bc1b77fee 100644
--- a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GPDataType.cs
+++ b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GPDataType.cs
@@ -1588,6 +1588,11 @@ namespace CSNetwork.GPDataType
public byte byPackage;
public byte bySlot;
}
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ public struct cmd_pickup_money
+ {
+ public int amount;
+ }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct cmd_produce_start
diff --git a/Assets/PerfectWorld/Scripts/UI/DlgAward/CDlgAward.cs b/Assets/PerfectWorld/Scripts/UI/DlgAward/CDlgAward.cs
index 965c66e850..adf8dc319f 100644
--- a/Assets/PerfectWorld/Scripts/UI/DlgAward/CDlgAward.cs
+++ b/Assets/PerfectWorld/Scripts/UI/DlgAward/CDlgAward.cs
@@ -401,7 +401,9 @@ namespace BrewMonster.Scripts.UI
break;
}
}
- }
+
+ itemInfoPanel.SetActive(false);
+ }
void OnAwardItemClicked(string hint, bool isOn, AwardItem awardItem)
{
@@ -513,4 +515,4 @@ namespace BrewMonster.Scripts.UI
LayoutRebuilder.ForceRebuildLayoutImmediate(parent);
}
}
-}
\ No newline at end of file
+}
diff --git a/Assets/Scripts/CECHostPlayer.Inventory.cs b/Assets/Scripts/CECHostPlayer.Inventory.cs
index ee6d652df0..b965df4f0e 100644
--- a/Assets/Scripts/CECHostPlayer.Inventory.cs
+++ b/Assets/Scripts/CECHostPlayer.Inventory.cs
@@ -196,6 +196,7 @@ namespace BrewMonster
{
var money = GPDataTypeHelper.FromBytes(data);
SetMoneyAmount(money.amount);
+ m_iMaxMoney = (int)money.max_amount;
EC_InventoryUI ui = GameObject.FindFirstObjectByType();
if (ui != null && ui.gameObject.activeInHierarchy)
@@ -797,7 +798,33 @@ namespace BrewMonster
// Add money amount
private int AddMoneyAmount(int iAmount)
{
- m_iMoneyCnt += (uint)iAmount;
+ long next = (long)m_iMoneyCnt + iAmount;
+ if (next < 0)
+ {
+ next = 0;
+ }
+
+ if(m_iMaxMoney > 0 && next > m_iMaxMoney)
+ {
+ next = m_iMaxMoney;
+ }
+
+ m_iMoneyCnt = (uint)next;
+
+ ulong amount = m_iMoneyCnt;
+ ulong maxAmount = m_iMaxMoney > 0 ? (ulong)m_iMaxMoney : amount;
+
+ EC_InventoryUI ui = GameObject.FindFirstObjectByType();
+ if(ui != null && ui.gameObject.activeInHierarchy)
+ {
+ ui.UpdateMoney(amount, maxAmount);
+ }
+ else
+ {
+ EC_InventoryUI.CacheMoney(amount, maxAmount);
+ }
+
+ //m_iMoneyCnt += (uint)iAmount;
return (int)m_iMoneyCnt;
}
diff --git a/Assets/Scripts/CECHostPlayer.cs b/Assets/Scripts/CECHostPlayer.cs
index 9531539004..37320efbc2 100644
--- a/Assets/Scripts/CECHostPlayer.cs
+++ b/Assets/Scripts/CECHostPlayer.cs
@@ -544,6 +544,9 @@ namespace BrewMonster
case EC_MsgDef.MSG_HST_USEITEM:
OnMsgHstUseItem(Msg);
break;
+ case EC_MsgDef.MSG_HST_PICKUPMONEY:
+ OnMsgHstPickupMoney(Msg);
+ break;
case EC_MsgDef.MSG_HST_ATKRESULT: OnMsgHstAttackResult(Msg); break;
case EC_MsgDef.MSG_HST_ATTACKONCE: OnMsgHstAttackOnce(Msg); break;
case EC_MsgDef.MSG_HST_ATTACKED: OnMsgHstAttacked(Msg); break;
@@ -612,11 +615,206 @@ namespace BrewMonster
}
}*/
}
+
+ private void OnMsgHstPickupMoney(ECMSG msg)
+ {
+ var data = msg.dwParam1 as byte[];
+ if (data == null || data.Length == 0)
+ return;
+
+ cmd_pickup_money pCmd = GPDataTypeHelper.FromBytes(data);
+ AddMoneyAmount(pCmd.amount);
+ CECGameRun pGameRun = EC_Game.GetGameRun();
+ pGameRun.AddFixedMessage((int)FixedMsg.FIXMSG_PICKUPMONEY);
+ BubbleText((int)BubbleTextType.BUBBLE_MONEY, (uint)pCmd.amount);
+ }
+
+ private void BubbleText(int iIndex, uint dwNum, int p1 = 0)
+ {
+ bool isHost = IsHostPlayer();
+
+ if (isHost)
+ {
+ CECHostPlayer pHost = EC_Game.GetGameRun().GetHostPlayer();
+ if (iIndex == (int)BubbleTextType.BUBBLE_EXP)
+ {
+ bool hasBookExp = pHost != null && pHost.m_ReincarnationTome.tome_active != 0;
+ int msgId = (int)dwNum > 0 ?
+ (hasBookExp ? (int)FixedMsg.FIXMSG_GOT_BOOKEXP : (int)FixedMsg.FIXMSG_GOTEXP) :
+ (int)FixedMsg.FIXMSG_LOSTEXP;
+ EC_Game.GetGameRun()?.AddFixedChannelMsg(msgId, (int)ChatChannel.GP_CHAT_FIGHT, (int)dwNum);
+ }
+
+ if (iIndex == (int)BubbleTextType.BUBBLE_SP)
+ {
+ EC_Game.GetGameRun()?.AddFixedChannelMsg((int)FixedMsg.FIXMSG_GOTSP, (int)ChatChannel.GP_CHAT_FIGHT, (int)dwNum);
+ }
+
+ if (iIndex == (int)BubbleTextType.BUBBLE_REALMEXP)
+ {
+ EC_Game.GetGameRun()?.AddFixedChannelMsg((int)FixedMsg.FIXMSG_GOT_REALMEXP, (int)ChatChannel.GP_CHAT_FIGHT, (int)dwNum);
+ }
+ }
+
+ Vector3 vPos;
+ if (IsInChariot())
+ {
+ var dummy = GetDummyModel((int)PLAYERMODEL_TYPE.PLAYERMODEL_DUMMYTYPE2);
+ if (dummy != null)
+ {
+ // TODO
+ //vPos = GetPos() + g_vAxisY * (dummy.GetModelAABB().Extents.y * 2.3f);
+ }
+ else
+ {
+ vPos = EC_Utility.ToVector3(GetPos()) + g_vAxisY * (m_aabb.Extents.y * 2.5f);
+ }
+
+ //CECBubbleDecal* pBubbleDecal = m_pBubbleTexts->AddDecal(vPos, CECDecal::DCID_ICONDECAL);
+ //CECIconDecal* pDecal = (CECIconDecal*)pBubbleDecal->GetDecal();
+
+ //switch (iIndex)
+ //{
+ // case BUBBLE_DAMAGE:
+
+ // if (!bHost)
+ // dwCol = A3DCOLORRGB(237, 56, 0);
+
+ // if (p1 & 0x0001)
+ // pDecal->AddIcon(CECImageRes::IMG_DEADLYSTRIKE, 0, dwCol);
+ // else if (p1 & 0x0002)
+ // pDecal->AddIcon(CECImageRes::IMG_RETORT, 0, dwCol);
+
+ // pDecal->AddNumIcons(CECImageRes::IMG_POPUPNUM, dwNum, dwCol);
+ // break;
+
+ // case BUBBLE_EXP:
+
+ // pDecal->AddIcon(CECImageRes::IMG_GOTEXP, 0, dwCol);
+ // pDecal->AddNumIcons(CECImageRes::IMG_POPUPNUM, dwNum, dwCol);
+ // // pDecal->SetScreenPos(80, 70);
+ // // pDecal->EnableScreenPos(true);
+ // break;
+
+ // case BUBBLE_SP:
+
+ // pDecal->AddIcon(CECImageRes::IMG_GOTSP, 0, dwCol);
+ // pDecal->AddNumIcons(CECImageRes::IMG_POPUPNUM, dwNum, dwCol);
+ // // pDecal->SetScreenPos(80, 90);
+ // // pDecal->EnableScreenPos(true);
+ // break;
+
+ // case BUBBLE_MONEY:
+
+ // pDecal->AddIcon(CECImageRes::IMG_GOTMONEY, 0, dwCol);
+ // pDecal->AddNumIcons(CECImageRes::IMG_POPUPNUM, dwNum, dwCol);
+ // break;
+
+ // case BUBBLE_LEVELUP:
+
+ // pDecal->AddIcon(CECImageRes::IMG_LEVELUP, 0, dwCol);
+ // break;
+
+ // case BUBBLE_HITMISSED:
+
+ // if (!bHost)
+ // dwCol = A3DCOLORRGB(237, 56, 0);
+
+ // pDecal->AddIcon(CECImageRes::IMG_HITMISSED, 0, dwCol);
+ // break;
+
+ // case BUBBLE_INVALIDHIT:
+
+ // if (!bHost)
+ // dwCol = A3DCOLORRGB(237, 56, 0);
+
+ // pDecal->AddIcon(CECImageRes::IMG_INVALIDHIT, 0, dwCol);
+ // break;
+
+ // case BUBBLE_IMMUNE:
+
+ // if (!bHost)
+ // dwCol = A3DCOLORRGB(237, 56, 0);
+
+ // pDecal->AddIcon(CECImageRes::IMG_IMMUNE, 0, dwCol);
+ // break;
+
+ // case BUBBLE_HPWARN:
+
+ // dwCol = A3DCOLORRGB(255, 255, 255);
+ // pDecal->AddIcon(CECImageRes::IMG_HPWARN, 0, dwCol);
+ // break;
+
+ // case BUBBLE_MPWARN:
+
+ // dwCol = A3DCOLORRGB(255, 255, 255);
+ // pDecal->AddIcon(CECImageRes::IMG_MPWARN, 0, dwCol);
+ // break;
+
+ // case BUBBLE_REBOUND:
+
+ // pDecal->AddIcon(CECImageRes::IMG_REBOUND, 0, dwCol);
+ // pDecal->AddNumIcons(CECImageRes::IMG_POPUPNUM, dwNum, dwCol);
+ // break;
+
+ // case BUBBLE_BEAT_BACK:
+
+ // pDecal->AddIcon(CECImageRes::IMG_BEAT_BACK, 0, dwCol);
+ // pDecal->AddNumIcons(CECImageRes::IMG_POPUPNUM, dwNum, dwCol);
+ // break;
+
+ // case BUBBLE_ADD:
+
+ // dwCol = A3DCOLORRGB(126, 206, 244);
+ // pDecal->AddIcon(CECImageRes::IMG_ADD, 0, dwCol);
+ // pDecal->AddNumIcons(CECImageRes::IMG_POPUPNUM, dwNum, dwCol);
+ // break;
+
+ // case BUBBLE_DODGE_DEBUFF:
+
+ // if (!bHost)
+ // dwCol = A3DCOLORRGB(237, 56, 0);
+
+ // pDecal->AddIcon(CECImageRes::IMG_DODGE_DEBUFF, 0, dwCol);
+ // break;
+
+ // default:
+ // return;
+ }
+ else
+ {
+ vPos = EC_Utility.ToVector3(GetPos()) + g_vAxisY * (m_aabb.Extents.y * 2.5f);
+ }
+ }
+
+ private bool IsInChariot()
+ {
+ CECGameRun pRun = EC_Game.GetGameRun();
+ if(pRun == null)
+ return false;
+
+ CECHostPlayer pHost = pRun.GetHostPlayer();
+ if (pHost && pHost.GetBattleInfo().IsChariotWar() && GetShapeType() == (int)PLAYERMODEL_TYPE.PLAYERMODEL_DUMMYTYPE2
+ && GetDummyModel((int)PLAYERMODEL_TYPE.PLAYERMODEL_DUMMYTYPE2))
+ {
+ return true;
+ }
+ return false;
+ }
+
+ private BATTLEINFO m_BattleInfo;
+
+ private BATTLEINFO GetBattleInfo()
+ {
+ return m_BattleInfo;
+ }
+
private void NotifyUIUpdateTeam(bool showDialog = false)
{
//try
//{
// var ui = EC_Game.GetGameRun()?.GetUIManager()?.GetInGameUIMan();
+ // var ui = EC_Game.GetGameRun()?.GetUIManager()?.GetInGameUIMan();
// if (ui is CECGameUIMan gui)
// gui.UpdateTeam(false);
//}
@@ -3319,6 +3517,25 @@ namespace BrewMonster
LIES_DISABLEFIGHT = 0x000B,
}
+ public enum BubbleTextType
+ {
+ BUBBLE_DAMAGE = 0,
+ BUBBLE_EXP,
+ BUBBLE_SP,
+ BUBBLE_MONEY,
+ BUBBLE_LEVELUP,
+ BUBBLE_HITMISSED,
+ BUBBLE_INVALIDHIT,
+ BUBBLE_IMMUNE,
+ BUBBLE_HPWARN,
+ BUBBLE_MPWARN,
+ BUBBLE_REBOUND, // ·´µ¯
+ BUBBLE_BEAT_BACK, // ·´»÷
+ BUBBLE_ADD, // ÎüѪµÄ¼ÓºÅ
+ BUBBLE_DODGE_DEBUFF,
+ BUBBLE_REALMEXP,
+ }
+
// ½øÈë»ùµØÐÅÏ¢
public struct FACTION_FORTRESS_ENTER
{