readConfig() is not naming convention, renamed to getConfigEntry()
[core.git] / tests / old / contract-test.php
1 <?php
2 // Change directory
3 @chdir('../..');
4
5 // Set testing mode (no starter.php will be loaded!)
6 define('TEST_MODE', true);
7
8 // Load config file
9 require(dirname(dirname(dirname(__FILE__))) . '/inc/config.php');
10
11 // Load all include files
12 require($cfg->getConfigEntry('base_path') . 'inc/includes.php');
13
14 // Load all game classes
15 require($cfg->getConfigEntry('base_path') . 'inc/classes.php');
16
17 // Load file I/O handler
18 require($cfg->getConfigEntry('base_path') . 'inc/file_io.php');
19
20 // Load database layer
21 require($cfg->getConfigEntry('base_path') . 'inc/database.php');
22
23 // Set default application
24 FrameworkConfiguration::getInstance()->setConfigEntry('default_application', 'ship-simu');
25 $application = 'ship-simu';
26
27 // Load more includes
28 require($cfg->getConfigEntry('base_path') . 'application/ship-simu/loader.php');
29
30 // Wir tun hier so, als waere schon das Reederei-Objekt generiert und wir wollen
31 // jetzt die Personalliste wiederherstellen
32 $personell = SimulatorPersonell::createSimulatorPersonellByID('SimulatorPersonell@829292aeca3f6bf78c16e25fc4f75c98');
33
34 // Personal-Objekt debuggen
35 if (defined('DEBUG_PERSONELL_OBJ')) {
36         DebugMiddleware::getInstance()->output(sprintf("The personal object looks like this:<br />
37 <pre>%s</pre>\n",
38                 print_r($personell, true)
39         ));
40 }
41
42 // Hafen bauen
43 $harbor = Harbor::createHarbor("Hamburger Hafen");
44
45 // Name ausgeben
46 DebugMiddleware::getInstance()->output(sprintf("Der <span class=\"exception_reason\">%s</span> ist gegr&uuml;ndet worden.<br />\n",
47         $harbor->getHarborName()
48 ));
49
50 // Hafen-Objekt debuggen
51 if (defined('DEBUG_HARBOR_OBJ')) {
52         DebugMiddleware::getInstance()->output(sprintf("Der <span class=\"exception_reason\">%s</span> sieht wie folgt aus:<br />
53 <pre>%s</pre>\n",
54                 $harbor->getHarborName(),
55                 print_r($harbor, true)
56         ));
57 }
58
59 // Haendler gruenden
60 $merchant = Merchant::createMerchant("Namenlos", $harbor);
61
62 // Array mit Einbauten erstellen
63 $einbauten = array(
64         'parts' => array(                       // *** Die zu einbauenden Schiffsteile ***
65                 'Motor' => array(        // --- Maschinenraum mit Motor ---
66                         "Ocean-Power 2000", // Bezeichnung
67                         20000,              // Pferdestaerken
68                         6,                  // Anzahl Nocken
69                         2.5, 2, 3.5         // Abmasse (Breite/Hoehe/Laenge)
70                 ),
71                 'Bridge' => array(       // --- Kommandobruecke ---
72                         26, 2.5, 15         // Abmasse (Breite/Hoehe/Laenge)
73                 ),
74                 'CarDeck' => array(      // --- Autodecks ---
75                         'amount' => 8,      // Anzahl Autodecks (einige liegen hintereinander im selben Deck!)
76                         'dim'    => array(  // Abmessung (Breite/Hoehe/Laenge)
77                                 6, 3, 16
78                         )
79                 ),
80                 'TruckDeck' => array(    // --- Decks fuer LKW/Busse haben vielleicht ein anderes Belueftgungssystem, etc. ---
81                         'amount' => 1,      // Anzahl der Decks
82                         'dim'    => array(  // Abmessung (Breite/Hoehe/Laenge)
83                                 8, 5, 195      // Geht durchs gesamte Schiff!
84                         )
85                 ),
86                 'TrainDeck' => array(    // --- Decks fuer Zuege haben Schienen... ---
87                         'amount' => 1,      // Anzahl der Decks
88                         'dim'    => array(  // Abmessung (Breite/Hoehe/Laenge)
89                                 8, 4, 195      // Geht durchs gesamte Schiff!
90                         )
91                 ),
92                 'LuxuryCabin' => array(  // --- Luxuskabinen ---
93                         'amount' => 20,     // Anzahl Luxuskabinen im Schiff
94                         'rooms'  => 4,      // Raeume: 2 Schlafzimmer, 1 Auffenthaltszimmer, 1 Bad mit Dusche/Toilette/Waschbecken
95                         'bed'    => 3,      // Anzahl Betten (1 Doppelbett 2 Einzelbetten, Doppel-/Einzelbetten in getrennte Raeume)
96                         'dim' => array(     // Abmessung der Luxuskabine (Breite/Hoehe/Laenge)
97                                 4, 3, 5
98                         ),
99                 ),
100                 'PremierCabin' => array( // --- Mittlere Kabinen ---
101                         'amount' => 40,     // Anzahl
102                         'rooms'  => 2,      // Raeume: Schlafzimmer, Bad mit Toilette/Waschbecken
103                         'bed'    => 2,      // Anzahl Betten (1 Doppelbett, 1 Einzelbett; gemeinsamer Raum)
104                         'dim' => array(     // Abmessungen der Kabine (Breite/Hoehe/Laenge)
105                                 4, 2.5, 4
106                         )
107                 ),
108                 'LowCabin' => array(     // --- Untere Kabinen (befinden sich in den Unterbauten) ---
109                         'amount' => 90,     // Anzahl
110                         'rooms'  => 1,      // Raeume: Schlafzimmer, Waschbecken
111                         'bed'    => 2,      // Anzahl Betten (2 Etagenbetten)
112                         'dim' => array(     // Abmessungen der Kabine (Breite/Hoehe/Laenge)
113                                 3, 2.5, 4
114                         )
115                 ),
116                 'EconomyCabin' => array( // --- Unterste Kabinen (befinden sich tief unten im Schiffsbauch) ---
117                         'amount' => 140,    // Anzahl
118                         'rooms'  => 1,      // Raeume: Schlafzimmer, Waschbecken
119                         'bed'    => 1,      // Anzahl Betten (1 Etagenbett)
120                         'dim' => array(     // Abmessungen der Kabine (Breite/Hoehe/Laenge)
121                                 2, 2.5, 2
122                         )
123                 )
124         ),
125         'builds' => array(            // *** Welche Oberklasse verwendet werden sollen ***
126                 'Motor'        => "MaschineRoom",
127                 'Bridge'       => "BaseUpperStructure",
128                 'LuxuryCabin'  => "BaseCabin",
129                 'PremierCabin' => "BaseCabin",
130                 'LowCabin'     => "BaseCabin",
131                 'EconomyCabin' => "BaseCabin",
132                 'CarDeck'      => "BaseDeck",
133                 'TrainDeck'    => "BaseDeck",
134                 'TruckDeck'    => "BaseDeck"
135         )
136 );
137
138 // Preisliste auffuellen
139 foreach ($einbauten['parts'] as $key=>$part) {
140         // Create item array string
141         $item = '';
142         foreach ($part as $idx=>$itemPart) {
143                 if (is_string($itemPart)) {
144                         // String found
145                         $item .= sprintf("\"%s\", ", $itemPart);
146                 } elseif (is_int($itemPart)) {
147                         // Integer found
148                         $item .= sprintf("%d, ", $itemPart);
149                 } elseif (is_float($itemPart)) {
150                         // Float found
151                         $item .= sprintf("%f, ", $itemPart);
152                 } elseif (is_array($itemPart)) {
153                         // Sub-array found
154                         $item .= "array(";
155
156                         // Go all items through
157                         foreach ($itemPart as $idx2=>$subPart) {
158                                 if (is_int($subPart)) {
159                                         // Integer again found
160                                         $item .= sprintf("%d, ", $subPart);
161                                 } elseif (is_float($subPart)) {
162                                         // Float found
163                                         $item .= sprintf("%f, ", $subPart);
164                                 } else {
165                                         // Unsupport part found
166                                         die(sprintf("[Main:] Unsupported sub-array element on pos <strong>%d</strong> in array <span class=\"exception_reason\">%s</span> found: <u>%s</u>", $idx2, $idx, $subPart));
167                                 }
168                         }
169
170                         // Remove trailing comma
171                         $item = substr($item, 0, -2);
172
173                         // Add closing bracket
174                         $item .= "), ";
175                 } else {
176                         // Unsupport part found
177                         die(sprintf("[Main:] Unsupported array element on pos <strong>%d</strong>: <u>%s</u>", $idx, $itemPart));
178                 }
179         }
180
181         // Remove trailing comma
182         $item = substr($item, 0, -2);
183
184         // Random price
185         $price = mt_rand(5, 12) * 10000;
186
187         // Generate command for adding objects to a price list
188         $eval = sprintf("\$merchant->addItemToPriceList(%s::create%s(%s), %d);",
189                 $key,
190                 $key,
191                 $item,
192                 $price
193         );
194
195         // Debug message
196         if ((defined('DEBUG_EVAL')) || (defined('DEBUG_ALL'))) DebugMiddleware::getInstance()->output(sprintf("[Main:] Konstruierte PHP-Anweisung: <pre><em>%s</em></pre><br />\n",
197                 htmlentities($eval)
198         ));
199
200         // Run the constructed command
201         eval($eval);
202 }
203
204 // Haendler-Objekt debuggen
205 if (defined('DEBUG_MERCHANT_OBJ')) {
206         DebugMiddleware::getInstance()->output(sprintf("Der H&auml;ndler <span class=\"exception_reason\">%s</span> sieht wie folgt aus:<br />
207 <pre>%s</pre>\n",
208                 $merchant->getMerchantName(),
209                 print_r($merchant, true)
210         ));
211 }
212
213 // Reederei gruenden
214 $shipping = ShippingCompany::createShippingCompany("Hanseatic Travel Company", $harbor);
215
216 // Firmenschef setzen
217 $shipping->setCompanyFounder(CompanyEmployee::createCompanyEmployee("Roland", "H&auml;der", "M", 1977, 9, 26, true, 2000));
218
219 // Dann mal ausgeben...
220 DebugMiddleware::getInstance()->output(sprintf("Die Reederei <span class=\"exception_reason\">%s</span> ist von <strong>%s %s</strong> gegr&uuml;ndet worden.<br />\n",
221         $shipping->getCompanyName(),
222         $shipping->getFounderInstance()->getSurname(),
223         $shipping->getFounderInstance()->getFamily()
224 ));
225
226 // Die Reederei stellt Personal ein und bedient sich an der $personell-Instanz
227 $shipping->recruitRandomEmployees(10, $personell);
228
229 // Anzahl Personal ausgeben
230 DebugMiddleware::getInstance()->output(sprintf("Die Reederei <span class=\"exception_reason\">%s</span> hat nun <strong>%d</strong> weitere Mitarbeiter.<br />\n",
231         $shipping->getCompanyName(),
232         $shipping->getTotalEmployee()
233 ));
234
235 // Dann die ersten 3 Werften in den Hafen einbauen und Personal zuweisen
236 $shipping->createShipyardInHarbor("Werft 1", $harbor);
237 $shipping->createShipyardInHarbor("Werft 2", $harbor);
238 $shipping->createShipyardInHarbor("Werft 3", $harbor);
239
240 // In alle Werften sollen Passagierschiffe gebaut werden koennen
241 $shipping->addShipTypeToAllShipyards("PassengerShip");
242
243 // Personal auf die Werften verteilen
244 $shipping->distributeAllPersonellOnShipyards();
245
246 // Normale Meldung ausgeben
247 DebugMiddleware::getInstance()->output(sprintf("Die Reederei <span class=\"exception_reason\">%s</span> besch&auml;ftigt nun ihre <strong>%d</strong> Mitarbeiter in <strong>%d</strong> Werft(en):<br />\n",
248         $shipping->getCompanyName(),
249         $shipping->getTotalEmployee(),
250         $shipping->getTotalShipyards()
251 ));
252
253 // Dann nimmt die Reederei ihren ersten Bauauftrag entgegen.
254 // Sie muss auch sich selber Bauauftraege erteilen!
255 $shipping->addNewWorksContract(WorksContract::createWorksContract("PassengerShip", "M/S Poseidon", $shipping));
256
257 // Auftrag-Instanz holen
258 $contract = $shipping->getLastContractInstance();
259
260 // Die Reederei hat einen Haendler gewaehlt
261 $shipping->setMerchantInstance($merchant);
262
263 // Den Bauauftrag mit der Reederei abgleichen, ob sie den Schiffstyp bauen koennen
264 $typeValid = $shipping->validateWorksContractShipType($contract);
265
266 // Kann gebaut werden?
267 if ($typeValid) {
268         DebugMiddleware::getInstance()->output(sprintf("Die Reederei <span class=\"exception_reason\">%s</span> kann Schiffe vom Typ <span class=\"exception_reason\">%s</span> bauen.<br />\n",
269                 $shipping->getCompanyName(),
270                 $contract->getShipInstance()->getObjectDescription()
271         ));
272 } else {
273         DebugMiddleware::getInstance()->output(sprintf("Die Reederei <span class=\"exception_reason\">%s</span> kann keine Schiffe vom Typ <span class=\"exception_reason\">%s</span> bauen!<br />\n",
274                 $shipping->getCompanyName(),
275                 $contract->getShipInstance()->getObjectDescription()
276         ));
277         exit;
278 }
279
280 // Dann den Bauauftrag verfeinern
281 foreach ($einbauten['parts'] as $key=>$part) {
282         $contract->addContractDetails($key, $einbauten['builds'][$key], $part);
283 }
284
285 // Reederei-Objekt ausgeben
286 if (defined('DEBUG_COMPANY_OBJ')) {
287         DebugMiddleware::getInstance()->output(sprintf("Die Reederei <span class=\"exception_reason\">%s</span> sieht wie folgt aus:<br />
288 <pre>%s</pre>\n",
289                 $shipping->getCompanyName(),
290                 print_r($shipping, true)
291         ));
292 }
293
294 // Clean up a little
295 unset($einbauten);
296 unset($part);
297 unset($eval);
298 unset($item);
299 unset($key);
300 unset($typeValid);
301
302 // Gesamtwert ausgeben
303 $totalValue = $contract->getTotalPrice();
304
305 // Wert ausgeben
306 DebugMiddleware::getInstance()->output(sprintf("Der Bau der <span class=\"exception_reason\">%s</span> wird der Reederei <span class=\"exception_reason\">%s</span> voraussichtlich <span class=\"exception_reason\">%s</span> kosten.<br />\n",
307         $contract->getShipInstance()->getShipName(),
308         $shipping->getCompanyName(),
309         $contract->formatCurrency($totalValue)
310 ));
311
312 // Clean up a little
313 unset($totalValue);
314
315 // Den Bauvertrag unterschreiben (damit wird er in den Bau-Queue aufgenommen)
316 $shipping->signContract($contract, $shipping);
317
318 // Meldung ausgeben
319 if ($contract->isSigned()) {
320         DebugMiddleware::getInstance()->output(sprintf("Die Reederei <span class=\"exception_reason\">%s</span> hat den Bau der <span class=\"exception_reason\">%s</span> zugestimmt.<br />\n",
321                 $shipping->getCompanyName(),
322                 $contract->getShipInstance()->getShipName()
323         ));
324 } else {
325         DebugMiddleware::getInstance()->output(sprintf("Die Reederei <span class=\"exception_reason\">%s</span> hat den Bau der <span class=\"exception_reason\">%s</span> abgelehnt.<br />\n",
326                 $shipping->getCompanyName(),
327                 $contract->getShipInstance()->getShipName()
328         ));
329         exit;
330 }
331
332 // Auftrag-Objekt ausgeben
333 if (defined('DEBUG_CONTRACT_OBJ')) {
334         DebugMiddleware::getInstance()->output(sprintf("Der Bauauftrag sieht wie folgt aus:<br />
335 <pre>%s</pre>\n",
336                 print_r($contract, true)
337         ));
338 }
339
340 // Erstmal bis hier hin...
341 //exit();
342
343 // Anzahl Betten ermitteln
344 $totalBeds = $contract->getShipInstance()->calcTotalBeds();
345
346 // Bettenanzahl ausgeben
347 DebugMiddleware::getInstance()->output(sprintf("Es stehen <strong>%d</strong> Betten zur Verf&uuml;gung.",
348         $totalBeds
349 ));
350
351 //
352 ?>