feat: 젬 분류 사양과 장착 UI 반영
- 옵시디언 기준의 역할/발동 타입 분류를 스킬·젬 데이터와 장착 검증 로직에 반영 - 젬 보관 UI와 퀵슬롯 표시를 새 분류 및 실제 마나/쿨타임 계산 기준으로 갱신 - 테스트 스킬/젬 자산을 에디터 메뉴로 동기화하고 Unity 컴파일 및 플레이 검증 완료
This commit is contained in:
@@ -615,7 +615,7 @@ namespace Colosseum.Editor
|
||||
CrushGemPath,
|
||||
"파쇄",
|
||||
"고위력 기술의 단일 피해를 강화하는 테스트용 젬",
|
||||
SkillGemCategory.Attack,
|
||||
SkillGemCategory.Damage,
|
||||
1.15f,
|
||||
1.1f,
|
||||
1f,
|
||||
@@ -625,13 +625,15 @@ namespace Colosseum.Editor
|
||||
1f,
|
||||
0,
|
||||
damageEffect,
|
||||
allowedSkillRoles: SkillRoleType.Attack,
|
||||
allowedSkillActivationTypes: SkillActivationType.Instant,
|
||||
allowedSkillTypes: SkillBaseType.Attack);
|
||||
|
||||
CreateOrUpdateGemAsset(
|
||||
ChallengerGemPath,
|
||||
"도전자",
|
||||
"고위력 기술에 위협 선점 기능을 얹는 테스트용 젬",
|
||||
SkillGemCategory.Threat,
|
||||
SkillGemCategory.Special,
|
||||
1f,
|
||||
1f,
|
||||
1f,
|
||||
@@ -641,13 +643,15 @@ namespace Colosseum.Editor
|
||||
1.5f,
|
||||
0,
|
||||
tauntEffect,
|
||||
allowedSkillRoles: SkillRoleType.Attack | SkillRoleType.Defense,
|
||||
allowedSkillActivationTypes: SkillActivationType.Instant,
|
||||
allowedSkillTypes: SkillBaseType.Attack);
|
||||
|
||||
CreateOrUpdateGemAsset(
|
||||
GuardianGemPath,
|
||||
"수호",
|
||||
"고위력 기술에 보호막 보조를 얹는 테스트용 젬",
|
||||
SkillGemCategory.Support,
|
||||
SkillGemCategory.Survival,
|
||||
1.05f,
|
||||
1.1f,
|
||||
1f,
|
||||
@@ -657,13 +661,15 @@ namespace Colosseum.Editor
|
||||
1f,
|
||||
0,
|
||||
shieldEffect,
|
||||
allowedSkillRoles: SkillRoleType.All,
|
||||
allowedSkillActivationTypes: SkillActivationType.Instant,
|
||||
allowedSkillTypes: SkillBaseType.Attack);
|
||||
|
||||
CreateOrUpdateGemAsset(
|
||||
RepeatGemPath,
|
||||
"연속",
|
||||
"붙은 스킬을 한 번 더 반복 시전하는 테스트용 젬",
|
||||
SkillGemCategory.Efficiency,
|
||||
SkillGemCategory.Special,
|
||||
1.2f,
|
||||
1.15f,
|
||||
1.1f,
|
||||
@@ -673,13 +679,15 @@ namespace Colosseum.Editor
|
||||
1f,
|
||||
1,
|
||||
null,
|
||||
allowedSkillRoles: SkillRoleType.Attack,
|
||||
allowedSkillActivationTypes: SkillActivationType.Instant,
|
||||
allowedSkillTypes: SkillBaseType.Attack);
|
||||
|
||||
CreateOrUpdateGemAsset(
|
||||
FortitudeGemPath,
|
||||
"강인함",
|
||||
"스킬 사용 시 자신에게 경직 면역을 부여하는 테스트용 방어 젬",
|
||||
SkillGemCategory.Defense,
|
||||
SkillGemCategory.Survival,
|
||||
1.05f,
|
||||
1.05f,
|
||||
1f,
|
||||
@@ -689,13 +697,15 @@ namespace Colosseum.Editor
|
||||
1f,
|
||||
0,
|
||||
null,
|
||||
new[] { hitReactionImmuneAbnormality });
|
||||
new[] { hitReactionImmuneAbnormality },
|
||||
allowedSkillRoles: SkillRoleType.All,
|
||||
allowedSkillActivationTypes: SkillActivationType.All);
|
||||
|
||||
CreateOrUpdateGemAsset(
|
||||
WitherGemPath,
|
||||
"약화",
|
||||
"스킬 적중 대상에게 테스트 디버프를 부여하는 제어 젬",
|
||||
SkillGemCategory.Control,
|
||||
SkillGemCategory.Special,
|
||||
1.05f,
|
||||
1.05f,
|
||||
1f,
|
||||
@@ -707,13 +717,15 @@ namespace Colosseum.Editor
|
||||
null,
|
||||
null,
|
||||
0,
|
||||
new[] { testDebuffAbnormality });
|
||||
new[] { testDebuffAbnormality },
|
||||
allowedSkillRoles: SkillRoleType.All,
|
||||
allowedSkillActivationTypes: SkillActivationType.Instant);
|
||||
|
||||
CreateOrUpdateGemAsset(
|
||||
EdgeGemPath,
|
||||
"예리함",
|
||||
"고정 추가 피해를 부여하는 테스트용 공격 젬",
|
||||
SkillGemCategory.Attack,
|
||||
SkillGemCategory.Damage,
|
||||
1f,
|
||||
1f,
|
||||
1f,
|
||||
@@ -723,13 +735,15 @@ namespace Colosseum.Editor
|
||||
1f,
|
||||
0,
|
||||
edgeDamageEffect,
|
||||
allowedSkillRoles: SkillRoleType.Attack,
|
||||
allowedSkillActivationTypes: SkillActivationType.Instant,
|
||||
allowedSkillTypes: SkillBaseType.Attack);
|
||||
|
||||
CreateOrUpdateGemAsset(
|
||||
ImpactGemPath,
|
||||
"충격",
|
||||
"중간 고정 추가 피해를 부여하는 테스트용 공격 젬",
|
||||
SkillGemCategory.Attack,
|
||||
SkillGemCategory.Damage,
|
||||
1f,
|
||||
1f,
|
||||
1f,
|
||||
@@ -739,13 +753,15 @@ namespace Colosseum.Editor
|
||||
1f,
|
||||
0,
|
||||
impactDamageEffect,
|
||||
allowedSkillRoles: SkillRoleType.Attack,
|
||||
allowedSkillActivationTypes: SkillActivationType.Instant,
|
||||
allowedSkillTypes: SkillBaseType.Attack);
|
||||
|
||||
CreateOrUpdateGemAsset(
|
||||
BreachGemPath,
|
||||
"관통",
|
||||
"높은 고정 추가 피해를 부여하는 테스트용 공격 젬",
|
||||
SkillGemCategory.Attack,
|
||||
SkillGemCategory.Damage,
|
||||
1f,
|
||||
1f,
|
||||
1f,
|
||||
@@ -755,6 +771,8 @@ namespace Colosseum.Editor
|
||||
1f,
|
||||
0,
|
||||
breachDamageEffect,
|
||||
allowedSkillRoles: SkillRoleType.Attack,
|
||||
allowedSkillActivationTypes: SkillActivationType.Instant,
|
||||
allowedSkillTypes: SkillBaseType.Attack);
|
||||
|
||||
AssetDatabase.SaveAssets();
|
||||
@@ -793,19 +811,19 @@ namespace Colosseum.Editor
|
||||
SkillGemData impactGem = AssetDatabase.LoadAssetAtPath<SkillGemData>(ImpactGemPath);
|
||||
SkillGemData breachGem = AssetDatabase.LoadAssetAtPath<SkillGemData>(BreachGemPath);
|
||||
|
||||
SetSkillBaseTypes(slashSkill, SkillBaseType.Attack);
|
||||
SetSkillBaseTypes(tauntSkill, SkillBaseType.Control | SkillBaseType.Utility);
|
||||
SetSkillBaseTypes(guardSkill, SkillBaseType.Defense);
|
||||
SetSkillBaseTypes(dashSkill, SkillBaseType.Mobility);
|
||||
SetSkillBaseTypes(ironWallSkill, SkillBaseType.Defense | SkillBaseType.Support);
|
||||
SetSkillBaseTypes(pierceSkill, SkillBaseType.Attack);
|
||||
SetSkillBaseTypes(gemTestSkill, SkillBaseType.Attack);
|
||||
SetSkillBaseTypes(healSkill, SkillBaseType.Support);
|
||||
SetSkillBaseTypes(areaHealSkill, SkillBaseType.Support);
|
||||
SetSkillBaseTypes(shieldSkill, SkillBaseType.Defense | SkillBaseType.Support);
|
||||
SetSkillBaseTypes(projectileSkill, SkillBaseType.Attack);
|
||||
SetSkillBaseTypes(spinSkill, SkillBaseType.Attack);
|
||||
SetSkillBaseTypes(evadeSkill, SkillBaseType.Mobility);
|
||||
SetSkillClassification(slashSkill, SkillRoleType.Attack, SkillActivationType.Instant, SkillBaseType.Attack);
|
||||
SetSkillClassification(tauntSkill, SkillRoleType.Defense, SkillActivationType.Instant, SkillBaseType.Defense);
|
||||
SetSkillClassification(guardSkill, SkillRoleType.Defense, SkillActivationType.Buff, SkillBaseType.Defense);
|
||||
SetSkillClassification(dashSkill, SkillRoleType.Attack, SkillActivationType.Instant, SkillBaseType.Attack);
|
||||
SetSkillClassification(ironWallSkill, SkillRoleType.Defense, SkillActivationType.Buff, SkillBaseType.Defense);
|
||||
SetSkillClassification(pierceSkill, SkillRoleType.Attack, SkillActivationType.Instant, SkillBaseType.Attack);
|
||||
SetSkillClassification(gemTestSkill, SkillRoleType.Attack, SkillActivationType.Instant, SkillBaseType.Attack);
|
||||
SetSkillClassification(healSkill, SkillRoleType.Support, SkillActivationType.Instant, SkillBaseType.Support);
|
||||
SetSkillClassification(areaHealSkill, SkillRoleType.Support, SkillActivationType.Instant, SkillBaseType.Support);
|
||||
SetSkillClassification(shieldSkill, SkillRoleType.Support, SkillActivationType.Instant, SkillBaseType.Support);
|
||||
SetSkillClassification(projectileSkill, SkillRoleType.Attack, SkillActivationType.Instant, SkillBaseType.Attack);
|
||||
SetSkillClassification(spinSkill, SkillRoleType.Attack, SkillActivationType.Instant, SkillBaseType.Attack);
|
||||
SetSkillClassification(evadeSkill, SkillRoleType.Defense, SkillActivationType.Instant, SkillBaseType.Defense);
|
||||
|
||||
EnsureGemTestSkillSlotCount(gemTestSkill, 3);
|
||||
|
||||
@@ -1336,6 +1354,8 @@ namespace Colosseum.Editor
|
||||
AbnormalityData[] selfAbnormalities = null,
|
||||
int triggeredAbnormalityIndex = -1,
|
||||
AbnormalityData[] onHitAbnormalities = null,
|
||||
SkillRoleType allowedSkillRoles = SkillRoleType.All,
|
||||
SkillActivationType allowedSkillActivationTypes = SkillActivationType.All,
|
||||
SkillBaseType allowedSkillTypes = SkillBaseType.All,
|
||||
SkillGemCategory[] incompatibleCategories = null,
|
||||
SkillGemData[] incompatibleGems = null)
|
||||
@@ -1356,6 +1376,8 @@ namespace Colosseum.Editor
|
||||
serializedGem.FindProperty("gemName").stringValue = gemName;
|
||||
serializedGem.FindProperty("description").stringValue = description;
|
||||
serializedGem.FindProperty("category").enumValueIndex = (int)category;
|
||||
serializedGem.FindProperty("allowedSkillRoles").intValue = (int)allowedSkillRoles;
|
||||
serializedGem.FindProperty("allowedSkillActivationTypes").intValue = (int)allowedSkillActivationTypes;
|
||||
serializedGem.FindProperty("manaCostMultiplier").floatValue = manaCostMultiplier;
|
||||
serializedGem.FindProperty("cooldownMultiplier").floatValue = cooldownMultiplier;
|
||||
serializedGem.FindProperty("castSpeedMultiplier").floatValue = castSpeedMultiplier;
|
||||
@@ -1424,17 +1446,42 @@ namespace Colosseum.Editor
|
||||
EditorUtility.SetDirty(gem);
|
||||
}
|
||||
|
||||
private static void SetSkillBaseTypes(SkillData skill, SkillBaseType baseTypes)
|
||||
private static void SetSkillClassification(
|
||||
SkillData skill,
|
||||
SkillRoleType skillRole,
|
||||
SkillActivationType activationType,
|
||||
SkillBaseType baseTypes)
|
||||
{
|
||||
if (skill == null)
|
||||
return;
|
||||
|
||||
SerializedObject serializedSkill = new SerializedObject(skill);
|
||||
bool hasChanges = false;
|
||||
|
||||
SerializedProperty skillRoleProperty = serializedSkill.FindProperty("skillRole");
|
||||
if (skillRoleProperty != null && skillRoleProperty.intValue != (int)skillRole)
|
||||
{
|
||||
skillRoleProperty.intValue = (int)skillRole;
|
||||
hasChanges = true;
|
||||
}
|
||||
|
||||
SerializedProperty activationTypeProperty = serializedSkill.FindProperty("activationType");
|
||||
if (activationTypeProperty != null && activationTypeProperty.intValue != (int)activationType)
|
||||
{
|
||||
activationTypeProperty.intValue = (int)activationType;
|
||||
hasChanges = true;
|
||||
}
|
||||
|
||||
SerializedProperty baseTypesProperty = serializedSkill.FindProperty("baseTypes");
|
||||
if (baseTypesProperty == null || baseTypesProperty.intValue == (int)baseTypes)
|
||||
if (baseTypesProperty != null && baseTypesProperty.intValue != (int)baseTypes)
|
||||
{
|
||||
baseTypesProperty.intValue = (int)baseTypes;
|
||||
hasChanges = true;
|
||||
}
|
||||
|
||||
if (!hasChanges)
|
||||
return;
|
||||
|
||||
baseTypesProperty.intValue = (int)baseTypes;
|
||||
serializedSkill.ApplyModifiedPropertiesWithoutUndo();
|
||||
EditorUtility.SetDirty(skill);
|
||||
}
|
||||
@@ -1571,7 +1618,7 @@ namespace Colosseum.Editor
|
||||
if (hasGem)
|
||||
categoryBuilder.Append(", ");
|
||||
|
||||
categoryBuilder.Append(gem.Category);
|
||||
categoryBuilder.Append(SkillClassificationUtility.GetGemCategoryLabel(gem.Category));
|
||||
hasGem = true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user