using System.Collections; using System.Collections.Generic; using cfg; using Framework.Condition; using UnityEngine; namespace Gameplay.Level { public partial class Level { private int _currStageSuccessReactionID; private int _currStageFailReactionID; private int[] _currLevelStarReactionIDArray = new int[3]; private ConditionType[] _successConditionType = new ConditionType[1]; private List> _successConditionArgs = new(); private void InitStageConditions() { var currStage = CurrentStage; if (currStage == null) return; if (currStage.successCondition == null) { DebugUtil.LogError( $"currStage's success condition is null!stageIndex:{currentStageIndex} levelID:{ID}"); return; } _successConditionType = currStage.successCondition.GetConditionTypesAndArgsList(ref _successConditionArgs); _currStageSuccessReactionID = ConditionReactor.Instance.AddReaction(_successConditionType, _successConditionArgs, OnSuccessConditionChanged, null, false); if (currStage.failConditions == null || currStage.failConditions.Count == 0) { DebugUtil.LogError( $"currStage's fail condition is null or 0 elements!stageIndex:{currentStageIndex} levelID:{ID}"); return; } List> failArgsList = new(); var failConditionTypes = currStage.failConditions.GetConditionTypesAndArgsList(ref failArgsList); _currStageFailReactionID = ConditionReactor.Instance.AddReaction(failConditionTypes, failArgsList, OnFailConditionChanged, null, false, false); } public string GetCurrStageSuccessConditionDesc() { if (CheckStageIndex(currentStageIndex)) { return ConditionManager.Instance.GetConditionLocalization(_successConditionType[0], _successConditionArgs[0]); } return null; } private void ReleaseStageConditions() { ConditionReactor.Instance.RemoveReaction(_currStageSuccessReactionID); ConditionReactor.Instance.RemoveReaction(_currStageFailReactionID); } private void OnSuccessConditionChanged(bool result, object param, int id) { if (result) { OnStageSuccess(); } } private void OnFailConditionChanged(bool result, object param, int id) { if (result) { OnStageFailed(); } } private void InitStarConditions() { } private void ReleaseStarConditions() { } } }