* @version 0.0.0
* @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 Ship-Simu Developer Team
* @license GNU GPL 3.0 or any newer version
* @link http://www.shipsimu.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 Shipyard extends BaseConstruction {
// Werft-Name
private $shipyardName = "Namenlose Werft";
// Arbeiter-Liste
private $staffList = null;
// Queue-Liste fuer zu bauende Schiffe
private $queueList = null;
// Aktuell im Bau befindliches Schiff
private $currShipInConst = null;
// Liste konstruierbarer Schiffstypen
private $shipTypeList = null;
// Zugewiesener Hafen
private $harborInstance = null;
// Zugewiesene Reederei
private $shippingCompany = null;
// Constructor
protected function __construct () {
// Call parent constructor
parent::__construct(__CLASS__);
// Staff-Liste/Schiffstyp-Liste erzeugen
$this->createStaffList();
$this->createShipTypeList();
}
// Create a shipyard and notify it about it's owner
public static final function createShipyardNotify (Harbor $harborInstance, $shipyardName, ShippingCompany $companyInstance) {
// Werft-Instanz holen
$shipyardInstance = self::createShipyard($harborInstance, $shipyardName);
// Reederei der Werft zuweisen
$shipyardInstance->setCompanyInstance($companyInstance);
// Die Reederei ueber ihre Werft informieren
$companyInstance->addNewShipyard($shipyardInstance);
// Instanz zurueckgeben
return $shipyardInstance;
}
// Create a shipyard, first we need to create a harbor
public static final function createShipyard (Harbor $harborInstance, $shipyardName) {
// Instanz temporaer holen
$shipyardInstance = new Shipyard();
// Debug message
if ((defined('DEBUG_SHIPYARD')) || (defined('DEBUG_ALL'))) $shipyardInstance->debugOutput(sprintf("[%s:%d] Eine Werft mit dem Namen %s wird im Hafen %s konstruiert.",
__CLASS__,
__LINE__,
$shipyardName,
$harborInstance->getHarborName()
));
// Werft-Name setzen
$shipyardInstance->setShipyardName($shipyardName);
// Hafen-Instanz setzen
$shipyardInstance->setHarborInstance($harborInstance);
// Abmasse setzen in Meter
$shipyardInstance->setWidth(30);
$shipyardInstance->setHeight(30);
$shipyardInstance->setLength(100);
// Clean up a little
$shipyardInstance->removeDraught();
// Debug-Meldung
if ((defined('DEBUG_SHIPYARD')) || (defined('DEBUG_ALL'))) $shipyardInstance->debugOutput(sprintf("[%s:%d] Die Werft %s wurde gebaut.",
__CLASS__,
__LINE__,
$shipyardName
));
// Instanz zurueckliefern
return $shipyardInstance;
}
// Create staff list
private function createStaffList () {
$this->staffList = new FrameworkArrayObject("FakedStaffList");
}
// Create ship type list
private function createShipTypeList () {
$this->shipTypeList = new FrameworkArrayObject("FakedShipTypeList");
}
// Setter-Methode fuer Werft-Name
public final function setShipyardName ($shipyardName) {
$this->shipyardName = (string) $shipyardName;
}
// Getter-Methode fuer Werft-Name
public final function getShipyardName () {
return $this->shipyardName;
}
// Setter-Methode fuer Hafen-Instanz
public final function setHarborInstance (Harbor $harborInstance) {
$this->harborInstance = $harborInstance;
}
// Getter-Methode fuer Hafen-Instanz
public final function getHarborInstance () {
return $this->harborInstance;
}
// Setter fuer Reederei-Instanz
public final function setCompanyInstance (ShippingCompany $companyInstance) {
$this->shippingCompany = $companyInstance;
}
// Getter fuer Reederei-Instanz
public final function getCompanyInstance () {
return $this->shippingCompany;
}
// Add new personell
public function addNewPersonell ($personell) {
// Add to list
$this->staffList->append($personell);
}
// Add a new ship type to our list
public function addNewConstructableShipType ($shipType) {
// This must be a string!
$shipType = (string) $shipType;
// Debug message
if ((defined('DEBUG_SHIPYARD')) || (defined('DEBUG_ALL'))) $this->debugOutput(sprintf("[%s:%d] Die Werft %s kann bald Schiffe vom Typ %s bauen.",
__CLASS__,
__LINE__,
$this->getShipyardName(),
$shipType
));
// Add to list
$this->shipTypeList->append($shipType);
}
// Is the specified ship type in our list?
public function isShipTypeConstructable ($shipType) {
// First we can't build this ship
$result = false;
// This must be a string!
$shipType = (string) $shipType;
// Debug message
if ((defined('DEBUG_SHIPYARD')) || (defined('DEBUG_ALL'))) $this->debugOutput(sprintf("[%s:%d] Die Werft %s prüft, ob Schiffe vom Typ %s baubar sind.",
__CLASS__,
__LINE__,
$this->getShipyardName(),
$shipType
));
// Iterate through all types
for ($idx = $this->shipTypeList->getIterator(); $idx->valid(); $idx->next()) {
// Get current ship type
$type = (string) $idx->current();
// Is both the same?
$result = ($type == $shipType);
// Type is found?
if ($result) break; // Then abort the search!
}
// Debug message
if ((defined('DEBUG_SHIPYARD')) || (defined('DEBUG_ALL'))) $this->debugOutput(sprintf("[%s:%d] Die Werft %s hat die Suche nach dem Schiffstyp %s abgeschlossen.",
__CLASS__,
__LINE__,
$this->getShipyardName(),
$shipType
));
// Return result
return $result;
}
}
// [EOF]
?>