Add real opposites and affinities to JSON StatusEffect (#11596)

This commit is contained in:
Pyratite No Lead
2026-02-05 03:10:57 +08:00
committed by GitHub
parent 9e091eaf06
commit 637b02c42e
2 changed files with 30 additions and 3 deletions

View File

@@ -699,7 +699,34 @@ public class ContentParser{
read(() -> readFields(liquid, value)); read(() -> readFields(liquid, value));
return liquid; return liquid;
}, },
ContentType.status, parser(ContentType.status, StatusEffect::new), ContentType.status, (TypeParser<StatusEffect>)(mod, name, value) -> {
StatusEffect status;
if(locate(ContentType.status, name) != null){
status = locate(ContentType.status, name);
readBundle(ContentType.status, name, value);
}else{
readBundle(ContentType.status, name, value);
status = new StatusEffect(mod + "-" + name);
}
currentContent = status;
read(() -> readFields(status, value));
status.init(() -> {
var oldOpposite = status.opposites.copy();
status.opposites.clear();
status.opposite(oldOpposite.toSeq().toArray(StatusEffect.class));
var oldAffinities = status.affinities.copy();
status.affinities.clear();
for(StatusEffect affinity: oldAffinities){
status.affinity(affinity, (unit, result, time) -> {
unit.damagePierce(status.transitionDamage);
});
}
});
return status;
},
ContentType.sector, (TypeParser<SectorPreset>)(mod, name, value) -> { ContentType.sector, (TypeParser<SectorPreset>)(mod, name, value) -> {
if(value.isString()){ if(value.isString()){
return locate(ContentType.sector, name); return locate(ContentType.sector, name);

View File

@@ -176,13 +176,13 @@ public class StatusEffect extends UnlockableContent{
transitions.put(effect, handler); transitions.put(effect, handler);
} }
protected void affinity(StatusEffect effect, TransitionHandler handler){ public void affinity(StatusEffect effect, TransitionHandler handler){
affinities.add(effect); affinities.add(effect);
effect.affinities.add(this); effect.affinities.add(this);
trans(effect, handler); trans(effect, handler);
} }
protected void opposite(StatusEffect... effect){ public void opposite(StatusEffect... effect){
for(var other : effect){ for(var other : effect){
handleOpposite(other); handleOpposite(other);
other.handleOpposite(this); other.handleOpposite(this);