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
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)) {
return false;
}

View file

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

View file

@ -516,6 +516,10 @@ public interface Ability extends Controllable, Serializable {
*/
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();
/**

View file

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

View file

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