Ich möchte gerne implementieren, was ich als CVAR-System kenne, ich bin mir nicht ganz sicher, wie der offizielle Name lautet (falls vorhanden).
Es ist im Wesentlichen ein System, das in einigen Programmen und Videospielen verwendet wird, wo ein Benutzer eine Konsole herunterziehen und einen Befehl wie "Variable 500" eingeben kann, um diese Variable auf 500 zu setzen. Instanzen davon können in jeder beliebigen Hälfte gefunden werden -Life-Spiel, Doom und Quake-Spiele und viele mehr. Die allgemeine Idee scheint zu sein, die zugrundeliegende Architektur zu verbergen, aber dennoch geschützten Zugriff zu erlauben, zum Beispiel kann man den Wert für, sagen wir, die Schwerkraft sehen , aber nicht ändern stark> es. Einige dieser Werte können auch Funktionen sein, zum Beispiel kann ein Benutzer "create" eingeben, um einen Feindtyp an seinem Standort oder an einem anderen angegebenen Ort zu erstellen.
Wenn ich mir das Half Life 2 SDK und das, was ich im GoldSrc SDK erinnere, ansehe, scheint es, als hätten sie zumindest "flagging" implementiert, wo bestimmte Befehle nur unter bestimmten Bedingungen funktionieren würden, wie wenn ein anderer Wert wäre oder wenn der Benutzer eine Berechtigungsstufe hat.
Mein ursprünglicher Gedanke war, ein Dictionary oder ein ähnliches Objekt zu erstellen, um String-Werte an Funktion Delegaten zu binden, sowie eine Art "Schutz", um die Verwendung bestimmter Befehle einzuschränken. Dies erscheint jedoch ziemlich umständlich, da ich glaube, dass ich manuell einen neuen Eintrag für jeden Wert oder jede Funktion, die ich implementieren möchte, durchführen muss. Ich weiß auch nicht, ob dies mir die Kontrollebene geben würde, nach der ich suche.
Ich glaube idealerweise, was ich gerne hätte, wäre eine CVAR-System-Klasse sowie eine Register-Funktion, die sagen kann, eine Variable / Funktion Delegate, eine Zeichenfolge, um darauf zuzugreifen, und welche Schutzebene ich brauche. Auf diese Weise kann ich hinzufügen, was ich brauche, so wie ich sie sehe, also ist immer noch alles in seinen zugehörigen Klassen und Dateien.
Ich bin wirklich nur auf der Suche nach ein paar Ideen, also meine Fragen sind:
Ich suche nicht wirklich nach spezifischem Code, sondern nach strukturiertem Design. Und es muss nicht "kommerziell" sein oder genauso funktionieren wie ein anderes, ich brauche nur etwas, um mich in Gang zu bringen.
Sie könnten einen Parser schreiben, der nach Befehlen wie
sucht %Vor%Ein Wörterbuch, wie Sie es vorgeschlagen haben, könnte diese Zeichenfolgen Eigenschaften und Funktionen zuordnen. Die Erstellung des Wörterbuchs kann dynamisch unter Verwendung von Reflektion durch Schleifen durch geeignete Objekte, unter Verwendung ihrer öffentlichen Methoden und Zugriffsmethoden und Erzeugen einer Zeichenkette für diese erfolgen.
Dann könnte das Wörterbuch in einer Klasse zur Bequemlichkeit und Fehlerüberprüfung abgebildet werden.
Für die Methoden können die Wörterbuchwerte Delegaten sein, die 0..n Argumente annehmen. Für die Eigenschaften / Felder müssen Sie in der Lage sein, eine Datenbindung zwischen Ihren tatsächlichen Feldern und dem Wörterbuchwert herzustellen. NUR, Ihre Objekte selbst beziehen sich auf die Wörterbücher für ihre Werte, in diesem Fall leben die Werte nur an Ort und Stelle.
Um dies zu tun, können Sie Ihre Eigenschaften einfach über Reflektion im Objektkonstruktor registrieren und dann das Wörterbuch in Ihren Eigenschaften aufrufen.
%Vor%Hoffe das hilft!
Tags und Links c# xna game-engine