package tc.oc.pgm.mutation.types.other; import com.google.common.collect.Range; import org.apache.commons.lang.math.Fraction; import tc.oc.commons.core.random.RandomUtils; import tc.oc.pgm.blitz.BlitzMatchModuleImpl; import tc.oc.pgm.blitz.BlitzProperties; import tc.oc.pgm.blitz.Lives; import tc.oc.pgm.match.Match; import tc.oc.pgm.match.MatchScope; import tc.oc.pgm.mutation.types.MutationModule; import tc.oc.pgm.teams.TeamMatchModule; public class BlitzMutation extends MutationModule { final static Range LIVES = Range.closed(1, 3); final static Fraction TEAM_CHANCE = Fraction.ONE_QUARTER; public BlitzMutation(Match match) { super(match); } @Override public void enable() { super.enable(); int lives = match.entropyForTick().randomInt(LIVES); Lives.Type type; if(match.module(TeamMatchModule.class).isPresent() && RandomUtils.nextBoolean(random, TEAM_CHANCE)) { type = Lives.Type.TEAM; lives *= match.module(TeamMatchModule.class).get().getFullestTeam().getSize(); } else { type = Lives.Type.INDIVIDUAL; } match.module(BlitzMatchModuleImpl.class).get().activate(BlitzProperties.create(match, lives, type)); } @Override public void disable() { match.getScheduler(MatchScope.LOADED).createTask(() -> { if(!match.isFinished()) { match.module(BlitzMatchModuleImpl.class).get().deactivate(); } }); super.disable(); } }