* @version 0.0.0
* @copyright Copyright(c) 2007, 2008 Roland Haeder, this is free software
* @license GNU GPL 3.0 or any newer version
* @link http://www.ship-simu.org
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
class PassengerShip extends BaseShip implements ConstructableShip, LimitableObject {
// Konstruktor
protected function __construct () {
// Eltern-Kontruktor aufrufen
parent::__construct(__CLASS__);
// Set description
$this->setObjectDescription("Passagier-Schiff");
// Generate unique ID number
$this->generateUniqueId();
// Clean up a little
$this->removeSystemArray();
}
// Passagier-Schiff erstellen
public final static function createPassengerShip ($shipName) {
// Get new instance
$passInstance = new PassengerShip();
// Debug message
if ((defined('DEBUG_SHIP')) || (defined('DEBUG_ALL'))) {
$passInstance->getDebugInstance()->output(sprintf("[%s:%d] Ein Passagier-Schiff wird erstellt.
\n",
__CLASS__,
__LINE__
));
} // END - if
// Set ship's name
$passInstance->setShipName($shipName);
// Instanz zurueckgeben
return $passInstance;
}
// Anzahl Betten ermitteln
final function calcTotalBeds () {
// Struktur-Array holen
$struct = $this->getStructuresArray();
if (is_null($struct)) {
// Empty structures list!
throw new EmptyStructuresListException($this, self::EXCEPTION_EMPTY_STRUCTURES_ARRAY);
} // END - if
// Anzahl Betten auf 0 setzen
$numBeds = 0;
// Alle Strukturen nach Kabinen durchsuchen
for ($idx = $struct->getIterator(); $idx->valid(); $idx->next()) {
// Element holen
$el = $idx->current();
// Ist es eine Kabine?
if ($el->isCabin()) {
// Anzahl Betten ermitteln
$total = $el->calcTotalBedsByCabin();
$numBeds += $total;
// Debug-Meldung ausgeben?
if ((defined('DEBUG_SHIP')) || (defined('DEBUG_ALL'))) {
// Get new instance
$cabType = "Kabine ohne Namen";
$cab = $el->getPartInstance();
if (!is_null($cab)) {
// Kabinenbeschreibung holen
$cabType = $cab->getObjectDescription();
}
// Debug-Meldung ausgeben
$this->getDebugInstance()->output(sprintf("[%s:%d] Es stehen %d Betten vom Kabinen-Typ %s bereit.
\n",
__CLASS__,
__LINE__,
$total,
$cabType
));
}
} else {
// Keine Kabine!
if ((defined('DEBUG_SHIP')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] %s ist keine Kabine.
\n",
__CLASS__,
__LINE__,
$el->getObjectDescription()
));
}
} // END - for
if ((defined('DEBUG_SHIP')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Das %s mit dem Namen %s hat %d Betten.
\n",
__CLASS__,
__LINE__,
$this->getObjectDescription(),
$this->getShipName(),
$numBeds
));
// Anzahl zurueckliefern
return $numBeds;
}
/**
* Reduces the volume of a processed object.
*
* @param $limitInstance An instance to ObjectLimits which holds
* attribute names that we want to include in the processing phase.
* Other attributes except $uniqueID and $realClass will be ignored
* and keept out.
* @return void
*/
function limitObject (ObjectLimits $limitInstance) {
// Work in progress
$this->partialStub("Unfinished method called.");
}
}
// [EOF]
?>