1911 lines
72 KiB
C#
1911 lines
72 KiB
C#
using asap.core;
|
||
using cfg;
|
||
using DG.Tweening;
|
||
using EnhancedUI.EnhancedScroller;
|
||
using GameCore;
|
||
using System;
|
||
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using System.Threading.Tasks;
|
||
using TMPro;
|
||
using UniRx;
|
||
using UnityEngine;
|
||
using UnityEngine.Playables;
|
||
using UnityEngine.UI;
|
||
|
||
namespace game
|
||
{
|
||
public class EventPotionPanel : BasePanel
|
||
{
|
||
public RawImage ScenePotionRawImage;
|
||
public List<GameObject> TopMouthList = new List<GameObject>();
|
||
|
||
public float show_base_waiting_time = 0.5f;
|
||
public float show_gap_time = 0.2f;
|
||
public float show_waitfor_spine_shake_time = 0.6f;
|
||
public string show_spine_shake_anim = "potion_shake_01_2";
|
||
public float show_spine_shake_duration_time = 1.433f;
|
||
|
||
public float jump_move_duration_time = 0.6f;
|
||
public float jump_waitfor_spine_shake_time = 0.6f;
|
||
public string jump_spine_shake_anim = "potion_shake_01_1";
|
||
public float jump_spine_shake_duration_time = 2.333f;
|
||
|
||
public float jumpdown_move_duration_time = 0.6f;
|
||
public float jumpdown_waitfor_spine_shake_time = 0.6f;
|
||
public string jumpdown_spine_shake_anim = "potion_shake_01_1";
|
||
public float jumpdown_spine_shake_duration_time = 2.333f;
|
||
|
||
public float check_base_waiting_time = 0.8f;
|
||
public float check_gap_time = 0.2f;
|
||
public string check_spine_shake1_anim = "potion_shake_02";
|
||
public float check_waitfor_spine_shake2_time = 0.2f;
|
||
public string check_spine_shake2_anim = "potion_shake_03";
|
||
public float check_spine_shake2_duration_time = 2.333f;
|
||
|
||
public float dock_base_waiting_time = 0.6f;
|
||
public float dock_gap_time = 0f;
|
||
public float dock_move_duration_time = 0.6f;
|
||
public float dock_scale = 1.8f;
|
||
public float dock_waitfor_final_time = 0.1f;
|
||
|
||
public float dock_animation_gap_duration_time = 0.5f;
|
||
|
||
public float final_gap_time = 0f;
|
||
public float final_move_duration_time = 0.5f;
|
||
public float final_scale = 0.7f;
|
||
public float final_pour_duration_time = 1.467f;
|
||
public float final_ui_fx_duration_time = 1f;
|
||
|
||
public float Lock_Time = 1.0f;
|
||
public float Changing_Fountain_Effect_Waiting_Time = 0.5f;
|
||
|
||
public RectTransform m_DockPoint;
|
||
|
||
public GameObject fx_eventpoison_ui_reward;
|
||
|
||
[NonSerialized] public List<Vector3> operatingPointTransformList = new List<Vector3>();
|
||
[NonSerialized] public Vector3 centerPointPosition;
|
||
[NonSerialized] public Vector3 centerOfTopMouth = new Vector3(float.MinValue, float.MinValue);
|
||
|
||
private EventPotionDataManager m_DataManager;
|
||
//由于界面刷新是在奖励界面关闭的时候进行的,所以这里需要一个临时变量来存储奖励数据,判断是不是升级奖励
|
||
List<ItemData> itemDataList;
|
||
|
||
private PlayableDirector m_BoxOpenDirector;
|
||
|
||
private void EnsureBoxOpenDirector()
|
||
{
|
||
if (m_BoxOpenDirector != null)
|
||
return;
|
||
Transform boxGo = transform.Find("box_open");
|
||
if (boxGo == null) return;
|
||
m_BoxOpenDirector = boxGo.GetComponent<PlayableDirector>();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 最终大奖弹窗前先播完 box_open 节点上的 Timeline(无 Director 或资源则跳过)。
|
||
/// </summary>
|
||
private async Task WaitBoxOpenTimelineFinishedAsync()
|
||
{
|
||
EnsureBoxOpenDirector();
|
||
if (m_BoxOpenDirector == null)
|
||
return;
|
||
var asset = m_BoxOpenDirector.playableAsset;
|
||
if (asset == null)
|
||
return;
|
||
|
||
var boxRoot = m_BoxOpenDirector.gameObject;
|
||
if (!boxRoot.activeSelf)
|
||
boxRoot.SetActive(true);
|
||
|
||
m_BoxOpenDirector.time = 0;
|
||
m_BoxOpenDirector.Play();
|
||
await Awaiters.NextFrame;
|
||
|
||
await Awaiters.Seconds((float)asset.duration);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 按本轮关卡总数判断是否最后一关:最终奖走弹窗,否则只刷新展示奖励数据。
|
||
/// </summary>
|
||
/// <param name="levelCountInRound">CheckForLevelReward 用 GetPreLevelCountInCurRound;OnFinalOperationComplete 用 GetLevelCountInCurRound。</param>
|
||
/// <returns>最后一关分支里发奖或弹窗失败时为 false(与原先提前 return 一致)。</returns>
|
||
private async Task<bool> TryGrantStageRewardForRoundProgressAsync(int levelCountInRound)
|
||
{
|
||
if (m_DataManager.PotionData.LevelIndex == levelCountInRound - 1)
|
||
{
|
||
EventPotionStage lastLevel = m_DataManager.GetLastStageInCurRound();
|
||
ChangeSource changeSource = new ChangeSource(m_DataManager.PotionData.EventID, "Event_Minigame1", "Event_Minigame1_Potion", "StageReward");
|
||
|
||
var rewardList = GContext.container.Resolve<PlayerItemData>()?.AddItemByDropLureInflation(m_DataManager.PotionData.InflationRate, lastLevel.Reward, changeSource, false);
|
||
if (rewardList == null || rewardList.Count < 1)
|
||
return false;
|
||
|
||
await WaitBoxOpenTimelineFinishedAsync();
|
||
|
||
var panelObj = await UIManager.Instance.ShowUI(m_DataManager.GetRewardPopupPanel());
|
||
if (m_BoxOpenDirector != null)
|
||
m_BoxOpenDirector.gameObject.SetActive(false);
|
||
if (panelObj == null)
|
||
return false;
|
||
var rewardPopupPanel = panelObj.GetComponent<EventPotionRewardPopupPanel>();
|
||
rewardPopupPanel.Init(rewardList);
|
||
|
||
m_DataManager.GetNextPotionLevel();
|
||
return true;
|
||
}
|
||
|
||
EventPotionStage level = m_DataManager.GetCurrentPotionLevel();
|
||
ChangeSource changeSourceNormal = new ChangeSource(m_DataManager.PotionData.EventID, "Event_Minigame1", "Event_Minigame1_Potion", "StageReward");
|
||
|
||
itemDataList = GContext.container.Resolve<PlayerItemData>().AddItemByDropLureInflation(m_DataManager.PotionData.InflationRate, level.Reward, changeSourceNormal);
|
||
GContext.Publish(new ShowData());
|
||
|
||
m_DataManager.GetNextPotionLevel();
|
||
return true;
|
||
}
|
||
|
||
#region 音效相关
|
||
public List<GameObject> m_AudioPouringList = new List<GameObject>();
|
||
public void CloseAudioPouring()
|
||
{
|
||
foreach (var gameObject in m_AudioPouringList)
|
||
{
|
||
gameObject.SetActive(false);
|
||
}
|
||
}
|
||
public void OpenAudioPouring()
|
||
{
|
||
foreach (var gameObject in m_AudioPouringList)
|
||
{
|
||
gameObject.SetActive(true);
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region EventPotionController
|
||
private EventPotionController m_EventPotionController;
|
||
public void SetEventPotionController(EventPotionController eventPotionController)
|
||
{
|
||
m_EventPotionController = eventPotionController;
|
||
}
|
||
#endregion
|
||
|
||
#region 功能锁定相关
|
||
public float m_LockScrollViewMaxTime = 2.0f;
|
||
private float m_LockScrollViewCumulativeTime = 0.0f;
|
||
private int m_ScrollViewMinimumQuantity = 0;
|
||
public int ScrollViewMinimumQuantity { get => m_ScrollViewMinimumQuantity; }
|
||
public bool IsScrollViewLocked
|
||
{
|
||
get { return m_LockScrollViewCumulativeTime > 0f; }
|
||
}
|
||
public void StartLockScrollView()
|
||
{
|
||
m_LockScrollViewCumulativeTime = m_LockScrollViewMaxTime;
|
||
if (m_LockScrollViewCumulativeTime > 0f)
|
||
{
|
||
LockScrollView();
|
||
}
|
||
}
|
||
public void StopLockScrollView()
|
||
{
|
||
m_LockScrollViewCumulativeTime = 0f;
|
||
}
|
||
public void LockScrollView()
|
||
{
|
||
if (m_PotionScrollViewController == null) return;
|
||
m_PotionScrollViewController.LockScrollView();
|
||
}
|
||
public void UnlockScrollView()
|
||
{
|
||
if (m_PotionScrollViewController == null) return;
|
||
|
||
if (m_DataManager == null || m_DataManager.PotionData == null) return;
|
||
|
||
int processedCount = m_DataManager.PotionData.LevelProcessedList.Count;
|
||
|
||
if (processedCount >= m_ScrollViewMinimumQuantity)
|
||
{
|
||
m_PotionScrollViewController.UnlockScrollView();
|
||
}
|
||
else
|
||
{
|
||
m_PotionScrollViewController.LockScrollView();
|
||
}
|
||
}
|
||
private float m_LockClickOperationCumulativeTime = 0f;
|
||
public bool IsClickOperationLocked
|
||
{
|
||
get
|
||
{
|
||
return m_LockClickOperationCumulativeTime > 0f || m_IsCheckingColorType;
|
||
}
|
||
}
|
||
public bool IsClickOperationLockedPure
|
||
{
|
||
get
|
||
{
|
||
return m_LockClickOperationCumulativeTime > 0f;
|
||
}
|
||
}
|
||
public void StartLockClickOperation()
|
||
{
|
||
m_LockClickOperationCumulativeTime = Lock_Time;
|
||
}
|
||
public void StopLockClickOperation()
|
||
{
|
||
m_LockClickOperationCumulativeTime = 0f;
|
||
}
|
||
bool m_IsCheckingColorType = false;
|
||
public bool IsCheckingColorType { get { return m_IsCheckingColorType; } set { m_IsCheckingColorType = value; } }
|
||
private void UpdateLockAction(float deltaTime)
|
||
{
|
||
if (m_LockScrollViewCumulativeTime > 0f)
|
||
{
|
||
m_LockScrollViewCumulativeTime -= deltaTime;
|
||
if (m_LockScrollViewCumulativeTime > 0f)
|
||
{
|
||
LockScrollView();
|
||
}
|
||
}
|
||
if (m_LockScrollViewCumulativeTime <= 0f)
|
||
{
|
||
m_LockScrollViewCumulativeTime = 0f;
|
||
if (!m_IsCheckingColorType)
|
||
{
|
||
UnlockScrollView();
|
||
}
|
||
}
|
||
|
||
if (m_LockClickOperationCumulativeTime > 0f)
|
||
{
|
||
m_LockClickOperationCumulativeTime -= deltaTime;
|
||
}
|
||
if (m_LockClickOperationCumulativeTime < 0f)
|
||
{
|
||
m_LockClickOperationCumulativeTime = 0f;
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region TopMouth 相关
|
||
private void ShowTopMouth()
|
||
{
|
||
EventPotionStage curLevel = m_DataManager.GetCurrentPotionLevel();
|
||
int index = curLevel.FountainLevel - 1;
|
||
int count = TopMouthList.Count;
|
||
if (index < 0 || index >= count)
|
||
{
|
||
index = 0;
|
||
}
|
||
for (int i = 0; i < count; ++i)
|
||
{
|
||
TopMouthList[i].SetActive(i == index);
|
||
}
|
||
}
|
||
private void HideTopMouth()
|
||
{
|
||
int count = TopMouthList.Count;
|
||
for (int i = 0; i < count; ++i)
|
||
{
|
||
TopMouthList[i].SetActive(false);
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 喷泉相关
|
||
//public bool IsFountainChanged()
|
||
//{
|
||
// EventPotionStage stage = m_DataManager.GetEventPotionStage(0);
|
||
// int fountainLevel = stage.FountainLevel;
|
||
// return false;
|
||
//}
|
||
public void ChangeFountain()
|
||
{
|
||
EventPotionStage preLevel = m_DataManager.GetEventPotionStage(m_DataManager.PotionData.PreLevelID);
|
||
EventPotionStage curLevel = m_DataManager.GetCurrentPotionLevel();
|
||
if (preLevel.FountainLevel != curLevel.FountainLevel)
|
||
{
|
||
m_EventPotionController.ChangeFountain(curLevel.FountainLevel, true, Changing_Fountain_Effect_Waiting_Time);
|
||
}
|
||
}
|
||
public void InitFountain()
|
||
{
|
||
EventPotionStage curLevel = m_DataManager.GetCurrentPotionLevel();
|
||
m_EventPotionController.ChangeFountain(curLevel.FountainLevel, false, 0);
|
||
}
|
||
#endregion
|
||
|
||
#region 倒水特效相关
|
||
public bool IsLocatedLeftOfCenterPoint(Vector3 point)
|
||
{
|
||
if (point.x > centerPointPosition.x)
|
||
{
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
public float fountain_ripple_effect_waiting_time = 0.3f;
|
||
public List<GameObject> m_FountainRippleEffectList = new List<GameObject>();
|
||
public void StopFountainRippleEffect()
|
||
{
|
||
foreach (var gameObject in m_FountainRippleEffectList)
|
||
{
|
||
gameObject.SetActive(false);
|
||
}
|
||
}
|
||
public IEnumerator StartFountainRippleEffect()
|
||
{
|
||
yield return new WaitForSeconds(fountain_ripple_effect_waiting_time);
|
||
|
||
foreach (var gameObject in m_FountainRippleEffectList)
|
||
{
|
||
gameObject.SetActive(true);
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 飞行特效相关临时数据
|
||
[SerializeField] private List<PotionGridUI> m_TemporaryItemList = new List<PotionGridUI>();
|
||
public PotionGridUI GetIdleTemporaryGridUI()
|
||
{
|
||
foreach (var item in m_TemporaryItemList)
|
||
{
|
||
if (item.IsIdle == true)
|
||
{
|
||
return item;
|
||
}
|
||
}
|
||
return null;
|
||
}
|
||
public void ClearTemporaryGridUIToIdle()
|
||
{
|
||
foreach (var item in m_TemporaryItemList)
|
||
{
|
||
item.IsIdle = true;
|
||
}
|
||
}
|
||
public bool IsAllTemporaryIdle()
|
||
{
|
||
foreach (var item in m_TemporaryItemList)
|
||
{
|
||
if (item.IsIdle == false)
|
||
{
|
||
return false;
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
#endregion
|
||
|
||
#region 操作处理
|
||
private void CheckForPreLevelOperation()
|
||
{
|
||
if (m_DataManager == null || m_DataManager.PotionData == null) return;
|
||
|
||
if (m_DataManager.PotionData.IsOver)
|
||
{
|
||
CheckForLevelReward();
|
||
}
|
||
else
|
||
{
|
||
CheckForAddNewStepData();
|
||
}
|
||
|
||
//StopLockClickOperation();
|
||
}
|
||
private void CheckForAddNewStepData()
|
||
{
|
||
PotionItemData operationItemData = m_DataManager.GetOperationItemData();
|
||
if (operationItemData == null) return;
|
||
|
||
int count = m_DataManager.PotionData.LevelDisplayData.GridStateList.Count;
|
||
for (int i = 0; i < count; ++i)
|
||
{
|
||
if (m_DataManager.PotionData.LevelDisplayData.GridStateList[i] == EventPotionGridState.GridState_Over) continue;
|
||
m_DataManager.PotionData.LevelDisplayData.GridStateList[i] = EventPotionGridState.GridState_Empty;
|
||
}
|
||
|
||
count = operationItemData.ColorTypeList.Count;
|
||
|
||
int validColorNum = operationItemData.GetValidColorTypeNum();
|
||
|
||
if (validColorNum == count)
|
||
{
|
||
// 操作区全部上架
|
||
bool flag = true;
|
||
m_CommitColorTypeList.Clear();
|
||
for (int i = 0; i < count; ++i)
|
||
{
|
||
EventPotionGridState gridState = operationItemData.GetGridState(i);
|
||
if (gridState == EventPotionGridState.GridState_Over) continue;
|
||
|
||
int operationColor = operationItemData.GetColorType(i) % 100;
|
||
int targetColor = m_DataManager.PotionData.LevelTargetData.GetColorType(i);
|
||
int fromDisplayAreaIndex = operationItemData.FromDisplayAreaIndexList[i];
|
||
|
||
m_CommitColorTypeList.Add(operationColor);
|
||
|
||
if (operationColor == targetColor)
|
||
{
|
||
operationItemData.SetGridState(i, EventPotionGridState.GridState_Ok);
|
||
if (fromDisplayAreaIndex >= 0 && fromDisplayAreaIndex < count)
|
||
{
|
||
m_DataManager.PotionData.LevelDisplayData.SetGridState(fromDisplayAreaIndex, EventPotionGridState.GridState_Over);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
flag = false;
|
||
operationItemData.SetGridState(i, EventPotionGridState.GridState_Wrong);
|
||
operationItemData.SetColorType(i, operationColor + 100);
|
||
if (fromDisplayAreaIndex >= 0 && fromDisplayAreaIndex < count)
|
||
{
|
||
m_DataManager.PotionData.LevelDisplayData.SetGridState(fromDisplayAreaIndex, EventPotionGridState.GridState_Empty);
|
||
}
|
||
}
|
||
}
|
||
|
||
if (flag)
|
||
{
|
||
CheckForLevelReward();
|
||
}
|
||
else
|
||
{
|
||
AddNewStepData(false);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
// 操作区未全部上架
|
||
for (int i = 0; i < count; ++i)
|
||
{
|
||
EventPotionGridState gridState = operationItemData.GetGridState(i);
|
||
if (gridState == EventPotionGridState.GridState_Over) continue;
|
||
|
||
int fromDisplayAreaIndex = operationItemData.FromDisplayAreaIndexList[i];
|
||
|
||
int operationColor = operationItemData.GetColorType(i);
|
||
if (operationColor <= 0)
|
||
{
|
||
operationItemData.SetGridState(i, EventPotionGridState.GridState_Empty);
|
||
if (fromDisplayAreaIndex >= 0 && fromDisplayAreaIndex < count)
|
||
{
|
||
m_DataManager.PotionData.LevelDisplayData.SetGridState(fromDisplayAreaIndex, EventPotionGridState.GridState_Empty);
|
||
}
|
||
continue;
|
||
}
|
||
|
||
if (operationColor > 100)
|
||
{
|
||
operationItemData.SetColorType(i, operationColor % 100);
|
||
}
|
||
operationItemData.SetGridState(i, EventPotionGridState.GridState_Occupied);
|
||
|
||
if (fromDisplayAreaIndex >= 0 && fromDisplayAreaIndex < count)
|
||
{
|
||
m_DataManager.PotionData.LevelDisplayData.SetGridState(fromDisplayAreaIndex, EventPotionGridState.GridState_Occupied);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
private async void CheckForLevelReward()
|
||
{
|
||
m_IsCheckingColorType = true;
|
||
StartLockScrollView();
|
||
|
||
// 未领取奖励,则执行领取奖励操作
|
||
if (!await TryGrantStageRewardForRoundProgressAsync(m_DataManager.GetPreLevelCountInCurRound()))
|
||
return;
|
||
|
||
StopLockClickOperation();
|
||
}
|
||
private async void OnFinalOperationComplete()
|
||
{
|
||
AddDropStatisticalData(true);
|
||
if (!await TryGrantStageRewardForRoundProgressAsync(m_DataManager.GetLevelCountInCurRound()))
|
||
return;
|
||
|
||
StopLockClickOperation();
|
||
}
|
||
private void GoToNextLevel()
|
||
{
|
||
m_DataManager.InitScrollerDataList();
|
||
|
||
var position = 0f;
|
||
m_PotionScrollViewController.ReloadData();
|
||
m_PotionWallScrollViewController.ReloadData();
|
||
m_PotionScrollViewController.ScrollPosition = position;
|
||
m_PotionWallScrollViewController.ScrollPosition = position;
|
||
|
||
int index = m_DataManager.WallBeforeCount + m_DataManager.PotionData.LevelProcessedList.Count;
|
||
m_PotionScrollViewController.JumpToDataIndex(index);
|
||
|
||
// 重置下方Item展示区域
|
||
ResetItemsDisplayArea();
|
||
|
||
UpdateReward();
|
||
UpdateProgress();
|
||
|
||
// 切换喷泉
|
||
ChangeFountain();
|
||
}
|
||
private void AddNewStepData(bool isResetUI = true)
|
||
{
|
||
m_IsCheckingColorType = true;
|
||
StartLockScrollView();
|
||
|
||
foreach (var item in m_DataManager.PotionData.LevelProcessedList)
|
||
{
|
||
item.isOver = true;
|
||
item.DataType = EventPotionDataType.Data_Item;
|
||
item.ResetFromDisplayAreaIndexList(-1);
|
||
}
|
||
|
||
PotionItemData newPotionItemData = new PotionItemData();
|
||
newPotionItemData.name = "AddNewStepData_" + DateTime.Now.Ticks;
|
||
newPotionItemData.index = m_DataManager.PotionData.LevelProcessedList.Count;
|
||
newPotionItemData.Clear();
|
||
newPotionItemData.isOver = false;
|
||
newPotionItemData.DataType = EventPotionDataType.Data_ItemAndOperation;
|
||
|
||
int count = m_DataManager.PotionData.LevelProcessedList.Count;
|
||
PotionItemData lastProcessedItemData = m_DataManager.PotionData.LevelProcessedList[count - 1];
|
||
|
||
EventPotionStage potionLevel = m_DataManager.GetCurrentPotionLevel();
|
||
count = potionLevel.Number;
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
int preColorType = lastProcessedItemData.ColorTypeList[i];
|
||
int preFromDisplayAreaIndex = lastProcessedItemData.FromDisplayAreaIndexList[i];
|
||
if (preColorType > 0 && preColorType < 100)
|
||
{
|
||
newPotionItemData.ColorTypeList.Add(preColorType);
|
||
newPotionItemData.ShelfTypeList.Add(EventPotionShelfType.Shelf_Success);
|
||
newPotionItemData.GridStateList.Add(EventPotionGridState.GridState_Over);
|
||
newPotionItemData.FromDisplayAreaIndexList.Add(preFromDisplayAreaIndex);
|
||
}
|
||
else
|
||
{
|
||
newPotionItemData.ColorTypeList.Add(-1);
|
||
newPotionItemData.ShelfTypeList.Add(EventPotionShelfType.Shelf_Default);
|
||
newPotionItemData.GridStateList.Add(EventPotionGridState.GridState_Empty);
|
||
newPotionItemData.FromDisplayAreaIndexList.Add(-1);
|
||
}
|
||
}
|
||
m_DataManager.PotionData.LevelProcessedList.Add(newPotionItemData);
|
||
|
||
m_DataManager.InitScrollerDataList();
|
||
|
||
AddDropStatisticalData(false);
|
||
|
||
if (isResetUI)
|
||
{
|
||
var position = m_PotionScrollViewController.ScrollPosition;
|
||
m_PotionScrollViewController.ReloadData();
|
||
m_PotionWallScrollViewController.ReloadData();
|
||
m_PotionScrollViewController.ScrollPosition = position;
|
||
m_PotionWallScrollViewController.ScrollPosition = position;
|
||
|
||
count = m_DataManager.WallBeforeCount + m_DataManager.PotionData.LevelProcessedList.Count;
|
||
m_PotionScrollViewController.JumpToDataIndex(count, 0, 0f, true, EnhancedScroller.TweenType.linear, 0.3f);
|
||
|
||
// 重置下方Item展示区域
|
||
ResetItemsDisplayArea();
|
||
}
|
||
}
|
||
private void OnGridItemBtnClickCallback(PotionGridUI gridUI)
|
||
{
|
||
if (IsClickOperationLocked) return;
|
||
|
||
StartLockClickOperation();
|
||
|
||
StartLockScrollView();
|
||
|
||
int index = m_DataManager.WallBeforeCount + m_DataManager.PotionData.LevelProcessedList.Count;
|
||
|
||
m_PotionScrollViewController.JumpToDataIndex(index, 0, 0, true, EnhancedScroller.TweenType.immediate, 0, () =>
|
||
{
|
||
this.StartCoroutine(OnScrollViewJumpCompleteCallback(gridUI));
|
||
});
|
||
}
|
||
public IEnumerator OnScrollViewJumpCompleteCallback(PotionGridUI gridUI)
|
||
{
|
||
yield return null;
|
||
PotionItem operationItem = GetOperationItem();
|
||
if (operationItem == null) yield break;
|
||
|
||
// 找到停靠点
|
||
PotionGridUI target = FindFirstEmptyPotionGridUI();
|
||
if (target == null) yield break;
|
||
target.Copy(gridUI, false, false);
|
||
target.HideUpperUI();
|
||
|
||
// 找到用于显示飞行轨迹的临时PotionGridUI并初始化和播放初始动画
|
||
PotionGridUI temporary = GetIdleTemporaryGridUI();
|
||
if (temporary == null) yield break;
|
||
temporary.SetTemporaryData(gridUI);
|
||
|
||
// 消耗代币
|
||
if (!ConsumeTokens(EventPotionConfig.Token_Consume_Num))
|
||
{
|
||
temporary.IsIdle = true;
|
||
temporary.gameObject.SetActive(false);
|
||
yield break;
|
||
}
|
||
|
||
// 更新目标数据
|
||
target.SetColorType(gridUI.GetColorType());
|
||
target.SetGridState(EventPotionGridState.GridState_Occupied);
|
||
target.PlaySpinAnimation(0, EventPotionConfig.spine_potion_idle, true);
|
||
target.SetFromGridUI(gridUI);
|
||
|
||
// 隐藏当前瓶子
|
||
gridUI.SetGridState(EventPotionGridState.GridState_Occupied);
|
||
gridUI.gameObject.SetActive(false);
|
||
|
||
temporary.PlaySpinAnimation(0, EventPotionConfig.spine_potion_fly, true);
|
||
temporary.PlayAnimation(EventPotionConfig.anim_gild_jump);
|
||
|
||
Vector3 targetPosition = target.transform.position;
|
||
temporary.DOKill();
|
||
|
||
//temporary.transform.DOMove(targetPosition, jump_move_duration_time).SetEase(Ease.OutQuad);
|
||
//this.StartCoroutine(HandleJumpStep(1, gridUI, target, temporary));
|
||
|
||
CheckFirstWrongGuide(target);
|
||
|
||
// 锁定操作
|
||
//int validNum = operationItem.GetVaildNum();
|
||
int targetIndex = target.Index;
|
||
int lastIndex = operationItem.GetLastValidIndex();
|
||
if (targetIndex == lastIndex)
|
||
{
|
||
temporary.transform.DOMove(targetPosition, jump_move_duration_time).SetEase(Ease.OutQuad).OnComplete(() =>
|
||
{
|
||
target.ShowIcon();
|
||
target.PlaySpinAnimation(0, EventPotionConfig.spine_potion_idle, true);
|
||
|
||
temporary.IsIdle = true;
|
||
temporary.gameObject.SetActive(false);
|
||
|
||
//CheckFirstWrongGuide(target);
|
||
//UnlockScrollView();
|
||
});
|
||
}
|
||
else
|
||
{
|
||
temporary.transform.DOMove(targetPosition, jump_move_duration_time).SetEase(Ease.OutQuad);
|
||
this.StartCoroutine(HandleJumpStep(1, gridUI, target, temporary));
|
||
}
|
||
|
||
if (m_DataManager != null)
|
||
{
|
||
m_DataManager.SyncData();
|
||
}
|
||
}
|
||
public IEnumerator HandleJumpStep(int type, PotionGridUI src, PotionGridUI target, PotionGridUI temporary)
|
||
{
|
||
yield return new WaitForSeconds(jump_waitfor_spine_shake_time);
|
||
|
||
target.ShowIcon();
|
||
target.PlaySpinAnimation(0, jump_spine_shake_anim, true);
|
||
|
||
temporary.IsIdle = true;
|
||
temporary.gameObject.SetActive(false);
|
||
|
||
yield return new WaitForSeconds(jump_spine_shake_duration_time);
|
||
|
||
target.PlaySpinAnimation(0, EventPotionConfig.spine_potion_idle, true);
|
||
|
||
//CheckFirstWrongGuide(target);
|
||
|
||
//UnlockScrollView();
|
||
}
|
||
public void CheckForUpdate()
|
||
{
|
||
if (m_IsCheckingColorType == true) return;
|
||
|
||
// 检查操作区是否全部上架
|
||
PotionItem operationItem = GetOperationItem();
|
||
if (operationItem == null) return;
|
||
bool isOperationAllOnline = operationItem.CheckOperationAreaIsAllOnline();
|
||
if (!isOperationAllOnline)
|
||
{
|
||
//Debug.LogWarning("----- CheckForUpdate 操作区没有完全上架");
|
||
return;
|
||
}
|
||
|
||
// 检查展示区是否全部上架
|
||
bool isAllDisplayAreaOnline = CheckAllDisplayAreaIsOnline();
|
||
if (!isAllDisplayAreaOnline)
|
||
{
|
||
//Debug.LogWarning("----- CheckForUpdate 显示区没有完全上架");
|
||
return;
|
||
}
|
||
|
||
// 检查临时区是否完全恢复为Idle状态
|
||
bool isAllTemporaryIdle = IsAllTemporaryIdle();
|
||
if (!isAllTemporaryIdle)
|
||
{
|
||
//Debug.LogWarning("----- CheckForUpdate 临时区没有完全恢复为Idle状态");
|
||
return;
|
||
}
|
||
|
||
//Debug.LogWarning("===== Check 所有瓶子都移至上方格子");
|
||
|
||
StartLockScrollView();
|
||
|
||
if (CheckForWrongAsPreviously(operationItem) == true) return;
|
||
|
||
m_IsCheckingColorType = true;
|
||
|
||
m_DataManager.PotionData.CorrectNum = 0;
|
||
if (operationItem.CheckGridListIsOk(PrepareGoToNextLevel, PrepareAddNewStepData))
|
||
{
|
||
m_DataManager.PotionData.IsOver = true;
|
||
//Debug.LogWarning("===== Check 所有瓶子颜色都对齐了");
|
||
}
|
||
else
|
||
{
|
||
m_DataManager.PotionData.IsOver = false;
|
||
//Debug.LogWarning("===== Check 瓶子颜色没有完全对齐");
|
||
}
|
||
operationItem.Reset_FromPotionGridUI_GridState();
|
||
//m_DataManager.ResetDisplayAreaGridState(EventPotionGridState.GridState_Empty);
|
||
}
|
||
public PotionItem GetOperationItem()
|
||
{
|
||
if (m_PotionScrollViewController == null) return null;
|
||
return m_PotionScrollViewController.GetOperationPotionItem();
|
||
}
|
||
private List<int> m_CommitColorTypeList = new List<int>();
|
||
public List<int> CommitColorTypeList { get { return m_CommitColorTypeList; } }
|
||
public void AddDropStatisticalData(bool isAllOk)
|
||
{
|
||
if (m_DataManager == null || m_DataManager.PotionData == null) return;
|
||
|
||
PotionItemData operationItemData = m_DataManager.GetOperationItemData();
|
||
if (operationItemData == null)
|
||
{
|
||
return;
|
||
}
|
||
string color_submit = Newtonsoft.Json.JsonConvert.SerializeObject(m_CommitColorTypeList);
|
||
|
||
int combine_id = m_DataManager.PotionData.Round * 100 + m_DataManager.PotionData.LevelIndex + 1;
|
||
var potionLevel = m_DataManager.GetCurrentPotionLevel();
|
||
if (potionLevel == null) return;
|
||
|
||
int is_correct = isAllOk ? 1 : 0;
|
||
|
||
m_DataManager.PotionData.SubmitNum++;
|
||
|
||
#if AGG
|
||
using (var e = GEvent.GameEvent("event_color_potion"))
|
||
{
|
||
e.AddContent("round", m_DataManager.PotionData.StageID)
|
||
.AddContent("stage", m_DataManager.PotionData.LevelIndex)
|
||
.AddContent("color_count", m_DataManager.PotionData.LevelDisplayData.ColorTypeList.Count)
|
||
.AddContent("correct_color", Newtonsoft.Json.JsonConvert.SerializeObject(m_DataManager.PotionData.LevelTargetData.ColorTypeList))
|
||
.AddContent("color_show", Newtonsoft.Json.JsonConvert.SerializeObject(m_DataManager.PotionData.LevelDisplayData.ColorTypeList))
|
||
.AddContent("color_submit", color_submit)
|
||
.AddContent("is_correct", is_correct)
|
||
.AddContent("item_count", m_DataManager.PotionData.ConsumedToken)
|
||
.AddContent("rule", m_DataManager.PotionData.Rule)
|
||
.AddContent("submit_count", m_DataManager.PotionData.SubmitNum)
|
||
.AddContent("drop_list", potionLevel.Reward)
|
||
.AddContent("combine_id", combine_id);
|
||
|
||
var itemDataList = GContext.container.Resolve<PlayerItemData>()?.GetItemDataByDropId(potionLevel.Reward);
|
||
if (itemDataList != null)
|
||
{
|
||
for (int i = 0; i < itemDataList.Count; i++)
|
||
{
|
||
if (itemDataList[i].id == 1001)
|
||
{
|
||
e.AddContent("reward_hook", itemDataList[i].count)
|
||
.AddContent("hook_origin", itemDataList[i].origin);
|
||
}
|
||
//else if (itemDataList[i].id == 1002)
|
||
//{
|
||
// e.AddContent("reward_cash", itemDataList[i].count);
|
||
//}
|
||
}
|
||
}
|
||
}
|
||
#endif
|
||
}
|
||
public void PrepareGoToNextLevel(int type, PotionGridUI gridUI)
|
||
{
|
||
// 进入下一关
|
||
this.StartCoroutine(HandleDockStep(gridUI));
|
||
}
|
||
public IEnumerator HandleDockStep(PotionGridUI gridUI)
|
||
{
|
||
yield return new WaitForSeconds(dock_base_waiting_time);
|
||
// 找到停靠点
|
||
Vector3 dockPoint = m_DockPoint.position;
|
||
|
||
var potionItem = gridUI.PotionItem;
|
||
int count = potionItem.GetVaildNum();
|
||
|
||
List<int> tmpIndexList = new List<int>();
|
||
for (int i = 0; i < count; ++i)
|
||
{
|
||
tmpIndexList.Add(i);
|
||
}
|
||
m_DataManager.ShuffleList(tmpIndexList, false);
|
||
|
||
List<PotionGridUI> temporaryList = new List<PotionGridUI>();
|
||
|
||
float scale = dock_scale;
|
||
float duration = dock_move_duration_time;
|
||
float gapTime = dock_gap_time;
|
||
int lastIndex = count - 1;
|
||
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
int tmpIndex = tmpIndexList[i];
|
||
|
||
PotionGridUI itemGridUI = potionItem.GetGridUI(tmpIndex);
|
||
itemGridUI.HideUpperUI();
|
||
|
||
PotionGridUI temporary = GetIdleTemporaryGridUI();
|
||
//if (temporary == null) return;
|
||
temporary.SetTemporaryData(itemGridUI);
|
||
|
||
temporary.PlaySpinAnimation(0, EventPotionConfig.spine_potion_idle, true);
|
||
|
||
temporaryList.Add(temporary);
|
||
|
||
Vector3 dockPosition = new Vector3(itemGridUI.transform.position.x, dockPoint.y, dockPoint.z);
|
||
temporary.transform.DOKill();
|
||
|
||
int index = tmpIndex;
|
||
bool isLast = i == lastIndex;
|
||
|
||
temporary.OpenAudioFly();
|
||
temporary.transform.DOMove(dockPosition, duration).SetEase(Ease.OutQuad).OnComplete(() =>
|
||
{
|
||
temporary.CloseAudioFly();
|
||
this.StartCoroutine(HandleFinalStepByGridUI(temporaryList, temporary, index, count, isLast));
|
||
});
|
||
|
||
temporary.transform.DOScale(scale, duration).SetEase(Ease.Linear);
|
||
if (gapTime > 0 && !isLast)
|
||
{
|
||
yield return new WaitForSeconds(gapTime);
|
||
}
|
||
}
|
||
}
|
||
public IEnumerator HandleFinalStep(List<PotionGridUI> temporaryList)
|
||
{
|
||
yield return new WaitForSeconds(dock_waitfor_final_time);
|
||
|
||
int count = temporaryList.Count;
|
||
List<Vector3> finalPositionList = GetFinalPositionList(count);
|
||
|
||
float scale = final_scale;
|
||
float duration = final_move_duration_time;
|
||
//float baseDelayTime = final_base_waiting_time;
|
||
float gapTime = final_gap_time;
|
||
int lastIndex = count - 1;
|
||
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
PotionGridUI temporary = temporaryList[i];
|
||
|
||
Vector3 finalPosition = finalPositionList[i];
|
||
|
||
temporary.transform.DOKill();
|
||
|
||
if (i == lastIndex)
|
||
{
|
||
temporary.transform.DOLocalMove(finalPosition, duration).SetEase(Ease.OutQuad).OnComplete(() =>
|
||
{
|
||
this.StartCoroutine(HandleFountainStep(temporaryList));
|
||
});
|
||
}
|
||
else
|
||
{
|
||
temporary.transform.DOLocalMove(finalPosition, duration).SetEase(Ease.OutQuad);
|
||
}
|
||
temporary.transform.DOScale(scale, duration).SetEase(Ease.Linear);
|
||
|
||
if (gapTime > 0)
|
||
{
|
||
yield return new WaitForSeconds(gapTime);
|
||
}
|
||
}
|
||
}
|
||
public IEnumerator HandleFountainStep(List<PotionGridUI> temporaryList)
|
||
{
|
||
int count = temporaryList.Count;
|
||
|
||
float scale = final_scale;
|
||
float duration = final_move_duration_time;
|
||
//float baseDelayTime = final_base_waiting_time;
|
||
float gapTime = final_gap_time;
|
||
int lastIndex = count - 1;
|
||
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
PotionGridUI temporary = temporaryList[i];
|
||
|
||
temporary.PlayAnimation(EventPotionConfig.anim_gild_settlement);
|
||
|
||
if (temporary.transform.position.x < centerPointPosition.x)
|
||
{
|
||
temporary.PlaySpinAnimation(0, EventPotionConfig.spine_potion_pour_R, false);
|
||
temporary.SetPourWaterRight();
|
||
}
|
||
else
|
||
{
|
||
temporary.PlaySpinAnimation(0, EventPotionConfig.spine_potion_pour_L, false);
|
||
temporary.SetPourWaterLeft();
|
||
}
|
||
|
||
if (gapTime > 0)
|
||
{
|
||
yield return new WaitForSeconds(gapTime);
|
||
}
|
||
}
|
||
|
||
yield return new WaitForSeconds(final_pour_duration_time);
|
||
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
PotionGridUI temporary = temporaryList[i];
|
||
|
||
temporary.IsIdle = true;
|
||
temporary.gameObject.SetActive(false);
|
||
}
|
||
|
||
if (fx_eventpoison_ui_reward != null)
|
||
{
|
||
fx_eventpoison_ui_reward.SetActive(true);
|
||
}
|
||
|
||
yield return new WaitForSeconds(final_ui_fx_duration_time);
|
||
|
||
OnFinalOperationComplete();
|
||
|
||
if (fx_eventpoison_ui_reward != null)
|
||
{
|
||
fx_eventpoison_ui_reward.SetActive(false);
|
||
}
|
||
|
||
yield return new WaitForSeconds(0.2f);
|
||
|
||
StartCoroutine(ResetTemporary());
|
||
}
|
||
public IEnumerator HandleFinalStepByGridUI(List<PotionGridUI> temporaryList, PotionGridUI temporary, int index, int count, bool isLast)
|
||
{
|
||
//yield return new WaitForSeconds(dock_waitfor_final_time);
|
||
|
||
temporary.PlayAnimation(EventPotionConfig.anim_gild_gap);
|
||
yield return new WaitForSeconds(dock_animation_gap_duration_time);
|
||
|
||
List<Vector3> finalPositionList = GetFinalPositionList(count);
|
||
|
||
float scale = final_scale;
|
||
float duration = final_move_duration_time;
|
||
float gapTime = final_gap_time;
|
||
|
||
Vector3 finalPosition = finalPositionList[index];
|
||
|
||
temporary.transform.DOKill();
|
||
|
||
if (isLast)
|
||
{
|
||
temporary.transform.DOLocalMove(finalPosition, duration).SetEase(Ease.OutQuad).OnComplete(() =>
|
||
{
|
||
this.StartCoroutine(HandleFountainStepByGridUI(temporaryList, temporary, index, count, isLast));
|
||
});
|
||
}
|
||
else
|
||
{
|
||
temporary.transform.DOLocalMove(finalPosition, duration).SetEase(Ease.OutQuad);
|
||
}
|
||
|
||
temporary.transform.DOScale(scale, duration).SetEase(Ease.Linear);
|
||
}
|
||
public IEnumerator HandleFountainStepByGridUI(List<PotionGridUI> temporaryList, PotionGridUI temporary, int index, int count, bool isLast)
|
||
{
|
||
float scale = final_scale;
|
||
float duration = final_move_duration_time;
|
||
float gapTime = final_gap_time;
|
||
|
||
//int num = m_Data.ColorTypeList.Count;
|
||
int num = temporaryList.Count;
|
||
|
||
for (int i = 0; i < num; ++i)
|
||
{
|
||
PotionGridUI item = temporaryList[i];
|
||
EventPotionGridState gridState = item.GetGridState();
|
||
if (gridState == EventPotionGridState.GridState_Over)
|
||
{
|
||
continue;
|
||
}
|
||
|
||
item.PlayAnimation(EventPotionConfig.anim_gild_settlement);
|
||
|
||
if (item.transform.position.x < centerPointPosition.x)
|
||
{
|
||
item.PlaySpinAnimation(0, EventPotionConfig.spine_potion_pour_R, false);
|
||
item.SetPourWaterRight();
|
||
}
|
||
else
|
||
{
|
||
item.PlaySpinAnimation(0, EventPotionConfig.spine_potion_pour_L, false);
|
||
item.SetPourWaterLeft();
|
||
}
|
||
|
||
|
||
}
|
||
//temporary.PotionItem.
|
||
|
||
//temporary.PlayAnimation(EventPotionConfig.anim_gild_settlement);
|
||
|
||
OpenAudioPouring();
|
||
|
||
ShowTopMouth();
|
||
|
||
//if (temporary.transform.position.x < centerPointPosition.x)
|
||
//{
|
||
// temporary.PlaySpinAnimation(0, EventPotionConfig.spine_potion_pour_R, false);
|
||
// temporary.SetPourWaterRight();
|
||
//}
|
||
//else
|
||
//{
|
||
// temporary.PlaySpinAnimation(0, EventPotionConfig.spine_potion_pour_L, false);
|
||
// temporary.SetPourWaterLeft();
|
||
//}
|
||
|
||
//if (index == 0)
|
||
//{
|
||
// this.StartCoroutine(StartFountainRippleEffect());
|
||
//}
|
||
|
||
this.StartCoroutine(StartFountainRippleEffect());
|
||
|
||
yield return new WaitForSeconds(final_pour_duration_time);
|
||
|
||
for (int i = 0; i < num; ++i)
|
||
{
|
||
PotionGridUI item = temporaryList[i];
|
||
EventPotionGridState gridState = item.GetGridState();
|
||
if (gridState == EventPotionGridState.GridState_Over)
|
||
{
|
||
continue;
|
||
}
|
||
|
||
item.IsIdle = true;
|
||
item.gameObject.SetActive(false);
|
||
}
|
||
|
||
//temporary.IsIdle = true;
|
||
//temporary.gameObject.SetActive(false);
|
||
|
||
HideTopMouth();
|
||
|
||
if (isLast)
|
||
{
|
||
CloseAudioPouring();
|
||
|
||
StopFountainRippleEffect();
|
||
|
||
if (fx_eventpoison_ui_reward != null)
|
||
{
|
||
fx_eventpoison_ui_reward.SetActive(true);
|
||
}
|
||
|
||
yield return new WaitForSeconds(final_ui_fx_duration_time);
|
||
|
||
OnFinalOperationComplete();
|
||
|
||
if (fx_eventpoison_ui_reward != null)
|
||
{
|
||
fx_eventpoison_ui_reward.SetActive(false);
|
||
}
|
||
|
||
yield return new WaitForSeconds(0.1f);
|
||
|
||
StartCoroutine(ResetTemporary());
|
||
}
|
||
}
|
||
|
||
public void PrepareAddNewStepData(int type, PotionGridUI gridUI)
|
||
{
|
||
// 添加新的数据
|
||
AddNewStepData(true);
|
||
}
|
||
public IEnumerator HandleShowStep(PotionGridUI gridUI, int index, float delayTime, EventPotionGridState gridState)
|
||
{
|
||
yield return new WaitForSeconds(delayTime);
|
||
|
||
// 找到用于显示飞行轨迹的临时PotionGridUI并初始化和播放初始动画
|
||
PotionGridUI temporary = GetIdleTemporaryGridUI();
|
||
if (temporary != null)
|
||
{
|
||
temporary.SetTemporaryData(gridUI);
|
||
temporary.PlayAnimation(EventPotionConfig.anim_gild_show);
|
||
temporary.PlaySpinAnimation(0, EventPotionConfig.spine_potion_idle, true);
|
||
|
||
gridUI.PlaySpinAnimation(0, EventPotionConfig.spine_potion_idle, true);
|
||
|
||
yield return new WaitForSeconds(show_waitfor_spine_shake_time);
|
||
|
||
temporary.PlaySpinAnimation(0, show_spine_shake_anim, true);
|
||
|
||
yield return new WaitForSeconds(show_spine_shake_duration_time);
|
||
|
||
temporary.IsIdle = true;
|
||
temporary.gameObject.SetActive(false);
|
||
|
||
gridUI.PlaySpinAnimation(0, EventPotionConfig.spine_potion_idle, true);
|
||
gridUI.gameObject.SetActive(true);
|
||
}
|
||
}
|
||
private IEnumerator ResetTemporary()
|
||
{
|
||
foreach (var item in m_TemporaryItemList)
|
||
{
|
||
Vector3 position = item.transform.localPosition;
|
||
position.y = -2000;
|
||
item.gameObject.SetActive(true);
|
||
item.transform.localPosition = position;
|
||
item.PlaySpinAnimation(0, EventPotionConfig.spine_potion_idle, false);
|
||
}
|
||
yield return new WaitForSeconds(0.2f);
|
||
|
||
foreach (var item in m_TemporaryItemList)
|
||
{
|
||
item.gameObject.SetActive(false);
|
||
}
|
||
}
|
||
public PotionGridUI FindFirstEmptyPotionGridUI()
|
||
{
|
||
PotionItem potionItem = GetOperationItem();
|
||
|
||
if (potionItem == null) return null;
|
||
|
||
int count = potionItem.GetVaildNum();
|
||
for (int i = 0; i < count; ++i)
|
||
{
|
||
var gridUI = potionItem.GetGridUI(i);
|
||
if (gridUI.GetGridState() == EventPotionGridState.GridState_Empty) return gridUI;
|
||
}
|
||
return null;
|
||
}
|
||
private LinkedList<PotionAction> m_ActionChain = new LinkedList<PotionAction>();
|
||
private void UpdateActionChain()
|
||
{
|
||
float deltaTime = Time.deltaTime;
|
||
LinkedListNode<PotionAction> currentNode = m_ActionChain.First;
|
||
while (currentNode != null)
|
||
{
|
||
LinkedListNode<PotionAction> nextNode = currentNode.Next;
|
||
|
||
currentNode.Value.Update(deltaTime);
|
||
if (currentNode.Value.IsValid() == false)
|
||
{
|
||
currentNode.Value.Action();
|
||
m_ActionChain.Remove(currentNode);
|
||
}
|
||
currentNode = nextNode;
|
||
}
|
||
}
|
||
public void AddAction(PotionAction action)
|
||
{
|
||
m_ActionChain.AddLast(action);
|
||
}
|
||
#endregion
|
||
|
||
#region 新手引导
|
||
public IEnumerator InitGuidance(float waitTime)
|
||
{
|
||
yield return new WaitForSeconds(waitTime);
|
||
|
||
m_FirstWrongGridUI = null;
|
||
|
||
var guideDataCenter = GContext.container.Resolve<GuideDataCenter>();
|
||
if (!m_DataManager.IsCurrentLevelFixed())
|
||
{
|
||
guideDataCenter.MarkGuideFinished(GroupName.EventPotion01);
|
||
guideDataCenter.MarkGuideFinished(GroupName.EventPotion02);
|
||
yield break;
|
||
}
|
||
|
||
guideDataCenter.InspectTriggerGuide("EventPotionPanel", curPanelName: gameObject.name);
|
||
}
|
||
PotionGridUI m_FirstWrongGridUI = null;
|
||
public void CheckFirstWrongGuide(PotionGridUI gridUI)
|
||
{
|
||
if (gridUI == null) return;
|
||
|
||
EventPotionGridState gridState = gridUI.GetGridState();
|
||
if (gridState == EventPotionGridState.GridState_Over) return;
|
||
|
||
int count = m_DataManager.PotionData.LevelProcessedList.Count;
|
||
if (count < 0) return;
|
||
|
||
var potionItem = gridUI.PotionItem;
|
||
if (potionItem == null) return;
|
||
|
||
PotionItemData curData = potionItem.Data;
|
||
int curIndex = m_DataManager.PotionData.LevelProcessedList.IndexOf(curData);
|
||
if (curIndex < 1) return;
|
||
|
||
int preIndex = curIndex - 1;
|
||
PotionItemData preData = m_DataManager.PotionData.LevelProcessedList[preIndex];
|
||
if (preData == null) return;
|
||
|
||
int index = gridUI.Index;
|
||
int curColorType = gridUI.GetColorType();
|
||
int preColorType = preData.GetColorType(index);
|
||
if (preColorType < 100) return;
|
||
|
||
int colorType = preColorType % 100;
|
||
if (curColorType != colorType) return;
|
||
|
||
//if (curColorType == m_DataManager.PotionData.LevelTargetData.ColorTypeList[index]) return;
|
||
|
||
if (m_DataManager.HasPotionIDSaveKey(EventPotionConfig.key_first_check_wrong)) return;
|
||
|
||
StartLockClickOperation();
|
||
StartLockScrollView();
|
||
|
||
StartCoroutine(ShowFirstWrongGuide(gridUI));
|
||
}
|
||
public IEnumerator ShowFirstWrongGuide(PotionGridUI gridUI)
|
||
{
|
||
yield return new WaitForSeconds(jump_move_duration_time);
|
||
isLockMask = true;
|
||
|
||
mask.gameObject.SetActive(true);
|
||
PotionFirstWrongGuideTips.SetActive(true);
|
||
|
||
Vector3 position = gridUI.transform.position;
|
||
position.x = PotionFirstWrongGuideTips.transform.position.x;
|
||
position.y += 50;
|
||
PotionFirstWrongGuideTips.transform.position = position;
|
||
|
||
gridUI.FirstWrongGuide();
|
||
m_FirstWrongGridUI = gridUI;
|
||
|
||
//StartCoroutine(AutoReleaseUnclockMaskOperation());
|
||
yield return new WaitForSeconds(lock_mask_operation_time);
|
||
isLockMask = false;
|
||
StopLockClickOperation();
|
||
}
|
||
//public IEnumerator AutoReleaseUnclockMaskOperation()
|
||
//{
|
||
// yield return new WaitForSeconds(lock_mask_operation_time);
|
||
// isLockMask = false;
|
||
//}
|
||
public bool CheckForWrongAsPreviously(PotionItem potionItem)
|
||
{
|
||
if (potionItem == null || potionItem.Data == null) return false;
|
||
|
||
int count = m_DataManager.PotionData.LevelProcessedList.Count;
|
||
if (count < 0) return false;
|
||
|
||
PotionItemData curData = potionItem.Data;
|
||
int index = m_DataManager.PotionData.LevelProcessedList.IndexOf(curData);
|
||
if (index < 1) return false;
|
||
|
||
int preIndex = index - 1;
|
||
PotionItemData preData = m_DataManager.PotionData.LevelProcessedList[preIndex];
|
||
if (preData == null) return false;
|
||
|
||
if (m_DataManager.HasPotionIDSaveKey(EventPotionConfig.key_first_check_combination_wrong)) return false;
|
||
|
||
bool flag = true;
|
||
count = curData.ColorTypeList.Count;
|
||
for (int i = 0; i < count; ++i)
|
||
{
|
||
var curState = curData.GetGridState(i);
|
||
if (curState == EventPotionGridState.GridState_Over)
|
||
{
|
||
continue;
|
||
}
|
||
|
||
var curColorType = curData.GetColorType(i) % 100;
|
||
var preColorType = preData.GetColorType(i) % 100;
|
||
if (curColorType != preColorType)
|
||
{
|
||
flag = false;
|
||
}
|
||
}
|
||
|
||
if (flag == true)
|
||
{
|
||
ToastPanel.Show(LocalizationMgr.GetText("UI_ToastPanel_96"));
|
||
potionItem.ReturnAllUncertainGridUI();
|
||
//if (potionItem.ReturnAllUncertainGridUI())
|
||
//{
|
||
// m_IsCheckingColorType = false;
|
||
//}
|
||
}
|
||
|
||
m_DataManager.SavePotionIDData(EventPotionConfig.key_first_check_combination_wrong, "ok");
|
||
|
||
return flag;
|
||
}
|
||
#endregion
|
||
|
||
#region 生命周期
|
||
public void OpenUI()
|
||
{
|
||
CloseAudioPouring();
|
||
|
||
InitEvent();
|
||
|
||
InitUIData();
|
||
|
||
// 判断是否存在前一关未完成操作
|
||
CheckForPreLevelOperation();
|
||
|
||
ShowUI();
|
||
|
||
FishingPotionAct.IsInitPanelComplete = true;
|
||
}
|
||
private void ProcessAdaptation()
|
||
{
|
||
InitUI();
|
||
|
||
RectTransform scrollViewRectTransform = m_PotionScrollViewController.transform.GetComponent<RectTransform>();
|
||
|
||
float scrollViewHeight = scrollViewRectTransform.rect.height;
|
||
|
||
float itemHeight = m_PotionScrollViewController.GetCellViewSize(null, 0);
|
||
|
||
int times = (int)Mathf.Ceil(scrollViewHeight / itemHeight);
|
||
|
||
m_ScrollViewMinimumQuantity = times - 1;
|
||
|
||
m_DataManager.InitWalls(times);
|
||
m_DataManager.InitScrollerDataList();
|
||
}
|
||
protected override void Start()
|
||
{
|
||
base.Start();
|
||
|
||
m_DataManager = GContext.container.Resolve<EventPotionDataManager>();
|
||
GameDebug.Log("魔药:" + string.Join(",", m_DataManager.PotionData.LevelTargetData.ColorTypeList)
|
||
+ " || "
|
||
+ string.Join(",", m_DataManager.PotionData.LevelDisplayData.ColorTypeList));
|
||
ProcessAdaptation();
|
||
|
||
OpenUI();
|
||
|
||
UnlockScrollView();
|
||
}
|
||
private void Update()
|
||
{
|
||
if (m_PotionScrollViewController != null && m_PotionWallScrollViewController != null)
|
||
{
|
||
m_PotionWallScrollViewController.ScrollPosition = m_PotionScrollViewController.ScrollPosition;
|
||
}
|
||
CheckForUpdate();
|
||
UpdateLockAction(Time.deltaTime);
|
||
//UpdateActionChain();
|
||
}
|
||
#endregion
|
||
|
||
#region 数据处理
|
||
private void InitUIData()
|
||
{
|
||
isLockMask = false;
|
||
m_IsCheckingColorType = false;
|
||
|
||
StopLockClickOperation();
|
||
|
||
ClearTemporaryGridUIToIdle();
|
||
|
||
UpdateToken(null);
|
||
UpdateReward();
|
||
UpdateProgress();
|
||
}
|
||
|
||
private void UpdateReward()
|
||
{
|
||
var level = m_DataManager.GetCurrentPotionLevel();
|
||
if (level == null) return;
|
||
int count = m_RewardRootList.Count;
|
||
if (level == m_DataManager.GetLastStageInCurRound())
|
||
{
|
||
for (int i = 1; i < count; i++)
|
||
{
|
||
m_RewardRootList[i].SetActive(false);
|
||
}
|
||
m_RewardRootList[0].SetActive(true);
|
||
m_RewardItemNewList[0].InflationRate = m_DataManager.PotionData.InflationRate;
|
||
m_RewardItemNewList[0].SetDropIcon(icon_reward.sprite, level.Reward);
|
||
return;
|
||
}
|
||
var rewardList = GContext.container.Resolve<PlayerItemData>()?.GetItemDataByDropIdLureInflation(m_DataManager.PotionData.InflationRate, level.Reward);
|
||
if (rewardList == null || rewardList.Count < 1) return;
|
||
int num = rewardList.Count;
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
if (i < num)
|
||
{
|
||
m_RewardRootList[i].SetActive(true);
|
||
m_RewardItemNewList[i].SetData(rewardList[i]);
|
||
}
|
||
else
|
||
{
|
||
m_RewardRootList[i].SetActive(false);
|
||
}
|
||
}
|
||
}
|
||
private void UpdateProgress()
|
||
{
|
||
if (m_DataManager == null || m_DataManager.PotionData == null) return;
|
||
|
||
// 获取当前轮次等级总数
|
||
int levelCount = 0;
|
||
if (m_DataManager.PotionData.StageID == 1) levelCount = m_DataManager.PotionData.Stage1TotalLevel;
|
||
else levelCount = m_DataManager.PotionData.Stage2TotalLevel;
|
||
|
||
// 计算坐标相关数据
|
||
RectTransform rectTransform = layout_line.GetComponent<RectTransform>();
|
||
Vector2 tmp = rectTransform.sizeDelta;
|
||
float totalWidth = layout_line.GetComponent<RectTransform>().sizeDelta.x;
|
||
float gapW = totalWidth / levelCount;
|
||
float baseX = (-totalWidth / 2) + gapW;
|
||
float y = img_progress_line.transform.localPosition.y;
|
||
float z = img_progress_line.transform.localPosition.z;
|
||
|
||
// 增加Image
|
||
int num = img_progress_line_list.Count;
|
||
Vector2 size = img_progress_line.GetComponent<RectTransform>().sizeDelta;
|
||
int lineCount = levelCount - 1;
|
||
for (int i = num; i < lineCount; i++)
|
||
{
|
||
GameObject gameObject = new GameObject("line_" + i);
|
||
gameObject.transform.SetParent(layout_line);
|
||
|
||
Image image = gameObject.AddComponent<Image>();
|
||
image.sprite = img_progress_line.sprite;
|
||
|
||
gameObject.transform.GetComponent<RectTransform>().sizeDelta = size;
|
||
gameObject.transform.localScale = img_progress_line.transform.localScale;
|
||
gameObject.transform.localPosition = img_progress_line.transform.localPosition;
|
||
|
||
img_progress_line_list.Add(image);
|
||
}
|
||
|
||
// 调整间隔坐标
|
||
num = img_progress_line_list.Count;
|
||
for (int i = 0; i < num; i++)
|
||
{
|
||
Image image = img_progress_line_list[i];
|
||
if (i < lineCount)
|
||
{
|
||
image.gameObject.SetActive(true);
|
||
image.transform.localPosition = new Vector3(baseX + i * gapW, y, z);
|
||
}
|
||
else
|
||
{
|
||
image.gameObject.SetActive(false);
|
||
}
|
||
}
|
||
|
||
// 更新process bar
|
||
int index = 0;
|
||
if (m_DataManager.PotionData.IsOver == true)
|
||
{
|
||
index = m_DataManager.PotionData.LevelIndex + 1;
|
||
}
|
||
else
|
||
{
|
||
index = m_DataManager.PotionData.LevelIndex;
|
||
}
|
||
bar.fillAmount = ((float)index) / levelCount;
|
||
text_progress.text = index + "/" + levelCount;
|
||
rewardtips.text = LocalizationMgr.GetFormatTextValue("UI_EventExperimentPanel_5", m_DataManager.PotionData.LevelIndex + 1);
|
||
|
||
}
|
||
private List<Vector3> GetFinalPositionList(int num)
|
||
{
|
||
EventPotionBottle eventPotionBottle = m_DataManager.GetEventPotionBottle(num);
|
||
int count = eventPotionBottle.BottleLsit.Count;
|
||
|
||
List<Vector3> list = new List<Vector3>();
|
||
for (int i = 0; i < count; ++i)
|
||
{
|
||
int index = eventPotionBottle.BottleLsit[i];
|
||
list.Add(operatingPointTransformList[index]);
|
||
}
|
||
return list;
|
||
//System.Random random = new System.Random();
|
||
//return operatingPointTransformList.OrderBy(x => random.Next()).Take(num).ToList();
|
||
}
|
||
public List<int> FindValidDisplayGridUIRefList()
|
||
{
|
||
List<int> list = new List<int>();
|
||
int count = m_DisplayGridItemList.Count;
|
||
for (int i = 0; i < count; ++i)
|
||
{
|
||
PotionGridUI item = m_DisplayGridItemList[i];
|
||
if (item.GetGridState() == EventPotionGridState.GridState_Empty &&
|
||
item.ItemData.GetColorType(item.Index) > EventPotionConfig.PotionItemType_Empty)
|
||
{
|
||
list.Add(i);
|
||
}
|
||
}
|
||
return list;
|
||
}
|
||
public bool CheckAllDisplayAreaIsOnline()
|
||
{
|
||
int count = m_DisplayGridItemList.Count;
|
||
int validNum = m_DataManager.PotionData.LevelDisplayData.ColorTypeList.Count;
|
||
|
||
for (int i = 0; i < count; ++i)
|
||
{
|
||
var gridUI = m_DisplayGridItemList[i];
|
||
if (gridUI.IsActive()) return false;
|
||
|
||
if (i < validNum)
|
||
{
|
||
if (gridUI.ItemData == null) continue;
|
||
var gridState = gridUI.GetGridState();
|
||
if (gridState != EventPotionGridState.GridState_Occupied && gridState != EventPotionGridState.GridState_Over)
|
||
{
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
private float ResetItemsDisplayArea()
|
||
{
|
||
m_IsCheckingColorType = false;
|
||
UnlockScrollView();
|
||
|
||
// 处理item_group
|
||
List<int> displayIndexRefList = m_DataManager.GetValidDisplayDataList();
|
||
int num = displayIndexRefList.Count;
|
||
|
||
RectTransform itemRectTransform = m_DisplayGridItemList[0].GetComponent<RectTransform>();
|
||
|
||
Vector2 itemAnchorPosition = itemRectTransform.pivot;
|
||
|
||
float itemWidth = itemRectTransform.sizeDelta.x;
|
||
float totalWidth = num * itemWidth;
|
||
|
||
float baseX = totalWidth / 2;
|
||
baseX = -baseX + itemWidth * itemAnchorPosition.x;
|
||
float baseY = itemRectTransform.localPosition.y;
|
||
float baseZ = itemRectTransform.localPosition.z;
|
||
|
||
int indexForPosition = 0;
|
||
int indexForTime = 0;
|
||
int count = m_DisplayGridItemList.Count;
|
||
float baseDelayTime = show_base_waiting_time;
|
||
float gapTime = show_gap_time;
|
||
|
||
float waitTime = 0f;
|
||
|
||
num = m_DataManager.PotionData.LevelDisplayData.ColorTypeList.Count;
|
||
for (int i = 0; i < count; ++i)
|
||
{
|
||
PotionGridUI item = m_DisplayGridItemList[i];
|
||
if (i < num)
|
||
{
|
||
EventPotionGridState gridState = m_DataManager.PotionData.LevelDisplayData.GridStateList[i];
|
||
|
||
if (gridState == EventPotionGridState.GridState_Over)
|
||
{
|
||
item.SetData(m_DataManager.PotionData.LevelDisplayData, i, null, false);
|
||
continue;
|
||
}
|
||
|
||
item.SetRootPosition(new Vector3(baseX + indexForPosition * itemWidth, baseY, baseZ));
|
||
item.SetData(m_DataManager.PotionData.LevelDisplayData, i, null, true);
|
||
item.gameObject.SetActive(false);
|
||
indexForPosition++;
|
||
|
||
if (gridState == EventPotionGridState.GridState_Empty)
|
||
{
|
||
int index = i;
|
||
float delayTime = baseDelayTime + indexForTime * gapTime;
|
||
this.StartCoroutine(HandleShowStep(item, index, delayTime, gridState));
|
||
indexForTime++;
|
||
|
||
waitTime = delayTime;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
item.SetData(null, -1, null, false);
|
||
}
|
||
}
|
||
|
||
StopLockClickOperation();
|
||
|
||
waitTime += show_waitfor_spine_shake_time;
|
||
return waitTime;
|
||
}
|
||
public PotionGridUI GetDisplayPotionGridUI(int index)
|
||
{
|
||
if (m_DisplayGridItemList == null || m_DisplayGridItemList.Count < 1 || index >= m_DisplayGridItemList.Count) return null;
|
||
|
||
return m_DisplayGridItemList[index];
|
||
}
|
||
#endregion
|
||
|
||
#region UI
|
||
// questionmark
|
||
private Button btn_questionmark;
|
||
private async void OnBtnQuestionmarkClickListener()
|
||
{
|
||
if (IsClickOperationLockedPure) return;
|
||
await UIManager.Instance.ShowUI(m_DataManager.GetInfoPanel());
|
||
}
|
||
|
||
// progress bar
|
||
private Image bar;
|
||
private TMP_Text text_progress;
|
||
private Transform layout_line;
|
||
private Image img_progress_line;
|
||
private List<Image> img_progress_line_list = new List<Image>();
|
||
private Button btn_reward;
|
||
Image icon_reward;
|
||
private async void OnBtnRewardClickListener()
|
||
{
|
||
if (IsClickOperationLockedPure) return;
|
||
var panel = await UIManager.Instance.ShowUI(UITypes.EventPotionRewardTips);
|
||
if (panel == null)
|
||
return;
|
||
var rewardList = GContext.container.Resolve<PlayerItemData>().GetItemDataByDropIdLureInflation(m_DataManager.PotionData.InflationRate, m_DataManager.GetLastStageInCurRound().Reward);
|
||
panel.GetComponent<EventPotionRewardTips>().Init(rewardList, btn_reward.transform);
|
||
}
|
||
|
||
// Reward
|
||
TMP_Text rewardtips;
|
||
private List<GameObject> m_RewardRootList = new List<GameObject>();
|
||
private List<RewardItemNew> m_RewardItemNewList = new List<RewardItemNew>();
|
||
|
||
// item group
|
||
private List<PotionGridUI> m_DisplayGridItemList = new List<PotionGridUI>();
|
||
|
||
// icon_ticket
|
||
private TMP_Text text_num;
|
||
private TicketTips ticket_tips;
|
||
private Button icon_ticket;
|
||
private void OnBtnIconTicketClickListener()
|
||
{
|
||
if (IsClickOperationLockedPure) return;
|
||
ticket_tips.gameObject.SetActive(true);
|
||
}
|
||
|
||
// Guide
|
||
private Button mask;
|
||
private GameObject PotionFirstWrongGuideTips;
|
||
public float lock_mask_operation_time = 1.0f;
|
||
bool isLockMask = false;
|
||
private void OnBtnMaskClickListener()
|
||
{
|
||
if (isLockMask == true) return;
|
||
|
||
mask.gameObject.SetActive(false);
|
||
PotionFirstWrongGuideTips.SetActive(false);
|
||
|
||
//PotionItem operationItem = GetOperationItem();
|
||
//if (operationItem == null) return;
|
||
//operationItem.ResumeFromGuide();
|
||
|
||
if (m_FirstWrongGridUI == null) return;
|
||
m_FirstWrongGridUI.ResumeFromGuide();
|
||
m_FirstWrongGridUI.PotionItem.OnBtnClickCallback(m_FirstWrongGridUI);
|
||
m_FirstWrongGridUI = null;
|
||
|
||
m_DataManager.SavePotionIDData(EventPotionConfig.key_first_check_wrong, "ok");
|
||
}
|
||
|
||
private void InitUI()
|
||
{
|
||
int num = 0;
|
||
|
||
// btn_questionmark
|
||
btn_questionmark = transform.Find("root_main/title/btn_questionmark").GetComponent<Button>();
|
||
btn_questionmark.onClick.RemoveAllListeners();
|
||
btn_questionmark.onClick.AddListener(OnBtnQuestionmarkClickListener);
|
||
|
||
// reward
|
||
num = 4;
|
||
for (int i = 1; i < num; i++)
|
||
{
|
||
GameObject gameObject = transform.Find($"root_main/reward_group/reward_{i}").gameObject;
|
||
m_RewardRootList.Add(gameObject);
|
||
RewardItemNew rewardItem = gameObject.transform.Find("reward").GetComponent<RewardItemNew>();
|
||
m_RewardItemNewList.Add(rewardItem);
|
||
}
|
||
rewardtips = transform.Find("root_main/bg_reward_group_title/text_reward_group_title").GetComponent<TMP_Text>();
|
||
// progress bar
|
||
bar = transform.Find("root_main/btn_bubble_task/bg_bar/bar").GetComponent<Image>();
|
||
text_progress = transform.Find("root_main/btn_bubble_task/text_progress").GetComponent<TMP_Text>();
|
||
layout_line = transform.Find("root_main/btn_bubble_task/bg_bar/layout_line");
|
||
img_progress_line = transform.Find("root_main/btn_bubble_task/bg_bar/layout_line/line").GetComponent<Image>();
|
||
btn_reward = transform.Find("root_main/btn_bubble_task/btn_reward").GetComponent<Button>();
|
||
icon_reward = transform.Find("root_main/btn_bubble_task/btn_reward/icon").GetComponent<Image>();
|
||
btn_reward.onClick.RemoveAllListeners();
|
||
btn_reward.onClick.AddListener(OnBtnRewardClickListener);
|
||
img_progress_line_list.Clear();
|
||
img_progress_line_list.Add(img_progress_line);
|
||
|
||
// item group
|
||
num = 8;
|
||
for (int i = 1; i < num; i++)
|
||
{
|
||
PotionGridUI gridUI = transform.Find($"root_main/item_group/displayItem{i}").GetComponent<PotionGridUI>();
|
||
|
||
gridUI.Init(i - 1, OnGridItemBtnClickCallback, null, m_DataManager);
|
||
|
||
m_DisplayGridItemList.Add(gridUI);
|
||
}
|
||
|
||
// icon_ticket
|
||
text_num = transform.Find("root_main/icon_ticket/text_num").GetComponent<TMP_Text>();
|
||
ticket_tips = transform.Find("root_main/ticket_tips").GetComponent<TicketTips>();
|
||
icon_ticket = transform.Find("root_main/icon_ticket").GetComponent<Button>();
|
||
icon_ticket.onClick.RemoveAllListeners();
|
||
icon_ticket.onClick.AddListener(OnBtnIconTicketClickListener);
|
||
|
||
// Guide
|
||
mask = transform.Find("mask").GetComponent<Button>();
|
||
mask.onClick.RemoveAllListeners();
|
||
mask.onClick.AddListener(OnBtnMaskClickListener);
|
||
mask.gameObject.SetActive(false);
|
||
PotionFirstWrongGuideTips = transform.Find("PotionFirstWrongGuideTips").gameObject;
|
||
PotionFirstWrongGuideTips.SetActive(false);
|
||
|
||
// EnhancedScroller
|
||
m_PotionWallScrollViewController = transform.Find("root_main/PotionWallScrollView").GetComponent<PotionWallScrollViewController>();
|
||
m_PotionScrollViewController = transform.Find("root_main/PotionScrollView").GetComponent<PotionScrollViewController>();
|
||
|
||
// 关闭按钮
|
||
btn_close = transform.Find("btn_close").GetComponent<Button>();
|
||
btn_close.onClick.RemoveAllListeners();
|
||
btn_close.onClick.AddListener(OnBtnCloseClickListener);
|
||
|
||
foreach (var item in m_TemporaryItemList)
|
||
{
|
||
item.Init(0, null, null, m_DataManager);
|
||
}
|
||
btnPack.onClick.AddListener(OnClickBtnPack);
|
||
}
|
||
|
||
private void ShowUI()
|
||
{
|
||
StopFountainRippleEffect();
|
||
|
||
if (m_DataManager.PotionData == null) return;
|
||
|
||
// EnhancedScroller
|
||
m_PotionWallScrollViewController.Init(m_PotionWallScrollViewController, m_DataManager);
|
||
m_PotionScrollViewController.Init(m_PotionScrollViewController, this, m_DataManager);
|
||
|
||
int index = m_DataManager.WallBeforeCount + m_DataManager.PotionData.LevelProcessedList.Count;
|
||
m_PotionScrollViewController.JumpToDataIndex(index);
|
||
|
||
var operationItem = GetOperationItem();
|
||
if (operationItem != null && operationItem.CheckOperationAreaIsAllOnline())
|
||
{
|
||
//LockScrollView();
|
||
////if (CheckForWrongAsPreviously(operationItem) == true) return;
|
||
|
||
if (operationItem.CheckGridListIsOk(PrepareGoToNextLevel, PrepareAddNewStepData))
|
||
{
|
||
m_DataManager.PotionData.IsOver = true;
|
||
//Debug.LogWarning("===== ShowUI 所有瓶子颜色都对齐了");
|
||
}
|
||
else
|
||
{
|
||
m_DataManager.PotionData.IsOver = false;
|
||
//Debug.LogWarning("===== ShowUI 瓶子颜色没有完全对齐");
|
||
}
|
||
if (m_DataManager != null)
|
||
{
|
||
m_DataManager.ResetDisplayAreaGridState(EventPotionGridState.GridState_Empty);
|
||
}
|
||
|
||
int count = m_DisplayGridItemList.Count;
|
||
for (int i = 0; i < count; ++i)
|
||
{
|
||
var gridUI = m_DisplayGridItemList[i];
|
||
gridUI.gameObject.SetActive(false);
|
||
}
|
||
}
|
||
|
||
// item group
|
||
float waitTime = ResetItemsDisplayArea();
|
||
StartCoroutine(InitGuidance(waitTime));
|
||
}
|
||
#endregion
|
||
|
||
#region 事件相关
|
||
private void InitEvent()
|
||
{
|
||
FishingPotionAct.Subscribe<EventPotionTokenUpdateData>(UpdateToken);
|
||
// 监听关闭奖励面板
|
||
GContext.OnEvent<RewardPanelClose>().Subscribe(OnRewardPanelClose).AddTo(FishingPotionAct.Disposables);
|
||
}
|
||
private void UpdateToken(EventPotionTokenUpdateData data)
|
||
{
|
||
if (m_DataManager == null || text_num == null) return;
|
||
int token = m_DataManager.GetToken();
|
||
text_num.text = "" + m_DataManager.GetToken();
|
||
if (token > 0)
|
||
{
|
||
text_num.color = Color.white;
|
||
}
|
||
else
|
||
{
|
||
text_num.color = Color.red;
|
||
}
|
||
}
|
||
private void OnRewardPanelClose(RewardPanelClose data)
|
||
{
|
||
if (itemDataList != null && itemDataList.Count > 0)
|
||
{
|
||
itemDataList = null;
|
||
GoToNextLevel();
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 代币相关
|
||
public bool ConsumeTokens(int count)
|
||
{
|
||
if (m_DataManager == null) return false;
|
||
bool isEnough = m_DataManager.ConsumeTokens(count);
|
||
if (isEnough == false)
|
||
{
|
||
StopLockClickOperation();
|
||
//ticket_tips.gameObject.SetActive(true);
|
||
OnClickBtnPack();
|
||
}
|
||
return isEnough;
|
||
}
|
||
#endregion
|
||
|
||
#region EnhancedScroller Handlers
|
||
PotionScrollViewController m_PotionScrollViewController;
|
||
PotionWallScrollViewController m_PotionWallScrollViewController;
|
||
|
||
#endregion
|
||
|
||
#region 关闭按钮
|
||
// 关闭按钮
|
||
Button btn_close;
|
||
public void OnBtnCloseClickListener()
|
||
{
|
||
if (IsClickOperationLockedPure) return;
|
||
FishingPotionAct.Publish<EventPotionCloseCameraData>(new EventPotionCloseCameraData());
|
||
// 关闭当前Act
|
||
GContext.Publish(new UnloadActToNextAct());
|
||
}
|
||
#endregion
|
||
|
||
#region NeoNormalPack
|
||
[SerializeField] private Button btnPack;
|
||
async void OnClickBtnPack()
|
||
{
|
||
if (IsClickOperationLockedPure) return;
|
||
if (m_DataManager == null) return;
|
||
var packData = m_DataManager.GetEventNeoNormalPackData();
|
||
if (packData == null)
|
||
return;
|
||
await EventNeoNormalPackPanel.TryShowAsync(packData);
|
||
}
|
||
#endregion
|
||
}
|
||
}
|