100 lines
3.2 KiB
C#
100 lines
3.2 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using cfg;
|
|
using Framework;
|
|
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);
|
|
|
|
EventManager.Instance.Register(EventManager.EventName.LevelBattleBegin, CheckSuccessAndFailCondition);
|
|
}
|
|
|
|
private void ReleaseStageConditions()
|
|
{
|
|
EventManager.Instance.Unregister(EventManager.EventName.LevelBattleBegin, CheckSuccessAndFailCondition);
|
|
|
|
ConditionReactor.Instance.RemoveReaction(_currStageSuccessReactionID);
|
|
ConditionReactor.Instance.RemoveReaction(_currStageFailReactionID);
|
|
}
|
|
|
|
private void CheckSuccessAndFailCondition()
|
|
{
|
|
ConditionReactor.Instance.ExecuteReaction(_currStageSuccessReactionID);
|
|
ConditionReactor.Instance.ExecuteReaction(_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);
|
|
}
|
|
}
|
|
}
|
|
} |