From e63798bd3ca9d4b893639754465d3e0f5646932d Mon Sep 17 00:00:00 2001 From: wcko87 Date: Wed, 10 May 2017 16:06:14 +0800 Subject: [PATCH] Configure a few variable exports. --- rabi_splitter_WPF/MemorySnapshot.cs | 4 + rabi_splitter_WPF/RabiRibiDisplay.cs | 3 +- rabi_splitter_WPF/VariableExportConfig.cs | 103 +++++++++++++++++++++ rabi_splitter_WPF/VariableExportContext.cs | 7 ++ rabi_splitter_WPF/VariableExportSetting.cs | 45 +++++---- rabi_splitter_WPF/rabi_display.csproj | 1 + 6 files changed, 144 insertions(+), 19 deletions(-) create mode 100644 rabi_splitter_WPF/VariableExportConfig.cs diff --git a/rabi_splitter_WPF/MemorySnapshot.cs b/rabi_splitter_WPF/MemorySnapshot.cs index 0c827d4..17590a1 100644 --- a/rabi_splitter_WPF/MemorySnapshot.cs +++ b/rabi_splitter_WPF/MemorySnapshot.cs @@ -27,6 +27,10 @@ namespace rabi_splitter_WPF return new MapTileCoordinate(x, y); } + public override string ToString() { + return $"({x}, {y})"; + } + #region Equals, Hashcode // override object.Equals public override bool Equals(object obj) diff --git a/rabi_splitter_WPF/RabiRibiDisplay.cs b/rabi_splitter_WPF/RabiRibiDisplay.cs index 8d9c932..2d32e9f 100644 --- a/rabi_splitter_WPF/RabiRibiDisplay.cs +++ b/rabi_splitter_WPF/RabiRibiDisplay.cs @@ -6,7 +6,7 @@ using System.Text; namespace rabi_splitter_WPF { - class RabiRibiDisplay + partial class RabiRibiDisplay { private MainContext mainContext; private DebugContext debugContext; @@ -36,6 +36,7 @@ namespace rabi_splitter_WPF this.mainWindow = mainWindow; this.memoryReadCount = 0; StartNewGame(); + ConfigureVariableExports(); } public void ReadMemory(Process process) diff --git a/rabi_splitter_WPF/VariableExportConfig.cs b/rabi_splitter_WPF/VariableExportConfig.cs new file mode 100644 index 0000000..39e1d11 --- /dev/null +++ b/rabi_splitter_WPF/VariableExportConfig.cs @@ -0,0 +1,103 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace rabi_splitter_WPF +{ + partial class RabiRibiDisplay + { + void ConfigureVariableExports() + { + ExportableVariable.DefineVariableExports(new ExportableVariable[] { + ExportVariable ( + displayName: "Playtime", + tracker: () => snapshot.playtime + ), + + ExportVariable ( + displayName: "Blackness", + tracker: () => snapshot.blackness + ), + + ExportVariable ( + displayName: "Map Id", + tracker: () => snapshot.mapid + ), + + ExportVariable ( + displayName: "Map", + tracker: () => StaticData.GetMapName(snapshot.mapid) + ), + + ExportVariable ( + displayName: "Music Id", + tracker: () => snapshot.musicid + ), + + ExportVariable ( + displayName: "Music", + tracker: () => StaticData.GetMusicName(snapshot.musicid) + ), + + ExportVariable ( + displayName: "HP", + tracker: () => snapshot.hp + ), + + ExportVariable ( + displayName: "Amulet", + tracker: () => snapshot.amulet + ), + + ExportVariable ( + displayName: "Boost", + tracker: () => snapshot.boost + ), + + ExportVariable ( + displayName: "MP", + tracker: () => snapshot.mana + ), + + ExportVariable ( + displayName: "SP", + tracker: () => snapshot.stamina + ), + + ExportVariable ( + displayName: "x", + tracker: () => snapshot.px + ), + + ExportVariable ( + displayName: "y", + tracker: () => snapshot.py + ), + + ExportVariable ( + displayName: "Map Tile", + tracker: () => snapshot.mapTile + ), + + ExportVariable ( + displayName: "Deaths", + tracker: () => inGameState.nDeaths + ), + + ExportVariable ( + displayName: "Restarts", + tracker: () => inGameState.nRestarts + ), + }); + + + variableExportContext.NotifyExportableVariableUpdate(); + } + + private ExportableVariable ExportVariable(string displayName, Func tracker) + { + return new ExportableVariable(displayName, tracker); + } + } +} diff --git a/rabi_splitter_WPF/VariableExportContext.cs b/rabi_splitter_WPF/VariableExportContext.cs index 8a9e871..ea37216 100644 --- a/rabi_splitter_WPF/VariableExportContext.cs +++ b/rabi_splitter_WPF/VariableExportContext.cs @@ -44,6 +44,13 @@ namespace rabi_splitter_WPF } } + public void NotifyExportableVariableUpdate() + { + foreach (var ves in _variableExportSettings) + { + ves.NotifyExportableVariableUpdate(); + } + } #endregion #region Variables diff --git a/rabi_splitter_WPF/VariableExportSetting.cs b/rabi_splitter_WPF/VariableExportSetting.cs index 6cb6809..2002dfa 100644 --- a/rabi_splitter_WPF/VariableExportSetting.cs +++ b/rabi_splitter_WPF/VariableExportSetting.cs @@ -24,8 +24,10 @@ namespace rabi_splitter_WPF public abstract class ExportableVariable { - // Do not make these properties public. private static int nextAvailableId = 0; + private static List _variableExports; + private static Dictionary _variableCaptions = new Dictionary(); + private readonly int _id; private readonly string _displayName; @@ -46,13 +48,16 @@ namespace rabi_splitter_WPF } internal abstract VariableTracker GetTracker(); + + public static void DefineVariableExports(ExportableVariable[] exports) + { + _variableExports = exports.ToList(); + _variableCaptions = exports.ToDictionary(ev => ev, ev => ev.DisplayName); + } - public static List GetAll() + public static Dictionary VariableCaptions { - return new List() - { - new ExportableVariable("TestVariable", () => 1) - }; + get { return _variableCaptions; } } #region Equals, GetHashCode @@ -84,6 +89,7 @@ namespace rabi_splitter_WPF public override bool CheckForUpdate() { T newValue = tracker(); + if (forceUpdate || !newValue.Equals(currentValue)) { currentValue = newValue; @@ -158,26 +164,29 @@ namespace rabi_splitter_WPF if (_variableTracker == null) return false; return _variableTracker.CheckForUpdate(); } + + public void NotifyExportableVariableUpdate() + { + OnPropertyChanged(nameof(VariableCaptions)); + } #endregion #region Dictionaries - private static Dictionary _variableCaptions; - public Dictionary VariableCaptions { - get - { - if (_variableCaptions == null) - { - _variableCaptions = ExportableVariable.GetAll().ToDictionary(ev => ev, ev => ev.DisplayName); - } - return _variableCaptions; - } + get { return ExportableVariable.VariableCaptions; } } - + internal void DefaultButton_Click() { - OutputFormat = "DEFAULT OUTPUT FORMAT: " + OutputFileName; + if (_selectedVariable == null) + { + OutputFormat = "Variable not set."; + } + else + { + OutputFormat = $"{_selectedVariable.DisplayName}: {{0}}"; + } } #endregion diff --git a/rabi_splitter_WPF/rabi_display.csproj b/rabi_splitter_WPF/rabi_display.csproj index c103380..9aa6d1b 100644 --- a/rabi_splitter_WPF/rabi_display.csproj +++ b/rabi_splitter_WPF/rabi_display.csproj @@ -66,6 +66,7 @@ +