/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package org.petah.spring.bai.tasks; import org.petah.spring.bai.cache.CachedUnit; import org.petah.spring.bai.delegate.AIDelegate; import org.petah.spring.bai.group.UnitGroup; import org.petah.spring.bai.unit.Faction; /** * * @author Petah */ public class DynamicTask extends Task { private int nextUpdate = 0; private int updateSpeed = 30; private DynamicCommand rootCommand; public DynamicTask(AIDelegate aiDelegate, DynamicCommand rootCommand) { super(aiDelegate); this.rootCommand = rootCommand; } public boolean update(UnitGroup group, int frame) { if (nextUpdate <= frame) { nextUpdate = frame + updateSpeed; for (CachedUnit unit : group) { rootCommand.execute(aiDelegate, unit); } } return false; } public static Task getDynamicTestTask(AIDelegate aiDelegate) { DynamicCondition rootCommand = new StatusCondition(StatusCondition.Status.Idle); { DynamicCondition factoryCheck = rootCommand.addCommand(new UnitCondition("KbotFactory")); { DynamicCondition resourceCheck = factoryCheck.addCommand(new ResourceCondition(500, ResourceCondition.Resource.Metal, ResourceCondition.CheckType.Over)); { DynamicCondition factionCheck = resourceCheck.addCommand(new FactionCondition(Faction.Arm)); { DynamicCondition groupCheck = factionCheck.addCommand(new GroupCondition(15, "Scouts", GroupCondition.CheckType.Under)); { groupCheck.addCommand(new FactoryBuild("Flea")); groupCheck.addCommand(new FactoryBuild("Flea")); } factionCheck.addCommand(new FactoryBuild("Warrior")); } resourceCheck.addCommand(new FactoryBuild("KLightRaider")); resourceCheck.addCommand(new FactoryBuild("KLightRanger")); resourceCheck.addCommand(new FactoryBuild("KLightAssault")); } NestedDynamicCommand elseCondition = resourceCheck.setElseCommand(new NestedDynamicCommand()); { DynamicCondition factionCheck = elseCondition.addCommand(new FactionCondition(Faction.Arm)); { DynamicCondition groupCheck = factionCheck.addCommand(new GroupCondition(15, "Scouts", GroupCondition.CheckType.Under)); { groupCheck.addCommand(new FactoryBuild("Flea")); } } elseCondition.addCommand(new FactoryBuild("KLightRaider")); elseCondition.addCommand(new FactoryBuild("KLightRaider")); DynamicCondition groupCheck = elseCondition.addCommand(new GroupCondition(15, "Builders", GroupCondition.CheckType.Under)); { groupCheck.addCommand(new FactoryBuild("KT1Builder")); } } } } return new DynamicTask(aiDelegate, rootCommand); } }