Skip to content

Commit fc32557

Browse files
committed
feat: 支持解析 Node 类型的修饰符
1 parent 5804a3d commit fc32557

13 files changed

Lines changed: 176 additions & 63 deletions
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
using Moder.Core.Models.Modifiers;
2+
using ParadoxPower.Process;
3+
4+
namespace Moder.Core.Helper;
5+
6+
public static class ModifierHelper
7+
{
8+
public static ModifierCollection ParseModifier(Node modifierNode)
9+
{
10+
var list = new List<IModifier>(modifierNode.AllArray.Length);
11+
foreach (var child in modifierNode.AllArray)
12+
{
13+
if (child.IsLeafChild)
14+
{
15+
var modifier = Modifier.FromLeaf(child.leaf);
16+
list.Add(modifier);
17+
}
18+
else if (child.IsNodeChild)
19+
{
20+
var node = child.node;
21+
var modifier = new NodeModifier(node.Key, node.Leaves.Select(Modifier.FromLeaf));
22+
list.Add(modifier);
23+
}
24+
}
25+
26+
return new ModifierCollection(modifierNode.Key, list);
27+
}
28+
}

Moder.Core/Models/Character/SkillModifier.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using ParadoxPower.Process;
1+
using Moder.Core.Models.Modifiers;
2+
using ParadoxPower.Process;
23

34
namespace Moder.Core.Models.Character;
45

@@ -10,6 +11,6 @@ public sealed class SkillModifier
1011
public SkillModifier(ushort level, IEnumerable<Leaf> modifiers)
1112
{
1213
Level = level;
13-
Modifiers = modifiers.Select(m => new Modifier(m)).ToArray();
14+
Modifiers = modifiers.Select(Modifier.FromLeaf).ToArray();
1415
}
1516
}
Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
namespace Moder.Core.Models.Character;
1+
using Moder.Core.Models.Modifiers;
2+
using ParadoxPower.Process;
3+
4+
namespace Moder.Core.Models.Character;
25

36
/// <summary>
47
/// 人物特质
@@ -7,10 +10,12 @@ public sealed class Trait
710
{
811
public string Name { get; }
912
public TraitType Type { get; }
13+
public IReadOnlyCollection<ModifierCollection> Modifiers { get; }
1014

11-
public Trait(string name, TraitType type)
15+
public Trait(string name, TraitType type, IEnumerable<ModifierCollection> modifiers)
1216
{
1317
Name = name;
1418
Type = type;
19+
Modifiers = modifiers.ToArray();
1520
}
16-
}
21+
}

Moder.Core/Models/Modifier.cs

Lines changed: 0 additions & 18 deletions
This file was deleted.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace Moder.Core.Models.Modifiers;
2+
3+
public interface IModifier
4+
{
5+
public string Name { get; }
6+
public ModifierType Type { get; }
7+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using Moder.Core.Extensions;
2+
using ParadoxPower.Process;
3+
4+
namespace Moder.Core.Models.Modifiers;
5+
6+
public sealed class Modifier : IModifier
7+
{
8+
public string Name { get; }
9+
public string Value { get; }
10+
public GameValueType ValueType { get; }
11+
public ModifierType Type => ModifierType.Leaf;
12+
13+
private Modifier(Leaf leaf)
14+
: this(leaf.Key, leaf.ValueText, leaf.Value.ToLocalValueType()) { }
15+
16+
public static Modifier FromLeaf(Leaf leaf) => new(leaf);
17+
18+
public Modifier(string name, string value, GameValueType valueType)
19+
{
20+
Name = name;
21+
Value = value;
22+
ValueType = valueType;
23+
}
24+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
namespace Moder.Core.Models.Modifiers;
2+
3+
/// <summary>
4+
/// Modifier 集合, 只有需要 Modifier 节点的 Key 时才会使用到这个类
5+
/// </summary>
6+
public sealed class ModifierCollection
7+
{
8+
/// <summary>
9+
/// 容纳 Modifier 的 Key
10+
/// </summary>
11+
public string Key { get; }
12+
public IEnumerable<IModifier> Modifiers { get; }
13+
14+
public ModifierCollection(string key, IEnumerable<IModifier> modifiers)
15+
{
16+
Key = key;
17+
Modifiers = modifiers;
18+
}
19+
}

Moder.Core/Models/ModifierType.cs renamed to Moder.Core/Models/Modifiers/ModifierEffectType.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
namespace Moder.Core.Models;
1+
namespace Moder.Core.Models.Modifiers;
22

3-
public enum ModifierType : byte
3+
public enum ModifierEffectType : byte
44
{
55
Unknown,
66
/// <summary>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace Moder.Core.Models.Modifiers;
2+
3+
public enum ModifierType : byte
4+
{
5+
Leaf,
6+
Node
7+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
namespace Moder.Core.Models.Modifiers;
2+
3+
public sealed class NodeModifier : IModifier
4+
{
5+
public string Name { get; }
6+
public IReadOnlyCollection<Modifier> Modifiers { get; }
7+
public ModifierType Type => ModifierType.Node;
8+
9+
public NodeModifier(string name, IEnumerable<Modifier> modifiers)
10+
{
11+
Name = name;
12+
Modifiers = modifiers.ToArray();
13+
}
14+
}

0 commit comments

Comments
 (0)