--- /dev/null
+<?php
+
+// Die Werft-Klasse
+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
+ private function __construct () {
+ // Eltern-Konstruktor aufrufen
+ parent::constructor(__CLASS__);
+
+ // Debug message
+ if (((defined('DEBUG_SHIPYARD')) || (defined('DEBUG_ALL'))) && (defined('DEBUG_CONSTRUCT'))) {
+ $this->getDebugInstance()->output(sprintf("[%s:%d] Konstruktor erreicht.<br />\n",
+ __CLASS__,
+ __LINE__
+ ));
+ }
+
+ // Beschreibung setzen
+ $this->setPartDescr("Werft");
+
+ // Staff-Liste/Schiffstyp-Liste erzeugen
+ $this->createStaffList();
+ $this->createShipTypeList();
+
+ // Unique-ID erzeugen
+ $this->createUniqueID();
+ }
+
+ // Create a shipyard and notify it about it's owner
+ public static 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 final static function createShipyard (Harbor $harborInstance, $shipyardName) {
+ // Instanz temporaer holen
+ $shipyardInstance = new Shipyard();
+
+ // Debug message
+ if ((defined('DEBUG_SHIPYARD')) || (defined('DEBUG_ALL'))) $shipyardInstance->getDebugInstance()->output(sprintf("[%s:%d] Eine Werft mit dem Namen <strong>%s</strong> wird im Hafen <strong>%s</strong> konstruiert.<br />\n",
+ __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);
+
+ // Etwas aufraeumen
+ $shipyardInstance->removeDraught();
+ $shipyardInstance->removeSystemArray();
+
+ // Debug-Meldung
+ if ((defined('DEBUG_SHIPYARD')) || (defined('DEBUG_ALL'))) $shipyardInstance->getDebugInstance()->output(sprintf("[%s:%d] Die Werft <strong>%s</strong> wurde gebaut.<br />\n",
+ __CLASS__,
+ __LINE__,
+ $shipyardName
+ ));
+
+ // Instanz zurueckliefern
+ return $shipyardInstance;
+ }
+
+ // Create staff list
+ private function createStaffList () {
+ if ((defined('DEBUG_SHIPYARD')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Die Werft <strong>%s</strong> erhält eine Arbeiterliste.<br />\n",
+ __CLASS__,
+ __LINE__,
+ $this->getShipyardName()
+ ));
+ $this->staffList = new FrameworkArrayObject();
+ }
+
+ // Create ship type list
+ private function createShipTypeList () {
+ if ((defined('DEBUG_SHIPYARD')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Die Werft <strong>%s</strong> erhält eine Typenliste.<br />\n",
+ __CLASS__,
+ __LINE__,
+ $this->getShipyardName()
+ ));
+ $this->shipTypeList = new FrameworkArrayObject();
+ }
+
+ // Setter-Methode fuer Werft-Name
+ public function setShipyardName ($shipyardName) {
+ $this->shipyardName = (string) $shipyardName;
+ }
+
+ // Getter-Methode fuer Werft-Name
+ public function getShipyardName () {
+ return $this->shipyardName;
+ }
+
+ // Setter-Methode fuer Hafen-Instanz
+ public function setHarborInstance (Harbor $harborInstance) {
+ $this->harborInstance = $harborInstance;
+ }
+
+ // Getter-Methode fuer Hafen-Instanz
+ public function getHarborInstance () {
+ return $this->harborInstance;
+ }
+
+ // Setter fuer Reederei-Instanz
+ public function setCompanyInstance (ShippingCompany $companyInstance) {
+ $this->shippingCompany = $companyInstance;
+ }
+
+ // Getter fuer Reederei-Instanz
+ public function getCompanyInstance () {
+ return $this->shippingCompany;
+ }
+
+ // Add new personell
+ public function addNewPersonell ($personell) {
+ if (is_null($this->staffList)) {
+ // Opps, not initialized!
+ ApplicationEntryPoint::app_die("New personell: <pre>".print_r($this, true)."</pre>");
+ }
+
+ // 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->getDebugInstance()->output(sprintf("[%s:%d] Die Werft <strong>%s</strong> kann bald Schiffe vom Typ <strong>%s</strong> bauen.<br />\n",
+ __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->getDebugInstance()->output(sprintf("[%s:%d] Die Werft <strong>%s</strong> prüft, ob Schiffe vom Typ <strong>%s</strong> baubar sind.<br />\n",
+ __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->getDebugInstance()->output(sprintf("[%s:%d] Die Werft <strong>%s</strong> hat die Suche nach dem Schiffstyp <strong>%s</strong> abgeschlossen.<br />\n",
+ __CLASS__,
+ __LINE__,
+ $this->getShipyardName(),
+ $shipType
+ ));
+
+ // Return result
+ return $result;
+ }
+
+ /**
+ * Stub!
+ */
+ public function saveObjectToDatabase () {
+ $this->getDebugInstance()->output(sprintf("[%s:] Stub <strong>%s</strong> erreicht.",
+ $this->__toString(),
+ __FUNCTION__
+ ));
+ }
+
+ /**
+ * Limits this object with an ObjectLimits instance
+ */
+ public function limitObject (ObjectLimits $limitInstance) {
+ ApplicationEntryPoint::app_die("".__METHOD__." reached! Stub!");
+ }
+}
+
+// [EOF]
+?>