From b938cca623c3c9fad14a1e7026e9908b332fa3cd Mon Sep 17 00:00:00 2001
From: Gizeta <0w0@gizeta.tk>
Date: Mon, 5 Jun 2017 20:47:52 +0800
Subject: [PATCH] Add feature toggle
---
Observer/Observer.cs | 7 +++-
Observer/Observer.csproj | 1 +
Observer/Settings.cs | 22 ++++++++++++
ShadowWatcher/MainWindow.xaml | 5 +++
ShadowWatcher/MainWindow.xaml.cs | 2 ++
ShadowWatcher/SettingModel.cs | 55 ++++++++++++++++++++++++++++++
ShadowWatcher/ShadowWatcher.csproj | 1 +
7 files changed, 92 insertions(+), 1 deletion(-)
create mode 100644 Observer/Settings.cs
create mode 100644 ShadowWatcher/SettingModel.cs
diff --git a/Observer/Observer.cs b/Observer/Observer.cs
index 27a6159..bdcc508 100644
--- a/Observer/Observer.cs
+++ b/Observer/Observer.cs
@@ -35,7 +35,9 @@ public void LateUpdate()
{
battleManager.Loop();
replayManager.Loop();
- CardAllListEnhancer.SetUp();
+
+ if (Settings.ShowSummonCard)
+ CardAllListEnhancer.SetUp();
}
catch (Exception e)
{
@@ -50,6 +52,9 @@ private void Receiver_OnReceived(string action, string data)
case "ReplayRequest":
replayManager.InjectReplay(data);
break;
+ case "Setting":
+ Settings.Parse(data);
+ break;
}
}
}
diff --git a/Observer/Observer.csproj b/Observer/Observer.csproj
index 115f7c3..6f54f2c 100644
--- a/Observer/Observer.csproj
+++ b/Observer/Observer.csproj
@@ -58,6 +58,7 @@
+
diff --git a/Observer/Settings.cs b/Observer/Settings.cs
new file mode 100644
index 0000000..cd1de36
--- /dev/null
+++ b/Observer/Settings.cs
@@ -0,0 +1,22 @@
+namespace ShadowWatcher
+{
+ public static class Settings
+ {
+ public const int SHOW_SUMMON_CARD = 1;
+
+ public static bool ShowSummonCard { get; set; } = false;
+
+ public static void Parse(string data)
+ {
+ int flag = int.Parse(data);
+ ShowSummonCard = (flag & SHOW_SUMMON_CARD) > 0;
+ }
+
+ public static new string ToString()
+ {
+ int flag = 0;
+ flag |= ShowSummonCard ? SHOW_SUMMON_CARD : 0;
+ return flag.ToString();
+ }
+ }
+}
diff --git a/ShadowWatcher/MainWindow.xaml b/ShadowWatcher/MainWindow.xaml
index 90d4500..f6e606f 100644
--- a/ShadowWatcher/MainWindow.xaml
+++ b/ShadowWatcher/MainWindow.xaml
@@ -133,6 +133,11 @@
+
+
+
+
+
diff --git a/ShadowWatcher/MainWindow.xaml.cs b/ShadowWatcher/MainWindow.xaml.cs
index 9c845d4..ca17a1a 100644
--- a/ShadowWatcher/MainWindow.xaml.cs
+++ b/ShadowWatcher/MainWindow.xaml.cs
@@ -23,6 +23,7 @@ public MainWindow()
MainTab.IsEnabled = false;
DataContext = this;
+ SettingPanel.DataContext = new SettingModel();
}
private void attachObserver()
@@ -66,6 +67,7 @@ private void Receiver_OnReceived(string action, string data)
break;
case "Load":
Sender.Initialize(int.Parse(data));
+ Sender.Send($"Setting:{Settings.ToString()}");
break;
case "EnemyPlay":
case "EnemyAdd":
diff --git a/ShadowWatcher/SettingModel.cs b/ShadowWatcher/SettingModel.cs
new file mode 100644
index 0000000..dcc34c9
--- /dev/null
+++ b/ShadowWatcher/SettingModel.cs
@@ -0,0 +1,55 @@
+using ShadowWatcher.Socket;
+using System.ComponentModel;
+using System.IO;
+using System.IO.IsolatedStorage;
+
+namespace ShadowWatcher
+{
+ public class SettingModel : INotifyPropertyChanged
+ {
+ private IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForAssembly();
+
+ public SettingModel()
+ {
+ if (!storage.FileExists("setting"))
+ {
+ Save();
+ }
+ else
+ {
+ var reader = new StreamReader(new IsolatedStorageFileStream("setting", FileMode.Open, storage));
+ Settings.Parse(reader.ReadLine());
+ }
+ }
+
+ public bool ShowSummonCard
+ {
+ get => Settings.ShowSummonCard;
+ set
+ {
+ if (Settings.ShowSummonCard != value)
+ {
+ Settings.ShowSummonCard = value;
+ Save();
+ NotifyPropertyChanged("ShowSummonCard");
+ }
+ }
+ }
+
+ public void Save()
+ {
+ var writer = new StreamWriter(new IsolatedStorageFileStream("setting", FileMode.Create, storage));
+ writer.Write(Settings.ToString());
+ writer.Close();
+
+ Sender.Send($"Setting:{Settings.ToString()}");
+ }
+
+ public event PropertyChangedEventHandler PropertyChanged;
+
+ private void NotifyPropertyChanged(string propertyName)
+ {
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
+ }
+ }
+}
diff --git a/ShadowWatcher/ShadowWatcher.csproj b/ShadowWatcher/ShadowWatcher.csproj
index 2108098..9614d69 100644
--- a/ShadowWatcher/ShadowWatcher.csproj
+++ b/ShadowWatcher/ShadowWatcher.csproj
@@ -59,6 +59,7 @@
+
MSBuild:Compile
Designer