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