File indexing completed on 2024-12-08 03:47:13

0001 /*
0002     SPDX-FileCopyrightText: 2003 Russell Steffen <rsteffen@bayarea.net>
0003     SPDX-FileCopyrightText: 2003 Stephan Zehetner <s.zehetner@nevox.org>
0004     SPDX-FileCopyrightText: 2006 Dmitry Suzdalev <dimsuz@gmail.com>
0005     SPDX-FileCopyrightText: 2006 Inge Wallin <inge@lysator.liu.se>
0006     SPDX-FileCopyrightText: 2006 Pierre Ducroquet <pinaraf@gmail.com>
0007 
0008     SPDX-License-Identifier: GPL-2.0-or-later
0009 */
0010 
0011 #include "planet.h"
0012 #include "sector.h"
0013 #include "fleet.h"
0014 #include "game.h"
0015 #include "players/player.h"
0016 #include <QRandomGenerator>
0017 #include <QDebug>
0018 
0019 //---------------------------------------------------------------------------
0020 // class Planet
0021 //---------------------------------------------------------------------------
0022 
0023 Planet::Planet( const QString &planetName, Sector *sector, Player *initialOwner,
0024                 int newProd, double newKillP )
0025   : m_name(planetName),
0026     m_owner(initialOwner),
0027     m_sector(sector),
0028     m_homeFleet( this, 0 ),
0029     m_killPercentage(newKillP),
0030     m_productionRate(newProd), m_originalProductionRate(newProd),
0031     m_oldShips(newProd),
0032     m_showCurShips(true),
0033     m_justconquered(false)
0034 {
0035     m_planetLook = QRandomGenerator::global()->bounded(10);
0036     connect(&m_homeFleet, &DefenseFleet::update, this, &Planet::update);
0037     m_sector->setPlanet( this );
0038 }
0039 
0040 Planet::~Planet() {  m_sector->removePlanet(); }
0041 
0042 
0043 Planet *
0044 Planet::createPlayerPlanet( Sector *sector, Player *initialOwner, 
0045                 const QString &planetName )
0046 {
0047     return new Planet( planetName, sector, initialOwner, 10, 0.400 );
0048 }
0049 
0050 
0051 Planet *
0052 Planet::createNeutralPlanet( Sector *sector, Player *initialOwner,
0053                  const QString &planetName )
0054 {
0055     double     killP          = Game::generateKillPercentage();
0056     int        productionRate = (int) Game::generatePlanetProduction();
0057 
0058     return new Planet( planetName, sector,
0059                        initialOwner, productionRate, killP );
0060 }
0061 
0062 void
0063 Planet::conquer( AttackFleet *conqueringFleet )
0064 {
0065     m_owner->deleteStandingOrders(this);
0066     m_owner = conqueringFleet->owner;
0067     m_owner->statPlanetsConquered(1);
0068     m_homeFleet.become( conqueringFleet );
0069     m_productionRate = m_originalProductionRate;
0070     m_justconquered = true;
0071 }
0072 
0073 void
0074 Planet::turn(const GameOptions &options)
0075 {
0076     //qDebug() << "Planet::turn...";
0077 
0078     if (options.ProductionAfterConquere || !m_justconquered) {
0079         if (m_owner->isNeutral()) {
0080             m_homeFleet.addShips(options.NeutralsProduction);
0081             m_owner->statShipsBuilt(options.NeutralsProduction);
0082         }
0083         else {
0084             m_homeFleet.addShips(m_productionRate);
0085             m_owner->statShipsBuilt(m_productionRate);
0086         }
0087 
0088         m_owner->statShipCount(m_homeFleet.shipCount());
0089 
0090         if (options.CumulativeProduction) {
0091             m_productionRate++;
0092         }
0093     }
0094 
0095     m_oldShips = m_homeFleet.shipCount();
0096     m_showCurShips = true;
0097     m_justconquered = false;
0098     Q_EMIT update();
0099 }
0100 
0101 #include "moc_planet.cpp"