Пример #1
0
 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;
 }
Пример #2
0
 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;
 }
Пример #3
0
 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;
 }
Пример #4
0
 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");
 }