2023-11-06 18:20:55 +08:00
|
|
|
using System.Collections;
|
|
|
|
|
using System.Collections.Generic;
|
2023-11-07 12:17:14 +08:00
|
|
|
using cfg;
|
2023-11-06 18:20:55 +08:00
|
|
|
using Framework.Condition;
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
|
|
namespace Gameplay.Level
|
|
|
|
|
{
|
|
|
|
|
public partial class Level
|
|
|
|
|
{
|
|
|
|
|
private int _currStageSuccessReactionID;
|
|
|
|
|
private int _currStageFailReactionID;
|
|
|
|
|
private int[] _currLevelStarReactionIDArray = new int[3];
|
2023-11-07 12:17:14 +08:00
|
|
|
private ConditionType[] _successConditionType = new ConditionType[1];
|
|
|
|
|
private List<List<float>> _successConditionArgs = new();
|
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-07 12:17:14 +08:00
|
|
|
_successConditionType = currStage.successCondition.GetConditionTypesAndArgsList(ref _successConditionArgs);
|
|
|
|
|
_currStageSuccessReactionID = ConditionReactor.Instance.AddReaction(_successConditionType,
|
|
|
|
|
_successConditionArgs, 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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<List<float>> failArgsList = new();
|
|
|
|
|
var failConditionTypes = currStage.failConditions.GetConditionTypesAndArgsList(ref failArgsList);
|
|
|
|
|
_currStageFailReactionID = ConditionReactor.Instance.AddReaction(failConditionTypes,
|
|
|
|
|
failArgsList, OnFailConditionChanged, null, false, false);
|
|
|
|
|
}
|
|
|
|
|
|
2023-11-07 12:17:14 +08:00
|
|
|
public string GetCurrStageSuccessConditionDesc()
|
|
|
|
|
{
|
|
|
|
|
if (CheckStageIndex(currentStageIndex))
|
|
|
|
|
{
|
|
|
|
|
return ConditionManager.Instance.GetConditionLocalization(_successConditionType[0],
|
|
|
|
|
_successConditionArgs[0]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
2023-11-06 18:20:55 +08:00
|
|
|
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()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|