コード例 #1
0
 public static function FromList(array $resources, array $amounts, Colony $colony, array $listPositions = NULL, $forDeletion = false)
 {
     $members = array();
     $positionInList = 0;
     $amountCounter = 0;
     // Determine the list positions.
     if ($listPositions == NULL) {
         // Get the offset of build list positions
         $firstItem = ResourceParser::Instance()->GetItemByName($resources[0]);
         if ($firstItem->IsBuilding()) {
             $scheduledUnitData = BuildGroup::GetLastBuildListPosition($colony);
             $positionInList += $scheduledUnitData;
         } else {
             $scheduledUnitData = BuildGroup::ShipyardIsBusyUntil();
             $positionInList += $scheduledUnitData["build_list_position"];
         }
         $positionInList++;
         // If there are other constructions preceding this, offset by 1.
     } else {
         $positionCounter = 0;
         $positionInList = $listPositions[$positionCounter];
     }
     // Construct list of members
     foreach ($resources as $itemName) {
         $itemObject = clone ResourceParser::Instance()->GetItemByName($itemName);
         // the 'false' boolean means "Don't inform the BuildGroup of a change" because we'll manually calculate build times in a second
         $itemObject->Amount($amounts[$amountCounter], false);
         $amountCounter++;
         if ($listPositions != NULL) {
             $positionInList = $listPositions[$positionCounter];
             $positionCounter++;
         }
         if ($itemObject->IsBuilding()) {
             $members[$positionInList] =& BuildingBuildItem::FromIDResource($itemObject, $positionInList, $positionInList, 0, 1, NULL);
         } else {
             $members[$positionInList] =& BuildItem::FromIDResource($itemObject, $positionInList, $positionInList, 0, NULL);
         }
         $positionInList++;
     }
     if ($itemObject->IsBuilding()) {
         $rg = new BuildingBuildGroup($members, $colony);
     } else {
         $rg = new BuildGroup($members, $colony);
     }
     foreach ($rg->Members() as $unit) {
         $unit->BuildGroup($rg);
     }
     if (!$forDeletion) {
         $rg->FillItemsInDatabase();
         // Pretty damn crucial for correct calculation of buildLevels!
         $rg->UpdateBuildTimes();
     }
     return $rg;
 }
コード例 #2
0
 private function RenderQueueRow(BuildingBuildItem $item, $position)
 {
     $vars['build_position_visual'] = $position;
     $vars['build_position_actual'] = $item->PositionInList();
     $vars['building_id'] = $item->ID();
     $vars['building_name'] = $this->_text[$item->Name()];
     $vars['building_level'] = $item->Level();
     $vars['build_item_timer_id'] = $vars['build_position_visual'] . "_" . $item->Name() . "_" . $vars['building_level'];
     $vars['cancel_item'] = $this->_text['cancel_item'];
     if ($position == 1) {
         // The first item is also unmoveable.
         $vars['class_queue_row'] = ' class="nodrop nodrag"';
         $vars['build_time'] = $item->ScheduledTime() * 1000 + $this->_time * 1000;
         $timeparts = explode(" ", microtime());
         $currenttime = bcadd($timeparts[0] * 1000, bcmul($timeparts[1], 1000));
         $vars['current_time'] = $currenttime;
         $row = Page::StaticRender("buildings/building_queue_row", $vars, $this->_user->AuthorisationLevelName());
         $timer = Page::StaticRender("buildings/building_queue_timer", $vars, $this->_user->AuthorisationLevelName());
     } else {
         $row = Page::StaticRender("buildings/building_queue_row", $vars, $this->_user->AuthorisationLevelName());
         $timer = "";
     }
     return array("row" => $row, "timer" => $timer);
 }
コード例 #3
0
 public function DeleteItemFromDatabase(BuildingBuildItem $item)
 {
     $colonyID = $this->Colony()->ID();
     $type = $item->ID();
     $pos = $item->OldPositionInList();
     $query = "DELETE FROM production_building WHERE colonyID = {$colonyID} AND resource_type_being_built = {$type} AND build_list_position = {$pos};";
     Database::Instance()->ExecuteQuery($query, "DElETE");
     // Update UsedFields
     $colonyUsedFields = $this->Colony()->UsedFields();
     $this->Colony()->UsedFields($colonyUsedFields - 1);
     $itemsToBeUpdated = array("used_build_fields");
     $this->Colony()->UpdateDatabaseProperties($itemsToBeUpdated);
 }