2024-07-12 13:30:25 +08:00
|
|
|
using Framework;
|
2023-11-06 18:20:55 +08:00
|
|
|
using Framework.Condition;
|
|
|
|
|
|
|
|
|
|
namespace Gameplay.Level
|
|
|
|
|
{
|
|
|
|
|
public partial class Level
|
|
|
|
|
{
|
|
|
|
|
private int _currStageSuccessReactionID;
|
|
|
|
|
private int _currStageFailReactionID;
|
2024-09-23 19:33:59 +08:00
|
|
|
private int[] _currLevelStarReactionIDArray = new int[15];
|
2023-11-06 18:20:55 +08:00
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
2023-11-08 15:05:19 +08:00
|
|
|
_currStageSuccessReactionID = ConditionReactor.Instance.AddReaction(currStage.successCondition,
|
|
|
|
|
OnSuccessConditionChanged, null, false);
|
2023-11-06 18:20:55 +08:00
|
|
|
|
|
|
|
|
if (currStage.failConditions == null || currStage.failConditions.Count == 0)
|
|
|
|
|
{
|
|
|
|
|
DebugUtil.LogError(
|
|
|
|
|
$"currStage's fail condition is null or 0 elements!stageIndex:{currentStageIndex} levelID:{ID}");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2023-11-08 15:05:19 +08:00
|
|
|
_currStageFailReactionID = ConditionReactor.Instance.AddReaction(currStage.failConditions,
|
|
|
|
|
OnFailConditionChanged, null, false, false);
|
2024-07-12 13:30:25 +08:00
|
|
|
|
|
|
|
|
EventManager.Instance.Register(EventManager.EventName.LevelBattleBegin, CheckSuccessAndFailCondition);
|
2023-11-07 12:17:14 +08:00
|
|
|
}
|
|
|
|
|
|
2023-11-06 18:20:55 +08:00
|
|
|
private void ReleaseStageConditions()
|
|
|
|
|
{
|
2024-07-12 13:30:25 +08:00
|
|
|
EventManager.Instance.Unregister(EventManager.EventName.LevelBattleBegin, CheckSuccessAndFailCondition);
|
|
|
|
|
|
2023-11-06 18:20:55 +08:00
|
|
|
ConditionReactor.Instance.RemoveReaction(_currStageSuccessReactionID);
|
|
|
|
|
ConditionReactor.Instance.RemoveReaction(_currStageFailReactionID);
|
|
|
|
|
}
|
|
|
|
|
|
2024-07-12 13:30:25 +08:00
|
|
|
private void CheckSuccessAndFailCondition()
|
|
|
|
|
{
|
|
|
|
|
ConditionReactor.Instance.ExecuteReaction(_currStageSuccessReactionID);
|
|
|
|
|
ConditionReactor.Instance.ExecuteReaction(_currStageFailReactionID);
|
|
|
|
|
}
|
|
|
|
|
|
2023-11-06 18:20:55 +08:00
|
|
|
private void OnSuccessConditionChanged(bool result, object param, int id)
|
|
|
|
|
{
|
|
|
|
|
if (result)
|
|
|
|
|
{
|
|
|
|
|
OnStageSuccess();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnFailConditionChanged(bool result, object param, int id)
|
|
|
|
|
{
|
|
|
|
|
if (result)
|
|
|
|
|
{
|
|
|
|
|
OnStageFailed();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-11-08 15:05:19 +08:00
|
|
|
private void OnStarConditionChanged(bool result, object param, int id)
|
|
|
|
|
{
|
|
|
|
|
var index = (int)param;
|
|
|
|
|
_starTargets[index] = result;
|
|
|
|
|
}
|
|
|
|
|
|
2023-11-06 18:20:55 +08:00
|
|
|
private void InitStarConditions()
|
|
|
|
|
{
|
2024-09-23 19:33:59 +08:00
|
|
|
if (_levelData.scoreLevel) // 评分关
|
2023-11-08 15:05:19 +08:00
|
|
|
{
|
2024-09-23 19:33:59 +08:00
|
|
|
for (int i = 0; i < _levelData.scoreTarget.Count; i++)
|
|
|
|
|
{
|
|
|
|
|
ConditionModifier conditionModifier = _levelData.scoreTarget[i];
|
|
|
|
|
if (null != conditionModifier)
|
|
|
|
|
_currLevelStarReactionIDArray[i] = ConditionReactor.Instance.AddReaction(conditionModifier, OnStarConditionChanged, i);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else // 星级关
|
|
|
|
|
{
|
|
|
|
|
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);
|
|
|
|
|
}
|
2023-11-08 15:05:19 +08:00
|
|
|
}
|
2023-11-06 18:20:55 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void ReleaseStarConditions()
|
|
|
|
|
{
|
2023-11-08 15:05:19 +08:00
|
|
|
foreach (var reactionID in _currLevelStarReactionIDArray)
|
|
|
|
|
{
|
|
|
|
|
ConditionReactor.Instance.RemoveReaction(reactionID);
|
|
|
|
|
}
|
2023-11-06 18:20:55 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|