1 line
5.7 KiB
C#
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");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} |