C
Cage Hunter
Gast
Schönen guten Morgen!
Ich sitze nun seit ca einen Jahr an einem Klon von Masters of Orion 2, natürlich in schönerer Optik und mehr Features. Es soll eigentlich ein würdigerer Nachfolger des 2. Teils sein, als es der 3. war (wer beide kennt wird es verstehen^^)
Ich brüte nun schon seit Wochen an einem Problem wobei ihr mir hoffentlich helfen könnt. Da ich den Fachbegriff -sofern es einen dafür gibt- nicht kenne, konnte Google mir leider nicht viel helfen.
Wie die Überschrift vermuten lässt, habe ich ein Problem mit der Veränderbarkeit von Objekten was ich euch nun anhand von den Waffen erläutern möchte :
Eine Waffe hat eine Zielgenauigkeit, Streuwinkel, Schaden, Explosionsradius, Schussfrequenz, Größe etc.
Wie bei MoO II möchte ich, dass der Spieler die Waffe erweitern kann.
zB soll es 3 verschiedene Größen jeder Waffe geben "point defense", "normal", "heavy mount", diese Größen haben Einfluss auf die Schussfrequenz, Reichweite, Schaden und Gewicht
Jede einzelne Waffe kann jedoch auch über individuelle Zusatzfeatures verfügen (meinetwegen bei einer Laserkanone, kann auf "Panzerbrechend" gestellt werden).
Ein Raumschiff kann jedoch wiederum zB mit einem Zielcomputer ausgerüstet werden, der die Zielgenauigkeit aller verbauten Waffen beeinflusst.
Ich hatte schon mehrfach Lösungen zur Hand, leider fand ich die alle nicht so toll.
Sicher könnte ich einfach die Erweiterungen fest ins Programm einbauen mit z.B. Enums oder Integerwerten die dann in einer monströsen if oder switch-Abfrage durchlaufen -> das finde ich unschön^^
Ich hatte auch mal alle betreffenden Klassen weitervererbt und so zB die WeaponExtension-Klasse erzeugt. Das Problem daran ist meiner Meinung nach der Overhead, denn zB die Fähigkeit "Panzerbrechend" soll sich nur auf den Schaden auswirken, beinhaltet aber auch alle anderen Eigenschaften.
Ein Zielcomputer würde sogar noch mehr Probleme machen, denn er würde in der Schiffserweiterung bis runter zu den Waffenerweiterungen durchgereicht werden müssen...
Meine Frage an euch ist nun : Gibt es eine Möglichkeit sowas ohne großen Overhead hinzubekommen? Ich dachte bspw an Reflections und/oder einen Formelparser, also, dass ich eine Extensionklasse habe die z.B. nur die Formel beinhaltet und das Programm einfach nur rumrechnen muss. Allerdings ist das vermutlich auch nicht die effizienteste Lösung...Reflections oder Strings zu parsen ist sicher unperformant...
Hilfe!?
Ich sitze nun seit ca einen Jahr an einem Klon von Masters of Orion 2, natürlich in schönerer Optik und mehr Features. Es soll eigentlich ein würdigerer Nachfolger des 2. Teils sein, als es der 3. war (wer beide kennt wird es verstehen^^)
Ich brüte nun schon seit Wochen an einem Problem wobei ihr mir hoffentlich helfen könnt. Da ich den Fachbegriff -sofern es einen dafür gibt- nicht kenne, konnte Google mir leider nicht viel helfen.
Wie die Überschrift vermuten lässt, habe ich ein Problem mit der Veränderbarkeit von Objekten was ich euch nun anhand von den Waffen erläutern möchte :
Eine Waffe hat eine Zielgenauigkeit, Streuwinkel, Schaden, Explosionsradius, Schussfrequenz, Größe etc.
Wie bei MoO II möchte ich, dass der Spieler die Waffe erweitern kann.
zB soll es 3 verschiedene Größen jeder Waffe geben "point defense", "normal", "heavy mount", diese Größen haben Einfluss auf die Schussfrequenz, Reichweite, Schaden und Gewicht
Jede einzelne Waffe kann jedoch auch über individuelle Zusatzfeatures verfügen (meinetwegen bei einer Laserkanone, kann auf "Panzerbrechend" gestellt werden).
Ein Raumschiff kann jedoch wiederum zB mit einem Zielcomputer ausgerüstet werden, der die Zielgenauigkeit aller verbauten Waffen beeinflusst.
Ich hatte schon mehrfach Lösungen zur Hand, leider fand ich die alle nicht so toll.
Sicher könnte ich einfach die Erweiterungen fest ins Programm einbauen mit z.B. Enums oder Integerwerten die dann in einer monströsen if oder switch-Abfrage durchlaufen -> das finde ich unschön^^
Ich hatte auch mal alle betreffenden Klassen weitervererbt und so zB die WeaponExtension-Klasse erzeugt. Das Problem daran ist meiner Meinung nach der Overhead, denn zB die Fähigkeit "Panzerbrechend" soll sich nur auf den Schaden auswirken, beinhaltet aber auch alle anderen Eigenschaften.
Ein Zielcomputer würde sogar noch mehr Probleme machen, denn er würde in der Schiffserweiterung bis runter zu den Waffenerweiterungen durchgereicht werden müssen...
Meine Frage an euch ist nun : Gibt es eine Möglichkeit sowas ohne großen Overhead hinzubekommen? Ich dachte bspw an Reflections und/oder einen Formelparser, also, dass ich eine Extensionklasse habe die z.B. nur die Formel beinhaltet und das Programm einfach nur rumrechnen muss. Allerdings ist das vermutlich auch nicht die effizienteste Lösung...Reflections oder Strings zu parsen ist sicher unperformant...
Hilfe!?