diff --git a/ArrowBeatTap-Gp.sln.DotSettings.user b/ArrowBeatTap-Gp.sln.DotSettings.user index 14fb79e..6e39860 100644 --- a/ArrowBeatTap-Gp.sln.DotSettings.user +++ b/ArrowBeatTap-Gp.sln.DotSettings.user @@ -2,8 +2,10 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded \ No newline at end of file diff --git a/Assets/ChillConnect/Define/Message/UICtrlMsg_OpenClose.cs b/Assets/ChillConnect/Define/Message/UICtrlMsg_OpenClose.cs index d02735a..ccaa22e 100644 --- a/Assets/ChillConnect/Define/Message/UICtrlMsg_OpenClose.cs +++ b/Assets/ChillConnect/Define/Message/UICtrlMsg_OpenClose.cs @@ -134,6 +134,8 @@ namespace ChillConnect public static uint PettyAwardUI_Close = ++cursor_OpenClose; public static uint StatementViewUI_Open = ++cursor_OpenClose; - public static uint StatementViewUI_Close = ++cursor_OpenClose; + public static uint StatementViewUI_Close = ++cursor_OpenClose; + public static uint GameAgainUI_Open = ++cursor_OpenClose; + public static uint GameAgainUI_Close = ++cursor_OpenClose; } } \ No newline at end of file diff --git a/Assets/ChillConnect/FGUI/package/Arrow_game/Arrow_gameBinder.cs b/Assets/ChillConnect/FGUI/package/Arrow_game/Arrow_gameBinder.cs index 8274c3e..511cc1d 100644 --- a/Assets/ChillConnect/FGUI/package/Arrow_game/Arrow_gameBinder.cs +++ b/Assets/ChillConnect/FGUI/package/Arrow_game/Arrow_gameBinder.cs @@ -12,6 +12,7 @@ namespace FGUI.Arrow_game UIObjectFactory.SetPackageItemExtension(ArrowEnd.URL, typeof(ArrowEnd)); UIObjectFactory.SetPackageItemExtension(LineTile.URL, typeof(LineTile)); UIObjectFactory.SetPackageItemExtension(ArrorPoint.URL, typeof(ArrorPoint)); + UIObjectFactory.SetPackageItemExtension(HeartsPanel.URL, typeof(HeartsPanel)); } } } \ No newline at end of file diff --git a/Assets/ChillConnect/FGUI/package/Arrow_game/HeartsPanel.cs b/Assets/ChillConnect/FGUI/package/Arrow_game/HeartsPanel.cs new file mode 100644 index 0000000..34cc4f8 --- /dev/null +++ b/Assets/ChillConnect/FGUI/package/Arrow_game/HeartsPanel.cs @@ -0,0 +1,29 @@ +/** This is an automatically generated class by FairyGUI. Please do not modify it. **/ + +using FairyGUI; +using FairyGUI.Utils; + +namespace FGUI.Arrow_game +{ + public partial class HeartsPanel : GComponent + { + public GImage xin_1; + public GImage xin_2; + public GImage xin_3; + public const string URL = "ui://sjl9teijrsd4b"; + + public static HeartsPanel CreateInstance() + { + return (HeartsPanel)UIPackage.CreateObject("Arrow_game", "HeartsPanel"); + } + + public override void ConstructFromXML(XML xml) + { + base.ConstructFromXML(xml); + + xin_1 = (GImage)GetChildAt(0); + xin_2 = (GImage)GetChildAt(1); + xin_3 = (GImage)GetChildAt(2); + } + } +} \ No newline at end of file diff --git a/Assets/ChillConnect/FGUI/package/Arrow_game/HeartsPanel.cs.meta b/Assets/ChillConnect/FGUI/package/Arrow_game/HeartsPanel.cs.meta new file mode 100644 index 0000000..fbfa2e8 --- /dev/null +++ b/Assets/ChillConnect/FGUI/package/Arrow_game/HeartsPanel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3f0b296ed39adcc429682e3f5f403e9f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ChillConnect/FGUI/package/Arrow_game/com_arrow_game.cs b/Assets/ChillConnect/FGUI/package/Arrow_game/com_arrow_game.cs index 1c6aca4..52af3dd 100644 --- a/Assets/ChillConnect/FGUI/package/Arrow_game/com_arrow_game.cs +++ b/Assets/ChillConnect/FGUI/package/Arrow_game/com_arrow_game.cs @@ -13,6 +13,7 @@ namespace FGUI.Arrow_game public ArrowEnd ArrowEnd; public ArrorPoint point; public GButton btn_close; + public HeartsPanel HeartsPanel; public const string URL = "ui://sjl9teijrsd40"; public static com_arrow_game CreateInstance() @@ -30,6 +31,7 @@ namespace FGUI.Arrow_game ArrowEnd = (ArrowEnd)GetChildAt(3); point = (ArrorPoint)GetChildAt(4); btn_close = (GButton)GetChildAt(6); + HeartsPanel = (HeartsPanel)GetChildAt(7); } } } \ No newline at end of file diff --git a/Assets/ChillConnect/FGUI/package/GameResult_08/GameResult_08Binder.cs b/Assets/ChillConnect/FGUI/package/GameResult_08/GameResult_08Binder.cs index ae0f7e2..a4350c4 100644 --- a/Assets/ChillConnect/FGUI/package/GameResult_08/GameResult_08Binder.cs +++ b/Assets/ChillConnect/FGUI/package/GameResult_08/GameResult_08Binder.cs @@ -10,6 +10,9 @@ namespace FGUI.GameResult_08 { UIObjectFactory.SetPackageItemExtension(com_success_cash.URL, typeof(com_success_cash)); UIObjectFactory.SetPackageItemExtension(cash_broad.URL, typeof(cash_broad)); + UIObjectFactory.SetPackageItemExtension(com_arrow_end.URL, typeof(com_arrow_end)); + UIObjectFactory.SetPackageItemExtension(com_arrow_end_again.URL, typeof(com_arrow_end_again)); + UIObjectFactory.SetPackageItemExtension(btn_claim.URL, typeof(btn_claim)); UIObjectFactory.SetPackageItemExtension(com_end.URL, typeof(com_end)); } } diff --git a/Assets/ChillConnect/FGUI/package/GameResult_08/btn_claim.cs b/Assets/ChillConnect/FGUI/package/GameResult_08/btn_claim.cs new file mode 100644 index 0000000..591ace0 --- /dev/null +++ b/Assets/ChillConnect/FGUI/package/GameResult_08/btn_claim.cs @@ -0,0 +1,29 @@ +/** This is an automatically generated class by FairyGUI. Please do not modify it. **/ + +using FairyGUI; +using FairyGUI.Utils; + +namespace FGUI.GameResult_08 +{ + public partial class btn_claim : GButton + { + public Controller state; + public GImage ad_icon; + public GImage img_saveingpot; + public const string URL = "ui://8sjqw0q3rsd42i"; + + public static btn_claim CreateInstance() + { + return (btn_claim)UIPackage.CreateObject("GameResult_08", "btn_claim"); + } + + public override void ConstructFromXML(XML xml) + { + base.ConstructFromXML(xml); + + state = GetControllerAt(0); + ad_icon = (GImage)GetChildAt(1); + img_saveingpot = (GImage)GetChildAt(2); + } + } +} \ No newline at end of file diff --git a/Assets/ChillConnect/FGUI/package/GameResult_08/btn_claim.cs.meta b/Assets/ChillConnect/FGUI/package/GameResult_08/btn_claim.cs.meta new file mode 100644 index 0000000..6186947 --- /dev/null +++ b/Assets/ChillConnect/FGUI/package/GameResult_08/btn_claim.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e0993c012a030ad4391f9c97f177470c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ChillConnect/FGUI/package/GameResult_08/com_arrow_end.cs b/Assets/ChillConnect/FGUI/package/GameResult_08/com_arrow_end.cs new file mode 100644 index 0000000..531f22e --- /dev/null +++ b/Assets/ChillConnect/FGUI/package/GameResult_08/com_arrow_end.cs @@ -0,0 +1,31 @@ +/** This is an automatically generated class by FairyGUI. Please do not modify it. **/ + +using FairyGUI; +using FairyGUI.Utils; + +namespace FGUI.GameResult_08 +{ + public partial class com_arrow_end : GComponent + { + public GTextField title; + public GButton btn_back; + public GButton btn_watchAd; + public GButton btn_restart; + public const string URL = "ui://8sjqw0q3rsd42f"; + + public static com_arrow_end CreateInstance() + { + return (com_arrow_end)UIPackage.CreateObject("GameResult_08", "com_arrow_end"); + } + + public override void ConstructFromXML(XML xml) + { + base.ConstructFromXML(xml); + + title = (GTextField)GetChildAt(3); + btn_back = (GButton)GetChildAt(4); + btn_watchAd = (GButton)GetChildAt(9); + btn_restart = (GButton)GetChildAt(10); + } + } +} \ No newline at end of file diff --git a/Assets/ChillConnect/FGUI/package/GameResult_08/com_arrow_end.cs.meta b/Assets/ChillConnect/FGUI/package/GameResult_08/com_arrow_end.cs.meta new file mode 100644 index 0000000..7f4c54f --- /dev/null +++ b/Assets/ChillConnect/FGUI/package/GameResult_08/com_arrow_end.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3e949870cc7cc39479c7f54ea7420224 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ChillConnect/FGUI/package/GameResult_08/com_arrow_end_again.cs b/Assets/ChillConnect/FGUI/package/GameResult_08/com_arrow_end_again.cs new file mode 100644 index 0000000..baac39c --- /dev/null +++ b/Assets/ChillConnect/FGUI/package/GameResult_08/com_arrow_end_again.cs @@ -0,0 +1,31 @@ +/** This is an automatically generated class by FairyGUI. Please do not modify it. **/ + +using FairyGUI; +using FairyGUI.Utils; + +namespace FGUI.GameResult_08 +{ + public partial class com_arrow_end_again : GComponent + { + public GTextField title; + public GButton btn_back; + public GButton btn_revive; + public GButton btn_restart; + public const string URL = "ui://8sjqw0q3rsd42h"; + + public static com_arrow_end_again CreateInstance() + { + return (com_arrow_end_again)UIPackage.CreateObject("GameResult_08", "com_arrow_end_again"); + } + + public override void ConstructFromXML(XML xml) + { + base.ConstructFromXML(xml); + + title = (GTextField)GetChildAt(3); + btn_back = (GButton)GetChildAt(4); + btn_revive = (GButton)GetChildAt(6); + btn_restart = (GButton)GetChildAt(7); + } + } +} \ No newline at end of file diff --git a/Assets/ChillConnect/FGUI/package/GameResult_08/com_arrow_end_again.cs.meta b/Assets/ChillConnect/FGUI/package/GameResult_08/com_arrow_end_again.cs.meta new file mode 100644 index 0000000..44ab31b --- /dev/null +++ b/Assets/ChillConnect/FGUI/package/GameResult_08/com_arrow_end_again.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6d91521286530f847abe3aa5d63ae289 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/ChillConnectAssets/FGUI/Arrow_game_atlas0.png b/Assets/Resources/ChillConnectAssets/FGUI/Arrow_game_atlas0.png index 48eb18f..9e86b35 100644 Binary files a/Assets/Resources/ChillConnectAssets/FGUI/Arrow_game_atlas0.png and b/Assets/Resources/ChillConnectAssets/FGUI/Arrow_game_atlas0.png differ diff --git a/Assets/Resources/ChillConnectAssets/FGUI/Arrow_game_fui.bytes b/Assets/Resources/ChillConnectAssets/FGUI/Arrow_game_fui.bytes index f3e883c..15908b1 100644 Binary files a/Assets/Resources/ChillConnectAssets/FGUI/Arrow_game_fui.bytes and b/Assets/Resources/ChillConnectAssets/FGUI/Arrow_game_fui.bytes differ diff --git a/Assets/Resources/ChillConnectAssets/FGUI/Common_01_fui.bytes b/Assets/Resources/ChillConnectAssets/FGUI/Common_01_fui.bytes index f584ce8..7bf98a1 100644 Binary files a/Assets/Resources/ChillConnectAssets/FGUI/Common_01_fui.bytes and b/Assets/Resources/ChillConnectAssets/FGUI/Common_01_fui.bytes differ diff --git a/Assets/Resources/ChillConnectAssets/FGUI/GameResult_08_atlas0.png b/Assets/Resources/ChillConnectAssets/FGUI/GameResult_08_atlas0.png index f691470..f9585ff 100644 Binary files a/Assets/Resources/ChillConnectAssets/FGUI/GameResult_08_atlas0.png and b/Assets/Resources/ChillConnectAssets/FGUI/GameResult_08_atlas0.png differ diff --git a/Assets/Resources/ChillConnectAssets/FGUI/GameResult_08_fui.bytes b/Assets/Resources/ChillConnectAssets/FGUI/GameResult_08_fui.bytes index 5732cbf..ed98082 100644 Binary files a/Assets/Resources/ChillConnectAssets/FGUI/GameResult_08_fui.bytes and b/Assets/Resources/ChillConnectAssets/FGUI/GameResult_08_fui.bytes differ diff --git a/Assets/Resources/ChillConnectAssets/FGUI/Pack_16_fui.bytes b/Assets/Resources/ChillConnectAssets/FGUI/Pack_16_fui.bytes index 856574c..c9f8521 100644 Binary files a/Assets/Resources/ChillConnectAssets/FGUI/Pack_16_fui.bytes and b/Assets/Resources/ChillConnectAssets/FGUI/Pack_16_fui.bytes differ diff --git a/Assets/Scripts/DataMgr/DataKeys.cs b/Assets/Scripts/DataMgr/DataKeys.cs index 459d304..576d9f0 100644 --- a/Assets/Scripts/DataMgr/DataKeys.cs +++ b/Assets/Scripts/DataMgr/DataKeys.cs @@ -37,4 +37,5 @@ public static partial class DataKeys public const string RankData = "RankData"; public const string ApplePayTransactionID = "ApplePayTransactionID"; //ios购买后的非消耗性订单id public const string NewWatchCd = "NewWatchCd"; + public const string ArrowResultLevel = "ArrowResultLevel"; //箭头游戏的结算等级(1:免费,0:看广告) } diff --git a/Assets/Scripts/DataMgr/DataMgr.cs b/Assets/Scripts/DataMgr/DataMgr.cs index 45d38d0..b1ba311 100644 --- a/Assets/Scripts/DataMgr/DataMgr.cs +++ b/Assets/Scripts/DataMgr/DataMgr.cs @@ -73,6 +73,8 @@ public static partial class DataMgr public static DataStorage ChLevel = BindDataStorage(DataKeys.ch_level); public static DataStorage LevelData = new(DataKeys.LevelData, cloudSave: false); public static DataStorage AvailableDiceRolls = BindDataStorage(DataKeys.AvailableDiceRolls); + public static DataStorage ArrowResultLevel = BindDataStorage(DataKeys.ArrowResultLevel,@default: 1); + #endregion diff --git a/Assets/Scripts/ModuleManager/CtrlConst.cs b/Assets/Scripts/ModuleManager/CtrlConst.cs index fc0b3c4..373ce82 100644 --- a/Assets/Scripts/ModuleManager/CtrlConst.cs +++ b/Assets/Scripts/ModuleManager/CtrlConst.cs @@ -56,6 +56,7 @@ namespace ChillConnect public const string PettyAwardCtrl = "PettyAwardCtrl"; public const string StatementViewCtrl = "StatementViewCtrl"; public const string ArrowGameCtrl = "ArrowGameCtrl"; + public const string GameAgainCtrl = "GameAgainCtrl"; } } \ No newline at end of file diff --git a/Assets/Scripts/ModuleManager/ModelConst.cs b/Assets/Scripts/ModuleManager/ModelConst.cs index 9021dd4..568b195 100644 --- a/Assets/Scripts/ModuleManager/ModelConst.cs +++ b/Assets/Scripts/ModuleManager/ModelConst.cs @@ -56,6 +56,7 @@ namespace ChillConnect public const string StatementViewModel = "StatementViewModel"; public const string H5Model = "H5Model"; public const string ArrowGameModel = "ArrowGameModel"; + public const string GameAgainModel = "GameAgainModel"; } } \ No newline at end of file diff --git a/Assets/Scripts/ModuleManager/ModuleManagerRegister.cs b/Assets/Scripts/ModuleManager/ModuleManagerRegister.cs index 97d4a0a..9223bbd 100644 --- a/Assets/Scripts/ModuleManager/ModuleManagerRegister.cs +++ b/Assets/Scripts/ModuleManager/ModuleManagerRegister.cs @@ -59,6 +59,8 @@ namespace ChillConnect moduleManager.AddModel(ModelConst.StatementViewModel, new StatementViewModel()); moduleManager.AddModel(ModelConst.H5Model, new H5Model()); moduleManager.AddModel(ModelConst.ArrowGameModel, new ArrowGameModel()); + moduleManager.AddModel(ModelConst.GameAgainModel, new GameAgainModel()); + } public static void AutoRegisterUICtrl() @@ -115,6 +117,8 @@ namespace ChillConnect moduleManager.AddUICtrl(UICtrlConst.StatementViewUICtrl, new StatementViewUICtrl()); moduleManager.AddUICtrl(UICtrlConst.H5UICtrl, new H5UICtrl()); moduleManager.AddUICtrl(UICtrlConst.ArrowGameUICtrl, new ArrowGameUICtrl()); + moduleManager.AddUICtrl(UICtrlConst.GameAgainUICtrl, new GameAgainUICtrl()); + } @@ -174,6 +178,7 @@ namespace ChillConnect moduleManager.AddCtrl(CtrlConst.StatementViewCtrl, new StatementViewCtrl()); moduleManager.AddCtrl(CtrlConst.H5Ctrl, new H5Ctrl()); moduleManager.AddCtrl(CtrlConst.ArrowGameCtrl, new ArrowGameCtrl()); + moduleManager.AddCtrl(CtrlConst.GameAgainCtrl, new GameAgainCtrl()); } @@ -232,6 +237,7 @@ namespace ChillConnect moduleManager.AddUIType(UIConst.StatementViewUI, typeof(StatementViewUI)); moduleManager.AddUIType(UIConst.H5UI, typeof(H5UI)); moduleManager.AddUIType(UIConst.ArrowGameUI, typeof(ArrowGameUI)); + moduleManager.AddUIType(UIConst.GameAgainUI, typeof(GameAgainUI)); } } diff --git a/Assets/Scripts/ModuleManager/UIConst.cs b/Assets/Scripts/ModuleManager/UIConst.cs index 812a803..9d096dd 100644 --- a/Assets/Scripts/ModuleManager/UIConst.cs +++ b/Assets/Scripts/ModuleManager/UIConst.cs @@ -54,7 +54,8 @@ namespace ChillConnect public const string NewTaskUI = "NewTaskUI"; public const string PettyAwardUI = "PettyAwardUI"; public const string StatementViewUI = "StatementViewUI"; - public const string ArrowGameUI = "ArrowGameUI"; + public const string ArrowGameUI = "ArrowGameUI"; + public const string GameAgainUI = "GameAgainUI"; } } \ No newline at end of file diff --git a/Assets/Scripts/ModuleManager/UICtrlConst.cs b/Assets/Scripts/ModuleManager/UICtrlConst.cs index c26cebc..0199bf3 100644 --- a/Assets/Scripts/ModuleManager/UICtrlConst.cs +++ b/Assets/Scripts/ModuleManager/UICtrlConst.cs @@ -56,6 +56,7 @@ namespace ChillConnect public const string PettyAwardUICtrl = "PettyAwardUICtrl"; public const string StatementViewUICtrl = "StatementViewUICtrl"; public const string ArrowGameUICtrl = "ArrowGameUICtrl"; + public const string GameAgainUICtrl = "GameAgainUICtrl"; } } \ No newline at end of file diff --git a/Assets/Scripts/ModuleUI/ArrowGame/ArrowGameUI.cs b/Assets/Scripts/ModuleUI/ArrowGame/ArrowGameUI.cs index 04e67b8..7ce3121 100644 --- a/Assets/Scripts/ModuleUI/ArrowGame/ArrowGameUI.cs +++ b/Assets/Scripts/ModuleUI/ArrowGame/ArrowGameUI.cs @@ -1,3 +1,4 @@ +using System.Collections; using System.Collections.Generic; using System.IO; using FairyGUI; @@ -24,9 +25,38 @@ namespace ChillConnect private LevelConfig _levelConfig; // 全局固定参数 - private const float _pointSpacing = 60f; // 点位间距 60px - private const float _moveSpeed = 120f; // 移动速度 + private const float _pointSpacing = 60f; // 点位间距 60px + private const float _moveSpeed = 120f; // 移动速度 + private List allArrowList = new List(); + // 网格基础参数 + private readonly int gridColNum = 10; + private readonly float pointSpace = 60f; + private readonly float outOffset = 200f; + + // 网格边界 + private float gridLeft; + private float gridRight; + private readonly int gridRowNum = 10; + private float gridTop; + private float gridBottom; + + // 网格占用标记:true=该点位被占用,false=空闲 + private bool[,] _gridOccupied; + // 记录每个箭头占用的所有网格点位(行,列) + private Dictionary> _arrowOccupiedCells = new Dictionary>(); + + + // 爱心数量 + private int _heartCount = 3; + // 记录已经发生过碰撞的箭头对象(去重:同个箭头多次碰撞只扣一次血) + private HashSet _collidedArrows = new HashSet(); + // 统计场上还存在的箭头总数(用于判断全部移除=通关) + private int _remainArrowCount = 0; + + // 结算界面UI引用(根据你FGUI包名/组件名自行修改) + // private ResultPanel _resultPanel; + public ArrowGameUI(ArrowGameUICtrl ctrl) : base(ctrl) { uiName = UIConst.ArrowGameUI; @@ -46,7 +76,6 @@ namespace ChillConnect #region 生命周期 protected override void OnInit() { - } protected override void OnClose() @@ -63,6 +92,10 @@ namespace ChillConnect _arrowTemplate = null; _lineUnitTemplate = null; _levelConfig = null; + + // 清空网格占用数据 + _gridOccupied = null; + _arrowOccupiedCells.Clear(); } protected override void OnBind() @@ -87,45 +120,138 @@ namespace ChillConnect _arrowTemplate = (ArrowEnd)UIPackage.CreateObject("Arrow_game", "ArrowEnd"); _lineUnitTemplate = (LineTile)UIPackage.CreateObject("Arrow_game", "LineTile"); LoadLevelConfig(); + InitGridBounds(); + + // 初始化网格占用数组 + InitGridOccupied(); + + // ========== 新增:对局状态重置 ========== + _heartCount = 3; + _collidedArrows.Clear(); + if(_levelConfig != null) + _remainArrowCount = _levelConfig.arrows.Count; + InitView(); } - protected override void OnOpen(object args) { } - protected override void OnHide() { } - protected override void OnDisplay(object args) { } + protected override void OnOpen(object args) + { + } + + protected override void OnHide() + { + } + + protected override void OnDisplay(object args) + { + } #endregion #region 页面初始化 & 关闭按钮 private void InitView() { // 关闭按钮 - ui.btn_close.SetClick(() => - { - CtrlCloseUI(); - }); + ui.btn_close.SetClick(() => { CtrlCloseUI(); }); if (_levelConfig == null) return; - // 1. 以 ui.point 为原点生成整张网格圆点 + // 1. 绘制网格圆点 DrawGridDots(_levelConfig); - // 2. 初始化所有箭头 + 路径线条 + allArrowList = _levelConfig.arrows; + + // 2. 初始化所有箭头 + 路径线条 + 标记网格占用 foreach (var arrow in _levelConfig.arrows) { BuildArrowPath(arrow, _levelConfig); CreateArrowAndLines(arrow, _levelConfig); + MarkArrowOccupiedCells(arrow, _levelConfig); } } #endregion + private void InitGridBounds() + { + gridLeft = ui.point.x; + gridRight = ui.point.x + gridColNum * pointSpace; + gridTop = ui.point.y; + gridBottom = ui.point.y + gridRowNum * pointSpace; + } + + /// 初始化网格占用二维数组 + private void InitGridOccupied() + { + int rows = _levelConfig.gridRows; + int cols = _levelConfig.gridCols; + _gridOccupied = new bool[rows, cols]; + // 初始全部置为空闲 + for (int r = 0; r < rows; r++) + for (int c = 0; c < cols; c++) + _gridOccupied[r, c] = false; + + _arrowOccupiedCells.Clear(); + } + + /// 标记单个箭头占用的所有网格点 + private void MarkArrowOccupiedCells(ArrowConfig arrow, LevelConfig cfg) + { + List<(int row, int col)> cellList = new List<(int row, int col)>(); + int totalCol = cfg.gridCols; + + // 遍历箭头整条路径的所有网格点位 + foreach (var pos in arrow.pathPointList) + { + int pointId = GetPointIdByPos(pos, cfg); + PointIdToRowCol(pointId, totalCol, out int r, out int c); + + // 边界保护 + if (r >= 0 && r < cfg.gridRows && c >= 0 && c < cfg.gridCols) + { + _gridOccupied[r, c] = true; + cellList.Add((r, c)); + } + } + + _arrowOccupiedCells[arrow] = cellList; + } + + /// 释放单个箭头占用的网格(箭头消失时调用) + private void ReleaseArrowOccupied(ArrowConfig arrow) + { + if (!_arrowOccupiedCells.TryGetValue(arrow, out var cellList)) + return; + + foreach (var (r, c) in cellList) + { + if (r >= 0 && r < _levelConfig.gridRows && c >= 0 && c < _levelConfig.gridCols) + { + _gridOccupied[r, c] = false; + } + } + // 移除字典记录,避免冗余 + _arrowOccupiedCells.Remove(arrow); + } + #region 配置加载 private void LoadLevelConfig() { _levelConfig = JsonHelper.LoadLevel("level_1001.json"); + // 给 path 为空的箭头,设置默认方向 + foreach (var arrow in _levelConfig.arrows) + { + if (arrow.path == null || arrow.path.Count == 0) + { + arrow.defaultDir = "up"; + } + else + { + arrow.defaultDir = null; + } + } } #endregion - #region 【核心】网格坐标工具(基于 ui.point 为原点) + #region 【核心】网格坐标工具 /// 点位ID 转 行列索引 private void PointIdToRowCol(int pointId, int totalCol, out int row, out int col) { @@ -133,16 +259,11 @@ namespace ChillConnect col = pointId % totalCol; } - /// - /// 行列 → 实际像素坐标 - /// 原点 = ui.point 组件坐标,向右+X,向下+Y,间距固定60 - /// + /// 行列 → 实际像素坐标 private Vector2 RowColToPos(int row, int col) { - // 取UI上point组件的坐标作为网格原点 float originX = ui.point.x; float originY = ui.point.y; - float x = originX + col * _levelConfig.pointSpacing; float y = originY + row * _levelConfig.pointSpacing; return new Vector2(x, y); @@ -155,6 +276,29 @@ namespace ChillConnect return RowColToPos(r, c); } + /// 像素坐标反向计算点位ID + private int GetPointIdByPos(Vector2 pos, LevelConfig cfg) + { + float originX = ui.point.x; + float originY = ui.point.y; + + int col = Mathf.RoundToInt((pos.x - originX) / cfg.pointSpacing); + int row = Mathf.RoundToInt((pos.y - originY) / cfg.pointSpacing); + + return row * cfg.gridCols + col; + } + + /// 根据FGUI旋转角度获取方向 + private string GetDirByRotation(float rot) + { + rot = Mathf.Round(rot); + if (rot == 0) return "right"; + if (rot == 90) return "down"; + if (rot == 180) return "left"; + if (rot == 270) return "up"; + return "right"; + } + /// 方向转旋转角度(箭头默认朝上) private float DirToRotation(string dir) { @@ -169,7 +313,7 @@ namespace ChillConnect } #endregion - #region 绘制网格圆点(以 ui.point 为起点) + #region 绘制网格圆点 private void DrawGridDots(LevelConfig cfg) { if (_dotTemplate == null || _viewContainer == null) return; @@ -184,7 +328,7 @@ namespace ChillConnect { var dot = ArrorPoint.CreateInstance(); var pos = RowColToPos(r, c); - dot.SetPosition(pos.x, pos.y,0); + dot.SetPosition(pos.x, pos.y, 0); _viewContainer.AddChild(dot); } } @@ -211,6 +355,7 @@ namespace ChillConnect case "left": c--; break; case "right": c++; break; } + curPointId = r * totalCol + c; curPos = PointIdToPos(curPointId, totalCol); arrow.pathPointList.Add(curPos); @@ -222,125 +367,470 @@ namespace ChillConnect private void CreateArrowAndLines(ArrowConfig arrow, LevelConfig cfg) { arrow.lineUnits = new List(); - List path = arrow.pathPointList; + arrow.originalLinePos = new List(); + arrow.lineTrackIndex = new List(); + arrow.totalTrack = new List(); + List pathPoints = arrow.pathPointList; - if (path.Count < 2) + // 生成整条连续行走轨迹 + if (pathPoints.Count >= 2) { - CreateArrowOnly(arrow, path[0]); + for (int i = 0; i < pathPoints.Count - 1; i++) + { + Vector2 segStart = pathPoints[i]; + string dir = arrow.path[i]; + float offX = 0, offY = 0; + switch (dir) + { + case "right": offX = 10; break; + case "left": offX = -10; break; + case "down": offY = 10; break; + case "up": offY = -10; break; + } + + Vector2 cur = segStart; + for (int k = 0; k < 6; k++) + { + arrow.totalTrack.Add(cur); + cur.x += offX; + cur.y += offY; + } + } + + if (arrow.path.Count > 0) + arrow.finalMoveDir = arrow.path[arrow.path.Count - 1]; + } + + // 路径只有单个点(纯箭头) + if (pathPoints.Count < 2) + { + CreateArrowOnly(arrow, pathPoints[0]); + // ========= 修复1:单点箭头也初始化轨迹索引 ========= + arrow.arrowTrackIndex = 0; + arrow.finalMoveDir = GetDirByRotation(arrow.arrowObj.rotation); + // ========= 修复2:强制记录原始坐标(关键!)========= + arrow.originalArrowPos = new Vector2(arrow.arrowObj.x, arrow.arrowObj.y); return; } - ColorUtility.TryParseHtmlString(arrow.color, out Color lineColor); - List allTilePositions = new List(); - - // 关键:直接用 path 数组判断方向,和配置表完全一致 - for (int i = 0; i < path.Count - 1; i++) + // 生成线条图块 + List tilePositions = new List(); + for (int i = 0; i < pathPoints.Count - 1; i++) { - Vector2 pStart = path[i]; - Vector2 pEnd = path[i + 1]; - string dir = arrow.path[i]; // 直接从配置里取方向 - - float offsetX = 0f; - float offsetY = 0f; - - // 严格按 path 方向设置步长 + Vector2 segStart = pathPoints[i]; + string dir = arrow.path[i]; + float offX = 0, offY = 0; switch (dir) { - case "right": - offsetX = 10f; - break; - case "left": - offsetX = -10f; - break; - case "down": - offsetY = 10f; - break; - case "up": - offsetY = -10f; - break; + case "right": offX = 10; break; + case "left": offX = -10; break; + case "down": offY = 10; break; + case "up": offY = -10; break; } - Vector2 curPos = pStart; - // 生成6个方块,从pStart一直覆盖到pEnd + Vector2 cur = segStart; for (int k = 0; k < 6; k++) { - allTilePositions.Add(curPos); - curPos.x += offsetX; - curPos.y += offsetY; + tilePositions.Add(cur); + cur.x += offX; + cur.y += offY; } } - // 移除最后一个点(终点位置的方块,避免挡住箭头) - if (allTilePositions.Count > 0) - { - allTilePositions.RemoveAt(allTilePositions.Count - 1); - } + if (tilePositions.Count > 0) + tilePositions.RemoveAt(tilePositions.Count - 1); - // 创建所有方块 - foreach (var pos in allTilePositions) + ColorUtility.TryParseHtmlString(arrow.color, out Color lineColor); + for (int i = 0; i < tilePositions.Count; i++) { + Vector2 pos = tilePositions[i]; LineTile unit = LineTile.CreateInstance(); unit.SetPosition(pos.x, pos.y, 0); unit.GetChild("line").asGraph.color = lineColor; unit.visible = true; + unit.touchable = true; + unit.onClick.Add(() => OnPathClick(arrow)); _viewContainer.AddChild(unit); arrow.lineUnits.Add(unit); + arrow.originalLinePos.Add(pos); + arrow.lineTrackIndex.Add(i); } // 创建箭头 - CreateArrowOnly(arrow, path[path.Count - 1]); + CreateArrowOnly(arrow, pathPoints[pathPoints.Count - 1]); + arrow.originalArrowPos = new Vector2(arrow.arrowObj.x, arrow.arrowObj.y); + arrow.arrowTrackIndex = arrow.totalTrack.Count - 1; } - + + // 线条/箭头 统一点击回调 + private void OnPathClick(ArrowConfig clickArrow) + { + if (clickArrow.isMoving) + return; + + clickArrow.isMoving = true; + bool hasBlock = CheckBlockByGrid(clickArrow); + if (hasBlock) + { + MoveThenReset(clickArrow); + } + else + { + MoveToDisappear(clickArrow); + } + } + + // 基于网格行列的阻挡检测 + private bool CheckBlockByGrid(ArrowConfig curArrow) + { + if (_gridOccupied == null || _levelConfig == null) return false; + + // 当前箭头网格行列 + Vector2 arrowPos = new Vector2(curArrow.arrowObj.x, curArrow.arrowObj.y); + int curPointId = GetPointIdByPos(arrowPos, _levelConfig); + PointIdToRowCol(curPointId, _levelConfig.gridCols, out int curRow, out int curCol); + + // 超出网格直接判定无阻挡 + if (curRow < 0 || curRow >= _levelConfig.gridRows || curCol < 0 || curCol >= _levelConfig.gridCols) + return false; + + // 获取移动方向 + string moveDir; + if (curArrow.path != null && curArrow.path.Count > 0) + { + moveDir = curArrow.path[curArrow.path.Count - 1]; + } + else if (!string.IsNullOrEmpty(curArrow.defaultDir)) + { + moveDir = curArrow.defaultDir; + } + else + { + moveDir = "up"; + } + + bool isCollide = false; + // 沿方向遍历前方网格 + switch (moveDir) + { + case "up": + for (int r = curRow - 1; r >= 0; r--) + { + if (_gridOccupied[r, curCol]) + { + isCollide = true; + break; + } + } + break; + case "down": + for (int r = curRow + 1; r < _levelConfig.gridRows; r++) + { + if (_gridOccupied[r, curCol]) + { + isCollide = true; + break; + } + } + break; + case "left": + for (int c = curCol - 1; c >= 0; c--) + { + if (_gridOccupied[curRow, c]) + { + isCollide = true; + break; + } + } + break; + case "right": + for (int c = curCol + 1; c < _levelConfig.gridCols; c++) + { + if (_gridOccupied[curRow, c]) + { + isCollide = true; + break; + } + } + break; + } + + // ========== 新增:碰撞判重 + 扣爱心 ========== + if (isCollide) + { + // 这条线第一次碰撞,才扣血 + if (!_collidedArrows.Contains(curArrow)) + { + _collidedArrows.Add(curArrow); + _heartCount--; + + if (_heartCount > 0) ui.HeartsPanel.GetChild($"xin_{_heartCount+1}").visible = false; + + // 爱心归零 → 失败结算 + if (_heartCount <= 0) + { + ShowResult(false); + } + } + } + + return isCollide; + } + + // 创建箭头 + 绑定点击 private void CreateArrowOnly(ArrowConfig arrow, Vector2 arrowPos) { ArrowEnd arrowIns = ArrowEnd.CreateInstance(); arrowIns.SetPosition(arrowPos.x, arrowPos.y, 0); + arrowIns.touchable = true; - if (arrow.path.Count > 0) + if (arrow.path != null && arrow.path.Count > 0) { string lastDir = arrow.path[arrow.path.Count - 1]; arrowIns.rotation = DirToRotation(lastDir); } - - if (ColorUtility.TryParseHtmlString(arrow.color, out Color arrowColor)) + else if (!string.IsNullOrEmpty(arrow.defaultDir)) { - GImage icon = arrowIns.GetChild("icon").asImage; - if (icon != null) icon.color = arrowColor; + // 纯单点箭头 使用默认方向旋转 + arrowIns.rotation = DirToRotation(arrow.defaultDir); } - arrowIns.visible = true; - _viewContainer.AddChild(arrowIns); - arrowIns.onClick.Add(() => OnArrowClick(arrow)); - arrow.arrowObj = arrowIns; + ColorUtility.TryParseHtmlString(arrow.color, out Color arrowColor); + GImage icon = arrowIns.GetChild("icon").asImage; + if (icon != null) icon.color = arrowColor; + arrowIns.visible = true; + arrowIns.onClick.Add(() => OnPathClick(arrow)); + _viewContainer.AddChild(arrowIns); + + arrow.arrowObj = arrowIns; arrow.isMoving = false; - arrow.targetIndex = arrow.pathPointList.Count - 1; } - /// - /// 两点间距60px,使用10x10方块,生成6个,完整铺满从pStart到pEnd的线段。 - /// 关键:覆盖完整区间,保证拐点无缝衔接。 - /// - private void CreateLineUnitBetweenTwoPoint(Vector2 pStart, Vector2 pEnd, Color lineColor, List lineList) + // 移动后复位动画(回弹,不释放占用) + private void MoveThenReset(ArrowConfig arrow) { - if (_lineUnitTemplate == null) return; + CrazyAsyKit.StartCoroutine(MoveAndResetCoroutine(arrow)); + } - float offsetX = 0f; - float offsetY = 0f; + private IEnumerator MoveAndResetCoroutine(ArrowConfig arrow) + { + float frameDelay = 0.01f; + int stepCount = 2; + int moved = 0; + int trackMaxIndex = arrow.totalTrack.Count - 1; - // 判断方向 - if (Mathf.Abs(pEnd.x - pStart.x) > 1f) + string dir; + if (arrow.path != null && arrow.path.Count > 0) { - offsetX = 10f; + dir = arrow.path[arrow.path.Count - 1]; + } + else if (!string.IsNullOrEmpty(arrow.defaultDir)) + { + dir = arrow.defaultDir; } else { - offsetY = 10f; + dir = "up"; + } + arrow.finalMoveDir = dir; + + while (moved < stepCount) + { + for (int i = 0; i < arrow.lineUnits.Count; i++) + { + int curIdx = arrow.lineTrackIndex[i]; + if (curIdx < trackMaxIndex) + { + curIdx++; + arrow.lineUnits[i].SetPosition(arrow.totalTrack[curIdx].x, arrow.totalTrack[curIdx].y, 0); + arrow.lineTrackIndex[i] = curIdx; + } + else + { + float dx = 0, dy = 0; + switch (arrow.finalMoveDir) + { + case "right": dx = 10; break; + case "left": dx = -10; break; + case "down": dy = 10; break; + case "up": dy = -10; break; + } + arrow.lineUnits[i].x += dx; + arrow.lineUnits[i].y += dy; + } + } + + int arrowIdx = arrow.arrowTrackIndex; + if (arrowIdx < trackMaxIndex) + { + arrowIdx++; + arrow.arrowObj.SetPosition(arrow.totalTrack[arrowIdx].x, arrow.totalTrack[arrowIdx].y, 0); + arrow.arrowTrackIndex = arrowIdx; + } + else + { + float dx = 0, dy = 0; + switch (arrow.finalMoveDir) + { + case "right": dx = 10; break; + case "left": dx = -10; break; + case "down": dy = 10; break; + case "up": dy = -10; break; + } + arrow.arrowObj.x += dx; + arrow.arrowObj.y += dy; + } + + moved++; + yield return new WaitForSeconds(frameDelay); } + // 复位位置 + for (int i = 0; i < arrow.lineUnits.Count; i++) + { + arrow.lineUnits[i].SetPosition(arrow.originalLinePos[i].x, arrow.originalLinePos[i].y, 0); + arrow.lineTrackIndex[i] = i; + } + // 单点/多点箭头统一读取原始坐标复位 + arrow.arrowObj.SetPosition(arrow.originalArrowPos.x, arrow.originalArrowPos.y, 0); + arrow.arrowTrackIndex = arrow.totalTrack.Count - 1; + + arrow.isMoving = false; + } + + private void MoveToDisappear(ArrowConfig arrow) + { + CrazyAsyKit.StartCoroutine(MoveAndDisappearCoroutine(arrow)); + } + + private IEnumerator MoveAndDisappearCoroutine(ArrowConfig arrow) + { + float frameDelay = 0.01f; + int trackMaxIndex = arrow.totalTrack.Count - 1; + + string dir; + if (arrow.path != null && arrow.path.Count > 0) + { + dir = arrow.path[arrow.path.Count - 1]; + } + else if (!string.IsNullOrEmpty(arrow.defaultDir)) + { + dir = arrow.defaultDir; + } + else + { + dir = "up"; + } + arrow.finalMoveDir = dir; + + while (true) + { + // 线条移动 + for (int i = 0; i < arrow.lineUnits.Count; i++) + { + int curIdx = arrow.lineTrackIndex[i]; + if (curIdx < trackMaxIndex) + { + curIdx++; + arrow.lineUnits[i].SetPosition(arrow.totalTrack[curIdx].x, arrow.totalTrack[curIdx].y, 0); + arrow.lineTrackIndex[i] = curIdx; + } + else + { + float dx = 0, dy = 0; + switch (arrow.finalMoveDir) + { + case "right": dx = 10; break; + case "left": dx = -10; break; + case "down": dy = 10; break; + case "up": dy = -10; break; + } + arrow.lineUnits[i].x += dx; + arrow.lineUnits[i].y += dy; + } + } + + // 箭头移动 + int arrowIdx = arrow.arrowTrackIndex; + if (arrowIdx < trackMaxIndex) + { + arrowIdx++; + arrow.arrowObj.SetPosition(arrow.totalTrack[arrowIdx].x, arrow.totalTrack[arrowIdx].y, 0); + arrow.arrowTrackIndex = arrowIdx; + } + else + { + float dx = 0, dy = 0; + switch (arrow.finalMoveDir) + { + case "right": dx = 10; break; + case "left": dx = -10; break; + case "down": dy = 10; break; + case "up": dy = -10; break; + } + arrow.arrowObj.x += dx; + arrow.arrowObj.y += dy; + } + + // 边界判断 + float curX = arrow.arrowObj.x; + float curY = arrow.arrowObj.y; + bool isOut = false; + switch (arrow.finalMoveDir) + { + case "right": + if (curX > gridRight + outOffset) isOut = true; + break; + case "left": + if (curX < gridLeft - outOffset) isOut = true; + break; + case "down": + if (curY > gridBottom + outOffset) isOut = true; + break; + case "up": + if (curY < gridTop - outOffset) isOut = true; + break; + } + + if (isOut) + { + // 箭头移出屏幕,释放网格占用 + ReleaseArrowOccupied(arrow); + + // 隐藏视图 + foreach (var line in arrow.lineUnits) + line.visible = false; + arrow.arrowObj.visible = false; + arrow.isMoving = false; + + // ========== 新增:存活箭头-1,判断全部移除 ========== + _remainArrowCount--; + if (_remainArrowCount <= 0) + { + ShowResult(true); + } + + yield break; + } + + yield return new WaitForSeconds(frameDelay); + } + } + + private void CreateLineUnitBetweenTwoPoint(Vector2 pStart, Vector2 pEnd, Color lineColor, List lineList) + { + if (_lineUnitTemplate == null) return; + float offsetX = 0f; + float offsetY = 0f; + + if (Mathf.Abs(pEnd.x - pStart.x) > 1f) + offsetX = 10f; + else + offsetY = 10f; + Vector2 curPos = pStart; - // 循环6次,生成6个方块,从pStart一直覆盖到pEnd for (int i = 0; i < 6; i++) { LineTile unit = LineTile.CreateInstance(); @@ -369,7 +859,6 @@ namespace ChillConnect if (!arrow.isMoving) return; List path = arrow.pathPointList; - // 全部走完,隐藏对象 if (arrow.targetIndex < 0) { arrow.isMoving = false; @@ -382,24 +871,20 @@ namespace ChillConnect Vector2 curPos = new Vector2(arrow.arrowObj.x, arrow.arrowObj.y); float distance = Vector2.Distance(curPos, targetPos); - // 到达当前点位,切换下一个目标 if (distance < 2f) { arrow.targetIndex--; } else { - // 向目标移动 Vector2 dir = (targetPos - curPos).normalized; Vector2 newPos = curPos + dir * _moveSpeed * Time.deltaTime; - arrow.arrowObj.SetPosition(newPos.x, newPos.y,0); + arrow.arrowObj.SetPosition(newPos.x, newPos.y, 0); } - // 刷新线条显隐 RefreshLineVisible(arrow); } - /// 逐段控制显隐,每段固定6个方块 private void RefreshLineVisible(ArrowConfig arrow) { int segIndex = 0; @@ -439,14 +924,63 @@ namespace ChillConnect } } #endregion + + /// + /// 弹出结算 + /// isSuccess: true=成功,false=失败 + /// + private void ShowResult(bool isSuccess) + { + // 暂停所有交互/移动(可选) + foreach (var arrow in _levelConfig.arrows) + { + arrow.isMoving = false; + } + + uiCtrlDispatcher.Dispatch(UICtrlMsg.LevelSuccessUI_Open, isSuccess); + } + + // 重新开始本局 + private void OnRestartGame(object a = null) + { + if (a!=null && (bool)a) + { + _heartCount = 3; + for (int i = _heartCount; i > 0; i--) + { + ui.HeartsPanel.GetChild($"xin_{i}").visible = true; + } + return; + } + + // 先清空当前所有动态物体 + ClearAllDynamicObj(); + // 重新走初始化流程 + InitGridBounds(); + InitGridOccupied(); + _heartCount = 3; + _collidedArrows.Clear(); + _remainArrowCount = _levelConfig.arrows.Count; + DataMgr.ArrowResultLevel.Value = 1; + InitView(); + } + #region 消息监听 - protected override void AddListener() { } - protected override void RemoveListener() { } + protected override void AddListener() + { + GameDispatcher.Instance.AddListener(GameMsg.reset_game, OnRestartGame); + + } + + protected override void RemoveListener() + { + GameDispatcher.Instance.RemoveListener(GameMsg.reset_game, OnRestartGame); + } #endregion } - - #region 配置解析 & 数据结构(完全保留不变) + + #region 配置解析 & 数据结构 public static class JsonHelper { public static LevelConfig LoadLevel(string fileName) @@ -455,9 +989,7 @@ namespace ChillConnect return JsonUtility.FromJson(File.ReadAllText(path)); } } - #endregion - #region 配置解析 & 数据结构(保留原有定义) [System.Serializable] public class LevelConfig { @@ -465,7 +997,7 @@ namespace ChillConnect public string levelName; public int gridRows; public int gridCols; - public int pointSpacing; // 配置内此字段仅保留兼容,实际间距以代码 60px 为准 + public int pointSpacing; public List arrows; } @@ -478,12 +1010,20 @@ namespace ChillConnect public string color; public List path; - // 运行时数据 - public List pathPointList; // 整条路径所有点位坐标 + public string defaultDir; + public List pathPointList; + public List lineUnits; public GComponent arrowObj; - public List lineUnits; // 所有线条方块预制体 + public bool isMoving; + public List originalLinePos; + public Vector2 originalArrowPos; public int targetIndex; + + public List totalTrack; + public List lineTrackIndex; + public int arrowTrackIndex; + public string finalMoveDir; } #endregion } \ No newline at end of file diff --git a/Assets/Scripts/ModuleUI/GameAgain.meta b/Assets/Scripts/ModuleUI/GameAgain.meta new file mode 100644 index 0000000..0bdfa4e --- /dev/null +++ b/Assets/Scripts/ModuleUI/GameAgain.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2b9195d2166c47ca81e3c38917b2729a +timeCreated: 1781331027 \ No newline at end of file diff --git a/Assets/Scripts/ModuleUI/GameAgain/GameAgainCtrl.cs b/Assets/Scripts/ModuleUI/GameAgain/GameAgainCtrl.cs new file mode 100644 index 0000000..0bbdcfb --- /dev/null +++ b/Assets/Scripts/ModuleUI/GameAgain/GameAgainCtrl.cs @@ -0,0 +1,41 @@ +namespace ChillConnect +{ + public class GameAgainCtrl : BaseCtrl + { + public static GameAgainCtrl Instance { get; private set; } + + private GameAgainModel model; + + #region 生命周期 + protected override void OnInit() + { + Instance = this; + } + + protected override void OnDispose() + { + Instance = null; + } + #endregion + + #region 消息 + protected override void RemoveListener() + { + + } + + protected override void AddServerListener() + { + + } + protected override void AddListener() + { + + } + protected override void RemoveServerListener() + { + + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/Scripts/ModuleUI/GameAgain/GameAgainCtrl.cs.meta b/Assets/Scripts/ModuleUI/GameAgain/GameAgainCtrl.cs.meta new file mode 100644 index 0000000..e32288d --- /dev/null +++ b/Assets/Scripts/ModuleUI/GameAgain/GameAgainCtrl.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: cee917424e204aeeb572fbd21d9a216a +timeCreated: 1781331027 \ No newline at end of file diff --git a/Assets/Scripts/ModuleUI/GameAgain/GameAgainModel.cs b/Assets/Scripts/ModuleUI/GameAgain/GameAgainModel.cs new file mode 100644 index 0000000..ce96297 --- /dev/null +++ b/Assets/Scripts/ModuleUI/GameAgain/GameAgainModel.cs @@ -0,0 +1,43 @@ +namespace ChillConnect +{ + public class GameAgainModel : BaseModel + { + #region 生命周期 + protected override void OnInit() + { + } + + protected override void OnDispose() + { + } + + // protected override void OnReset() + // { + // } + // #endregion + + // #region 读取数据 + // protected override void OnReadData() + // { + // } + // #endregion + + // #region 本地存储 + // protected override void WriteLocalStorage() + // { + + // } + #endregion + + #region 消息 + protected override void AddListener() + { + + } + protected override void RemoveListener() + { + + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/Scripts/ModuleUI/GameAgain/GameAgainModel.cs.meta b/Assets/Scripts/ModuleUI/GameAgain/GameAgainModel.cs.meta new file mode 100644 index 0000000..24c151f --- /dev/null +++ b/Assets/Scripts/ModuleUI/GameAgain/GameAgainModel.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ba9f90a8f17245beb5fb93275fb663af +timeCreated: 1781331027 \ No newline at end of file diff --git a/Assets/Scripts/ModuleUI/GameAgain/GameAgainUI.cs b/Assets/Scripts/ModuleUI/GameAgain/GameAgainUI.cs new file mode 100644 index 0000000..20538a1 --- /dev/null +++ b/Assets/Scripts/ModuleUI/GameAgain/GameAgainUI.cs @@ -0,0 +1,91 @@ +using System; +using FGUI.GameResult_08; +using UnityEngine; + +namespace ChillConnect +{ + public class GameAgainUI : BaseUI + { + private GameAgainUICtrl ctrl; + private GameAgainModel model; + private com_arrow_end_again ui; + + private Action closeCallback; + + + public GameAgainUI(GameAgainUICtrl ctrl) : base(ctrl) + { + uiName = UIConst.GameAgainUI; + this.ctrl = ctrl; + } + + protected override void SetUIInfo(UIInfo uiInfo) + { + uiInfo.packageName = "GameResult_08"; + uiInfo.assetName = "com_arrow_end_again"; + uiInfo.layerType = UILayerType.Popup; + uiInfo.isNeedOpenAnim = true; + uiInfo.isNeedCloseAnim = true; + uiInfo.isNeedUIMask = true; + } + + #region 生命周期 + + protected override void OnInit() + { + //model = ModuleManager.Instance.GetModel(ModelConst.GameResultModel) as GameResultModel; + } + + protected override void OnClose() + { + + } + // + protected override void OnBind() + { + ui = baseUI as com_arrow_end_again; + } + private SuccessData successData_; + + protected override void OnOpenBefore(object args) + { + ui.btn_restart.SetClick(() => + { + UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.LevelSuccessUI_Open); + CtrlCloseUI(); + + }); + + ui.btn_back.SetClick(() => + { + + GameDispatcher.Instance.Dispatch(GameMsg.reset_game, false); + CtrlCloseUI(); + }); + } + + protected override void OnOpen(object args) + { + } + + protected override void OnHide() + { + } + + protected override void OnDisplay(object args) + { + } + #endregion + + #region 消息 + protected override void AddListener() + { + } + protected override void RemoveListener() + { + } + #endregion + private int time_count; + + } +} diff --git a/Assets/Scripts/ModuleUI/GameAgain/GameAgainUI.cs.meta b/Assets/Scripts/ModuleUI/GameAgain/GameAgainUI.cs.meta new file mode 100644 index 0000000..7c1b57c --- /dev/null +++ b/Assets/Scripts/ModuleUI/GameAgain/GameAgainUI.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: cb749d47d61d49feb70387124d69b69f +timeCreated: 1781331027 \ No newline at end of file diff --git a/Assets/Scripts/ModuleUI/GameAgain/GameAgainUICtrl.cs b/Assets/Scripts/ModuleUI/GameAgain/GameAgainUICtrl.cs new file mode 100644 index 0000000..b4fb72e --- /dev/null +++ b/Assets/Scripts/ModuleUI/GameAgain/GameAgainUICtrl.cs @@ -0,0 +1,87 @@ +using DG.Tweening; + +namespace ChillConnect +{ + public class GameAgainUICtrl : BaseUICtrl + { + private GameAgainUI ui; + private GameAgainModel model; + + private uint openUIMsg = UICtrlMsg.GameAgainUI_Open; + private uint closeUIMsg = UICtrlMsg.GameAgainUI_Close; + + #region 生命周期 + protected override void OnInit() + { + //model = ModuleManager.Instance.GetModel(ModelConst.GameResultModel) as GameResultModel; + } + + protected override void OnDispose() + { + } + + private object m_data; + public override void OpenUI(object args = null) + { + if (ui == null) + { + ui = new GameAgainUI(this); + ui.Open(args); + } + else + { + m_data ??= args; + } + } + + public override void CloseUI(object args = null) + { + if (ui != null && !ui.isClose) + { + ui.Close(); + } + ui = null; + + if (m_data != null) + { + DOVirtual.DelayedCall(0.2f, () => + { + OpenUI(m_data); + m_data = null; + }); + } + } + #endregion + + #region 消息 + public override uint GetOpenUIMsg(string uiName) + { + return openUIMsg; + } + public override uint GetCloseUIMsg(string uiName) + { + return closeUIMsg; + } + + protected override void AddListener() + { + uiCtrlDispatcher.AddListener(openUIMsg, OpenUI); + uiCtrlDispatcher.AddListener(closeUIMsg, CloseUI); + } + protected override void RemoveListener() + { + uiCtrlDispatcher.RemoveListener(openUIMsg, OpenUI); + uiCtrlDispatcher.RemoveListener(closeUIMsg, CloseUI); + } + + protected override void AddServerListener() + { + + } + protected override void RemoveServerListener() + { + + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/Scripts/ModuleUI/GameAgain/GameAgainUICtrl.cs.meta b/Assets/Scripts/ModuleUI/GameAgain/GameAgainUICtrl.cs.meta new file mode 100644 index 0000000..77b40b4 --- /dev/null +++ b/Assets/Scripts/ModuleUI/GameAgain/GameAgainUICtrl.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b83d7c197169420da4fb3e79d330a74d +timeCreated: 1781331027 \ No newline at end of file diff --git a/Assets/Scripts/ModuleUI/GameResult/GameResultUI.cs b/Assets/Scripts/ModuleUI/GameResult/GameResultUI.cs index f0ca7dc..8228720 100644 --- a/Assets/Scripts/ModuleUI/GameResult/GameResultUI.cs +++ b/Assets/Scripts/ModuleUI/GameResult/GameResultUI.cs @@ -10,6 +10,7 @@ using IgnoreOPS; using Newtonsoft.Json; using Spine.Unity; using UnityEngine; +using btn_claim = FGUI.Common_01.btn_claim; using Random = UnityEngine.Random; namespace ChillConnect @@ -18,15 +19,10 @@ namespace ChillConnect { private GameResultUICtrl ctrl; private GameResultModel model; - private com_end ui; - private bool IsWin; - private bool IsLevelSuccess; - private bool IsH5Reward; - - private float AwardNum = 20; + private com_arrow_end ui; + private Action closeCallback; - - private int AwardRate = 10; + public GameResultUI(GameResultUICtrl ctrl) : base(ctrl) { @@ -37,10 +33,10 @@ namespace ChillConnect protected override void SetUIInfo(UIInfo uiInfo) { uiInfo.packageName = "GameResult_08"; - uiInfo.assetName = "com_end"; + uiInfo.assetName = "com_arrow_end"; uiInfo.layerType = UILayerType.Popup; - uiInfo.isNeedOpenAnim = false; - uiInfo.isNeedCloseAnim = false; + uiInfo.isNeedOpenAnim = true; + uiInfo.isNeedCloseAnim = true; uiInfo.isNeedUIMask = true; } @@ -53,282 +49,48 @@ namespace ChillConnect protected override void OnClose() { - GameHelper.SetCloseResult(false); - closeCallback?.Invoke(); - if (IsLevelSuccess && !GameHelper.is_first_login) - UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.OpenGameUI_Open, true); - - } // protected override void OnBind() { - ui = baseUI as com_end; + ui = baseUI as com_arrow_end; } private SuccessData successData_; + protected override void OnOpenBefore(object args) { - if (Screen.safeArea.y != 0) - {//刘海屏 - ui.btn_gold.y += 68; - } - - var anim_paly = FXManager.Instance.SetFx(ui.btn_gold.GetChild("gold_anim") as GGraph, Fx_Type.fx_coin, ref closeCallback); - anim_paly.state.SetAnimation(0, "animation", true); - (ui.top_money as com_money).btn_ch.title = GameHelper.getDesByKey("ch_out_1"); - if (GameHelper.IsGiftSwitch()) - ui.switchgift.selectedIndex = 1; - - ui.tips_text.text = GameHelper.getDesByKey("ww_condition_lv"); - SuccessData SuccessDatas = args as SuccessData; - AwardNum = SuccessDatas.cash_number; - AwardRate = SuccessDatas.rate; - IsWin = SuccessDatas.IsWin; - - IsLevelSuccess = SuccessDatas.IsLevelSuccess; - IsH5Reward = SuccessDatas.IsH5Reward; - - successData_ = SuccessDatas; - if (!GameHelper.IsGiftSwitch()) - { - successData_.cash_number = (int)successData_.cash_number; - successData_.rate = 2; - } - if (IsLevelSuccess && !IsH5Reward) - { - UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.PayloadingUI_Open); - - GameHelper.PlayGameTimeEvent(1, () => + ((btn_claim)ui.btn_watchAd).state.selectedIndex = DataMgr.ArrowResultLevel.Value == 1 ? 1 : 0; + ((btn_claim)ui.btn_watchAd).title = DataMgr.ArrowResultLevel.Value == 1 ? "Free Revive" : "Revive"; + + ui.btn_watchAd.SetClick(() => + { + if (DataMgr.ArrowResultLevel.Value == 1) { - GameHelper.RequestGameConfig(); - }); - } - else - { - GameHelper.SetCloseResult(true); - } - if (!GameHelper.IsGiftSwitch()) - { - AwardNum = 20; - AwardRate = 2; - ui.btn_claim.title = "Claim(" + AwardNum + ")"; - } - else ui.btn_claim.title = "Claim(" + GameHelper.getChString((decimal)AwardNum) + ")"; - if (IsWin) - { - if (PlayerPrefs.GetFloat("soundVolume", 1.0f) > 0f) + DataMgr.ArrowResultLevel.Value = 0; + GameDispatcher.Instance.Dispatch(GameMsg.reset_game, true); + } + else if (DataMgr.ArrowResultLevel.Value == 0) { - AudioManager.Instance.PlayDynamicEffect(AudioConst.Victoriously); + GameHelper.ShowVideoAd("gameResult", success => + { + if (success) + { + GameDispatcher.Instance.Dispatch(GameMsg.reset_game, true); + } + }); } - - } - if (IsWin) - { - ui.win_lose.selectedIndex = ui._Win_lose_win; - } - else - { - ui.win_lose.selectedIndex = ui._Win_lose_lose; - ui.lab_lose_des.text = GameHelper.getDesByKey("game_resulte_1"); - } + CtrlCloseUI(); + }); + + ui.btn_restart.SetClick(() => { - if (!GameHelper.GetCloseResult()) - return; - GameHelper.addInterAdnumber(); - if (!IsWin) - { - GameHelper.SetLevelstate(3); - UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.OpenGameUI_Open, true); - GameDispatcher.Instance.Dispatch(GameMsg.sendLog, false); - GameDispatcher.Instance.Dispatch(GameMsg.reset_game, false); - } - UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.LevelSuccessUI_Close); - }); - - ui.btn_mult.GetChild("title").text = "Claim X" + AwardRate; - - if (SuccessDatas.IsH5Reward) - ui.com_ch.visible = false; - InitView(); - if (IsWin) - { - if (GameHelper.IsGiftSwitch()) - ui.text_award.text = GameHelper.Get102Str((decimal)AwardNum); - else - ui.text_award.text = ((int)AwardNum).ToString(); - - - var sk = FXManager.Instance.SetFx(ui.bg_parent, Fx_Type.fx_win, ref closeCallback); - sk.state.SetAnimation(0, "out", true); - - var sk1 = FXManager.Instance.SetFx(ui.bg_parent_title, Fx_Type.fx_winstar, ref closeCallback); - sk1.state.SetAnimation(0, "animation", false); - - } - else - { - // var sk1 = FXManager.Instance.SetFx(ui.bg_parent_fail, Fx_Type.fx_fail, ref closeCallback); - // sk1.state.SetAnimation(0, "animation", true); - - if (GameHelper.IsGiftSwitch()) - ui.text_award.text = GameHelper.Get102Str(DataMgr.Ticket.Value); - else - ui.text_award.text = DataMgr.Coin.Value.ToString(); - } - ui.com_ch.btn_cash.title = GameHelper.getDesByKey("ch_out_1"); - // if (IsWin) - // { - // if (GameHelper.IsGiftSwitch()) ui.text_award.text = GameHelper.Get102Str((decimal)AwardNum); - // else ui.text_award.text = ((int)AwardNum).ToString(); - - // var sk = FXManager.Instance.SetFx(ui.bg_parent, Fx_Type.fx_win, ref closeCallback); - // sk.state.SetAnimation(0, "out", true); - - // var sk1 = FXManager.Instance.SetFx(ui.bg_parent_title, Fx_Type.fx_win_title, ref closeCallback); - // sk1.state.SetAnimation(0, "animation", false); - - // } - // else - // { - - // if (GameHelper.IsGiftSwitch()) ui.text_award.text = GameHelper.Get102Str(DataMgr.Ticket.Value); - // else ui.text_award.text = DataMgr.Coin.Value.ToString(); - // } - - - - if (GameHelper.IsGiftSwitch()) - { - if (SaveData.GetSaveObject().LargeRewardNum < ConfigSystem.GetConfig().FreeClaims) - { - (ui.btn_mult as btn_claim3).state.selectedIndex = 1; - } - else if (ConfigSystem.GetConfig().PiggyBankSwitch == 1) - { - (ui.btn_mult.GetChild("img_saveingpot") as GImage).visible = true; - } - } - ui.btn_gold.GetChild("text_gold").text = $"{DataMgr.Coin.Value:N0}"; - ui.top_money.GetChild("text_gold").text = DataMgr.Ticket.Value.ToString(); - ui.btn_mult.SetClick(() => - { - if (!GameHelper.GetCloseResult()) - return; - if (GameHelper.IsGiftSwitch()) - { - if (SaveData.GetSaveObject().LargeRewardNum < ConfigSystem.GetConfig().FreeClaims) - { - ui.com_ch.btn_cash.SetClick(() => { }); - ui.btn_claim.SetClick(() => { }); - ui.btn_mult.SetClick(() => { }); - StartScroll(); - } - else - { - GameHelper.ShowVideoAd("reward_lobby", isSuccess => - { - if (isSuccess) - { - ui.com_ch.btn_cash.SetClick(() => { }); - ui.btn_claim.SetClick(() => { }); - ui.btn_mult.SetClick(() => { }); - StartScroll(); - } - }); - } - } - else - { - - GameHelper.ShowVideoAd("reward_lobby", isSuccess => - { - if (isSuccess) - { - ui.com_ch.btn_cash.SetClick(() => { }); - ui.btn_claim.SetClick(() => { }); - ui.btn_mult.SetClick(() => { }); - GetReward(AwardNum * 2); - } - }); - - } - - }); - ui.btn_claim.SetClick(() => - { - if (!GameHelper.GetCloseResult()) - return; - - ui.com_ch.btn_cash.SetClick(() => { }); - ui.btn_claim.SetClick(() => { }); - ui.btn_mult.SetClick(() => { }); - GetReward(AwardNum); - DOVirtual.DelayedCall(2f, () => - { - GameHelper.addInterAdnumber(); - }); - }); - //} - } - private bool isget; - private void GetReward(float awardNum) - { - if (isget) - return; - isget = true; - var rewardData = new RewardData(); - - int curr_type = 101; - Vector2 end_ = GameHelper.GetUICenterPosition(ui.btn_gold, true); - - if (GameHelper.IsGiftSwitch()) - { - curr_type = 102; - end_ = GameHelper.GetUICenterPosition(ui.top_money, true); - - } - var rewardSingleData = new RewardSingleData(curr_type, (decimal)awardNum, RewardOrigin.Play) - { - startPosition = GameHelper.GetUICenterPosition(ui.btn_mult, true), - endPosition = new Vector2(end_.x - 110, end_.y - 110), - }; - - rewardData.AddReward(rewardSingleData); - rewardData.displayType = RewardDisplayType.RewardFly | RewardDisplayType.ValueChange; - rewardData.AddCompleted(success => - { - if (success) - { - // RefreshGold((decimal)awardNum); - - DOVirtual.DelayedCall(0.7f, () => - { - CtrlCloseUI(); - // if (IsLevelSuccess) UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.OpenGameUI_Open, true); - }); - } - }); - - GameDispatcher.Instance.Dispatch(GameMsg.GetReward, rewardData); - DOVirtual.DelayedCall(1, () => - { - DOVirtual.Float(0, (float)DataMgr.Ticket.Value, 1, - value => { ui.top_money.GetChild("text_gold").text = ((decimal)value).ToString("0.00"); }); + UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.GameAgainUI_Open); + CtrlCloseUI(); }); } - - private void RefreshGold(decimal coin = -1) - { - if (coin < 0) - { - coin = DataMgr.Coin.Value; - } - var btnCoin = ui.btn_gold as com_gold; - - CommonHelper.ShowNumAnim(btnCoin.text_gold, coin); - } + protected override void OnOpen(object args) { } @@ -345,357 +107,12 @@ namespace ChillConnect #region 消息 protected override void AddListener() { - HallManager.Instance.UpdateSecondEvent += timeEvent; } protected override void RemoveListener() { - HallManager.Instance.UpdateSecondEvent -= timeEvent; } #endregion private int time_count; - void timeEvent() - { - time_count++; - - if (time_count > 3) - { - time_count = 0; - ui.com_ch.broad.t0.Play(() => - { - var name_index = Random.Range(0, ConfigSystem.GetConfig().config_name_list.Count); - var money_index = Random.Range(0, ConfigSystem.GetConfig().config_money_list.Count); - - DateTime oldtime = DateTime.Now.AddSeconds(-Random.Range(1 * 3600, 2 * 3600)); - - // ui.com_ch.broad.cast_text.text = string.Format("Congratulations, [color=#dfad42]{0}[/color] withdrew [color=#90c04e]{1} [/color]dollars", ConfigSystem.GetConfig().config_name_list[name_index], - // ConfigSystem.GetConfig().config_money_list[money_index]); - string broad_text = String.Format(GameHelper.getDesByKey("makeup_5"), ConfigSystem.GetConfig().config_name_list[name_index], - ConfigSystem.GetConfig().config_money_list[money_index]); - ui.com_ch.broad.cast_text.text = broad_text; - - //, oldtime.Hour + ":" + (oldtime.Minute > 10 ? oldtime.Minute : "0" + oldtime.Minute) - ui.com_ch.broad.t1.Play(); - }); - } - } - //初始化页面逻辑 - private void InitView() - { - if (Screen.safeArea.y != 0) - {//刘海屏 - ui.top_group.y += 68; - } - closeCallback = null; - if (!GameHelper.IsGiftSwitch()) - return; - var name_index = Random.Range(0, ConfigSystem.GetConfig().config_name_list.Count); - var money_index = Random.Range(0, ConfigSystem.GetConfig().config_money_list.Count); - // ui.com_ch.broad.cast_text.text = string.Format("Congratulations, [color=#dfad42]{0}[/color] withdrew [color=#90c04e]{1} [/color]dollars", ConfigSystem.GetConfig().config_name_list[name_index], - // ConfigSystem.GetConfig().config_money_list[money_index]); - string broad_text = String.Format(GameHelper.getDesByKey("makeup_5"), ConfigSystem.GetConfig().config_name_list[name_index], - ConfigSystem.GetConfig().config_money_list[money_index]); - ui.com_ch.broad.cast_text.text = broad_text; - if (DataMgr.MakeupTaskHistory.Value.Count == 0) - { - return; - } - var makeupTaskData = DataMgr.MakeupTaskHistory.Value.Last(); - var vo = ConfigSystem.GetConfig().GetData(makeupTaskData.tableId); - - ui.com_ch.btn_cash.SetClick(() => - { - if (!GameHelper.GetCloseResult()) - return; - - ui.btn_claim.SetClick(() => { }); - ui.btn_mult.SetClick(() => { }); - ui.com_ch.btn_cash.SetClick(() => { }); - ui.top_money.GetChild("btn_ch").SetClick(() => { }); - if (IsWin) - { - //ui.btn_claim.FireClick(false, true); - GetReward(AwardNum); - DOVirtual.DelayedCall(2f, () => - { - GameHelper.addInterAdnumber(); - uiCtrlDispatcher.Dispatch(UICtrlMsg.MakeupConfirmUI_Open, makeupTaskData); - UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.LevelSuccessUI_Close); - }); - - } - else - { - GameHelper.addInterAdnumber(); - if (!IsWin) - GameHelper.SetLevelstate(3); - uiCtrlDispatcher.Dispatch(UICtrlMsg.MakeupConfirmUI_Open, makeupTaskData); - UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.LevelSuccessUI_Close); - GameDispatcher.Instance.Dispatch(GameMsg.reset_game, false); - - } - // ui.btn_claim.enabled = false; - // ui.btn_mult.enabled = false; - - }); - - ui.top_money.GetChild("btn_ch").SetClick(() => - { - ui.btn_claim.SetClick(() => { }); - ui.btn_mult.SetClick(() => { }); - ui.com_ch.btn_cash.SetClick(() => { }); - ui.top_money.GetChild("btn_ch").SetClick(() => { }); - if (IsWin) - { - //ui.btn_claim.FireClick(false, true); - GetReward(AwardNum); - DOVirtual.DelayedCall(2f, () => - { - GameHelper.addInterAdnumber(); - uiCtrlDispatcher.Dispatch(UICtrlMsg.MakeupConfirmUI_Open, makeupTaskData); - UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.LevelSuccessUI_Close); - }); - - } - else - { - GameHelper.addInterAdnumber(); - if (!IsWin) - GameHelper.SetLevelstate(3); - uiCtrlDispatcher.Dispatch(UICtrlMsg.MakeupConfirmUI_Open, makeupTaskData); - UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.LevelSuccessUI_Close); - } - }); - - - - - - if ((float)DataMgr.Ticket.Value < vo.item_need) - { - string str = string.Format(GameHelper.getDesByKey("makeup_2"), vo.item_need); - ui.com_ch.ch_text.text = str; - if ((float)DataMgr.Ticket.Value > vo.item_need) - { - ui.com_ch.progress.width = 656; - ui.com_ch.progress_text.text = GameHelper.Get102Str(vo.item_need) + "/" + GameHelper.Get102Str(vo.item_need); - } - else - { - ui.com_ch.progress.width = 656 * ((float)DataMgr.Ticket.Value / vo.item_need); - ui.com_ch.progress_text.text = GameHelper.Get102Str(DataMgr.Ticket.Value) + "/" + GameHelper.Get102Str(vo.item_need); - } - - Debug.Log((float)DataMgr.Ticket.Value); - } - // else if ((float)DataMgr.MakeupTaskH5Time < vo.task_need) - // { - // ui.com_ch.ch_text.text = "Cumulataive " + (vo.task_need / 60) + @" minutes in ""Game"" to cash out"; - // if ((float)DataMgr.MakeupTaskH5Time > vo.task_need) - // { - // ui.com_ch.progress.width = 656; - // ui.com_ch.progress_text.text = (vo.task_need / 60) + "/" + (vo.task_need / 60); - // } - // else - // { - // ui.com_ch.progress.width = 656 * ((float)DataMgr.MakeupTaskH5Time / vo.task_need); - // ui.com_ch.progress_text.text = Math.Round(((float)(DataMgr.MakeupTaskH5Time / 60)), 2) + "/" + (vo.task_need / 60); - // } - // - // } - else if (makeupTaskData.videoCount < vo.ad_need) - { - - string str = string.Format(GameHelper.getDesByKey("makeup_1"), vo.ad_need); - ui.com_ch.ch_text.text = str; - if (makeupTaskData.videoCount > vo.ad_need) - { - ui.com_ch.progress.width = 656; - ui.com_ch.progress_text.text = vo.ad_need + "/" + vo.ad_need; - } - else - { - ui.com_ch.progress.width = 656 * ((float)makeupTaskData.videoCount / vo.ad_need); - ui.com_ch.progress_text.text = makeupTaskData.videoCount + "/" + vo.ad_need; - } - } - else if (GameHelper.GetLevel() <= vo.levels_need) - { - string str = string.Format(GameHelper.getDesByKey("makeup_3"), vo.levels_need); - ui.com_ch.ch_text.text = str; - ui.com_ch.progress.width = 656 * (GameHelper.GetLevel() - 1) / vo.levels_need; - ui.com_ch.progress_text.text = (GameHelper.GetLevel() - 1) + "/" + vo.levels_need; - } - else - { - var vo1 = ConfigSystem.GetConfig().GetData(makeupTaskData.tableId + 1); - if (vo1 == null) - vo1 = vo; - string str1 = string.Format(GameHelper.getDesByKey("makeup_2"), vo1.item_need); - ui.com_ch.ch_text.text = str1; - - if ((float)(DataMgr.Ticket.Value - vo.item_need) < vo1.item_need) - { - string str = string.Format(GameHelper.getDesByKey("makeup_2"), vo1.item_need); - ui.com_ch.ch_text.text = str; - - ui.com_ch.progress.width = 656f * ((float)(DataMgr.Ticket.Value - vo.item_need) / vo1.item_need); - ui.com_ch.progress_text.text = GameHelper.Get102Str((DataMgr.Ticket.Value - vo.item_need)) + "/" + GameHelper.Get102Str(vo1.item_need); - - - // Debug.Log((float)DataMgr.Ticket.Value); - } - else if (makeupTaskData.videoCount < vo1.ad_need) - { - - string str = string.Format(GameHelper.getDesByKey("makeup_1"), vo1.ad_need); - ui.com_ch.ch_text.text = str; - if (makeupTaskData.videoCount > vo1.ad_need) - { - ui.com_ch.progress.width = 656f; - ui.com_ch.progress_text.text = vo1.ad_need + "/" + vo1.ad_need; - } - else - { - ui.com_ch.progress.width = 656f * ((float)makeupTaskData.videoCount / vo1.ad_need); - ui.com_ch.progress_text.text = makeupTaskData.videoCount + "/" + vo1.ad_need; - } - } - else if (GameHelper.GetLevel() <= vo1.levels_need) - { - string str = string.Format(GameHelper.getDesByKey("makeup_3"), vo1.levels_need); - ui.com_ch.ch_text.text = str; - ui.com_ch.progress.width = 656f * (GameHelper.GetLevel() - 1) / vo1.levels_need; - ui.com_ch.progress_text.text = (GameHelper.GetLevel() - 1) + "/" + vo1.levels_need; - } - - else - { - - string str = string.Format(GameHelper.getDesByKey("makeup_3"), vo1.levels_need); - ui.com_ch.ch_text.text = str; - ui.com_ch.progress.width = 656f * (GameHelper.GetLevel() - 1) / vo1.levels_need; - if (GameHelper.GetLevel() > vo1.levels_need) - { - ui.com_ch.progress.width = 656f; - ui.com_ch.progress_text.text = vo1.levels_need + "/" + vo1.levels_need; - } - else - { - ui.com_ch.progress.width = 590f * (GameHelper.GetLevel() - 1) / vo1.levels_need; - ui.com_ch.progress_text.text = (GameHelper.GetLevel() - 1) + "/" + vo1.levels_need; - } - - } - - - } - if (successData_.boost_array != null && GameHelper.IsGiftSwitch()) - { - (ui.wheel.GetChild("wheel_") as wheel_).t0.Play(Scroll); - (ui.wheel.GetChild("wheel_") as wheel_).t1.Play(() => - { - rate_idnex++; - ui.btn_mult.title = "(" + GameHelper.getChString((decimal)successData_.cash_number * successData_.boost_array[rate_idnex % 5]) + ")"; - }); - ui.btn_mult.title = "(" + GameHelper.getChString((decimal)successData_.cash_number * successData_.boost_array[rate_idnex]) + ")"; - - list_1 = new List() { (ui.wheel.GetChild("wheel_") as wheel_).item_0, (ui.wheel.GetChild("wheel_") as wheel_).item_1, (ui.wheel.GetChild("wheel_") as wheel_).item_2, (ui.wheel.GetChild("wheel_") as wheel_).item_3, (ui.wheel.GetChild("wheel_") as wheel_).item_4, (ui.wheel.GetChild("wheel_") as wheel_).item_5, (ui.wheel.GetChild("wheel_") as wheel_).item_6, (ui.wheel.GetChild("wheel_") as wheel_).item_7, }; - // list_1[2].img_light.visible = true; - - for (int i = 0; i < list_1.Count; i++) - { - list_1[i].type.selectedIndex = (i + scroll_number) % 3; - list_1[i].text_rate.text = "X" + successData_.boost_array[i % successData_.boost_array.Length]; - } - } - } - List list_1; - private int rate_idnex = 3; - private int scroll_number; - List rate_list = new List(); - private int scroll_type = 1; - - private void StartScroll() - { - (ui.wheel.GetChild("wheel_") as wheel_).t0.timeScale = (ui.wheel.GetChild("wheel_") as wheel_).t0.timeScale = 5.0f; - scroll_type = 2; - } - private void Scroll() - { - if (scroll_type == 1) - { - scroll_number++; - rate_list.Clear(); - for (int i = 0; i < 8; i++) - { - rate_list.Add(successData_.boost_array[(scroll_number + i) % successData_.boost_array.Length]); - } - Debug.Log(JsonConvert.SerializeObject(rate_list)); - for (int i = 0; i < list_1.Count; i++) - { - list_1[i].type.selectedIndex = (i + scroll_number) % 3; - list_1[i].text_rate.text = "X" + rate_list[i]; - } - - (ui.wheel.GetChild("wheel_") as wheel_).t1.Play(() => - { - rate_idnex++; - ui.btn_mult.title = "(" + GameHelper.getChString((decimal)successData_.cash_number * successData_.boost_array[rate_idnex % successData_.boost_array.Length]) + ")"; - }); - - (ui.wheel.GetChild("wheel_") as wheel_).t0.Play(Scroll); - - } - else - { - - scroll_number++; - - rate_list.Clear(); - for (int i = 0; i < 8; i++) - { - rate_list.Add(successData_.boost_array[(scroll_number + i) % successData_.boost_array.Length]); - } - - // bool need_return = false; - if (((ui.wheel.GetChild("wheel_") as wheel_).t0.timeScale < 2.2f) && (list_1[4].text_rate.text == ("X" + successData_.rate))) - { - //开始领取 - float reward = successData_.cash_number * successData_.rate; - - if (GameHelper.IsGiftSwitch()) - GetReward(reward); - else - GetReward(reward); - GameDispatcher.Instance.Dispatch(GameMsg.RefreshMakeupData); - SaveData.GetSaveObject().LargeRewardNum++; - SaveData.saveDataFunc(); - return; - } - for (int i = 0; i < list_1.Count; i++) - { - list_1[i].type.selectedIndex = (i + scroll_number) % 3; - list_1[i].text_rate.text = "X" + rate_list[i]; - Debug.Log((ui.wheel.GetChild("wheel_") as wheel_).t0.timeScale); - } - - // if (need_return) - // { - // (ui.wheel.GetChild("wheel_") as wheel_).t0.timeScale = 0; - // return; - // } - - (ui.wheel.GetChild("wheel_") as wheel_).t1.Play(() => - { - rate_idnex++; - ui.btn_mult.title = "(" + GameHelper.getChString((decimal)successData_.cash_number * successData_.boost_array[rate_idnex % successData_.boost_array.Length]) + ")"; - }); - - (ui.wheel.GetChild("wheel_") as wheel_).t0.Play(Scroll); - (ui.wheel.GetChild("wheel_") as wheel_).t0.timeScale = (ui.wheel.GetChild("wheel_") as wheel_).t0.timeScale - 0.3f; - - } - - } + } } diff --git a/Assets/StreamingAssets/level_1001.json b/Assets/StreamingAssets/level_1001.json index e9a8b76..436367c 100644 --- a/Assets/StreamingAssets/level_1001.json +++ b/Assets/StreamingAssets/level_1001.json @@ -8,53 +8,88 @@ { "id": 1, "startPoint": 0, - "endPoint": 30, + "endPoint": 25, "color": "#FFFFFF", "path": [ "right", "right", - "down", - "down", - "left", - "down", - "left" - ] - }, - { - "id": 2, - "startPoint": 59, - "endPoint": 66, - "color": "#CCFF66", - "path": [ - "left", - "left", - "up", - "left", + "right", + "right", + "right", "down", "down" ] }, + { + "id": 2, + "startPoint": 30, + "endPoint": 37, + "color": "#FFFFFF", + "path": [ + "right", + "right", + "right", + "right", + "right", + "right", + "right" + ] + }, { "id": 3, - "startPoint": 78, - "endPoint": 0, - "color": "#FFFF00", - "path": [] + "startPoint": 50, + "endPoint": 46, + "color": "#FFFFFF", + "path": [ + "right", + "right", + "right", + "right", + "right", + "right", + "up" + ] }, { "id": 4, - "startPoint": 62, - "endPoint": 53, - "color": "#0000FF", + "startPoint": 60, + "endPoint": 66, + "color": "#FFFFFF", + "path": [ + "right", + "right", + "right", + "right", + "right", + "right" + ] + }, + { + "id": 5, + "startPoint": 93, + "endPoint": 73, + "color": "#FFFFFF", + "path": [ + "up", + "up" + ] + }, + { + "id": 6, + "startPoint": 9, + "endPoint": 89, + "color": "#FFFFFF", "path": [ "down", - "right", - "right", - "up", - "left", - "up", "down", - "up" + "down", + "down", + "down", + "left", + "down", + "down", + "right", + "down" ] } ]