12.01.2014 Aufrufe

Dokumentation zum Massive Multiplayer Online Game - Universität ...

Dokumentation zum Massive Multiplayer Online Game - Universität ...

Dokumentation zum Massive Multiplayer Online Game - Universität ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

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.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!