48 lines
1.5 KiB
Java
48 lines
1.5 KiB
Java
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<Integer> 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();
|
|
}
|
|
|
|
}
|