public function BuildTime(Colony $colony) { // Calculate time required global $NN_config; $metalCost = $this->Cost()->Metal(); $crystalCost = $this->Cost()->Crystal(); $gameSpeed =& $NN_config["game_speed"]; $shipyards = $colony->Buildings()->GetMemberByName("shipyard")->Amount(); $nanoFactories = $colony->Buildings()->GetMemberByName("nano_factory")->Amount(); $technocrats = $colony->Owner()->Officers()->GetMemberByName("technocrat")->Amount(); $generals = $colony->Owner()->Officers()->GetMemberByName("general")->Amount(); $timeRequired = ($metalCost + $crystalCost) / $gameSpeed * (1 / ($shipyards + 1)) * pow(0.5, $nanoFactories); $timeRequired = floor($timeRequired * 3600 * (1 - $technocrats * 0.05) * (1 - $generals * 0.25)); return $timeRequired; }
public function BuildTime(Colony $colony, Cost $buildCosts) { // Calculate time required global $NN_config; $metalCost =& $buildCosts->Metal(); $crystalCost =& $buildCosts->Crystal(); $gameSpeed =& $NN_config["game_speed"]; $robotFactories = $colony->Buildings()->GetMemberByName("robotics_factory")->Amount(); $nanoFactories = $colony->Buildings()->GetMemberByName("nano_factory")->Amount(); $manufacturers = $colony->Owner()->Officers()->GetMemberByName("manufacturer")->Amount(); $timeRequired = ($metalCost + $crystalCost) / $gameSpeed * (1 / ($robotFactories + 1)) * pow(0.5, $nanoFactories); $timeRequired = floor($timeRequired * 3600 * (1 - $manufacturers * 0.1)); return $timeRequired; }
public static function FromDatabase(array $row, User $user = NULL) { $colony = new Colony(); // Colony details $colony->Name($row["name"]); $colony->Coordinates(new Coordinates($row["galaxy_position"], $row["system_position"], $row["planet_position"])); $colony->ID($row["ID"]); if ($user == NULL) { $colony->Owner(User::GetOwnerOfColonyID($row["ID"], $colony)); } else { $colony->Owner($user); } $colony->HomeColony($row["is_home_colony"]); // Resources $rowResources = Database::Instance()->ExecuteQuery("SELECT * FROM colony_resources WHERE colonyID = " . $row['ID'] . ";", "SELECT"); $colony->CurrentResources(new Cost($rowResources["metal_available"], $rowResources["crystal_available"], $rowResources["deuterium_available"], 0)); // TODO: Add energy later // Storage $colony->MetalStorage($rowResources['metal_storage_limit']); $colony->CrystalStorage($rowResources['crystal_storage_limit']); $colony->DeuteriumStorage($rowResources['deuterium_storage_limit']); // Get planet surface properties $rowProperties = Database::Instance()->ExecuteQuery("SELECT * FROM colony_properties WHERE colonyID = " . $row['ID'] . ";", "SELECT"); $colony->MaxFields($rowProperties['max_build_fields']); $colony->UsedFields($rowProperties['used_build_fields']); $colony->Diameter($rowProperties['diameter']); $colony->PlanetType(PlanetType::FromDatabase($rowProperties)); $planetData = $colony->PlanetType()->Variations(); $colony->PlanetData($planetData[0]); // "Last updated" variable $colony->LastUpdated($row['last_updated']); // Is this colony a moon? $colony->IsMoon($row['is_moon']); // Get buildings $buildings = BuildingGroup::FromDatabaseByColony($colony); $colony->ProductionUnits($buildings[0]); $colony->BuildingUnits($buildings[1]); // Get combat units $colony->Defenses(CombatGroup::GetDefensesOfColony($colony)); $colony->Fleet(ShipFleet::GetShipsOfColony($colony)); return $colony; }
public function Trader(Colony $c) { $this->_colony = $c; // Include language files for trader page, useful to put error messages there. $this->_text =& $c->Owner()->Language()->GetFilesByPage("trader"); }