Dokumentation zum Massive Multiplayer Online Game - Universität ...
Dokumentation zum Massive Multiplayer Online Game - Universität ...
Dokumentation zum Massive Multiplayer Online Game - Universität ...
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
2. Planeten und Gebäude<br />
21<br />
Resque.enqueue_in(built_time.second, BuildBuilding, id_array)<br />
Die Gebäude sollten unterschiedliche Bauzeiten bekommen, sodass ein Gebäude Level 5 deutlich mehr Zeit<br />
verbraucht als ein Gebäude Level 1. Dies haben wir durch ein zusätzliches Attribut im Buildingtype gelöst,<br />
welches jedem Gebäude eine konstante Zeit zuordnet. Außerdem reicht es nun nicht mehr aus dem Worker<br />
bloß die Planet ID mitzugeben, da dieser auch wissen muss, welches Gebäude er bauen bzw. upgraden soll.<br />
Desshalb übergeben wir dem Worker nun ein Array, in dem die Planet ID und die Gebäude ID gespeichert<br />
sind.<br />
Der Worker, BuildBuilding.rb, sieht nun wie folgt aus:<br />
class BuildBuildings<br />
@queue = "buildqueue"<br />
def self.perform(id_array)<br />
planet = Planet.find(id_array[0])<br />
planet.build_building(id_array[1])<br />
end<br />
end<br />
Abbruch des Workers<br />
Natürlich soll es auch möglich sein, den Gebäudebau abzubrechen. Auch dies bietet Resque an, man benötigt<br />
allerdings die übergebenen Attribute, um den genauen Prozess identifizieren zu können.<br />
Im planet.rb existiert nun auch die Methode 'delete_building_job':<br />
(:code) Resque.remove_delayed(BuildBuildings, id_array) (:endcode:)<br />
Controller<br />
Um den Gebäudebau in der Planetview darstellen zu können, mussten wir den PlanetController ein wenig<br />
anpassen. Wir benötigten Kontrollstrukturen für den Bau eines Gebäudes, sowie auch für den Abbruch eines<br />
Workers. So bekam der PlanetController von uns noch die Methoden upgrade_building und abort_upgrade.<br />
Hier musste nun sichergestellt werden, dass nur User auf einem Planeten bauen können, wenn dieser ihnen<br />
auch zugeordnet ist.<br />
@planet = Planet.find(params["id"])<br />
if @planet.user.id == current_user.id then<br />
if @planet.create_building_job(params["btype"].to_sym) then<br />
[…]<br />
Außerdem muss kontrolliert werden, dass der User auf seinem Planeten gerade überhaupt bauen darf. Zum<br />
Abbrechen eines Bauauftrags, muss lediglich kontrolliert werden, dass auch gerade ein Gebäude auf dem<br />
Planeten gebaut wird.<br />
View<br />
Da die Gebäude in der Planetview dargestellt werden, war die Idee, einen 'Onclick-Event' hinzuzufügen, bei<br />
dem Informationen <strong>zum</strong> Gebäude, wie Level, aktuelle und zukünftige Produktion, Kosten und Bauzeit eines<br />
Upgrades bzw. die notwendigen Vorraussetzungen für ein Upgrade anzeigen.<br />
Für die Hintergrundprozesse wollten wir Buttons hinzufügen, die den BuildBuilding Worker starten bzw.<br />
abbrechen.