Implementierung eines CVAR-Systems

8

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:

  • Hat jemand schon mal so etwas gemacht, und wenn ja, wie?
  • Würde meine Implementierung funktionieren? (Theoretisch, wenn nicht, können Sie sich einen besseren Weg vorstellen?)
  • Wenn jemand mehr darüber Bescheid weiß, wie einer der oben genannten Titel es macht, können Sie das ein wenig genauer erläutern? Es scheint schwierig zu sein, eine Dokumentation über sie zu finden.

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.

    
shmeeps 03.03.2011, 22:31
quelle

3 Antworten

1

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!

    
tugudum 04.03.2011, 20:16
quelle
2

Haben Sie über so etwas nachgedacht?

%Vor%     
arul 03.03.2011 23:54
quelle
1

Dies wird häufiger als Tweak-Variable bezeichnet.

Gute Diskussion hier: Ссылка

    
Kylotan 04.03.2011 19:27
quelle

Tags und Links