# What A Storage
## Ausführen
Zum Ausführen im `bin`-Ordner die `what-a-storage.bat` starten.

## Quellcode
Der Quellcode ist im Unterordner `sources/src` verfügbar. Außerdem ist das git-Repository [hier](https://gitea.siphalor.de/Siphalor/what-a-storage) abrufbar.

Test-Klassen sind im Unterordner `sources/test`.

## Ressourcen
Die Ressourcen befinden sich im Unterordner `sources/resources`. Wie im Programm angegeben, sind die Bild-Dateien von mir erstellt. Die Audio-Dateien stammen von [freesound.org](https://freesound.org) und sind als CC0 lizenziert.

## Funktionsanleitung
### Spielstart
Nach dem Start stehen die verschiedenen Auftragsdateien zur Verfügung. `Normal` ist hierbei die, wie in `CSV-CHANGES.md` angegeben, konvertierte Datei `Leistungsnachweis.csv`.

### Die Oberfläche
In der oberen Leiste ist der aktuelle Kontostand ("Budget") sichtbar. Außerdem lassen sich über die Knöpfe in der Leiste die Bilanz und die Optionen öffnen und das Spiel kann abgebrochen werden (Rückkehr zum Hauptmenü).

### Das Lager
Im rechten Bereich befindet sich das Lager. Produkte werden mit einem Bild und dem Namen des Produkttyps dargestellt. Die Eigenschaften sind als Tooltip beim Hovern einsehbar.

### Bilanzfenster
Das Bilanzfenster besitzt zwei Tabs.

Im Tab "Buchungen" können die einzelnen Buchungen in einer sich aktualisierenden Tabelle eingesehen werden. Im Tab "Bilanz" können die Gesamteinnahmen und -verluste eingesehen werden sowie ein Graph mit dem Verlauf des Kontostands.

### Aufträge
Im Spiel können neue Aufträge über die Schaltfläche "Neuer Auftrag" erzeugt werden.
Einlagerungsaufträge haben einen hellen Hintergrund, Auslagerungsaufträge einen dunkleren.

Aufträge können durch klicken auf das "X" oder durch Ziehen auf den Mülleimer abgebrochen werden (letzteres nur bei Einlagerungsaufträgen).

### Einlagerung
Einlagerungsaufträge können per Drag und Drop in das Lager gezogen werden. Die Belohnung wird automatisch auf das Konto gutgeschrieben. Mögliche Ablagerungsorte werden eingerahmt und beim Hovern hervorgehoben.

### Auslagerung
Auslagerungsaufträge werden ebenfalls per Drag und Drop erfüllt. Dabei kann ein passendes Produkt aus dem Lager auf den Auftrag gezogen werden. Für eine Hervorhebung der Lagerplätze mit übereinstimmenden Produkten können Auslagerungsaufträge mit der rechten Maustaste angeklickt werden. Anschließend werden solche Plätze eingerahmt.

Die Belohnung wird automatisch gutgeschrieben.

### Umlagerung
Analog zu den Aufträgen funktioniert auch die Umlagerung mit Drag und Drop. Dabei wird automatisch immer das oberste Objekt eines Lagerplatzes bewegt. Gültige Ablageorte werden hervorgehoben.

### Zerstören
Produkte können per Drag und Drop auf den Mülleimer zerstört werden. Die Strafe wird automatisch angerechnet.

### Optionen
In den Optionen gibt es folgende Einträge, die mit Klick auf "Anwenden & Zurück" bestätigt werden können.
- Sprache: Einstellung der Sprache (Deutsch/Englisch)
- Geräusche: Aktiviert Sound-Effekte
- Aufträge gegeneinander auflösen: Hierbei können ein Einlagerungsauftrag und ein Auslagerungsauftrag, die das gleiche Produkt betreffen, direkt durch Drag und Drop aufeinander erfüllt werden. Die Summe der Belohnungen wird gutgeschrieben.
- Automatisch neue Aufträge akzeptieren: Wenn Aufträge erfüllt werden, müssen keine neuen Aufträge angefordert werden, sondern es werden automatisch neue Aufträge angenommen.
- Gültige Ablageorte anzeigen: Hiermit kann das Einrahmen von gültigen Lagerorten (de-) aktiviert werden.

## Content-Packs
Dieses Spiel kann durch sogenannte "Content Packs" um Produkte und Auftragslisten erweitert werden. Ein Beispiel-Pack befindet sich bereits im Ordner `bin`. 

Produkte und Aufträge werden mit dem gleichen Format eingelesen, wie aus dem Quellcode und den Ressourcen-Dateien ersichtlich. Dabei sollten im `lang`-Ordner immer auch Übersetzungen für die Produkte/Attribute/Werte/Auftragslisten etc. angegeben werden.

