using UnityEngine; using static BattleMgr; public class HuntEagleDg : GameMod { [SerializeField] Transform eagleHerdSpawnPos; [SerializeField] Transform playerSpawnPos; [SerializeField] HuntEagleDgView view; BattleMgr battleMgr => BattleMgr.Instance; float modElapsedTime; IVCharacter player; public new HuntEagleDgData Data => base.Data as HuntEagleDgData; public Character EagleHerd { get; private set; } public float ModRemainingTime => Mathf.Max(Data.LimitTime - modElapsedTime, 0f); protected override void OnStartMod() { SoundMgr.Instance.PlayBgm(Data.BGMPath); BattleMgr.Instance.SetBackGround(Data.BackGroundPath); //Summon player player = battleMgr.GetPlayer(); var buffMgr = BuffMgr.Instance; player.ResetDebuff(); player.SetStatus( buffMgr.GetCharAtk(), buffMgr.GetCharHp(), buffMgr.GetCharCrtDam(), buffMgr.GetCharCrtRate(), buffMgr.GetCharMov(), buffMgr.GetCharSpd(), GameProperty.Instance.PlayerCharacterAttackRange); player.transform.position = playerSpawnPos.position; player.Summon(); MateMgr.Instance.EndAllSettedMateSkillCool(); MateMgr.Instance.SetAcitveMateToFirst(); MateMgr.Instance.ActiveMate?.Spawn(player, player.LookDirection); battleMgr.SetPetsSummonState(true); battleMgr.SetGudiansSummonState(true); battleMgr.ShowTalkBox(TalkType.Summon); InstantiateEagleHerd(); modElapsedTime = 0f; IVCameraController.SMoveCamera(player.transform.position); //Set UI GameUIMgr.OnOffStageInfo(false); view?.SetDungeon(this); view?.Show(); } private void InstantiateEagleHerd() { var enemyData = new CharacterData(Data.NormalEnemyCreator.property); if (enemyData.TryGetStat(StatID.Hp, out var hpStat)) hpStat.DefaultValue = Data.NormalEnemyCreator.GetHp(Data.Level); EagleHerd = Instantiate(enemyData.Prefab); EagleHerd.SetData(enemyData); EagleHerd.AddTags(EntityTag.Enemy); EagleHerd.SetTargetTags(LayerMask.GetMask(GameProperty.Instance.CharacterLayerName), EntityTag.Player); EagleHerd.Spawn(eagleHerdSpawnPos.position); EagleHerd.ChangeLookDirection(player.transform); EagleHerd.OnDisposed += DestroyCharacter; battleMgr.RegistBattleEntities(EagleHerd); } private void DestroyCharacter(Character target) { if (target == null || target.gameObject == null) return; battleMgr.UnregistBattleEntities(target); CoroutineHandler.Instance.DelayCall(1f, () => Destroy(target.gameObject)); } protected override void OnUpdate() { if (BattleMgr.Instance.BattlePause) return; modElapsedTime += Time.deltaTime; if (modElapsedTime >= Data.LimitTime) { battleMgr.ShowTalkBox(TalkType.Die); FireOnDone(Result.Timeout); } else { if(EagleHerd.IsDead) { battleMgr.ShowTalkBox(TalkType.Attack); Data.TryGetReward(Data.Level, (totalReward, result) => { if (!result) return; GameUIMgr.SOpenPopupGoods(totalReward); GameUIMgr.RefreshHuntEagleDgTicket(); }, Data.GetRewardMultiplier()); Data.SetLevel(Data.Level + 1); Data.EnterTicketCount--; Data.ClearCount++; FireOnDone(Result.Success); } else if (player.IsDead) { battleMgr.ShowTalkBox(TalkType.Die); FireOnDone(Result.Dead); } } } protected override void OnEndMod() { view?.Hide(); GameUIMgr.OnOffStageInfo(true); if(!EagleHerd.IsDead) { DestroyCharacter(EagleHerd); } if (Data.AutoProgress && Data.EnterTicketCount <= 0) { GameUIMgr.SOpenToast(LocalizationText.GetText("notice_stop_autoprogress_0")); Data.AutoProgress = false; } Data.TryCount++; } public void QuitDungeon() { battleMgr.ShowTalkBox(TalkType.Die); FireOnDone(Result.Quit); } }