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 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; } _currStageSuccessReactionID = ConditionReactor.Instance.AddReaction(currStage.successCondition, 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; } _currStageFailReactionID = ConditionReactor.Instance.AddReaction(currStage.failConditions, OnFailConditionChanged, null, false, false); } 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 OnStarConditionChanged(bool result, object param, int id) { var index = (int)param; _starTargets[index] = result; } private void InitStarConditions() { for (int i = 0; i < STAR_TARGET_COUNT; i++) { var condition = _levelData.starTarget[i]; var index = i; _currLevelStarReactionIDArray[i] = ConditionReactor.Instance.AddReaction(condition, OnStarConditionChanged, index); } } private void ReleaseStarConditions() { foreach (var reactionID in _currLevelStarReactionIDArray) { ConditionReactor.Instance.RemoveReaction(reactionID); } } } }