示例#1
0
 protected function CalculateNextBuildLevel(BuildItem $item, $alreadyBuiltLevels)
 {
     $scheduledLevelTotal = 0;
     // First, look through the database list.
     // If it's empty, it means the current BuildGroup IS the database list! We look through that list below.
     if ($item->BuildGroup()->ItemsInDatabase() != NULL) {
         foreach ($item->BuildGroup()->ItemsInDatabase() as $buildItem) {
             // We're only interested in items scheduled before us, not in the future!
             if ($buildItem->PositionInList() < $item->PositionInList()) {
                 if ($buildItem->Name() === $this->Name()) {
                     $scheduledLevelTotal += $buildItem->Amount();
                 }
             }
         }
     }
     // Next, look through the current BuildGroup, we may have requested units like these before (but they're not in the database yet)
     foreach ($item->BuildGroup()->Members() as $buildItem) {
         // We're only interested in items scheduled before us, not in the future!
         if ($buildItem->PositionInList() < $item->PositionInList()) {
             if ($buildItem->Name() === $this->Name()) {
                 $scheduledLevelTotal += $buildItem->Amount();
             }
         }
     }
     echo "<pre>the next buildLevel return of " . $item->Name() . " is " . ($alreadyBuiltLevels + $scheduledLevelTotal + 1) . ".</pre>";
     return $alreadyBuiltLevels + $scheduledLevelTotal + 1;
 }
示例#2
0
 public static function FromIDResource(IDResource $resource, $position, $oldPosition, $scheduledTime, BuildGroup $bg = NULL)
 {
     $buildItem = new BuildItem();
     $buildItem->Name($resource->Name());
     $buildItem->Cost($resource->Cost());
     $buildItem->NextCostModifier($resource->NextCostModifier());
     $buildItem->Prerequisite($resource->Prerequisite());
     $buildItem->ID($resource->ID());
     $buildItem->Amount($resource->Amount(), false);
     $buildItem->PositionInList($position, false);
     $buildItem->OldPositionInList($oldPosition, false);
     $buildItem->FirstBuildTime($scheduledTime);
     $buildItem->HasChanged(false);
     $buildItem->BuildGroup($bg);
     return $buildItem;
 }
示例#3
0
 public function ContainsBuildItem(BuildItem $needle)
 {
     foreach ($this->Members() as $item) {
         if ($item->ID() === $needle->ID() && $item->PositionInList() === $needle->PositionInList() && $item->BuildGroup()->Colony()->Equals($needle->BuildGroup()->Colony())) {
             return true;
         }
     }
     return false;
 }
示例#4
0
 public function FieldsLeft(BuildItem $item)
 {
     if (!$item->IsBuilding()) {
         throw new Exception("You can't call Colony::FieldsLeft on a non-building BuildItem!");
     }
     // First, calculate how many fields are used up by the items before this item in the build list
     $fieldsLeft = $this->MaxFields() - $this->UsedFields();
     $list = $item->BuildGroup()->Members();
     $myPosition = $item->PositionInList();
     for ($i = 0; $i < $myPosition; $i++) {
         if ($list[$i]->IsBuilding()) {
             $fieldsLeft -= $list[$i]->Amount();
         }
     }
     return $fieldsLeft;
 }