public static function FromList(array $resources, Colony $colony, array $listPositions = NULL, $forDeletion = false) { $members = array(); $positionCounter = 0; $positionInList = 0; // Determine the list positions. if ($listPositions == NULL) { $positionInList += BuildingBuildGroup::GetLastBuildListPosition($colony); $positionInList++; // If there are other constructions preceding this, offset by 1. } else { // We DID receive an overriding array, let's use those numbers instead! $positionInList = $listPositions[0]; } // Construct list of members foreach ($resources as $itemName) { $itemObject = clone ResourceParser::Instance()->GetItemByName($itemName); $itemObject->Amount(1); if ($listPositions != NULL) { // Override the list position with the given array. $positionInList = $listPositions[$positionCounter]; $positionCounter++; } $members[$positionInList] =& BuildingBuildItem::FromIDResource($itemObject, $positionInList, $positionInList, 0, 1, NULL); $positionInList++; } $bg = new BuildingBuildGroup($members, $colony); BuildGroup::LinkMembersToGroup($bg); // If this BuildGroup is being built up so we can deduct it from another BuildGroup, // we don't calculate all the build times, because they won't be used. if (!$forDeletion) { $bg->FillItemsInDatabase(); // Pretty damn crucial for correct calculation of buildLevels! $bg->UpdateLevels(); $bg->UpdateBuildTimes(); } return $bg; }