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

1 line
3.9 KiB
C#

using System.Collections.Generic;
using Gameplay.Character;
namespace Gameplay.Level
{
public partial class Level
{
private readonly Dictionary<LevelData.StarGoal.StarGoalType, StarGoalRuntimeData> _starGoalRuntimeDatas =
new Dictionary<LevelData.StarGoal.StarGoalType, StarGoalRuntimeData>(4);
public StarGoalRuntimeData GetStarGoalRuntimeData(LevelData.StarGoal.StarGoalType type)
{
return _starGoalRuntimeDatas[type];
}
public List<StarGoalRuntimeData> GetAllStarGoalRuntimeData()
{
List<StarGoalRuntimeData> result = new List<StarGoalRuntimeData>(_starGoalRuntimeDatas.Count);
for (int i = 0; i < _levelData.starGoals.Count; i++)
{
if (_starGoalRuntimeDatas.TryGetValue(_levelData.starGoals[i].starGoalType, out var data))
{
result.Add(data);
}
}
return result;
}
private void InitStarGoalRuntimeData()
{
_levelData.starGoals.ForEach(goal =>
{
StarGoalRuntimeData data = null;
switch (goal.starGoalType)
{
case LevelData.StarGoal.StarGoalType.AllAlive:
data = new StarGoalAllAliveRuntimeData();
break;
case LevelData.StarGoal.StarGoalType.LeastJob:
data = new StarGoalLeastJobRuntimeData();
break;
case LevelData.StarGoal.StarGoalType.LeastFaction:
data = new StarGoalLeastFactionRuntimeData();
break;
case LevelData.StarGoal.StarGoalType.LeastRarity:
data = new StarGoalLeastRarityRuntimeData();
break;
case LevelData.StarGoal.StarGoalType.LeastTime:
data = new StarGoalLeastTimeRuntimeData();
break;
default:
break;
}
if (data != null)
{
data.cfg = goal;
_starGoalRuntimeDatas[goal.starGoalType] = data;
}
});
}
private void StarGoalOnCharacterDeadRemove(Character.Character character)
{
if (!IsInBattle())
{
return;
}
foreach (var data in _starGoalRuntimeDatas)
{
if (data.Value is IOnCharacterDead handle)
{
handle.OnCharacterDeadRemove(character);
}
}
}
private void StarGoalOnCharacterBorn(Character.Character character)
{
if (!IsInBattle())
{
return;
}
foreach (var data in _starGoalRuntimeDatas)
{
if (data.Value is IOnCharacterBorn handle)
{
handle.OnCharacterBorn(character);
}
}
}
public void StarGoalOnBattleBegin()
{
if (!IsInBattle())
{
return;
}
foreach (var data in _starGoalRuntimeDatas)
{
if (data.Value is IOnCharacterBorn handle)
{
handle.OnBattleBegin(_characterManager);
}
}
}
private void StarGoalManualUpdate()
{
foreach (var data in _starGoalRuntimeDatas)
{
if (data.Value is IManualUpdate handle)
{
handle.ManualUpdate(this);
}
}
}
}
}