/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package org.petah.spring.bai.tasks.porc; import com.springrts.ai.oo.AIFloat3; import org.petah.spring.bai.ResourceManager; import org.petah.spring.bai.cache.CachedUnit; import org.petah.spring.bai.cache.CachedUnitDef; import org.petah.spring.bai.delegate.AIDelegate; import org.petah.spring.bai.delegate.GlobalDelegate; import org.petah.spring.bai.tasks.standard.DefaultCommands; import org.petah.spring.bai.unit.Faction; import org.petah.spring.bai.unit.UnitInfo; import org.petah.spring.bai.util.BuilderUtil; import org.petah.spring.bai.util.CommandUtil; /** * * @author Petah */ public class PorcCommands { public static final int DEFAULT_FACTORY_DISTANCE = 450; public static final int DEFAULT_STORAGE_DISTANCE = 350; public static final int DEFAULT_METAL_MAKER_DISTANCE = 800; public static final int DEFAULT_SPACING = 10; public static final int DEFAULT_SEARCH_RADIUS = 500; public static final int DEFAULT_NANO_SPACING = 6; public static final int DEFAULT_ENERGY_SPACING = 6; public static final int DEFAULT_ENERGY_SEARCH_RADIUS = 1000; public static void guardT2ExpansionBuilder(AIDelegate aiDelegate, CachedUnit unit) { if (aiDelegate.getGroupManager().getGroup("t2ExpansionBuilders").size() > 0) { unit.guard(aiDelegate.getGroupManager().getGroup("t2ExpansionBuilders").getUnit(0).getUnit()); } } public static void guardBaseBuilder(AIDelegate aiDelegate, CachedUnit builder) { if (aiDelegate.getGroupManager().getGroup("baseBuilders").size() > 0) { builder.guard(aiDelegate.getGroupManager().getGroup("baseBuilders").getUnit(0).getUnit()); } } public static void queueSolarGenerator(AIDelegate aiDelegate, CachedUnit builder) { CachedUnitDef energyGen = GlobalDelegate.getUnitDef("Solar", Faction.getFaction(builder.getDef())); AIFloat3 pos = DefaultCommands.getEnergyBuildPos(aiDelegate, builder, energyGen, DEFAULT_ENERGY_SEARCH_RADIUS, DEFAULT_ENERGY_SPACING); builder.build(energyGen.getUnitDef(), pos); } public static void queueFactory(AIDelegate aiDelegate, CachedUnit builder) { CachedUnitDef factory = GlobalDelegate.getUnitDef("AircraftFactory", Faction.getFaction(builder.getDef())); AIFloat3 pos = BuilderUtil.moveTowardsMapCenter(aiDelegate.getBaseCenter(), DEFAULT_FACTORY_DISTANCE); pos = aiDelegate.findClosestBuildSite(factory, pos, DEFAULT_SEARCH_RADIUS, DEFAULT_SPACING, 0); builder.build(factory.getUnitDef(), pos, CommandUtil.getMapCenterFacing(aiDelegate, builder)); } public static void queueMetalMaker(AIDelegate aiDelegate, CachedUnit builder) { CachedUnitDef building = GlobalDelegate.getUnitDef("MetalMaker", Faction.getFaction(builder.getDef())); AIFloat3 pos = BuilderUtil.moveTowardsMapCenter(aiDelegate.getBaseCenter(), DEFAULT_METAL_MAKER_DISTANCE); pos = aiDelegate.findClosestBuildSite(building, pos, DEFAULT_SEARCH_RADIUS, DEFAULT_SPACING, 0); builder.build(building.getUnitDef(), pos, CommandUtil.getMapCenterFacing(aiDelegate, builder)); } public static void queueMetalStorage(AIDelegate aiDelegate, CachedUnit builder) { CachedUnitDef building = GlobalDelegate.getUnitDef("MetalStorage", Faction.getFaction(builder.getDef())); AIFloat3 pos = BuilderUtil.moveAwayFromMapCenter(aiDelegate.getBaseCenter(), DEFAULT_STORAGE_DISTANCE); pos = aiDelegate.findClosestBuildSite(building, pos, DEFAULT_SEARCH_RADIUS, DEFAULT_SPACING, 0); builder.build(building.getUnitDef(), pos, CommandUtil.getMapCenterFacing(aiDelegate, builder)); } public static void queueEnergyStorage(AIDelegate aiDelegate, CachedUnit builder) { CachedUnitDef building = GlobalDelegate.getUnitDef("EnergyStorage", Faction.getFaction(builder.getDef())); AIFloat3 pos = BuilderUtil.moveAwayFromMapCenter(aiDelegate.getBaseCenter(), DEFAULT_STORAGE_DISTANCE); pos = aiDelegate.findClosestBuildSite(building, pos, DEFAULT_SEARCH_RADIUS, DEFAULT_SPACING, 0); builder.build(building.getUnitDef(), pos, CommandUtil.getMapCenterFacing(aiDelegate, builder)); } public static void queueAdvSolar(AIDelegate aiDelegate, CachedUnit builder) { CachedUnitDef advSolar = GlobalDelegate.getUnitDef("ASolar", Faction.getFaction(builder.getDef())); builder.build(advSolar.getUnitDef(), DefaultCommands.getEnergyBuildPos(aiDelegate, builder, advSolar, DEFAULT_ENERGY_SEARCH_RADIUS, DEFAULT_ENERGY_SPACING)); } public static void queueT2Factory(AIDelegate aiDelegate, CachedUnit builder) { CachedUnitDef factory = null; UnitInfo builderInfo = UnitInfo.getUnitInfo(builder.getDef()); if (builderInfo.getName().equals("KT1Builder")) { factory = GlobalDelegate.getUnitDef("T2KbotFactory", Faction.getFaction(builder.getDef())); } else if (builderInfo.getName().equals("VT1Builder")) { factory = GlobalDelegate.getUnitDef("T2VehicleFactory", Faction.getFaction(builder.getDef())); } else if (builderInfo.getName().equals("AT1Builder")) { factory = GlobalDelegate.getUnitDef("T2AircraftFactory", Faction.getFaction(builder.getDef())); } if (factory != null) { AIFloat3 pos = BuilderUtil.moveTowardsMapCenter(aiDelegate.getBaseCenter(), DEFAULT_FACTORY_DISTANCE); pos = aiDelegate.findClosestBuildSite(factory, pos, DEFAULT_SEARCH_RADIUS, DEFAULT_SPACING, 0); builder.build(factory.getUnitDef(), pos, CommandUtil.getMapCenterFacing(aiDelegate, builder)); } } public static void queueNano(AIDelegate aiDelegate, CachedUnit builder) { CachedUnitDef nano = GlobalDelegate.getUnitDef("Nano", Faction.getFaction(builder.getDef())); AIFloat3 pos = BuilderUtil.moveTowardsMapCenter(aiDelegate.getBaseCenter(), 250); pos = aiDelegate.findClosestBuildSite(nano, pos, DEFAULT_SEARCH_RADIUS, DEFAULT_NANO_SPACING, 0); builder.build(nano.getUnitDef(), pos); } public static void queueFusion(AIDelegate aiDelegate, CachedUnit builder) { CachedUnitDef fusion = GlobalDelegate.getUnitDef("Fusion", Faction.getFaction(builder.getDef())); builder.build(fusion.getUnitDef(), DefaultCommands.getEnergyBuildPos(aiDelegate, builder, fusion, DEFAULT_ENERGY_SEARCH_RADIUS, DEFAULT_ENERGY_SPACING)); } public static void queueEnergyGenerator(AIDelegate aiDelegate, CachedUnit builder) { CachedUnitDef energyGen; // If wind is low, only build solar if (ResourceManager.getAverageWind() < 9) { energyGen = GlobalDelegate.getUnitDef("Solar", Faction.getFaction(builder.getDef())); } // If wind is high, only build wind else if (ResourceManager.getAverageWind() > 14) { energyGen = GlobalDelegate.getUnitDef("Wind", Faction.getFaction(builder.getDef())); } // Otherwise randomly build both else if (Math.random() < 0.5) { energyGen = GlobalDelegate.getUnitDef("Wind", Faction.getFaction(builder.getDef())); } else { energyGen = GlobalDelegate.getUnitDef("Solar", Faction.getFaction(builder.getDef())); } AIFloat3 pos = DefaultCommands.getEnergyBuildPos(aiDelegate, builder, energyGen, DEFAULT_ENERGY_SEARCH_RADIUS, DEFAULT_ENERGY_SPACING); builder.build(energyGen.getUnitDef(), pos); } }