refactor: 스킬 트리거 효과를 그룹 구조로 변경 — 하나의 애니메이션 이벤트로 여러 effect 발동 가능
- SkillGemTriggeredEffectEntry를 공용 타입 SkillTriggeredEffectEntry로 승격 - SkillData.effects를 List<SkillTriggeredEffectEntry>로 변경 (기존 flat list는 OnValidate에서 자동 마이그레이션) - SkillLoadoutEntry, PlayerSkillInput 등 소비자 코드 그룹 구조 대응 - 기존 스킬 에셋 마이그레이션 완료 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -321,15 +321,22 @@ namespace Colosseum.Skills
|
||||
if (destination == null)
|
||||
return;
|
||||
|
||||
if (baseSkill != null && baseSkill.Effects != null)
|
||||
if (baseSkill != null && baseSkill.TriggeredEffects != null)
|
||||
{
|
||||
for (int i = 0; i < baseSkill.Effects.Count; i++)
|
||||
for (int i = 0; i < baseSkill.TriggeredEffects.Count; i++)
|
||||
{
|
||||
SkillEffect effect = baseSkill.Effects[i];
|
||||
if (effect == null)
|
||||
SkillTriggeredEffectEntry entry = baseSkill.TriggeredEffects[i];
|
||||
if (entry == null || entry.Effects == null)
|
||||
continue;
|
||||
|
||||
AddTriggeredEffect(destination, i, effect);
|
||||
for (int j = 0; j < entry.Effects.Count; j++)
|
||||
{
|
||||
SkillEffect effect = entry.Effects[j];
|
||||
if (effect == null)
|
||||
continue;
|
||||
|
||||
AddTriggeredEffect(destination, entry.TriggerIndex, effect);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -344,7 +351,7 @@ namespace Colosseum.Skills
|
||||
|
||||
for (int j = 0; j < gem.TriggeredEffects.Count; j++)
|
||||
{
|
||||
SkillGemTriggeredEffectEntry entry = gem.TriggeredEffects[j];
|
||||
SkillTriggeredEffectEntry entry = gem.TriggeredEffects[j];
|
||||
if (entry == null || entry.Effects == null)
|
||||
continue;
|
||||
|
||||
@@ -499,7 +506,7 @@ namespace Colosseum.Skills
|
||||
{
|
||||
if (baseSkill.CastStartEffects != null && CheckEffectsForTargetType(baseSkill.CastStartEffects, type))
|
||||
return true;
|
||||
if (baseSkill.Effects != null && CheckEffectsForTargetType(baseSkill.Effects, type))
|
||||
if (baseSkill.TriggeredEffects != null && CheckTriggeredEntriesForTargetType(baseSkill.TriggeredEffects, type))
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -514,17 +521,22 @@ namespace Colosseum.Skills
|
||||
if (gem.CastStartEffects != null && CheckEffectsForTargetType(gem.CastStartEffects, type))
|
||||
return true;
|
||||
|
||||
if (gem.TriggeredEffects != null)
|
||||
{
|
||||
for (int j = 0; j < gem.TriggeredEffects.Count; j++)
|
||||
{
|
||||
SkillGemTriggeredEffectEntry entry = gem.TriggeredEffects[j];
|
||||
if (entry == null || entry.Effects == null) continue;
|
||||
if (gem.TriggeredEffects != null && CheckTriggeredEntriesForTargetType(gem.TriggeredEffects, type))
|
||||
return true;
|
||||
}
|
||||
|
||||
if (CheckEffectsForTargetType(entry.Effects, type))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static bool CheckTriggeredEntriesForTargetType(IReadOnlyList<SkillTriggeredEffectEntry> entries, TargetType type)
|
||||
{
|
||||
if (entries == null) return false;
|
||||
|
||||
for (int i = 0; i < entries.Count; i++)
|
||||
{
|
||||
SkillTriggeredEffectEntry entry = entries[i];
|
||||
if (entry != null && CheckEffectsForTargetType(entry.Effects, type))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user