Files
MinFt/Client/Assets/Scripts/UI/Fishing/FishingFishInfo.cs
2026-04-27 12:07:32 +08:00

219 lines
8.4 KiB
C#

using asap.core;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using GameCore;
using cfg;
using System.Threading.Tasks;
using UnityEngine.AddressableAssets;
public class FishingFishInfo : MonoBehaviour
{
private TMP_Text _comboText;
public GameObject FX_info_weakly;
public GameObject FX_info_powerful;
public GameObject fx_ui_fishingpanelbar_warm;
public GameObject fx_ui_barlianji_full;
public ParticleSystem fx_ui_hightligt_loop;
public Animation distance_ani;
GameObject start;
GameObject blood;
GameObject fishing_mouse;
GameObject distance;
GameObject combo;
public TMP_Text textDistance;
TMP_Text text_distance_tips;
public TMP_Text textDistanceWarning;
public TMP_Text textDistanceRod;
BarRoot fishingBarRoot;
Tables _tables;
Dictionary<string, bool> barShake = new Dictionary<string, bool>();
FishingUpdateSys fishingUpdateSys;
public void InitPanel(FishingUpdateSys fishingUpdateSys)
{
this.fishingUpdateSys = fishingUpdateSys;
_tables = GContext.container.Resolve<Tables>();
start = transform.Find("start").gameObject;
combo = transform.Find("combo").gameObject;
blood = transform.Find("blood").gameObject;
distance = transform.Find("distance").gameObject;
distance_ani = distance.GetComponent<Animation>();
textDistance = transform.Find("distance/text_distance").GetComponent<TMP_Text>();
text_distance_tips = transform.Find("distance/text_distance_tips").GetComponent<TMP_Text>();
textDistanceWarning = transform.Find("distance/text_distance_warning").GetComponent<TMP_Text>();
textDistanceRod = transform.Find("distance/text_distance_warning/text_distance_rod").GetComponent<TMP_Text>();
fishingBarRoot = transform.Find("combo/barRoot").GetComponent<BarRoot>();
textDistanceWarning.transform.localScale = Vector3.one * 1.8f;
_comboText = transform.Find("combo/text_combo").GetComponent<TMP_Text>();
fx_ui_barlianji_full = transform.Find("combo/barRoot/bar_lianji/fx_ui_barlianji_full").gameObject;
FX_info_weakly = transform.Find("combo/FX_info_weakly").gameObject;
FX_info_powerful = transform.Find("combo/FX_info_powerful").gameObject;
fx_ui_fishingpanelbar_warm = transform.Find("combo/barRoot/fx_ui_fishingpanelbar_warm").gameObject;
fx_ui_hightligt_loop = transform.Find("combo/barRoot/highlight/fx_ui_hightligt_loop/1").GetComponent<ParticleSystem>();
combo.SetActive(false);
}
public void SetTensionBarScale(float MaxZoneScale)
{
fishingBarRoot.SetTensionBarScale(MaxZoneScale);
}
public void ShowTensionBar()
{
barShake.Clear();
FX_info_weakly.SetActive(false);
FX_info_powerful.SetActive(false);
_comboText.text = "";
fishingBarRoot.ShowTensionBar();
fx_ui_barlianji_full.SetActive(false);
fx_ui_hightligt_loop.Stop();
}
public void ShowState(int value)
{
start.SetActive(value == 0);
combo.SetActive(value == 1);
blood.SetActive(value == 1);
distance.SetActive(value > 0);
if (value == 2)
{
ShowMouse();
}
else if (fishing_mouse != null)
{
fishing_mouse.gameObject.SetActive(false);
}
}
async void ShowMouse()
{
if (fishing_mouse == null)
{
fishing_mouse = await Addressables.InstantiateAsync("fishing_mouse", transform).Task;
}
fishing_mouse.gameObject.SetActive(true);
}
public void UpdateTensionBar(int type, float power)
{
if (type == 1)
{
fx_ui_hightligt_loop.Play();
}
else
{
fx_ui_hightligt_loop.Stop();
}
bool isWeakly = power <= fishingUpdateSys.FishingFailProgressLeft;
bool isPowerful = power >= 1 - fishingUpdateSys.FishingFailProgressRight && fishingUpdateSys.NeverOvertensionToCrit <= 0;
FX_info_weakly.SetActive(isWeakly);
FX_info_powerful.SetActive(isPowerful);
fx_ui_fishingpanelbar_warm.SetActive(isWeakly || isPowerful);
//_comboText.gameObject.SetActive(!isWeakly && !isPowerful);
//_comboText.gameObject.SetActive(!isWeakly && !isPowerful);
fishingBarRoot.UpdateTensionBar(power);
}
public void UpdateComboMultiplayer(float _curComboMultiplayer)
{
//string comboText = "";
if (_curComboMultiplayer > 0)
{
fishingBarRoot.SetBarCombo(_curComboMultiplayer);
//if (_curComboMultiplayer < 0.99f)
// comboText = LocalizationMgr.GetFormatTextValue("UI_FishingPanel_Advanced_101001", ((int)(_curComboMultiplayer * 100)).ToString());
//else
// comboText = LocalizationMgr.GetText("UI_FishingPanel_Advanced_101002");
}
//_comboText.text = comboText;
}
public void ShowComboTips(bool isShow)
{
fishingBarRoot.arrow_guidance.SetActive(isShow);
}
public void ShowFishInfoPos(Vector3 bobber)
{
Vector3 targetPos = ConvertTools.WorldToScreenPoint(bobber);
float offset = 250.0f;
targetPos.y += offset;
transform.localPosition = targetPos; // 设置位置
}
/// <summary>
/// 距离显示
/// </summary>
/// <param name="fishSwimAreaZFar">远端</param>
/// <param name="fishSwimAreaZNear">近端</param>
/// <param name="curDistance">鱼线长度</param>
/// <param name="maxDistance">最大长度</param>
/// <param name="warning">红色警告</param>
public void OnDrawFishingLine(float fishSwimAreaZFar, float fishSwimAreaZNear, float curDistance, float maxDistance, float warningLineLengthRatio)
{
float warningLine = maxDistance * warningLineLengthRatio;
if (curDistance >= warningLine)
{
textDistanceWarning.gameObject.SetActive(true);
text_distance_tips.gameObject.SetActive(false);
textDistance.gameObject.SetActive(false);
if (curDistance > maxDistance)
{
curDistance = maxDistance;
}
textDistanceWarning.text = LocalizationMgr.GetFormatTextValue("UI_FishingPanel_Advanced_101009", curDistance.ToString("0"));
textDistanceRod.text = LocalizationMgr.GetFormatTextValue("UI_FishingPanel_Advanced_101009", maxDistance.ToString("0"));
}
else if (curDistance > fishSwimAreaZFar)
{
//橙色警告
text_distance_tips.text = LocalizationMgr.GetFormatTextValue("UI_FishingPanel_Advanced_101009", curDistance.ToString("0"));
text_distance_tips.gameObject.SetActive(true);
text_distance_tips.transform.localScale = Vector3.one *
(0.4f * ((curDistance - fishSwimAreaZFar) / (warningLine - fishSwimAreaZFar)) + 1.4f);
textDistance.gameObject.SetActive(false);
textDistanceWarning.gameObject.SetActive(false);
}
else
{
if (warningLine > fishSwimAreaZFar)
{
warningLine = fishSwimAreaZFar;
}
textDistance.text = LocalizationMgr.GetFormatTextValue("UI_FishingPanel_Advanced_101009", curDistance.ToString("0"));
textDistance.gameObject.SetActive(true);
textDistance.transform.localScale = Vector3.one *
(0.4f * ((curDistance - fishSwimAreaZNear) / (warningLine - fishSwimAreaZNear)) + 1f);
text_distance_tips.gameObject.SetActive(false);
textDistanceWarning.gameObject.SetActive(false);
}
}
public void EndFull(bool isStart, float comboTime)
{
_comboText.gameObject.SetActive(!isStart);
_comboText.text = "";
if (isStart)
{
fishingBarRoot.BarComboBack(comboTime);
}
}
public void PlayBarAni(string aniName, bool isShake, float barShakeAmp)
{
barShake[aniName] = isShake;
List<string> BarShakePriority = _tables.TbGlobalConfig.BarShakePriority;
for (int i = 0; i < BarShakePriority.Count; i++)
{
if (barShake.ContainsKey(BarShakePriority[i]) && barShake[BarShakePriority[i]])
{
fishingBarRoot.PlayAni(BarShakePriority[i], barShakeAmp);
return;
}
}
fishingBarRoot.PlayAni(BarShakePriority[^1], barShakeAmp);
}
}