refactor: improved usage of getSourceObjectZoneChangeCounter, added docs (part of #13737)

This commit is contained in:
Oleg Agafonov 2025-06-14 15:31:24 +04:00
parent 492c7c9db8
commit e8342e1f11
5 changed files with 10 additions and 7 deletions

View file

@ -106,7 +106,7 @@ enum HaktosTheUnscarredPredicate implements ObjectSourcePlayerPredicate<Card> {
@Override @Override
public boolean apply(ObjectSourcePlayer<Card> input, Game game) { public boolean apply(ObjectSourcePlayer<Card> input, Game game) {
Object obj = game.getState().getValue(input.getSourceId() + "" + input.getSource().getSourceObjectZoneChangeCounter() + "_haktos_number"); Object obj = game.getState().getValue(input.getSourceId() + "" + input.getObject().getZoneChangeCounter(game) + "_haktos_number");
if (!(obj instanceof Integer)) { if (!(obj instanceof Integer)) {
return false; return false;
} }

View file

@ -75,7 +75,7 @@ enum TalionTheKindlyLordPredicate implements ObjectSourcePlayerPredicate<StackOb
public boolean apply(ObjectSourcePlayer<StackObject> input, Game game) { public boolean apply(ObjectSourcePlayer<StackObject> input, Game game) {
Object obj = game.getState().getValue( Object obj = game.getState().getValue(
"chosenNumber_" + input.getSource().getSourceId() "chosenNumber_" + input.getSource().getSourceId()
+ '_' + input.getSource().getSourceObjectZoneChangeCounter() + '_' + input.getObject().getZoneChangeCounter(game)
); );
if (obj == null) { if (obj == null) {
return false; return false;

View file

@ -516,6 +516,10 @@ public interface Ability extends Controllable, Serializable {
*/ */
void initSourceObjectZoneChangeCounter(Game game, boolean force); void initSourceObjectZoneChangeCounter(Game game, boolean force);
// TODO: it's activating time of ability, not current object's zcc, see #13737,
// in most use cases you must use game.getState().getZoneChangeCounter or input.getObject().getZoneChangeCounter(game)
// only ability related logic can use it (example: delayed triggers)
@Deprecated
int getSourceObjectZoneChangeCounter(); int getSourceObjectZoneChangeCounter();
/** /**

View file

@ -16,8 +16,7 @@ public enum AnotherPredicate implements ObjectSourcePlayerPredicate<MageObject>
if (!input.getObject().getId().equals(input.getSourceId())) { if (!input.getObject().getId().equals(input.getSourceId())) {
return true; return true;
} }
int zcc = input.getSource().getSourceObjectZoneChangeCounter(); return false;
return zcc != 0 && zcc != input.getObject().getZoneChangeCounter(game);
} }
@Override @Override

View file

@ -17,9 +17,9 @@ public enum SaddledSourceThisTurnPredicate implements ObjectSourcePlayerPredicat
@Override @Override
public boolean apply(ObjectSourcePlayer<Permanent> input, Game game) { public boolean apply(ObjectSourcePlayer<Permanent> input, Game game) {
return SaddledMountWatcher.checkIfSaddledThisTurn( // for delayed triggers must use starting zcc (when delayed trigger created)
input.getObject(), new MageObjectReference(input.getSourceId(), input.getSource().getSourceObjectZoneChangeCounter(), game), game MageObjectReference startingMor = new MageObjectReference(input.getSourceId(), input.getSource().getSourceObjectZoneChangeCounter(), game);
); return SaddledMountWatcher.checkIfSaddledThisTurn(input.getObject(), startingMor, game);
} }
@Override @Override