1, 'height' => 1, 'length' => 1 ); // Konstruktor private function __construct ($class) { // Call highest constructor parent::constructor($class); if ((defined('DEBUG_CORE')) && (defined('DEBUG_CONSTRUCT'))) $this->getDebugInstance()->output(sprintf("[%s:] Konstruktor erreicht.
\n", $this->__toString() )); // Set part description and class name $this->setPartDescr("Simulator-Basis-Einheit"); // Etwas aufraeumen, dies sollte ganz zum Schluss erfolgen! $this->removeResizeFactorArray(); $this->removeCurrPart(); $this->removeCurrShip(); } // Public constructor public function constructor ($class) { // Call real constructor $this->__construct($class); } // Magic __isset method private function __isset ($var) { if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] Checking %s in class.
\n", $this->__toString(), $var )); return isset($this->$var); } // Magic __unset method private function __unset($var) { if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] Removing %s from class.
\n", $this->__toString(), $var )); unset($this->$var); } // Setter-Methode fuer Laenge public function setLength ($length) { if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] %dm Länge gesetzt.
\n", $this->__toString(), $length )); $this->length = (float) $length; } // Setter-Methode fuer Breite public function setWidth ($width) { if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] %dm Breite gesetzt.
\n", $this->__toString(), $width )); $this->width = (float) $width; } // Setter-Methode fuer Hoehe public function setHeight ($height) { if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] %dm Höhe gesetzt.
\n", $this->__toString(), $height )); $this->height = (float) $height; } // Getter-Methode fuer Laenge public function getLength () { if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] Länge angefordert.
\n", $this->__toString() )); return $this->length; } // Getter-Methode fuer Breite public function getWidth () { if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] Länge angefordert.
\n", $this->__toString() )); return $this->width; } // Getter-Methode fuer Hoehe public function getHeight () { if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] Höhe angefordert.
\n", $this->__toString() )); return $this->height; } // Setter-Methode fuer Teil-Instanz public function setPartInstance ($struct) { $this->partInstance = (Object) $struct; } // Getter-Methode fuer Teil-Instanz public function getPartInstance () { if (!isset($this->partInstance)) { return null; } return $this->partInstance; } // Remover-Methode fuer die Teil-Instanz public function removePartInstance () { if ($this->getPartInstance() !== null) { // Warnung ausgeben if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] partInstance ist nicht null! Instanz-Attribut wird nicht entfernt.
\n", $this->__toString() )); } else { // Leere Instanz kann entfernt werden if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] partInstance wurde entfernt.
\n", $this->__toString() )); unset($this->partInstance); } } // Prueft ob all Umberechnungsfaktoren gesetzt sind private function isResizeFactorValid () { return (($this->getResizeFactorElement('width') > 1) || ($this->getResizeFactorElement('height') > 1) || ($this->getResizeFactorElement('length') > 1) ); } // Baut einen Motor in das Schiff ein public function addShipPartToShip (ConstructableShip $shipInstance, ConstructableShipPart $partInstance) { // Schiff/-steil merken $this->currShip = $shipInstance; $this->currPart = $partInstance; if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] Maschinenraum mit Motor %s wird fuer das Schiff %s konstruiert.
\n", $this->__toString(), $this->currPart->getPartDescr(), $this->currShip->getShipName() )); // Passt ueberhaupt das Schiffsteil in's Schiff? if ($this->isShipPartSizeValid()) { // Berechnungen fuer umliegendes Objekt anpassen if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] Das Schiffsteil %s vom Typ %s passt in das Schiff %s hinein.
\n", $this->__toString(), $this->currPart->getPartDescr(), $this->currPart->__toString(), $this->currShip->getShipName() )); // Muessen die Masse angepasst werden? if ($this->isResizeFactorValid()) { // Neue Angaben berechnen (wir lassen etwas Lust fuer Kabelbaeume, Roehren, Maschinisten, etc.) $this->newWidth = (float) $this->currPart->getWidth() * $this->resizeFactorArray['width']; $this->newHeight = (float) $this->currPart->getHeight() * $this->resizeFactorArray['height']; $this->newLength = (float) $this->currPart->getLength() * $this->resizeFactorArray['length']; // Passt dies nun immer noch? if ($this->isNewSizeValid()) { // Das passt auch, dann Werte setzen und Motor-Instanz merken if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] Das Schiffsteil %s passt in das Schiff %s hinein.
\n", $this->__toString(), $this->getPartDescr(), $this->currShip->getShipName() )); $this->setWidth($this->newWidth); $this->setHeight($this->newHeight); $this->setLength($this->newLength); // Einige Dinge entfernen... $this->removeAllNewAttr(); } else { // Passt nicht! Also wieder Exception werfen... throw new StructureShipMismatchException(sprintf("[%s:] Das Schiffsteil %s vom Typ %s ist zu gross für das Schiff!", $this->currPart->__toString(), $this->currPart->getPartDescr(), $this->currPart->__toString() ), 2); } } elseif ($this->currPart != null) { // Aktuelle Masse setzen $this->setWidth($this->currPart->getWidth()); $this->setHeight($this->currPart->getHeight()); $this->setLength($this->currPart->getLength()); } // Existiert ein Schiffsteil? if (!is_null($this->currPart)) { // Debug-Meldung ausgeben if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] Schiffsteil %s gefunden.
\n", $this->currPart->realClass, $this->currPart->getPartDescr() )); // Schiffsteil-Instanz setzen $this->setPartInstance($this->currPart); // Instanzen entfernen $this->currPart->removeCurrShip(); $this->currPart->removeCurrPart(); $this->currPart->removePartInstance(); $this->currPart->removeResizeFactorArray(); } } else { // Exception werfen! throw new StructureShipMismatchException(sprintf("[%s:] Das Schiffsteil %s vom Typ %s passt nicht in das Schiff!", $this->currPart->realClass, $this->currPart->getPartDescr(), $this->currPart->__toString() ), 1); } // Nochmals etwas aufraeumen $this->removeResizeFactorArray(); $this->removeCurrShip(); $this->removeCurrPart(); } // Array fuer Umrechnungstabelle entfernen public function removeResizeFactorArray () { if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] removeResizeFactor erreicht.
\n", $this->__toString() )); unset($this->resizeFactorArray); } // Alle newXXX-Attribute entfernen public function removeAllNewAttr () { unset($this->newWidth); unset($this->newHeight); unset($this->newLength); } // Aktuelle Schiff-Instanz entfernen public function removeCurrShip () { if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] removeCurrShip erreicht.
\n", $this->__toString() )); unset($this->currShip); } // Aktuelle Schiff-Instanz entfernen public function removeCurrPart () { if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] removeCurrPart erreicht.
\n", $this->__toString() )); unset($this->currPart); } // Breite entfernen public function removeWidth () { if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] Breite entfernt.
\n", $this->__toString() )); unset($this->width); } // Hoehe entfernen public function removeHeight () { if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] Höhe entfernt.
\n", $this->__toString() )); unset($this->height); } // Laenge entfernen public function removeLength () { if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] Länge entfernt.
\n", $this->__toString() )); unset($this->length); } // Tiefgang entfernen public function removeDraught () { if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] Tiefgang entfernt.
\n", $this->__toString() )); unset($this->draught); } // Getter-Methode fuer Element aus resizeFactor public function getResizeFactorElement ($el) { if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] getResizeFactorElement erreicht. (element=%s)
\n", $this->__toString(), $el )); if (isset($this->resizeFactorArray[$el])) { // Element gefunden return $this->resizeFactorArray[$el]; } else { // Element nicht gefunden! return 0; } } // Setter-Methode fuer Element in resizeFactor public function setResizeFactorElement ($el, $value) { if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] Umberechnungsfaktor %s=%s gesetzt.
\n", $this->__toString(), $el, $value )); $this->resizeFactorArray[$el] = (float) $value; } // Kontrolliert, ob die Abmasse Schiffsteil->Schiff stimmen public function isShipPartSizeValid () { if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] isShipPartSizeValid erreicht.
\n", $this->__toString() )); return ( ( ( // Already defined ship messurings ($this->currPart->getWidth() < $this->currShip->getWidth()) && ($this->currPart->getHeight() < $this->currShip->getDraught()) && ($this->currPart->getLength() < $this->currShip->getLength()) ) || ( // Ship messurings shall be calculated ($this->currShip->getWidth() == 0) && ($this->currShip->getHeight() == 0) && ($this->currShip->getLength() == 0) ) // The inserted part must be messured! ) && ($this->currPart->getWidth() > 0) && ($this->currPart->getHeight() > 0) && ($this->currPart->getLength() > 0) ); } // Kontrolliert, ob die Abmasse Maschinenraum->Schiff stimmen public function isNewSizeValid () { if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] isNewSizeValid erreicht.
\n", $this->__toString() )); return ( ( // Already defined ship messurings ($this->newWidth < $this->currShip->getWidth()) && ($this->newHeight < $this->currShip->getDraught()) && ($this->newLength < $this->currShip->getLength()) ) || ( // Ship messurings shall be calculated ($this->currShip->getWidth() == 0) && ($this->currShip->getHeight() == 0) && ($this->currShip->getLength() == 0) ) ); } // Masse extrahieren public function extractDimensions ($dim) { if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] extractDimensions erreicht für %s.
\n", $this->__toString(), $this->getPartDescr() )); // Abmasse setzen if ((isset($dim)) && (is_array($dim)) && (count($dim) == 3)) { // Abmasse aus Array holen $this->setWidth($dim[0]); $this->setHeight($dim[1]); $this->setLength($dim[2]); } else { // Nicht gefundene Abmasse! throw new DimNotFoundInArrayException($this, self::EXCEPTION_DIMENSION_ARRAY_INVALID); } } } // [EOF] ?>