/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package org.petah.spring.bai.group; import org.petah.common.option.Option; import org.petah.common.option.OptionsManager; import org.petah.spring.bai.cache.CachedUnit; import org.petah.spring.bai.delegate.AIDelegate; import org.petah.spring.bai.tasks.JavaScriptTask; import org.petah.spring.bai.tasks.standard.DefaultAssault; import org.petah.spring.bai.tasks.standard.DefaultBaseBuilderStage1; import org.petah.spring.bai.tasks.standard.DefaultBomber; import org.petah.spring.bai.tasks.standard.DefaultExpansionBuilder; import org.petah.spring.bai.tasks.standard.DefaultCommanderStage1; import org.petah.spring.bai.tasks.standard.DefaultDefence; import org.petah.spring.bai.tasks.standard.DefaultFactory; import org.petah.spring.bai.tasks.standard.DefaultFighter; import org.petah.spring.bai.tasks.standard.DefaultMetalMaker; import org.petah.spring.bai.tasks.standard.DefaultNanoStage1; import org.petah.spring.bai.tasks.standard.DefaultRaider; import org.petah.spring.bai.tasks.standard.DefaultScavenger; import org.petah.spring.bai.tasks.standard.DefaultScout; import org.petah.spring.bai.unit.Faction; import org.petah.spring.bai.unit.UnitInfo; import org.petah.spring.bai.unit.UnitType; /** * * @author Petah */ public class DefaultGroupManager extends GroupManager { // Options private static Option<Integer> maxDefenceGroupSize = OptionsManager.getOption( new Option<Integer>("DefaultGroupManager.maxDefenceGroupSize", 20)); public DefaultGroupManager(AIDelegate aiDelegate) { super(aiDelegate); } @Override public void initGroups() { addGroup(new UnitGroup(aiDelegate, "Commanders"), new DefaultCommanderStage1(aiDelegate)); addGroup(new UnitGroup(aiDelegate, "MetalExtractors")); addGroup(new UnitGroup(aiDelegate, "EnergyGenerators")); addGroup(new UnitGroup(aiDelegate, "MetalStorage")); addGroup(new UnitGroup(aiDelegate, "EnergyStorage")); addGroup(new UnitGroup(aiDelegate, "MetalMakers"), new DefaultMetalMaker(aiDelegate)); addGroup(new UnitGroup(aiDelegate, "Radar")); addGroup(new UnitGroup(aiDelegate, "Nanos"), new DefaultNanoStage1(aiDelegate)); addGroup(new UnitGroup(aiDelegate, "Factorys"), new DefaultFactory(aiDelegate)); addGroup(new UnitGroup(aiDelegate, "T2Factorys"), new DefaultFactory(aiDelegate)); // addGroup(new UnitGroup(aiDelegate, "Scouts"), // new DefaultScout(aiDelegate)); addGroup(new UnitGroup(aiDelegate, "Scouts"), new JavaScriptTask(aiDelegate, "DefaultScout", "org/petah/spring/bai/tasks/standard/script/DefaultScout.js")); addGroup(new UnitGroup(aiDelegate, "Defence"), new DefaultDefence(aiDelegate)); addGroup(new UnitGroup(aiDelegate, "Raiders"), new DefaultRaider(aiDelegate)); addGroup(new UnitGroup(aiDelegate, "Assault"), new DefaultAssault(aiDelegate)); addGroup(new UnitGroup(aiDelegate, "Artillery"), new DefaultAssault(aiDelegate)); addGroup(new UnitGroup(aiDelegate, "Bombers"), new DefaultBomber(aiDelegate)); addGroup(new UnitGroup(aiDelegate, "Fighters"), new DefaultFighter(aiDelegate)); addGroup(new UnitGroup(aiDelegate, "Builders")); addGroup(new UnitGroup(aiDelegate, "Scavengers"), new DefaultScavenger(aiDelegate)); addGroup(new UnitGroup(aiDelegate, "ExpansionBuilders"), new DefaultExpansionBuilder(aiDelegate)); addGroup(new UnitGroup(aiDelegate, "BaseBuilders"), new DefaultBaseBuilderStage1(aiDelegate)); addGroup(new UnitGroup(aiDelegate, "Other")); } public void groupUnit(CachedUnit unit) { UnitInfo unitInfo = unit.getUnitInfo(); if (unitInfo.isType(UnitType.Building)) { /** * Buildings */ if (unitInfo.isType(UnitType.MetalExtractor)) { getGroup("MetalExtractors").addUnit(unit); } else if (unitInfo.isType(UnitType.EnergyGenerator)) { getGroup("EnergyGenerators").addUnit(unit); } else if (unitInfo.isType(UnitType.MetalStorage)) { getGroup("MetalStorage").addUnit(unit); } else if (unitInfo.isType(UnitType.MetalMaker)) { getGroup("MetalMakers").addUnit(unit); } else if (unitInfo.isType(UnitType.EnergyStorage)) { getGroup("EnergyStorage").addUnit(unit); } else if (unitInfo.isType(UnitType.Factory)) { if (unitInfo.isType(UnitType.Level2)) { getGroup("T2Factorys").addUnit(unit); } else { getGroup("Factorys").addUnit(unit); } } else if (unitInfo.isType(UnitType.Nano)) { getGroup("Nanos").addUnit(unit); } else if (unitInfo.isType(UnitType.Radar)) { getGroup("Radar").addUnit(unit); } } else if (unitInfo.isType(UnitType.Kbot) || unitInfo.isType(UnitType.Vehicle) || unitInfo.isType(UnitType.Aircraft) || unitInfo.isType(UnitType.SeaPlane) || unitInfo.isType(UnitType.Ship) || unitInfo.isType(UnitType.Submarine) || unitInfo.isType(UnitType.Experimental)) { /** * Units */ if (unitInfo.isType(UnitType.Commander)) { getGroup("Commanders").addUnit(unit); } else if (unitInfo.isType(UnitType.Scavenger) || unitInfo.isType(UnitType.Engineer)) { getGroup("Scavengers").addUnit(unit); } else if (unitInfo.isType(UnitType.Scout)) { getGroup("Scouts").addUnit(unit); } else if (unitInfo.isType(UnitType.Bomber)) { getGroup("Bombers").addUnit(unit); } else if (unitInfo.isType(UnitType.Fighter)) { getGroup("Fighters").addUnit(unit); } else if (unitInfo.isType(UnitType.Raider)) { if (unitInfo.isType(UnitType.Kbot) && Faction.getFaction(unit.getDef()) == Faction.Core && getGroup("Scouts").size() <= getGroup("Raiders").size()) { getGroup("Scouts").addUnit(unit); } else { if (getGroup("Defence").size() <= getGroup("Assault").size() && getGroup("Defence").size() < maxDefenceGroupSize.getValue()) { getGroup("Defence").addUnit(unit); } else { getGroup("Raiders").addUnit(unit); } } } else if (unitInfo.isType(UnitType.Assault) || unitInfo.isType(UnitType.Ranger)) { if (getGroup("Defence").size() <= getGroup("Assault").size() && getGroup("Defence").size() < maxDefenceGroupSize.getValue()) { getGroup("Defence").addUnit(unit); } else { getGroup("Assault").addUnit(unit); } } else if (unitInfo.isType(UnitType.Artillery)) { getGroup("Artillery").addUnit(unit); } else if (unitInfo.isType(UnitType.Builder)) { if (unitInfo.isType(UnitType.Vehicle) && getGroup("Builders").size() - 3 > getGroup("Scavengers").size()) { getGroup("Scavengers").addUnit(unit); } else { getGroup("Builders").addUnit(unit); if (getGroup("ExpansionBuilders").size() <= getGroup("BaseBuilders").size() && !getGroup("BaseBuilders").contains(unit)) { getGroup("ExpansionBuilders").addUnit(unit); } else if (!getGroup("ExpansionBuilders").contains(unit)) { getGroup("BaseBuilders").addUnit(unit); } } } } else { getGroup("Other").addUnit(unit); } } }