* @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 BaseShip extends BaseSimulator { // Name des Shipes private $shipName = "Unbekanntes Schiff"; // Anzahl Anker private $numAnchor = 0; // Tiefgang in Meter private $draught = 0; // Besatzung-Objekte private $crewList = null; // Aufbauten-Objekte private $structures = null; // Namenloses Ship generieren protected function __construct($class) { // Call parent constructor parent::__construct($class); // Set object description $this->setObjectDescription("Allgemeines Schiff"); // Prepare array object for all structures $this->createStructuresArray(); // Clean-up a little $this->removePartInstance(); $this->removeNumberFormaters(); } // Array-Objekt anlegen private function createStructuresArray () { $this->structures = new FrameworkArrayObject(); } // Schiffsteil generieren (kann alles sein) // buildInstance = Das was in das Schiffsteil evtl. eingebaut werden soll (null = kein besonderes Teil einbauen!) // partClass = Das zu konstruierende Schiffsteil public function createShipPart (ConstructableShipPart $buildInstance, $partClass) { if ((defined('DEBUG_SHIP')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Das Schiff %s erhält ein neues Schiffsteil (%s).
\n", __CLASS__, __LINE__, $this->getShipName(), $partClass )); // Ist die gewuenschte Klasse vorhanden? if (class_exists($partClass)) { // Befehl zusammenbauen $eval = sprintf("\$partInstance = %s::create%s();", $partClass, $partClass ); // Debug-Meldung ausgeben if ((defined('DEBUG_EVAL')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Konstruierte PHP-Anweisung:
%s

\n", __CLASS__, __LINE__, htmlentities($eval) )); // ... und ausfuehren eval($eval); } else { // Nicht vorhanden, dann Ausnahme werfen! throw new ClassNotFoundException($partClass, 0); } // Das Einbauen versuchen... try { $partInstance->addShipPartToShip($this, $buildInstance); } catch (MotorShipMismatchException $e) { if ((defined('DEBUG_SHIP')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Das Schiff %s hat keinen Motor erhalten! Grund: %s
\n", __CLASS__, __LINE__, $this->getShipName(), $e->getMessage() )); return false; } catch (RoomShipMismatchException $e) { if ((defined('DEBUG_SHIP')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Das Schiff %s hat keinen Maschinenraum erhalten! Grund: %s
\n", __CLASS__, __LINE__, $this->getShipName(), $e->getMessage() )); return false; } catch (StructureShipMismatchException $e) { if ((defined('DEBUG_SHIP')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Das Schiff %s hat keine Aufbauten erhalten! Grund: %s
\n", __CLASS__, __LINE__, $this->getShipName(), $e->getMessage() )); return false; } catch (CabinShipMismatchException $e) { if ((defined('DEBUG_SHIP')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Das Schiff %s hat keine Kabine erhalten! Grund: %s
\n", __CLASS__, __LINE__, $this->getShipName(), $e->getMessage() )); return false; } catch (DeckShipMismatchException $e) { if ((defined('DEBUG_SHIP')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Das Schiff %s hat kein Deck erhalten! Grund: %s
\n", __CLASS__, __LINE__, $this->getShipName(), $e->getMessage() )); return false; } catch (ExceptionNotChangedException $e) { if ((defined('DEBUG_SHIP')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Eine Exception wurde nicht geändert. Details: %s
\n", __CLASS__, __LINE__, $e->getMessage() )); return false; } catch (ExceptionNotFoundException $e) { if ((defined('DEBUG_SHIP')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Eine Exception wurde nicht gefunden. Details: %s
\n", __CLASS__, __LINE__, $e->getMessage() )); return false; } // Instanz im Aufbauten-Array vermerken $this->structures->append($partInstance); // Debug-Meldung ausgeben if ((defined('DEBUG_SHIP')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Das Schiff %s hat das Schiffsteil %s eingebaut bekommen.
\n", __CLASS__, __LINE__, $this->getShipName(), $partInstance->getObjectDescription() )); // Alles klar! return true; } // Getter-Methode fuer Strukturen-Array public final function getStructuresArray () { return $this->structures; } // STUB: Getter-Methode Anzahl Betten public function calcTotalBeds () { $this->getDebugInstance()->output("[%s:%d] Stub! Anzahl Betten erreicht.
\n"); return 0; } // Setter-Methode fuer Schiffsnamen public final function setShipName ($shipName) { // Cast the string $shipName = (string) $shipName; // Debug message if ((defined('DEBUG_SHIP')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Das neue Schiff vom Typ %s wird auf den Namen %s getauft.
\n", __CLASS__, __LINE__, $this->__toString(), $shipName )); // Set ship name $this->shipName = $shipName; } // Getter-Methode fuer Schiffsnamen public final function getShipName () { if ((defined('DEBUG_SHIP')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Das %s ist auf den Namen %s getauft worden.
\n", __CLASS__, __LINE__, $this->__toString(), $this->shipName )); return $this->shipName; } // Setter-Methode fuer Tiefgang public final function setDraught ($draught) { if ((defined('DEBUG_SHIP')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Das %s mit dem Namen %s hat einen Tiefgang von %sm.
\n", __CLASS__, __LINE__, $this->__toString(), $this->shipName, $draught )); $this->draught = (int) $draught; } // Getter-Methode fuer Tiefgang public final function getDraught() { if ((defined('DEBUG_SHIP')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Der Tiefgang des Schiffes %s wurde angefordert.
\n", __CLASS__, __LINE__, $this->shipName )); return $this->draught; } // Setter-Methode fuer Anzahl Anker public final function setNumAnchor ($numAnchor) { if ((defined('DEBUG_SHIP')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Das %s mit dem Namen %s hat %s Anker.
\n", __CLASS__, __LINE__, $this->__toString(), $this->shipName, $numAnchor )); $this->numAnchor = (int) $numAnchor; } } // [EOF] ?>