2023-10-19 15:00:19 +08:00
|
|
|
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 ove
|