public void AddDesiredPerBase(BuildingAtBase key, int val) { if (!DesiredPerBase.ContainsKey(key)) { DesiredPerBase.Add(key, 0); } DesiredPerBase[key] += val; }
public override bool Equals(object obj) { if (obj.GetType() != typeof(BuildingAtBase)) { return(false); } BuildingAtBase other = (BuildingAtBase)obj; return(Type == other.Type && B == other.B); }
public StepResult Perform(BuildListState state) { if (!Condition.Invoke()) { return(new NextItem()); } if (UnitTypes.LookUp[UnitType].TechRequirement != 0 && Bot.Main.UnitManager.Completed(UnitTypes.LookUp[UnitType].TechRequirement) == 0 && UnitTypes.LookUp[UnitType].TechRequirement != UnitTypes.HATCHERY && UnitType != UnitTypes.GATEWAY) { bool almostReady = false; if (UnitType == UnitTypes.CYBERNETICS_CORE) { foreach (Agent agent in Bot.Main.Units()) { if (agent.Unit.UnitType == UnitTypes.GATEWAY && agent.Unit.BuildProgress >= 0.8) { almostReady = true; } } } if (!almostReady) { Bot.Main.DrawText("Skipping list. Build tech for " + UnitTypes.LookUp[UnitType].Name + " not available: " + UnitTypes.LookUp[UnitType].TechRequirement); return(new NextList()); } } state.AddDesired(UnitType, Number); if (DesiredPos != null) { bool built = false; foreach (BuildRequest request in ConstructionTask.Task.BuildRequests) { if (request.Type == UnitType && request.Exact == Exact && request.AroundLocation == DesiredPos) { built = true; break; } } foreach (BuildRequest request in ConstructionTask.Task.UnassignedRequests) { if (request.Type == UnitType && request.Exact == Exact && request.AroundLocation == DesiredPos) { built = true; break; } } if (!built) { foreach (Agent agent in Bot.Main.UnitManager.Agents.Values) { if (CheckTypeMatches(UnitType, agent.Unit.UnitType) && agent.Exact == Exact && agent.AroundLocation == DesiredPos) { built = true; break; } } } if (!built) { if (!Construct(state, 1)) { return(new WaitForResources()); } } } if (DesiredBase == null && state.Desired[UnitType] > Bot.Main.UnitManager.Count(UnitType) && !Exact) { if (!Construct(state, state.Desired[UnitType] - Bot.Main.UnitManager.Count(UnitType))) { return(new WaitForResources()); } } if (DesiredBase != null) { BuildingAtBase key = new BuildingAtBase(UnitType, DesiredBase); state.AddDesiredPerBase(key, Number); if (state.DesiredPerBase[key] > Build.Count(DesiredBase, UnitType) && !Exact) { if (!Construct(state, state.DesiredPerBase[key] - Build.Count(DesiredBase, UnitType))) { return(new WaitForResources()); } } } return(new NextItem()); }