Inheritance: DistinctOption
示例#1
0
        public void Test()
        {
            string name = "test-option";
            string section = "test-section";
            Keys defaultValue = Keys.Escape;

            ConfigFile configFile = new ConfigFile (TestHelper.RandomFilename (extension: "ini"));

            KeyOption option = new KeyOption (section, name, defaultValue, configFile);

            Assert.AreEqual (option.Value, defaultValue);
            string defaultStr = option.DisplayValue;
            Assert.IsTrue (option.DisplayValidValues.ContainsKey (defaultStr));

            option.Value = Keys.LeftShift;
            Assert.AreEqual (option.Value, Keys.LeftShift);
            string tenStr = option.DisplayValue;
            Assert.IsTrue (option.DisplayValidValues.ContainsKey (tenStr));

            Assert.AreNotEqual (defaultStr, tenStr);

            (option as DistinctOption).Value = "invalid!!";
            Assert.AreEqual (option.Value, defaultValue);
            Assert.AreEqual (defaultStr, option.DisplayValue);
        }
示例#2
0
        /// <summary>
        /// Erzeugt ein neues ControlSettingsScreen-Objekt und initialisiert dieses mit einem Knot3Game-Objekt.
        /// </summary>
        public ControlSettingsScreen(GameCore game)
            : base(game)
        {
            MenuName = "Controls";

            // Die statischen Initialierer der folgenden Inputhandler müssen geladen sein, egal, ob der User bereits
            // im Spiel war oder nicht, denn davon hängt es ab, ob sie bereits auf natürliche Weise initialiert wurden.
            // Falls das nicht der Fall ist, rufen wir über Reflection den statischen Initialierer auf, ohne die Klassen
            // sonst irgendwie anzutasten. Das ist sauberer als eine statische Methode statt des Initialierers zu verwenden,
            // da man diese an vielen Stellen aufrufen müsste, nur um den sehr unwahrscheinlichen Fall, dass noch nichts
            // initialisiert ist, abzudecken. Die statischen Initialisierer hingegen werden von der Laufzeitumgebung
            // in allen Fällen bis auf genau diesen hier im Einstellungsmenü automatisch aufgerufen.
            KeyBindingListener.InitializeListeners (
                typeof (InputManager),
                typeof (KnotInputHandler),
                typeof (EdgeColoring),
                typeof (EdgeRectangles)
            );

            // Lade die Standardbelegung
            Dictionary<PlayerAction, Keys> defaultReversed = KeyBindingListener.DefaultKeyAssignment.ReverseDictionary ();

            // Iteriere dazu über alle gültigen PlayerActions...
            foreach (PlayerAction action in PlayerAction.Values) {
                string actionName = action.Name;

                if (defaultReversed.ContainsKey (action)) {
                    // Erstelle das dazugehörige Options-Objekt...
                    KeyOption option = new KeyOption (
                        section: "controls",
                        name: actionName,
                        defaultValue: defaultReversed [action],
                        configFile: Config.Default
                    );

                    // Erstelle ein KeyInputItem zum Festlegen der Tastenbelegung
                    KeyInputItem item = new KeyInputItem (
                        screen: this,
                        drawOrder: DisplayLayer.ScreenUI + DisplayLayer.MenuItem,
                        text: actionName,
                        option: option
                    );
                    item.OnValueChanged += () => KeyBindingListener.ControlSettingsChanged ();

                    // Füge es in das Menü ein
                    settingsMenu.Add (item);
                }
                else {
                    Log.Debug ("Key binding ", actionName, " not found!");
                }
            }
        }
示例#3
0
        /// <summary>
        /// Wird ausgeführt, sobald ein KeyBindingListener erstellt wird und danach,
        /// wenn sich die Tastenbelegung geändert hat.
        /// </summary>
        public static void ReadKeyAssignments()
        {
            // Drehe die Zuordnung um; von (Taste -> Aktion) zu (Aktion -> Taste)
            Dictionary<PlayerAction, Keys> defaultReversed = DefaultKeyAssignment.ReverseDictionary ();

            // Leere die aktuelle Zuordnung
            CurrentKeyAssignment.Clear ();

            // Fülle die aktuelle Zuordnung mit aus der Einstellungsdatei gelesenen werten.
            // Iteriere dazu über alle gültigen PlayerActions...
            foreach (PlayerAction action in PlayerAction.Values) {
                string actionName = action.Name;
                if (defaultReversed.ContainsKey (action)) {
                    // Erstelle eine Option...
                    KeyOption option = new KeyOption (
                        section: "controls",
                        name: actionName,
                        defaultValue: defaultReversed [action],
                        configFile: Config.Default
                    ) { Verbose = false };
                    // und lese den Wert aus und speichere ihn in der Zuordnung.
                    CurrentKeyAssignment [option.Value] = action;
                }
            }
            CurrentKeyAssignmentReversed = CurrentKeyAssignment.ReverseDictionary ();
        }
示例#4
0
 /// <summary>
 /// Erzeugt ein neues CheckBoxItem-Objekt und initialisiert dieses mit dem zugehörigen IGameScreen-Objekt.
 /// Zudem sind Angaben zur Zeichenreihenfolge und der Eingabeoption Pflicht.
 /// </summary>
 public KeyInputItem(IScreen screen, DisplayLayer drawOrder, string text, KeyOption option)
     : base(screen, drawOrder, text, (option as DistinctOption).Value)
 {
     this.option = option;
 }