/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.petah.spring.bai.tasks.standard;
import com.springrts.ai.oo.AIFloat3;
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.delegate.GlobalDelegate;
import org.petah.spring.bai.group.UnitGroup;
import org.petah.spring.bai.tasks.Task;
import org.petah.spring.bai.unit.Faction;
import org.petah.spring.bai.unit.UnitInfo;
import org.petah.spring.bai.util.CommandUtil;
/**
*
* @author Petah
*/
public class DefaultFactory extends Task {
// Options
private static Option<Integer> updateTime = OptionsManager.getOption(
new Option<Integer>("DefaultFactory.updateTime", 20));
private static Option<Integer> maxBuilders = OptionsManager.getOption(
new Option<Integer>("DefaultFactory.maxBuilders", 4));
private static Option<Integer> maxT2Builders = OptionsManager.getOption(
new Option<Integer>("DefaultFactory.maxT2Builders", 6));
private static Option<Integer> maxScavengers = OptionsManager.getOption(
new Option<Integer>("DefaultFactory.maxScavengers", 4));
private static Option<Integer> maxScouts = OptionsManager.getOption(
new Option<Integer>("DefaultFactory.maxScouts", 8));
// Class properties
private int nextUpdate = 0;
public DefaultFactory(AIDelegate aiDelegate) {
super(aiDelegate);
}
public void build(String name, CachedUnit factory) {
factory.build(GlobalDelegate.getUnitDef(name, factory.getFaction()).getUnitDef(), new AIFloat3());
}
public boolean update(UnitGroup group, int frame) {
if (nextUpdate <= frame) {
nextUpdate = frame + updateTime.getValue();
for (CachedUnit unit : group) {
UnitInfo info = UnitInfo.getUnitInfo(unit.getDef());
// if (info.isType(UnitType.Factory)) {
if (unit.getCurrentCommands().isEmpty()) {
if (info.getName().equals("KbotFactory")) {
if (aiDelegate.getGroupManager().getGroup("Builders").size() < maxBuilders.getValue()) {
build("KT1Builder", unit);
}
if (aiDelegate.getGroupManager().getGroup("Scavengers").size() < maxScavengers.getValue()) {
build("Scavenger", unit);
}
if (Faction.getFaction(unit.getDef()) == Faction.Arm) {
if (aiDelegate.getGroupManager().getGroup("Scouts").size() < maxScouts.getValue()) {
build("Flea", unit);
}
build("Warrior", unit);
} else {
if (aiDelegate.getGroupManager().getGroup("Scouts").size() < maxScouts.getValue()) {
build("KLightRaider", unit);
}
build("KLightRaider", unit);
}
build("KLightRanger", unit);
build("KLightAssault", unit);
// if (aiDelegate.getResourceManager().isMetalOver(500)) {
// if (aiDelegate.getGroupManager().getGroup("Builders").size() < maxBuilders.getValue()) {
// build("KT1Builder", unit);
// build("KT1Builder", unit);
// }
// if (aiDelegate.getGroupManager().getGroup("Scavengers").size() < maxScavengers.getValue()) {
// build("Scavenger", unit);
// }
// if (Faction.getFaction(unit.getDef()) == Faction.Arm) {
// if (aiDelegate.getGroupManager().getGroup("Scouts").size() < maxScouts.getValue()) {
// build("Flea", unit);
// build("Flea", unit);
// }
// build("Warrior", unit);
// } else {
// build("KLightRaider", unit);
// }
// build("KLightRanger", unit);
// build("KLightAssault", unit);
// } else {
// if (aiDelegate.getGroupManager().getGroup("scouts").size() < maxScouts.getValue() &&
// Faction.getFaction(unit.getDef()) == Faction.Arm) {
// build("Flea", unit);
// }
// build("KLightRaider", unit);
// build("KLightRaider", unit);
// if (aiDelegate.getGroupManager().getGroup("builders").size() < maxBuilders.getValue()) {
// build("KT1Builder", unit);
// build("KT1Builder", unit);
// }
// }
} else if (info.getName().equals("VehicleFactory")) {
if (aiDelegate.getGroupManager().getGroup("builders").size() < maxBuilders.getValue()) {
build("VT1Builder", unit);
build("VT1Builder", unit);
}
if (aiDelegate.getGroupManager().getGroup("scouts").size() < maxScouts.getValue()) {
build("VScout", unit);
build("VScout", unit);
}
build("VLightRiot", unit);
build("VLightAssault", unit);
build("VLightRanger", unit);
// if (aiDelegate.getResourceManager().isMetalOver(500)) {
// if (aiDelegate.getGroupManager().getGroup("builders").size() < maxBuilders.getValue()) {
// build("VT1Builder", unit);
// build("VT1Builder", unit);
// }
// if (aiDelegate.getGroupManager().getGroup("scouts").size() < maxScouts.getValue()) {
// build("VScout", unit);
// build("VScout", unit);
// }
// build("VLightRiot", unit);
// build("VLightAssault", unit);
// build("VLightRanger", unit);
// } else {
// if (aiDelegate.getGroupManager().getGroup("scouts").size() < maxScouts.getValue()) {
// build("VScout", unit);
// build("VScout", unit);
// build("VScout", unit);
// }
// build("VLightRaider", unit);
// if (aiDelegate.getGroupManager().getGroup("builders").size() < maxBuilders.getValue()) {
// build("VT1Builder", unit);
// build("VT1Builder", unit);
// }
// build("VLightRaider", unit);
// }
} else if (info.getName().equals("ShipFactory")) {
} else if (info.getName().equals("AircraftFactory")) {
build("AScout", unit);
build("AScout", unit);
if (aiDelegate.getGroupManager().getGroup("builders").size() < maxT2Builders.getValue()) {
build("AT1Builder", unit);
}
build("ALightBomber", unit);
build("ALightBomber", unit);
build("ALightBomber", unit);
build("ALightFighter", unit);
} else if (info.getName().equals("AKbotFactory")) {
if (aiDelegate.getGroupManager().getGroup("Builders").size() < maxT2Builders.getValue()) {
build("KT2Builder", unit);
build("KT2Builder", unit);
}
if (aiDelegate.getGroupManager().getGroup("Scavengers").size() < maxScavengers.getValue()) {
build("KEngineer", unit);
}
if (Faction.getFaction(unit.getDef()) == Faction.Arm) {
build("Sniper", unit);
build("Fido", unit);
} else {
build("KRocketLauncher", unit);
}
build("KRaider", unit);
build("KAssault", unit);
build("KArtillery", unit);
build("KHeavyAssault", unit);
} else if (info.getName().equals("AVehicleFactory")) {
if (aiDelegate.getGroupManager().getGroup("Builders").size() < maxT2Builders.getValue()) {
build("VT2Builder", unit);
build("VT2Builder", unit);
}
build("VAssault", unit);
build("VAssault", unit);
build("VAssault", unit);
build("VAssault", unit);
build("VArtillery", unit);
build("VRanger", unit);
build("VArtillery", unit);
build("VRanger", unit);
build("VAntiAir", unit);
if (Faction.getFaction(unit.getDef()) == Faction.Arm) {
if (aiDelegate.getGroupManager().getGroup("Scavengers").size() < maxScavengers.getValue()) {
build("VEngineer", unit);
build("VEngineer", unit);
}
build("LightningTank", unit);
build("LightningTank", unit);
build("LightningTank", unit);
build("StealthTank", unit);
} else {
build("Goliath", unit);
}
}
}
}
// }
}
return false;
}
}