def requestResources(self, resourceChanges, allOrNothing = True):
        self.ResourceLock.acquire()
        haveAllResources = True
        for resourceType, changeValue in resourceChanges.iteritems():
            if self.Resources[resourceType] < changeValue:
                haveAllResources = False
                if resourceType in self.DataStore.processedResources():
                    self.addWant(VillageRequest("Refine:" + resourceType, 1), 2)
                else:
                    self.addWant(VillageRequest("Gather:" + resourceType, 1), 2)
        
        if haveAllResources:
            for resourceType, changeValue in resourceChanges.iteritems():
                self.Resources[resourceType] -= changeValue     
        self.ResourceLock.release()    

        return haveAllResources
示例#2
0
 def MoreStockPiles(self):
     if len(
             self.DataStore.findAllIdleReadBuildings(
                 "StockPile", self.DataStore.DoesBuildingExist)) < len(
                     self.DataStore.EnvActors) / 10:
         id = self.DataStore.getBuildingPoint()
         self.DataStore.EnvTiles[id].Structure = StockPile(
             self.DataStore, self.DataStore.EnvTiles[id])
         self.DataStore.Village.addWant(
             VillageRequest("Build:{0}".format(id), 2),
             self.DataStore.EnvTiles[id].Structure.WokersRequiredToBuild)
         self.DataStore.AddBuilding(1)
示例#3
0
    def AnalyzeFood(self):
        if len(self.DataStore.EnvActors) == 0:
            return

        averageHunger = 0
        averageFoodHunger = 0
        totalFoodNeeded = 0
        averageConsumption = 0
        for key, actor in self.DataStore.EnvActors.iteritems():
            averageHunger += actor.Hunger
            totalFoodNeeded += actor.Hunger / actor.FoodToHungerConversion
            averageFoodHunger += actor.FoodToHungerConversion
            averageConsumption += actor.HungerDisRate
        diffFoods = (self.FoodStockPilePreference * totalFoodNeeded
                     ) - self.DataStore.Village.Resources["Food"]
        if diffFoods > 0:
            workersNeeded = int(
                math.ceil(diffFoods / self.FoodPerWorkerNeededNeeded))
            idx = self.DataStore.findIdle("FoodProcessor")

            if idx == -1:
                id = self.DataStore.getBuildingPoint()
                self.DataStore.EnvTiles[id].Structure = FoodProcessor(
                    self.DataStore, self.DataStore.EnvTiles[id])
                self.DataStore.Village.addWant(
                    VillageRequest("Build:{0}".format(id), 2), self.DataStore.
                    EnvTiles[id].Structure.WokersRequiredToBuild)
                self.DataStore.AddBuilding(1)
            else:
                count = self.DataStore.findAllIdleReadBuildings(
                    "FoodProcessor", self.DataStore.isBuildingIdleandBuilt)
                for x in range(0, len(count)):
                    self.DataStore.Village.addNeed(
                        VillageRequest("Refine:Food", 0), len(count))
                self.DataStore.Village.addNeed(
                    VillageRequest("Gather:Food", 0),
                    workersNeeded - len(count))

        self.AverageHunger = averageHunger / len(self.DataStore.EnvActors)
        self.TotalConsumption = averageConsumption
    def addWant(self, want, numberToAdd, overrite = True):
        self.WantsNeedsLock.acquire()    
        self.DataStore.Logger.addToLog("{0} Want Added: {1}".format(numberToAdd, want.ActionNeeded),5)
        if overrite:
            count = 0
            for need in self.Wants:
                if need.ActionNeeded == want.ActionNeeded:
                    count += 1
            numberToAdd = max(0, numberToAdd - count)

        for x in range(0, numberToAdd):
            self.Wants.append(VillageRequest(want.ActionNeeded, want.Priority))

        self.Wants = sorted(self.Wants, key =  lambda need: need.Priority)
        self.WantsNeedsLock.release()
示例#5
0
    def AnalyzeStockPiles(self):
        totalResources = 0
        for res in self.DataStore.Village.Resources.keys():
            totalResources += self.DataStore.Village.Resources[res]

        if totalResources > (self.DataStore.StockPiles + self.DataStore.
                             ProspectiveStockPiles) * self.StoragePerStockPile:
            while True:
                id = random.randint(0, (self.DataStore.EnvironmentDimX *
                                        self.DataStore.EnvironmentDimY) - 1)
                if self.DataStore.EnvTiles[id].ResourceType == "None":
                    self.DataStore.EnvTiles[
                        id].Structure = Villlages.Buildings.StockPile.StockPile(
                            self.DataStore, self.DataStore.EnvTiles[id])
                    self.DataStore.Village.addNeed(
                        VillageRequest("Build:{0}".format(id), 0), 2)
                    self.DataStore.addProspectiveStockPile()
                    break
示例#6
0
 def AnalyzeMoreHouses(self):
     if len(self.DataStore.EnvActors
            ) + 2 > self.DataStore.ProspectiveHousing:
         self.DataStore.Logger.addToLog(
             "Length:{0}".format(
                 int(
                     math.ceil((len(self.DataStore.EnvActors) + 4 -
                                self.DataStore.ProspectiveHousing) / 5.0))),
             0)
         for x in range(
                 0,
                 int(
                     math.ceil((len(self.DataStore.EnvActors) + 4 -
                                self.DataStore.ProspectiveHousing) / 5.0))):
             id = self.DataStore.getBuildingPoint()
             self.DataStore.EnvTiles[id].Structure = House(
                 self.DataStore, self.DataStore.EnvTiles[id])
             self.DataStore.Village.addWant(
                 VillageRequest("Build:{0}".format(id), 2), self.DataStore.
                 EnvTiles[id].Structure.WokersRequiredToBuild)
             self.DataStore.AddBuilding(1)
             self.DataStore.addProspective(5)
示例#7
0
 def idleProduction(self):
     count = self.DataStore.findAllIdleReadBuildings(
         "FoodProcessor", self.DataStore.isBuildingIdleandBuilt)
     for x in range(0, len(count)):
         self.DataStore.Village.addWant(VillageRequest("Refine:Food", 0),
                                        len(count))
示例#8
0
 def AnalyzeMoreVillagers(self):
     if self.AverageHungerLimitForMore > self.AverageHunger and len(
             self.DataStore.EnvActors) + 1 <= self.DataStore.HousingAvilable:
         if self.DataStore.Village.Resources[
                 "Food"] / self.TotalConsumption > self.StoreLimitForMore:
             self.DataStore.Village.addWant(VillageRequest("Mate", 1), 2)