Files
5.24BuYu/Assets/MyGame/Scripts/Characters/Monster/MonsterControl_BossBase.cs
T

284 lines
9.8 KiB
C#
Raw Normal View History

2026-04-25 18:53:04 +08:00
using Assets.MyGame.Scripts.Net.APIResponses.Enum;
2026-04-26 00:55:55 +08:00
using Assets.MyGame.Scripts.Net.WebResponses;
2026-04-25 18:53:04 +08:00
using DG.Tweening;
using System;
using System.Collections;
2026-03-18 17:26:14 +08:00
using System.Collections.Generic;
2026-04-24 22:51:34 +08:00
using TMPro;
2026-03-18 17:26:14 +08:00
using UnityEngine;
2026-03-27 15:18:35 +08:00
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
2026-03-18 17:26:14 +08:00
using static MonsterMoveLine;
2026-04-25 18:53:04 +08:00
using Random = UnityEngine.Random;
2026-03-18 17:26:14 +08:00
public class MonsterControl_BossBase : MonsterContral
{
2026-04-24 22:51:34 +08:00
2026-03-18 17:26:14 +08:00
public string bossName;
2026-04-24 22:51:34 +08:00
[Header("爆奖")]
public LayeredPool layeredPool;
public TextMeshProUGUI tMP_CurrBossScore;//boss分数
public long currBossScoreValue=0;//boss分数
public long bossScoreValue=0;//boss分数
public int poolNum;//奖池
public int prizeCount;//奖励数量
2026-04-28 01:53:41 +08:00
public Action<int> JiaFen;
2026-04-25 22:41:38 +08:00
public List<List<RedPacketRecord>> redPacketRecords = new List<List<RedPacketRecord>>();
2026-06-02 14:57:23 +08:00
public bool isToUI = true;
2026-04-26 20:29:22 +08:00
public Camera ZhuCam;
2026-05-27 19:47:06 +08:00
2026-04-24 22:51:34 +08:00
public override void Awake()
{
base.Awake();
2026-05-01 06:26:50 +08:00
isRotate = false;
2026-04-26 20:29:22 +08:00
ZhuCam = GameManager.Instance.ZhuCam;
2026-05-06 01:34:23 +08:00
action_effect_DieAward = (obj) =>
{
tMP_CurrBossScore = obj
.transform.GetChild(0).GetComponent<TextMeshProUGUI>();
};
2026-04-28 01:53:41 +08:00
}
2026-04-29 23:53:55 +08:00
public override void OnEnable()
2026-04-28 01:53:41 +08:00
{
2026-04-29 23:53:55 +08:00
base.OnEnable();
2026-05-06 01:34:23 +08:00
layeredPool = null;
2026-04-28 01:53:41 +08:00
FishResourcesData fishResourcesData;
fishResourcesData = FishResourcesData.fishResourcesDatasDic[fishTypeID];
if (fishResourcesData.showAudio != null && fishResourcesData.showAudio.Count > 0)
{
var v = fishResourcesData.showAudio;
int index = Random.Range(0, v.Count);
AudioManager.Instance.PlayerFX(v[index]);
}
2026-05-06 01:34:23 +08:00
}
public void BigPrizeNotFish(int num)
{
if (layeredPool == null)
{
layeredPool = new LayeredPool(poolNum, prizeCount); // 初始化LayeredPool,假设5个人,10000分
}
if (tMP_CurrBossScore == null)
{
tMP_CurrBossScore = Instantiate(CreateFishManager.Instance.dieFXPrefabAwardTmp, CreateFishManager.Instance.currGameType.subPanelParent).transform.GetChild(0).GetComponent<TextMeshProUGUI>();
}
var v = layeredPool.BossGlodCoinNotFish(num);
redPacketRecords.Add(v);
foreach (var item in v)
{
bossScoreValue += item.Amount;
}
turretNum = CreateFishManager.Instance.currGameType.currSitData.consumeGoldNum;
GameManager.Instance.StartCoroutine(ShowBigPrize());
GameManager.Instance.StartCoroutine(jiafen());
2026-04-24 22:51:34 +08:00
}
2026-05-18 18:39:11 +08:00
public void BigPrize(int min = 4, int max = 8)
2026-04-24 22:51:34 +08:00
{
if (layeredPool==null)
{
layeredPool = new LayeredPool(poolNum, prizeCount); // 初始化LayeredPool,假设5个人,10000分
}
if (tMP_CurrBossScore == null)
{
tMP_CurrBossScore = Instantiate(CreateFishManager.Instance.dieFXPrefabAwardTmp, CreateFishManager.Instance.currGameType.subPanelParent).transform.GetChild(0).GetComponent<TextMeshProUGUI>();
}
2026-04-25 18:53:04 +08:00
2026-04-27 00:44:18 +08:00
var v = layeredPool.BossGlodCoinRandrom(tMP_CurrBossScore.transform.position,min,max);
2026-04-25 22:41:38 +08:00
redPacketRecords.Add(v);
2026-04-24 22:51:34 +08:00
foreach (var item in v)
{
bossScoreValue += item.Amount;
}
2026-04-25 22:41:38 +08:00
turretNum = CreateFishManager.Instance.currGameType.currSitData.consumeGoldNum;
GameManager.Instance. StartCoroutine(ShowBigPrize());
2026-04-26 00:55:55 +08:00
GameManager.Instance.StartCoroutine(jiafen());
2026-04-24 22:51:34 +08:00
}
2026-04-25 22:41:38 +08:00
bool isJia = false;
2026-04-24 22:51:34 +08:00
public void BigPrizeAll()
{
int sss = CreateFishManager.Instance.fishDatas_hashCodekey_Small.Count;
prizeCount = 1;
if (layeredPool == null)
{
layeredPool = new LayeredPool(poolNum, prizeCount); // 初始化LayeredPool,假设5个人,10000分
}
if (tMP_CurrBossScore == null)
{
tMP_CurrBossScore = Instantiate(CreateFishManager.Instance.dieFXPrefabAwardTmp, CreateFishManager.Instance.currGameType.subPanelParent).transform.GetChild(0).GetComponent<TextMeshProUGUI>();
}
2026-04-25 18:53:04 +08:00
var v = layeredPool.BossGlodCoin(sss, tMP_CurrBossScore.transform.position);
2026-04-25 22:41:38 +08:00
redPacketRecords.Add(v);
2026-04-24 22:51:34 +08:00
foreach (var item in v)
{
bossScoreValue += item.Amount;
}
2026-04-25 22:41:38 +08:00
turretNum = CreateFishManager.Instance.currGameType.currSitData.consumeGoldNum;
2026-04-26 00:55:55 +08:00
GameManager.Instance.StartCoroutine(ShowBigPrize());
GameManager.Instance.StartCoroutine(jiafen());
2026-04-24 22:51:34 +08:00
}
2026-04-25 22:41:38 +08:00
long turretNum;
IEnumerator ShowBigPrize()
2026-04-24 22:51:34 +08:00
{
2026-04-25 22:41:38 +08:00
if (!isJia)
2026-04-24 22:51:34 +08:00
{
2026-04-25 22:41:38 +08:00
isJia=true;
yield return new WaitForSeconds(1);
turretNum = Random.Range((int)(turretNum / 2), (int)turretNum + 1);
while (currBossScoreValue < bossScoreValue)
2026-04-24 22:51:34 +08:00
{
2026-04-25 22:41:38 +08:00
currBossScoreValue += 1 * turretNum; // 每次增加1000分
if (currBossScoreValue > bossScoreValue)
{
currBossScoreValue = bossScoreValue; // 确保不超过总分数
}
tMP_CurrBossScore.text = currBossScoreValue.ToString(); // 更新UI显示
//yield return new WaitForSeconds(0.05f); // 每0.1秒更新一次
yield return null;
2026-04-24 22:51:34 +08:00
}
2026-04-25 22:41:38 +08:00
isJia = false;
2026-04-24 22:51:34 +08:00
}
2026-04-25 22:41:38 +08:00
2026-04-24 22:51:34 +08:00
}
2026-04-26 00:55:55 +08:00
public IEnumerator jiafen()
{
yield return new WaitForSeconds(1.5f);
Transform tra = tMP_CurrBossScore.transform.parent;
GameObject obj = CreateFishManager.Instance.dieFXPrefabAwardTmp_AddScore;
2026-04-28 01:53:41 +08:00
2026-04-26 00:55:55 +08:00
List<RedPacketRecord> redRecords = new List<RedPacketRecord>();
redRecords = redPacketRecords[0];
redPacketRecords.RemoveAt(0);
foreach (var item in redRecords)
{
yield return new WaitForSeconds(0.15f);
Instantiate(obj, tra.position, Quaternion.identity, tra).transform.GetChild(0).GetComponent<TextMeshProUGUI>().text = CoinScript.NumAdd(item.Amount.ToString());
2026-04-28 01:53:41 +08:00
AudioManager.Instance.PlayerFX(61009);
2026-04-26 00:55:55 +08:00
}
}
2026-05-01 06:26:50 +08:00
public bool isDieFish=false;
2026-04-26 00:55:55 +08:00
public override void DieFish(RoomKillNotice obj = null)
{
2026-05-01 06:26:50 +08:00
isDieFish = true;
2026-05-04 17:21:52 +08:00
//CreateFishManager.Instance.Id_DieFish_NotFX(guid);
2026-04-26 00:55:55 +08:00
GameManager.Instance.cameraShake.ShakePresets.Explosion2D(3f, 4f, 1f);
if (obj != null)
{
poolNum = obj.gold;
}
2026-04-28 01:53:41 +08:00
FishResourcesData fishResourcesData;
fishResourcesData = FishResourcesData.fishResourcesDatasDic[fishTypeID];
if (fishResourcesData.dieAudio!=null&& fishResourcesData.dieAudio.Count>0)
{
var v = fishResourcesData.dieAudio;
int index = Random.Range(0, v.Count);
AudioManager.Instance.PlayerFX(v[index]);
}
2026-04-26 00:55:55 +08:00
}
2026-04-28 01:53:41 +08:00
2026-04-24 22:51:34 +08:00
public void EndBigPrize()
{
}
2026-03-27 15:18:35 +08:00
public async override void Init(string pathId, float Time, bool isyuzhen = false, string yzID = "")
2026-03-18 17:26:14 +08:00
{
2026-04-25 18:53:04 +08:00
2026-04-24 22:51:34 +08:00
2026-03-18 17:26:14 +08:00
isyz = isyuzhen;
this.yzID = yzID;
2026-04-25 18:53:04 +08:00
2026-03-31 17:00:05 +08:00
//播报
2026-03-27 15:18:35 +08:00
switch (GameManager.Instance.gameData.currGameType)
{
case GameType.JQQD:
break;
case GameType.defaultPanel:
break;
case GameType.FLZY:
2026-05-01 06:26:50 +08:00
//{
// AsyncOperationHandle<Sprite> handle = Addressables.LoadAssetAsync<Sprite>("Assets/Art/XJMH/pw/pw_sprite/handbook/" + bossName + ".png");
// await handle.Task;
// Sprite sprite = handle.Result;
// CreateFishManager.Instance. currGameType.subUIManager.ShowBoardBoss(sprite, bossName);
2026-03-27 15:18:35 +08:00
2026-05-01 06:26:50 +08:00
//}
2026-04-24 22:51:34 +08:00
2026-03-27 15:18:35 +08:00
break;
2026-05-07 03:46:03 +08:00
case GameType.YYSC:
2026-03-27 15:18:35 +08:00
//还没有写呢
2026-05-01 06:26:50 +08:00
//{
// AsyncOperationHandle<Sprite> handle = Addressables.LoadAssetAsync<Sprite>("Assets/Art/XJMH/pw/pw_sprite/handbook/" + bossName + ".png");
// await handle.Task;
// Sprite sprite = handle.Result;
// CreateFishManager.Instance.currGameType.subUIManager.ShowBoardBoss(sprite, bossName);
2026-03-27 15:18:35 +08:00
2026-05-01 06:26:50 +08:00
//}
2026-03-27 15:18:35 +08:00
break;
case GameType.ZGXQ:
2026-04-24 22:51:34 +08:00
2026-03-27 15:18:35 +08:00
break;
case GameType.XJMH:
{
AsyncOperationHandle<Sprite> handle = Addressables.LoadAssetAsync<Sprite>("Assets/Art/XJMH/pw/pw_sprite/handbook/" + bossName + ".png");
await handle.Task;
Sprite sprite = handle.Result;
2026-04-24 22:51:34 +08:00
CreateFishManager.Instance.currGameType.subUIManager.ShowBoardBoss(sprite, bossName);
2026-03-27 15:18:35 +08:00
}
break;
case GameType.HHWK:
2026-05-01 06:26:50 +08:00
//{
// AsyncOperationHandle<Sprite> handle = Addressables.LoadAssetAsync<Sprite>("Assets/Art/XJMH/pw/pw_sprite/handbook/" + bossName + ".png");
// await handle.Task;
// Sprite sprite = handle.Result;
// CreateFishManager.Instance.currGameType.subUIManager.ShowBoardBoss(sprite, bossName);
2026-03-27 15:18:35 +08:00
2026-05-01 06:26:50 +08:00
//}
2026-03-27 15:18:35 +08:00
break;
default:
break;
}
2026-03-31 17:00:05 +08:00
BezierCurveData bezierCurveData = MonsterMoveLine.dic_BezierCurveDatas[bossName + pathId];
monsterData.moveLine.Init(bezierCurveData, Time);
2026-03-18 17:26:14 +08:00
}
2026-04-29 23:53:55 +08:00
public override void OnDisable()
2026-04-25 18:53:04 +08:00
{
2026-04-29 23:53:55 +08:00
base.OnDisable();
2026-05-01 06:26:50 +08:00
if (isDieFish)
{
2026-04-25 22:41:38 +08:00
GameManager.Instance.StartCoroutine(yanchidie());
2026-05-01 06:26:50 +08:00
}
2026-04-25 22:41:38 +08:00
}
2026-04-26 20:29:22 +08:00
public float dieTime = 3f;
2026-05-22 19:30:02 +08:00
public Vector3 v3;//分数飞出位置
2026-04-25 22:41:38 +08:00
IEnumerator yanchidie()
{
2026-04-26 20:29:22 +08:00
yield return new WaitForSeconds(dieTime);
2026-05-01 06:26:50 +08:00
tMP_CurrBossScore.transform.parent.DOMove(v3, 0.5f).OnComplete(() =>
2026-04-25 18:53:04 +08:00
{
2026-04-25 22:41:38 +08:00
2026-04-28 01:53:41 +08:00
JiaFen?.Invoke(0);
2026-04-25 22:41:38 +08:00
2026-04-25 18:53:04 +08:00
Destroy(tMP_CurrBossScore.transform.parent.gameObject);
});
2026-04-25 22:41:38 +08:00
2026-04-25 18:53:04 +08:00
}
2026-04-24 22:51:34 +08:00
2026-03-18 17:26:14 +08:00
}