]> git.mxchange.org Git - shipsimu.git/blobdiff - application/ship-simu/main/class_BaseSimulator.php
A lot debug messages removed, mailer with stubs added, resend link basicly finished...
[shipsimu.git] / application / ship-simu / main / class_BaseSimulator.php
index 4726d299649a89ea2c9a049517a819d5fca149dd..3f7daa1ae0ed026b8b6fe5bfc3767a38d000a15d 100644 (file)
@@ -1,6 +1,26 @@
 <?php
-
-// Ein sehr abstraktes Objekt, Abmasse, Beschreibung und Teil-Instanz werden hier gespeichert
+/**
+ * The general simulator class
+ *
+ * @author             Roland Haeder <webmaster@ship-simu.org>
+ * @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 <http://www.gnu.org/licenses/>.
+ */
 class BaseSimulator extends BaseFrameworkSystem {
        // Schiffsteilinstanz
        private $partInstance = null;
@@ -22,103 +42,56 @@ class BaseSimulator extends BaseFrameworkSystem {
        );
 
        // Konstruktor
-       private function __construct ($class) {
+       protected function __construct ($className) {
                // Call highest constructor
-               parent::constructor($class);
-
-               if ((defined('DEBUG_CORE')) && (defined('DEBUG_CONSTRUCT'))) $this->getDebugInstance()->output(sprintf("[%s:] Konstruktor erreicht.<br />\n",
-                       $this->__toString()
-               ));
+               parent::__construct($className);
 
                // Set part description and class name
-               $this->setPartDescr("Simulator-Basis-Einheit");
+               $this->setObjectDescription("Simulator-Basis-Einheit");
 
-               // Etwas aufraeumen, dies sollte ganz zum Schluss erfolgen!
+               // Clean up a little, 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 <strong>%s</strong> in class.<br />\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 <strong>%s</strong> from class.<br />\n",
-                       $this->__toString(), $var
-               ));
-               unset($this->$var);
-       }
-
        // Setter-Methode fuer Laenge
-       public function setLength ($length) {
-               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] <strong>%dm</strong> L&auml;nge gesetzt.<br />\n",
-                       $this->__toString(),
-                       $length
-               ));
+       public final function setLength ($length) {
                $this->length = (float) $length;
        }
 
        // Setter-Methode fuer Breite
-       public function setWidth ($width) {
-               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] <strong>%dm</strong> Breite gesetzt.<br />\n",
-                       $this->__toString(),
-                       $width
-               ));
+       public final function setWidth ($width) {
                $this->width = (float) $width;
        }
 
        // Setter-Methode fuer Hoehe
-       public function setHeight ($height) {
-               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] <strong>%dm</strong> H&ouml;he gesetzt.<br />\n",
-                       $this->__toString(),
-                       $height
-               ));
+       public final function setHeight ($height) {
                $this->height = (float) $height;
        }
 
        // Getter-Methode fuer Laenge
-       public function getLength () {
-               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] L&auml;nge angefordert.<br />\n",
-                       $this->__toString()
-               ));
+       public final function getLength () {
                return $this->length;
        }
 
        // Getter-Methode fuer Breite
-       public function getWidth () {
-               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] L&auml;nge angefordert.<br />\n",
-                       $this->__toString()
-               ));
+       public final function getWidth () {
                return $this->width;
        }
 
        // Getter-Methode fuer Hoehe
-       public function getHeight () {
-               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] H&ouml;he angefordert.<br />\n",
-                       $this->__toString()
-               ));
+       public final function getHeight () {
                return $this->height;
        }
 
        // Setter-Methode fuer Teil-Instanz
-       public function setPartInstance ($struct) {
-               $this->partInstance = (Object) $struct;
+       public final function setPartInstance (ConstructableShipPart $partInstance) {
+               $this->partInstance = $partInstance;
        }
 
        // Getter-Methode fuer Teil-Instanz
-       public function getPartInstance () {
+       public final function getPartInstance () {
                if (!isset($this->partInstance)) {
                        return null;
                }
@@ -126,19 +99,8 @@ class BaseSimulator extends BaseFrameworkSystem {
        }
 
        // 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.<br />\n",
-                               $this->__toString()
-                       ));
-               } else {
-                       // Leere Instanz kann entfernt werden
-                       if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] partInstance wurde entfernt.<br />\n",
-                               $this->__toString()
-                       ));
-                       unset($this->partInstance);
-               }
+       public final function removePartInstance () {
+               unset($this->partInstance);
        }
 
        // Prueft ob all Umberechnungsfaktoren gesetzt sind
