aboutsummaryrefslogtreecommitdiff
path: root/ShiftOS.WinForms/Oobe.cs
diff options
context:
space:
mode:
Diffstat (limited to 'ShiftOS.WinForms/Oobe.cs')
-rw-r--r--ShiftOS.WinForms/Oobe.cs407
1 files changed, 407 insertions, 0 deletions
diff --git a/ShiftOS.WinForms/Oobe.cs b/ShiftOS.WinForms/Oobe.cs
new file mode 100644
index 0000000..2a3e547
--- /dev/null
+++ b/ShiftOS.WinForms/Oobe.cs
@@ -0,0 +1,407 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using Newtonsoft.Json;
+using ShiftOS.Engine;
+using ShiftOS.Objects;
+using ShiftOS.Objects.ShiftFS;
+
+namespace ShiftOS.WinForms
+{
+ public partial class Oobe : Form, IOobe
+ {
+ public Save MySave { get; private set; }
+
+ public bool IsTransferMode = false;
+
+ public Oobe()
+ {
+ InitializeComponent();
+ }
+
+ public void HideAll()
+ {
+ foreach (Control ctrl in this.Controls)
+ {
+ if (ctrl != this.pnlshadow)
+ {
+ ctrl.Hide();
+ }
+ }
+ }
+
+ public void SetupUI()
+ {
+ HideAll();
+ Panel shown = null;
+ if (IsTransferMode == false)
+ {
+ switch (MySave.StoryPosition)
+ {
+ case 0:
+ shown = pnllanguage;
+ SetupLanguages();
+ break;
+ case 1:
+ shown = pnluserinfo;
+ break;
+ case 2:
+ shown = pnldiscourse;
+ break;
+ default:
+ shown = pnlterminaltutorial;
+ SetupTerminal();
+ break;
+ }
+ }
+ else
+ {
+ switch (TransferProgress)
+ {
+ case 0:
+ shown = pnlreenteruserinfo;
+ break;
+ case 1:
+ shown = pnlauthfail;
+ break;
+ case 2:
+ shown = pnlauthdone;
+ break;
+ case 4:
+ shown = pnlrelogin;
+ break;
+ case 5:
+ shown = pnlrelogerror;
+ break;
+ }
+ }
+
+ if (shown != null)
+ {
+ shown.Location = new Point((int)(shown.Parent?.Width - shown.Width) / 2, (int)(shown?.Parent.Height - shown.Height) / 2);
+ pnlshadow.Size = (Size)shown.Size;
+ pnlshadow.Location = new Point((int)shown.Left + 15, (int)shown.Top + 15);
+ shown.Show();
+ }
+ }
+
+ private int TransferProgress = 0;
+
+ public void SetupTerminal()
+ {
+ //just so that the terminal can access our save
+ SaveSystem.CurrentSave = MySave;
+
+ Applications.Terminal.MakeWidget(txtterm);
+ TerminalBackend.InStory = false;
+ TerminalBackend.PrefixEnabled = true;
+ Console.WriteLine("{TERMINAL_TUTORIAL_1}");
+ SaveSystem.TransferCodepointsFrom("oobe", 50);
+
+ Shiftorium.Installed += () =>
+ {
+ if (SaveSystem.CurrentSave.StoryPosition < 5)
+ {
+ if (Shiftorium.UpgradeInstalled("mud_fundamentals"))
+ {
+ Console.WriteLine("{TERMINAL_TUTORIAL_2}");
+ txtterm.Height -= pgsystemstatus.Height - 4;
+ pgsystemstatus.Show();
+
+ StartInstall();
+
+ }
+ }
+ };
+
+ }
+
+ public int thingsDone
+ {
+ get
+ {
+ return pgsystemstatus.Value;
+ }
+ set
+ {
+ this.Invoke(new Action(() =>
+ {
+ pgsystemstatus.Value = value;
+ }));
+ }
+ }
+
+ public int thingsToDo
+ {
+ get
+ {
+ return pgsystemstatus.Maximum;
+ }
+ set
+ {
+ this.Invoke(new Action(() =>
+ {
+ pgsystemstatus.Maximum = value;
+ }));
+ }
+ }
+
+ public void StartInstall()
+ {
+ Dictionary<string, string> Aliases = new Dictionary<string, string>();
+ Aliases.Add("help", "sos.help");
+ Aliases.Add("save", "sos.save");
+ Aliases.Add("shutdown", "sys.shutdown");
+ Aliases.Add("status", "sos.status");
+ Aliases.Add("pong", "win.open{app:\"pong\"}");
+ Aliases.Add("programs", "sos.help{topic:\"programs\"}");
+
+ foreach (var path in Paths.GetAll())
+ {
+ Console.WriteLine("{CREATE}: " + path);
+ thingsDone += 1;
+ Thread.Sleep(500);
+ }
+ thingsToDo = Aliases.Count + Paths.GetAll().Length + 2;
+
+ Console.WriteLine("{INSTALL}: {PONG}");
+ thingsDone++;
+ Thread.Sleep(200);
+
+ Console.WriteLine("{INSTALL}: {TERMINAL}");
+ thingsDone++;
+ Thread.Sleep(200);
+
+ foreach (var kv in Aliases)
+ {
+ Console.WriteLine($"{{ALIAS}}: {kv.Key} => {kv.Value}");
+ thingsDone++;
+ Thread.Sleep(450);
+ }
+
+ SaveSystem.CurrentSave.StoryPosition = 5;
+ SaveSystem.SaveGame();
+ }
+
+ List<string> supportedLangs
+ {
+ get
+ {
+ //return JsonConvert.DeserializeObject<List<string>>(Properties.Resources.languages);
+
+ return new List<string>(new[] { "english" });
+ }
+ }
+
+ public void SetupLanguages()
+ {
+ lblanguage.Items.Clear();
+
+ foreach (var supportedLang in supportedLangs)
+ {
+ lblanguage.Items.Add(supportedLang);
+ }
+ }
+
+ public void SetupAllControls()
+ {
+ foreach (Control ctrl in this.Controls)
+ {
+ SetupControl(ctrl);
+ }
+ }
+
+ public void SetupControl(Control ctrl)
+ {
+ if (!string.IsNullOrWhiteSpace(ctrl.Text))
+ ctrl.Text = Localization.Parse(ctrl.Text);
+ try
+ {
+ foreach (Control child in ctrl.Controls)
+ {
+ SetupControl(child);
+ }
+ }
+ catch
+ {
+ }
+
+ }
+
+ private void btnselectlang_Click(object sender, EventArgs e)
+ {
+ if (lblanguage.SelectedItem != null)
+ {
+ string l = lblanguage.SelectedItem as string;
+ MySave.Language = l;
+ MySave.StoryPosition = 1;
+ SetupUI();
+ }
+ }
+
+ private void btnsetuserinfo_Click(object sender, EventArgs e)
+ {
+ if (!string.IsNullOrWhiteSpace(txtusername.Text))
+ {
+ MySave.Username = txtusername.Text;
+
+ MySave.Password = txtpassword.Text;
+
+ MySave.SystemName = (string.IsNullOrWhiteSpace(txtsysname.Text)) ? "shiftos" : txtsysname.Text;
+
+ MySave.StoryPosition = 2;
+
+ SetupUI();
+ }
+ }
+
+ private void button1_Click(object sender, EventArgs e)
+ {
+ if (!string.IsNullOrWhiteSpace(txtdiscoursename.Text))
+ {
+ MySave.DiscourseName = txtdiscoursename.Text;
+ MySave.DiscoursePass = txtdiscoursepass.Text;
+ }
+ MySave.StoryPosition = 3;
+ SetupUI();
+ }
+
+ public void StartShowing(Save save)
+ {
+ IsTransferMode = false;
+ MySave = save;
+ SetupAllControls();
+ this.FormBorderStyle = FormBorderStyle.None;
+ this.WindowState = FormWindowState.Maximized;
+ this.TopMost = true;
+
+ this.Load += (o, a) =>
+ {
+ SetupUI();
+ };
+ SaveSystem.GameReady += () =>
+ {
+ this.Invoke(new Action(() =>
+ {
+ this.Close();
+ (AppearanceManager.OpenForms[0] as WindowBorder).BringToFront();
+ Console.Write($"{SaveSystem.CurrentSave.Username}@{SaveSystem.CurrentSave.SystemName}:~$ ");
+ }));
+
+ };
+ this.Show();
+ }
+
+ public void ShowSaveTransfer(Save save)
+ {
+ MySave = save;
+ ServerManager.MessageReceived += (msg) =>
+ {
+ if(msg.Name == "mud_notfound")
+ {
+ TransferProgress = 2;
+ this.Invoke(new Action(() => { SetupUI(); }));
+ }
+ else if(msg.Name == "mud_found")
+ {
+ TransferProgress = 1;
+ this.Invoke(new Action(() => { SetupUI(); }));
+ }
+ else if(msg.Name == "mud_saved")
+ {
+ try
+ {
+ this.Invoke(new Action(() =>
+ {
+ SaveSystem.CurrentSave = MySave;
+ this.Close();
+ Utils.Delete(Paths.SaveFileInner);
+ }));
+ }
+ catch { }
+ }
+ };
+ IsTransferMode = true;
+ this.FormBorderStyle = FormBorderStyle.None;
+ this.WindowState = FormWindowState.Maximized;
+ this.TopMost = true;
+ this.Show();
+ SetupUI();
+ }
+
+ private void button2_Click(object sender, EventArgs e)
+ {
+ pnlreenteruserinfo.Hide();
+ pnlshadow.Size = new Size(0, 0);
+ ServerManager.SendMessage("mud_checkuserexists", $@"{{
+ username: ""{txtruser.Text}"",
+ password: ""{txtrpass.Text}""
+}}");
+ MySave.Username = txtruser.Text;
+ MySave.Password = txtrpass.Text;
+ }
+
+ private void button3_Click(object sender, EventArgs e)
+ {
+ TransferProgress = 0;
+ SetupUI();
+ }
+
+ private void button4_Click(object sender, EventArgs e)
+ {
+ ServerManager.SendMessage("mud_save", JsonConvert.SerializeObject(MySave));
+ }
+
+ public void PromptForLogin()
+ {
+ ServerManager.MessageReceived += (msg) =>
+ {
+ if (msg.Name == "mud_notfound")
+ {
+ TransferProgress = 5;
+ this.Invoke(new Action(() => { SetupUI(); }));
+ }
+ else if (msg.Name == "mud_found")
+ {
+ this.Invoke(new Action(() =>
+ {
+ Utils.WriteAllText(Paths.GetPath("user.dat"), $@"{{
+ username: ""{txtluser.Text}"",
+ password: ""{txtlpass.Text}""
+}}");
+ SaveSystem.ReadSave();
+ this.Close();
+ }));
+ }
+ };
+ IsTransferMode = true;
+ TransferProgress = 4;
+ this.FormBorderStyle = FormBorderStyle.None;
+ this.WindowState = FormWindowState.Maximized;
+ this.TopMost = true;
+ this.Show();
+ SetupUI();
+ }
+
+ private void button6_Click(object sender, EventArgs e)
+ {
+ TransferProgress = 4;
+ SetupUI();
+ }
+
+ private void button5_Click(object sender, EventArgs e)
+ {
+ ServerManager.SendMessage("mud_checkuserexists", $@"{{
+ username: ""{txtluser.Text}"",
+ password: ""{txtlpass.Text}""
+}}");
+ }
+ }
+}