NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/Level/Level.Condition.cs

88 lines
2.8 KiB
C#

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<List<float>> _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<List<float>> 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()
{
}
}
}