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; }
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); }
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); }