@@ -155,35 +117,35 @@ class BaseSimulator extends BaseFrameworkSystem {
                $this->currShip = $shipInstance;
                $this->currPart = $partInstance;
 
-               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] Maschinenraum mit Motor <strong>%s</strong> wird fuer das Schiff <strong>%s</strong> konstruiert.<br />\n",
+               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] Maschinenraum mit Motor <strong>%s</strong> wird fuer das Schiff <strong>%s</strong> konstruiert.",
                        $this->__toString(),
-                       $this->currPart->getPartDescr(),
+                       $this->getCurrPart()->getObjectDescription(),
                        $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 <strong>%s</strong> vom Typ <strong>%s</strong> passt in das Schiff <strong>%s</strong> hinein.<br />\n",
+                       if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] Das Schiffsteil <strong>%s</strong> vom Typ <strong>%s</strong> passt in das Schiff <strong>%s</strong> hinein.",
                                $this->__toString(),
-                               $this->currPart->getPartDescr(),
-                               $this->currPart->__toString(),
+                               $this->getCurrPart()->getObjectDescription(),
+                               $this->getCurrPart()->__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'];
+                               $this->newWidth  = (float) $this->getCurrPart()->getWidth()  * $this->resizeFactorArray['width'];
+                               $this->newHeight = (float) $this->getCurrPart()->getHeight() * $this->resizeFactorArray['height'];
+                               $this->newLength = (float) $this->getCurrPart()->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 <strong>%s</strong> passt in das Schiff <strong>%s</strong> hinein.<br />\n",
+                                       if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] Das Schiffsteil <strong>%s</strong> passt in das Schiff <strong>%s</strong> hinein.",
                                                $this->__toString(),
-                                               $this->getPartDescr(),
+                                               $this->getObjectDescription(),
                                                $this->currShip->getShipName()
                                        ));
                                        $this->setWidth($this->newWidth);
@@ -195,173 +157,145 @@ class BaseSimulator extends BaseFrameworkSystem {
                                } else {
                                        // Passt nicht! Also wieder Exception werfen...
                                        throw new StructureShipMismatchException(sprintf("[%s:] Das Schiffsteil <strong>%s</strong> vom Typ <strong>%s</strong> ist zu gross f&uuml;r das Schiff!",
-                                               $this->currPart->__toString(),
-                                               $this->currPart->getPartDescr(),
-                                               $this->currPart->__toString()
+                                               $this->getCurrPart()->__toString(),
+                                               $this->getCurrPart()->getObjectDescription(),
+                                               $this->getCurrPart()->__toString()
                                        ), 2);
                                }
                        } elseif ($this->currPart != null) {
                                // Aktuelle Masse setzen
-                               $this->setWidth($this->currPart->getWidth());
-                               $this->setHeight($this->currPart->getHeight());
-                               $this->setLength($this->currPart->getLength());
+                               $this->setWidth($this->getCurrPart()->getWidth());
+                               $this->setHeight($this->getCurrPart()->getHeight());
+                               $this->setLength($this->getCurrPart()->getLength());
                        }
 
                        // Existiert ein Schiffsteil?
                        if (!is_null($this->currPart)) {
                                // Debug-Meldung ausgeben
-                               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] Schiffsteil <strong>%s</strong> gefunden.<br />\n",
-                                       $this->currPart->realClass,
-                                       $this->currPart->getPartDescr()
+                               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] Schiffsteil <strong>%s</strong> gefunden.",
+                                       $this->getCurrPart()->realClass,
+                                       $this->getCurrPart()->getObjectDescription()
                                ));
 
                                // Schiffsteil-Instanz setzen
                                $this->setPartInstance($this->currPart);
 
                                // Instanzen entfernen
-                               $this->currPart->removeCurrShip();
-                               $this->currPart->removeCurrPart();
-                               $this->currPart->removePartInstance();
-                               $this->currPart->removeResizeFactorArray();
+                               $this->getCurrPart()->removeCurrShip();
+                               $this->getCurrPart()->removeCurrPart();
+                               $this->getCurrPart()->removePartInstance();
+                               $this->getCurrPart()->removeResizeFactorArray();
                        }
                } else {
                        // Exception werfen!
                        throw new StructureShipMismatchException(sprintf("[%s:] Das Schiffsteil <u>%s</u> vom Typ <u>%s</u> passt nicht in das Schiff!",
-                               $this->currPart->realClass,
-                               $this->currPart->getPartDescr(),
-                               $this->currPart->__toString()
+                               $this->getCurrPart()->realClass,
+                               $this->getCurrPart()->getObjectDescription(),
+                               $this->getCurrPart()->__toString()
                        ), 1);
                }
 
-               // Nochmals etwas aufraeumen
+               // Nochmals Clean up a little
                $this->removeResizeFactorArray();
                $this->removeCurrShip();
                $this->removeCurrPart();
        }
 
        // Array fuer Umrechnungstabelle entfernen
