작성
·
47
0
EffectAction에서
public string BuildDescription(Effect effect, string description, int stackActionIndex, int stack, int effectIndex)
{
var stringsByKeyword = GetStringsByKeyword(effect);
if (stringsByKeyword == null)
return description;
if (stack == 0)
// ex. description = "적에게 $[EffectAction.defaultDamage.0] 피해를 줍니다."
// defaultDamage = 300, effectIndex = 0, stringsByKeyword = new() { { "defaultDamage", defaultDamage.ToString() } };
// description.Replace("$[EffectAction.defaultDamage.0]", "300") => "적에게 300 피해를 줍니다."
description = TextReplacer.Replace(description, "effectAction", stringsByKeyword, effectIndex.ToString());
else
// Mark = $[EffectAction.Keyword.StackActionIndex.Stack.EffectIndex]
description = TextReplacer.Replace(description, "effectAction", stringsByKeyword, $"{stackActionIndex}.{stack}.{effectIndex}");
return description;
}
여기 부분에서 왜 굳이 스택 0번째 인걸 구분하고 Effect에서 여기에서
public string BuildDescription(string description, int effectIndex)
{
Dictionary<string, string> stringsByKeyword = new Dictionary<string, string>()
{
{ "duration", Duration.ToString("0.##") },
{ "applyCount", ApplyCount.ToString() },
{ "applyCycle", ApplyCycle.ToString("0.##") }
};
description = TextReplacer.Replace(description, stringsByKeyword, effectIndex.ToString());
description = Action.BuildDescription(this, description, 0, 0, effectIndex); // 여기부분에 질문이 있습니다 여기에서 0번째 것을 구분하고
var stackGroups = StackActions.GroupBy(x => x.Stack);
foreach (var stackGroup in stackGroups)
{
int i = 0;
foreach (var stackAction in stackGroup)
description = stackAction.BuildDescription(this, description, i++, effectIndex);
}// 여기에서 1스택이상 스킬의 텍스트를 전부 변환해주는데
return description;
}
EffectStackAction에서
public string BuildDescription(Effect effect, string baseDescription, int stackActionIndex, int effectIndex)
=> action.BuildDescription(effect, baseDescription, stackActionIndex, stack, effectIndex);
이렇게 까지 분리해서 텍스트로 변환하는지 여쭤보고 싶습니다.
그냥 0번째부터 텍스트를 변환하면 안되는건지 질문이 있습니다.
답변 1
1
수강해주셔서 감사합니다.
stack이 0(=기본 Action)일 때는 '$[effectAction.keyword.effectIndex]' 이 형식의 Mark를 쓰게 되구요,
stack이 0 보다 클 때는 '$[effectAction.keyword.stackActionIndex.stack.effectIndex]' 형식의 Mark를 씁니다.
Mark를 이런 식으로 정한건 한 눈에 봤을 때 '기본 Action의 Mark다', '~ Stack의 ~ Index의 Action의 Mark다'라는걸 알아보기 위해서입니다.
if (stack == 0) 이 부분을 없애고 '$[effectAction.keyword.stackActionIndex.stack.effectIndex]' Mark만 쓰도록 통일해도 되지만, 이럴 경우 기본 Action의 Mark도
'적에게 $[effectAction.defaultDamage.0.0.0] 피해를 줍니다.'
이런 식으로 길게 작성해줘야합니다.
개인적으로 이게 싫어서 구분을 해준 것일 뿐 큰 의미는 없습니다.
Mark의 형태와 Mark를 Replace하는 방식은 제 취향에 맞춘 것이기 때문에 강의에서 말씀드렸다싶이 'Mark를 Replace해서 Description을 만드는 방법'만 숙지하신다면 세부적인 부분은 개인 취향에 맞게, 더 낫다고 생각하시면 방향으로 수정하시면되므로 너무 얽매이실 필요는 없습니다.
감사합니다.