GameplayEffect

2k words

GameplayEffect

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62

public enum EffectsDurationPolicy
{
[LabelText("瞬时(Instant)", SdfIconType.LightningCharge)]
Instant = 1,

[LabelText("永久(Infinite)", SdfIconType.Infinity)]
Infinite,

[LabelText("限时(Duration)", SdfIconType.HourglassSplit)]
Duration
}

// GE堆栈数据结构
public struct GameplayEffectStacking
{
public string stackingCodeName; // 实际运行不会使用,而是使用stackingCodeName的hash值, 即stackingHashCode
public int stackingHashCode;
public StackingType stackingType;
public int limitCount;
public DurationRefreshPolicy durationRefreshPolicy;
public PeriodResetPolicy periodResetPolicy;
public ExpirationPolicy expirationPolicy;

// Overflow 溢出逻辑处理
public bool denyOverflowApplication; //对应于StackDurationRefreshPolicy,如果为True则多余的Apply不会刷新Duration
public bool clearStackOnOverflow; //当DenyOverflowApplication为True是才有效,当Overflow时是否直接删除所有层数
public GameplayEffect[] overflowEffects; // 超过StackLimitCount数量的Effect被Apply时将会调用该OverflowEffects
}

public class GameplayEffect
{
public readonly string GameplayEffectName;
public readonly EffectsDurationPolicy DurationPolicy;
public readonly float Duration; // -1 represents infinite duration
public readonly float Period;
public readonly GameplayEffect PeriodExecution;
public readonly GameplayEffectTagContainer TagContainer;

// Cues
public readonly GameplayCueInstant[] CueOnExecute;
public readonly GameplayCueInstant[] CueOnRemove;
public readonly GameplayCueInstant[] CueOnAdd;
public readonly GameplayCueInstant[] CueOnActivate;
public readonly GameplayCueInstant[] CueOnDeactivate;
public readonly GameplayCueDurational[] CueDurational;

// Modifiers
public readonly GameplayEffectModifier[] Modifiers;
public readonly ExecutionCalculation[] Executions; // TODO: this should be a list of execution calculations

// Granted Ability
public readonly GrantedAbilityFromEffect[] GrantedAbilities;

//Stacking
public readonly GameplayEffectStacking Stacking;

// TODO: Expiration Effects
public readonly GameplayEffect[] PrematureExpirationEffect;
public readonly GameplayEffect[] RoutineExpirationEffectClasses;
}