NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/Level/Level.Rule.StarGoal.Runtime.cs

1 line
5.7 KiB
C#

using Framework;
using Gameplay.Character;
namespace Gameplay.Level
{
public partial class Level
{
public interface IOnCharacterBorn
{
void OnCharacterBorn(Character.Character character);
void OnBattleBegin(CharacterManager characterManager);
}
public interface IOnCharacterDead
{
void OnCharacterDeadRemove(Character.Character character);
}
public interface IManualUpdate
{
void ManualUpdate(Level level);
}
public abstract class StarGoalRuntimeData
{
public enum StarGoalState
{
None,
Success,
Fail,
}
public StarGoalState State;
public int value;
public LevelData.StarGoal cfg;
public abstract bool IsSuccess();
}
public class StarGoalAllAliveRuntimeData : StarGoalRuntimeData,IOnCharacterDead
{
public override bool IsSuccess()
{
return State != StarGoalState.Fail;
}
public void OnCharacterDeadRemove(Character.Character character)
{
if (State == StarGoalState.None)
{
if (character.troopId == ETroopsId.Self)
{
State = StarGoalState.Fail;
EventManager.Instance.Send<StarGoalRuntimeData>(EventManager.EventName.LevelStarGoalFail, this);
DebugUtil.LogY($"StarGoal {cfg.starGoalType} failed");
}
}
}
}
public class StarGoalLeastJobRuntimeData : StarGoalRuntimeData,IOnCharacterBorn
{
public override bool IsSuccess()
{
return value >= cfg.count;
}
public void OnCharacterBorn(Character.Character character)
{
if (character.troopId == ETroopsId.Self
&& cfg.job == character.runtimeData.configData.job)
{
value++;
if (State == StarGoalState.None && value >= cfg.count)
{
State = StarGoalState.Success;
EventManager.Instance.Send<StarGoalRuntimeData>(EventManager.EventName.LevelStarGoalComplete, this);
DebugUtil.LogY($"StarGoal {cfg.starGoalType} complete");
}
}
}
public void OnBattleBegin(CharacterManager characterManager)
{
characterManager?.ForEach(OnCharacterBorn);
}
}
public class StarGoalLeastFactionRuntimeData : StarGoalRuntimeData,IOnCharacterBorn
{
public override bool IsSuccess()
{
return value >= cfg.count;
}
public void OnCharacterBorn(Character.Character character)
{
if (character.troopId == ETroopsId.Self
&& cfg.faction == character.runtimeData.configData.faction)
{
value++;
if (State == StarGoalState.None && value >= cfg.count)
{
State = StarGoalState.Success;
EventManager.Instance.Send<StarGoalRuntimeData>(EventManager.EventName.LevelStarGoalComplete, this);
DebugUtil.LogY($"StarGoal {cfg.starGoalType} complete");
}
}
}
public void OnBattleBegin(CharacterManager characterManager)
{
characterManager?.ForEach(OnCharacterBorn);
}
}
public class StarGoalLeastRarityRuntimeData : StarGoalRuntimeData,IOnCharacterBorn
{
public override bool IsSuccess()
{
return value >= cfg.count;
}
public void OnCharacterBorn(Character.Character character)
{
if (character.troopId == ETroopsId.Self
&& cfg.rarity == character.runtimeData.configData.rarity)
{
value++;
if (State == StarGoalState.None && value >= cfg.count)
{
State = StarGoalState.Success;
EventManager.Instance.Send<StarGoalRuntimeData>(EventManager.EventName.LevelStarGoalComplete, this);
DebugUtil.LogY($"StarGoal {cfg.starGoalType} complete");
}
}
}
public void OnBattleBegin(CharacterManager characterManager)
{
characterManager?.ForEach(OnCharacterBorn);
}
}
public class StarGoalLeastTimeRuntimeData : StarGoalRuntimeData,IManualUpdate
{
public override bool IsSuccess()
{
return value <= cfg.time;
}
public void ManualUpdate(Level level)
{
value = (int)level.LevelTime;
if (State == StarGoalState.None && value >= cfg.time)
{
State = StarGoalState.Fail;
EventManager.Instance.Send<StarGoalRuntimeData>(EventManager.EventName.LevelStarGoalFail, this);
DebugUtil.LogY($"StarGoal {cfg.starGoalType} failed");
}
}
}
}
}