-       public function removeResizeFactorArray () {
-               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] removeResizeFactor erreicht.<br />\n",
-                       $this->__toString()
-               ));
+       public final function removeResizeFactorArray () {
                unset($this->resizeFactorArray);
        }
 
-       // Alle newXXX-Attribute entfernen
-       public function removeAllNewAttr () {
+       /**
+        * Remove all new*** attributes
+        *
+        * @return      void
+        */
+       public final 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.<br />\n",
-                       $this->__toString()
-               ));
+       /**
+        * Remove current ship instance
+        *
+        * @return      void
+        */
+       public final function removeCurrShip () {
                unset($this->currShip);
        }
 
-       // Aktuelle Schiff-Instanz entfernen
-       public function removeCurrPart () {
-               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] removeCurrPart erreicht.<br />\n",
-                       $this->__toString()
-               ));
+       // Aktuelle Schiffsteil-Instanz entfernen
+       public final function removeCurrPart () {
                unset($this->currPart);
        }
 
        // Breite entfernen
-       public function removeWidth () {
-               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] Breite entfernt.<br />\n",
-                       $this->__toString()
-               ));
+       public final function removeWidth () {
                unset($this->width);
        }
 
        // Hoehe entfernen
-       public function removeHeight () {
-               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] H&ouml;he entfernt.<br />\n",
-                       $this->__toString()
-               ));
+       public final function removeHeight () {
                unset($this->height);
        }
 
        // Laenge entfernen
-       public function removeLength () {
-               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] L&auml;nge entfernt.<br />\n",
-                       $this->__toString()
-               ));
+       public final function removeLength () {
                unset($this->length);
        }
 
        // Tiefgang entfernen
-       public function removeDraught () {
-               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] Tiefgang entfernt.<br />\n",
-                       $this->__toString()
-               ));
+       public final function removeDraught () {
                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)<br />\n",
-                       $this->__toString(),
-                       $el
-               ));
+       public final function getResizeFactorElement ($el) {
                if (isset($this->resizeFactorArray[$el])) {
                        // Element gefunden
                        return $this->resizeFactorArray[$el];
                } else {
                        // Element nicht gefunden!
-                       return 0;
+                       return null;
                }
        }
 
        // Setter-Methode fuer Element in resizeFactor
-       public function setResizeFactorElement ($el, $value) {
-               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] Umberechnungsfaktor <strong>%s</strong>=<strong>%s</strong> gesetzt.<br />\n",
-                       $this->__toString(),
-                       $el,
-                       $value
-               ));
+       public final function setResizeFactorElement ($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.<br />\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())
+                                                ($this->getCurrPart()->getWidth()  < $this->currShip->getWidth())
+                                       && ($this->getCurrPart()->getHeight() < $this->currShip->getDraught())
+                                       && ($this->getCurrPart()->getLength() < $this->currShip->getLength())
                                ) || ( // Ship messurings shall be calculated
-                                          ($this->currShip->getWidth()  == 0)
+                                                ($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)
+                       ) && ($this->getCurrPart()->getWidth()  > 0)
+                               && ($this->getCurrPart()->getHeight() > 0)
+                               && ($this->getCurrPart()->getLength() > 0)
                );
        }
 
        // Kontrolliert, ob die Abmasse Maschinenraum->Schiff stimmen
        public function isNewSizeValid () {
-               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] isNewSizeValid erreicht.<br />\n",
-                       $this->__toString()
-               ));
                return (
                        ( // Already defined ship messurings
-                                  ($this->newWidth  < $this->currShip->getWidth())
+                                        ($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->getWidth()  == 0)
                                && ($this->currShip->getHeight() == 0)
                                && ($this->currShip->getLength() == 0)
                        )
@@ -370,11 +304,6 @@ class BaseSimulator extends BaseFrameworkSystem {
 
        // Masse extrahieren
        public function extractDimensions ($dim) {
-               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] extractDimensions erreicht f&uuml;r <strong>%s</strong>.<br />\n",
-                       $this->__toString(),
-                       $this->getPartDescr()
-               ));
-
                // Abmasse setzen
                if ((isset($dim)) && (is_array($dim)) && (count($dim) == 3)) {
                        // Abmasse aus Array holen
@@ -386,6 +315,15 @@ class BaseSimulator extends BaseFrameworkSystem {
                        throw new DimNotFoundInArrayException($this, self::EXCEPTION_DIMENSION_ARRAY_INVALID);
                }
        }
+
+       /**
+        * Getter for current part instance
+        *
+        * @return              $currPart       Instance of the current ship part object
+        */
+       public final function getCurrPart () {
+               return $this->currPart;
+       }
 }
 
 // [EOF]