aboutsummaryrefslogtreecommitdiff
path: root/ShiftOS.WinForms
diff options
context:
space:
mode:
Diffstat (limited to 'ShiftOS.WinForms')
-rw-r--r--ShiftOS.WinForms/Applications/Terminal.cs214
-rw-r--r--ShiftOS.WinForms/Oobe.cs177
-rw-r--r--ShiftOS.WinForms/Oobe.resx12
-rw-r--r--ShiftOS.WinForms/Program.cs7
-rw-r--r--ShiftOS.WinForms/Tools/ControlManager.cs2
5 files changed, 345 insertions, 67 deletions
diff --git a/ShiftOS.WinForms/Applications/Terminal.cs b/ShiftOS.WinForms/Applications/Terminal.cs
index 02a1f85..01ed194 100644
--- a/ShiftOS.WinForms/Applications/Terminal.cs
+++ b/ShiftOS.WinForms/Applications/Terminal.cs
@@ -43,10 +43,12 @@ using System.Collections;
using static ShiftOS.Engine.SkinEngine;
using ShiftOS.Engine;
-namespace ShiftOS.WinForms.Applications {
+namespace ShiftOS.WinForms.Applications
+{
[Launcher("Terminal", false)]
[WinOpen("terminal")]
- public partial class Terminal : UserControl, IShiftOSWindow {
+ public partial class Terminal : UserControl, IShiftOSWindow
+ {
public static Stack<string> ConsoleStack = new Stack<string>();
public static System.Windows.Forms.Timer ti = new System.Windows.Forms.Timer();
@@ -92,29 +94,48 @@ namespace ShiftOS.WinForms.Applications {
}
}
+ public int TutorialProgress
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+
[Obsolete("This is used for compatibility with old parts of the backend. Please use TerminalBackend instead.")]
public static void InvokeCommand(string text)
{
TerminalBackend.InvokeCommand(text);
}
- public Terminal() {
+ public Terminal()
+ {
InitializeComponent();
- SaveSystem.GameReady += () => {
- try {
- this.Invoke(new Action(() => {
+ SaveSystem.GameReady += () =>
+ {
+ try
+ {
+ this.Invoke(new Action(() =>
+ {
ResetAllKeywords();
rtbterm.Text = "";
TerminalBackend.PrefixEnabled = true;
TerminalBackend.InStory = false;
Console.Write($"{SaveSystem.CurrentSave.Username}@{SaveSystem.CurrentSave.SystemName}:~$ ");
- if (SaveSystem.CurrentSave.StoryPosition == 6) {
+ if (SaveSystem.CurrentSave.StoryPosition == 6)
+ {
Infobox.Show("Welcome to ShiftOS.", "Welcome to the ShiftOS multi-user domain. Your goal is to upgrade your system as much as possible, and gain as much wealth as possible. The first step is to get a feel for the environment. Go forth and explore, young Shifter.");
SaveSystem.CurrentSave.StoryPosition++;
}
}));
- } catch { }
+ }
+ catch { }
};
@@ -122,31 +143,44 @@ namespace ShiftOS.WinForms.Applications {
}
- public void FocusOnTerminal() {
+ public void FocusOnTerminal()
+ {
rtbterm.Focus();
}
- public static string GetTime() {
+ public static string GetTime()
+ {
var time = DateTime.Now;
- if (ShiftoriumFrontend.UpgradeInstalled("full_precision_time")) {
+ if (ShiftoriumFrontend.UpgradeInstalled("full_precision_time"))
+ {
return DateTime.Now.ToString("h:mm:ss tt");
- } else if (ShiftoriumFrontend.UpgradeInstalled("clock_am_and_pm")) {
+ }
+ else if (ShiftoriumFrontend.UpgradeInstalled("clock_am_and_pm"))
+ {
return time.TimeOfDay.TotalHours > 12 ? $"{time.Hour - 12} PM" : $"{time.Hour} AM";
- } else if (ShiftoriumFrontend.UpgradeInstalled("clock_hours")) {
+ }
+ else if (ShiftoriumFrontend.UpgradeInstalled("clock_hours"))
+ {
return ((int)time.TimeOfDay.TotalHours).ToString();
- } else if (ShiftoriumFrontend.UpgradeInstalled("clock_minutes")) {
+ }
+ else if (ShiftoriumFrontend.UpgradeInstalled("clock_minutes"))
+ {
return ((int)time.TimeOfDay.TotalMinutes).ToString();
- } else if (ShiftoriumFrontend.UpgradeInstalled("clock")) {
+ }
+ else if (ShiftoriumFrontend.UpgradeInstalled("clock"))
+ {
return ((int)time.TimeOfDay.TotalSeconds).ToString();
}
return "";
}
-
+
public static event TextSentEventHandler TextSent;
+ public event EventHandler OnComplete;
- public void ResetAllKeywords() {
+ public void ResetAllKeywords()
+ {
string primary = SaveSystem.CurrentSave.Username + " ";
string secondary = "shiftos ";
@@ -155,18 +189,27 @@ namespace ShiftOS.WinForms.Applications {
var types = asm.GetTypes();
- foreach (var type in types) {
- foreach (var a in type.GetCustomAttributes(false)) {
- if (ShiftoriumFrontend.UpgradeAttributesUnlocked(type)) {
- if (a is Namespace) {
+ foreach (var type in types)
+ {
+ foreach (var a in type.GetCustomAttributes(false))
+ {
+ if (ShiftoriumFrontend.UpgradeAttributesUnlocked(type))
+ {
+ if (a is Namespace)
+ {
var ns = a as Namespace;
- if (!primary.Contains(ns.name)) {
+ if (!primary.Contains(ns.name))
+ {
primary += ns.name + " ";
}
- foreach (var method in type.GetMethods(BindingFlags.Public | BindingFlags.Static)) {
- if (ShiftoriumFrontend.UpgradeAttributesUnlocked(method)) {
- foreach (var ma in method.GetCustomAttributes(false)) {
- if (ma is Command) {
+ foreach (var method in type.GetMethods(BindingFlags.Public | BindingFlags.Static))
+ {
+ if (ShiftoriumFrontend.UpgradeAttributesUnlocked(method))
+ {
+ foreach (var ma in method.GetCustomAttributes(false))
+ {
+ if (ma is Command)
+ {
var cmd = ma as Command;
if (!secondary.Contains(cmd.name))
secondary += cmd.name + " ";
@@ -182,14 +225,19 @@ namespace ShiftOS.WinForms.Applications {
}
- public static void MakeWidget(Controls.TerminalBox txt) {
+ public static void MakeWidget(Controls.TerminalBox txt)
+ {
AppearanceManager.StartConsoleOut();
- txt.GotFocus += (o, a) => {
+ txt.GotFocus += (o, a) =>
+ {
AppearanceManager.ConsoleOut = txt;
};
- txt.KeyDown += (o, a) => {
- if (a.KeyCode == Keys.Enter) {
- try {
+ txt.KeyDown += (o, a) =>
+ {
+ if (a.KeyCode == Keys.Enter)
+ {
+ try
+ {
a.SuppressKeyPress = true;
Console.WriteLine("");
var text = txt.Lines.ToArray();
@@ -197,30 +245,48 @@ namespace ShiftOS.WinForms.Applications {
var text3 = "";
var text4 = Regex.Replace(text2, @"\t|\n|\r", "");
- if (TerminalBackend.PrefixEnabled) {
+ if (TerminalBackend.PrefixEnabled)
+ {
text3 = text4.Remove(0, $"{SaveSystem.CurrentSave.Username}@{SaveSystem.CurrentSave.SystemName}:~$ ".Length);
}
TerminalBackend.LastCommand = text3;
TextSent?.Invoke(text4);
- if (TerminalBackend.InStory == false) {
+ if (TerminalBackend.InStory == false)
+ {
TerminalBackend.InvokeCommand(text3);
}
- if (TerminalBackend.PrefixEnabled) {
+ if (TerminalBackend.PrefixEnabled)
+ {
Console.Write($"{SaveSystem.CurrentSave.Username}@{SaveSystem.CurrentSave.SystemName}:~$ ");
}
- } catch {
}
- } else if (a.KeyCode == Keys.Back) {
- var tostring3 = txt.Lines[txt.Lines.Length - 1];
- var tostringlen = tostring3.Length + 1;
- var workaround = $"{SaveSystem.CurrentSave.Username}@{SaveSystem.CurrentSave.SystemName}:~$ ";
- var derp = workaround.Length + 1;
- if (tostringlen != derp) {
- AppearanceManager.CurrentPosition--;
- } else {
- a.SuppressKeyPress = true;
+ catch
+ {
}
- } else if (a.KeyCode == Keys.Left)
+ }
+ else if (a.KeyCode == Keys.Back)
+ {
+ try
+ {
+ var tostring3 = txt.Lines[txt.Lines.Length - 1];
+ var tostringlen = tostring3.Length + 1;
+ var workaround = $"{SaveSystem.CurrentSave.Username}@{SaveSystem.CurrentSave.SystemName}:~$ ";
+ var derp = workaround.Length + 1;
+ if (tostringlen != derp)
+ {
+ AppearanceManager.CurrentPosition--;
+ }
+ else
+ {
+ a.SuppressKeyPress = true;
+ }
+ }
+ catch
+ {
+ Debug.WriteLine("Drunky alert in terminal.");
+ }
+ }
+ else if (a.KeyCode == Keys.Left)
{
var getstring = txt.Lines[txt.Lines.Length - 1];
var stringlen = getstring.Length + 1;
@@ -240,13 +306,16 @@ namespace ShiftOS.WinForms.Applications {
}
}
//( ͡° ͜ʖ ͡° ) You found the lennyface without looking at the commit message. Message Michael in the #shiftos channel on Discord saying "ladouceur" somewhere in your message if you see this.
- else if (a.KeyCode == Keys.Up) {
+ else if (a.KeyCode == Keys.Up)
+ {
var tostring3 = txt.Lines[txt.Lines.Length - 1];
if (tostring3 == $"{SaveSystem.CurrentSave.Username}@{SaveSystem.CurrentSave.SystemName}:~$ ")
Console.Write(TerminalBackend.LastCommand);
a.SuppressKeyPress = true;
- } else {
+ }
+ else
+ {
if (TerminalBackend.InStory)
{
a.SuppressKeyPress = true;
@@ -266,19 +335,24 @@ namespace ShiftOS.WinForms.Applications {
}
- private void Terminal_Load(object sender, EventArgs e) {
+ private void Terminal_Load(object sender, EventArgs e)
+ {
}
- private void Terminal_FormClosing(object sender, FormClosingEventArgs e) {
+ private void Terminal_FormClosing(object sender, FormClosingEventArgs e)
+ {
ti.Stop();
}
- public void OnLoad() {
+ public void OnLoad()
+ {
MakeWidget(rtbterm);
- if (SaveSystem.CurrentSave != null) {
- if (!ShiftoriumFrontend.UpgradeInstalled("window_manager")) {
+ if (SaveSystem.CurrentSave != null)
+ {
+ if (!ShiftoriumFrontend.UpgradeInstalled("window_manager"))
+ {
rtbterm.Text = AppearanceManager.LastTerminalText;
rtbterm.Select(rtbterm.TextLength, 0);
}
@@ -289,30 +363,42 @@ namespace ShiftOS.WinForms.Applications {
}
- public void OnSkinLoad() {
- try {
+ public void OnSkinLoad()
+ {
+ try
+ {
rtbterm.Font = LoadedSkin.TerminalFont;
rtbterm.ForeColor = LoadedSkin.TerminalForeColor;
rtbterm.BackColor = LoadedSkin.TerminalBackColor;
- } catch {
+ }
+ catch
+ {
}
}
- public bool OnUnload() {
- if (SaveSystem.ShuttingDown == false) {
- if (!ShiftoriumFrontend.UpgradeInstalled("desktop")) {
- if (AppearanceManager.OpenForms.Count <= 1) {
+ public bool OnUnload()
+ {
+ if (SaveSystem.ShuttingDown == false)
+ {
+ if (!ShiftoriumFrontend.UpgradeInstalled("desktop"))
+ {
+ if (AppearanceManager.OpenForms.Count <= 1)
+ {
Console.WriteLine("");
Console.WriteLine("{WIN_CANTCLOSETERMINAL}");
- try {
+ try
+ {
Console.WriteLine("");
- if (TerminalBackend.PrefixEnabled) {
+ if (TerminalBackend.PrefixEnabled)
+ {
Console.Write($"{SaveSystem.CurrentSave.Username}@shiftos:~$ ");
}
- } catch (Exception ex) {
+ }
+ catch (Exception ex)
+ {
Console.WriteLine(ex);
}
return false;
@@ -322,13 +408,15 @@ namespace ShiftOS.WinForms.Applications {
return true;
}
- public void OnUpgrade() {
+ public void OnUpgrade()
+ {
}
private void rtbterm_TextChanged(object sender, EventArgs e)
{
}
+
}
}
//lol you found this comment i made so i chould push a change to make a point. \ No newline at end of file
diff --git a/ShiftOS.WinForms/Oobe.cs b/ShiftOS.WinForms/Oobe.cs
index b7bc3d8..7623d82 100644
--- a/ShiftOS.WinForms/Oobe.cs
+++ b/ShiftOS.WinForms/Oobe.cs
@@ -39,7 +39,7 @@ using ShiftOS.Objects.ShiftFS;
namespace ShiftOS.WinForms
{
- public partial class Oobe : Form, IOobe
+ public partial class Oobe : Form, IOobe, ITutorial
{
public Oobe()
{
@@ -87,6 +87,23 @@ namespace ShiftOS.WinForms
public Save MySave = null;
+ public event EventHandler OnComplete;
+
+ private int tutPrg = 0;
+
+ public int TutorialProgress
+ {
+ get
+ {
+ return tutPrg;
+ }
+
+ set
+ {
+ tutPrg = value;
+ }
+ }
+
public void StartShowing(Save save)
{
var t = new Thread(new ThreadStart(() =>
@@ -204,5 +221,163 @@ namespace ShiftOS.WinForms
{
throw new NotImplementedException();
}
+
+ public void Start()
+ {
+ foreach(var frm in AppearanceManager.OpenForms)
+ {
+ frm.Close();
+ }
+
+ TerminalBackend.CommandProcessed += (cmd, args) =>
+ {
+ if(cmd == "sos.help")
+ {
+ if (TutorialProgress == 0)
+ TutorialProgress = 1;
+ }
+ else if(cmd == "sos.status")
+ {
+ if (TutorialProgress == 1)
+ TutorialProgress = 2;
+
+ }
+ else if(cmd == "shiftorium.list")
+ {
+ if (TutorialProgress == 2)
+ TutorialProgress = 3;
+ }
+ else if(cmd == "shiftorium.info" && args == "{\"upgrade\":\"mud_fundamentals\"}")
+ {
+ if (TutorialProgress == 3)
+ TutorialProgress = 4;
+ }
+ else if(cmd == "win.open")
+ {
+ if (TutorialProgress == 4)
+ TutorialProgress = 5;
+ }
+ };
+ this.Show();
+ var t = new Thread(() =>
+ {
+ textgeninput = lblHijack;
+ Clear();
+ textgeninput = lblhackwords;
+ Clear();
+
+ this.Invoke(new Action(() =>
+ {
+ textgeninput.Font = SkinEngine.LoadedSkin.TerminalFont;
+ }));
+ TextType("ShiftOS has been installed successfully.");
+ Thread.Sleep(500);
+ TextType("Before you can continue to the operating system, here's a little tutorial on how to use it.");
+ Thread.Sleep(500);
+ TextType("Starting a Terminal...");
+ Applications.Terminal term = null;
+ this.Invoke(new Action(() =>
+ {
+ term = new Applications.Terminal();
+ this.Controls.Add(term);
+ term.Location = new Point(
+ (this.Width - term.Width) / 2,
+ (this.Height - term.Height) / 2
+ );
+ term.Show();
+ term.OnLoad();
+ term.OnSkinLoad();
+ term.OnUpgrade();
+ }));
+ TextType("This little text box is called a Terminal.");
+ Thread.Sleep(500);
+ TextType("Normally, it would appear in full-screen, but this window is hosting it as a control so you can see this text as well.");
+ Thread.Sleep(500);
+ TextType("In ShiftOS, the Terminal is your main control centre for the operating system. You can see system status, check Codepoints, open other programs, buy upgrades, and more.");
+ Thread.Sleep(500);
+ TextType("Go ahead and type 'sos.help' to see a list of commands.");
+ while(TutorialProgress == 0)
+ {
+
+ }
+ TextType("As you can see, sos.help gives you a list of all commands in the system.");
+ Thread.Sleep(500);
+ TextType("You can run any command, by typing in their Namespace, followed by a period (.), followed by their Command Name.");
+ Thread.Sleep(500);
+ TextType("Go ahead and run the 'status' command within the 'sos' namespace to see what the command does.");
+ while(TutorialProgress == 1)
+ {
+
+ }
+ TextType("Brilliant. The sos.status command will tell you how many Codepoints you have, as well as how many upgrades you have installed and how many are available.");
+ Thread.Sleep(500);
+ TextType("Codepoints, as you know, are a special currency within ShiftOS. They are used to buy things within the multi-user domain, such as upgrades, scripts, and applications.");
+ Thread.Sleep(500);
+ TextType("You can earn Codepoints by doing things in ShiftOS - such as completing jobs for other users, making things like skins, scripts, documents, etc, and playing games like Pong.");
+ Thread.Sleep(500);
+ TextType("At times, you'll be given Codepoints to help complete a task. You will receive Codepoints from 'sys' - the multi-user domain itself.");
+ SaveSystem.TransferCodepointsFrom("sys", 50);
+ TextType("Right now, you don't have any upgrades. Upgrades can give ShiftOS additional features and capabilities - like new core applications, supported file types, and new Terminal commands.");
+ Thread.Sleep(500);
+ TextType("You can easily get upgrades using the Shiftorium - a repository of approved ShiftOS upgrades.");
+ Thread.Sleep(500);
+ TextType("To start using the Shiftorium, simply type 'shiftorium.list' to see available upgrades.");
+ while(TutorialProgress == 2)
+ {
+
+ }
+ TextType("Right now, you have enough Codepoints to buy the 'mud_fundamentals' upgrade. You can use shiftorium.info to see information about this upgrade.");
+ Thread.Sleep(500);
+ TextType("Some commands, like shiftorium.info, require you to pass information to them in the form of arguments.");
+ Thread.Sleep(500);
+ TextType("Argument pairs sit at the end of the command, and are enclosed in curly braces.");
+ Thread.Sleep(500);
+ TextType("Inside these curly braces, you can input an argument key, followed by a colon, followed by the value. Then, if you need multiple arguments, you can put a comma after the value, and then insert another argument pair.");
+ Thread.Sleep(500);
+ TextType("There are different value types - numeric values, which can be any positive or negative 32-bit integer");
+ Thread.Sleep(500);
+ TextType("Then there are boolean values which can be either 'true' or 'false'");
+ Thread.Sleep(500);
+ TextType("Then there are string values, which are enclosed in double-quotes. If for some reason you need to use a double-quote inside a string, you must escape it using a single backslash followed by the quote, like this: key:\"My \\\"awesome\\\" value.\"");
+ Thread.Sleep(500);
+ TextType("If you want to escape a backslash inside a string, simply type two backslashes instead of one - for example key:\"Back\\\\slash.\"");
+ Thread.Sleep(500);
+ TextType("shiftorium.info requires an upgrade argument, which is a string type. Go ahead and give shiftorium.info's upgrade argument the 'mud_fundamentals' upgrade's ID.");
+ while(TutorialProgress == 3)
+ {
+
+ }
+ TextType("As you can see, mud_fundamentals is very useful. In fact, a lot of useful upgrades depend on it. You should buy it!");
+ Thread.Sleep(500);
+ TextType("shiftorium.info already gave you a command that will let you buy the upgrade - go ahead and run that command!");
+ while (!Shiftorium.UpgradeInstalled("mud_fundamentals"))
+ {
+
+ }
+ TextType("Hooray! You now have the MUD Fundamentals upgrade.");
+ Thread.Sleep(500);
+ TextType("You can also earn more Codepoints by playing Pong. To open Pong, you can use the win.open command.");
+ Thread.Sleep(500);
+ TextType("If you run win.open without arguments, you can see a list of applications that you can open.");
+ Thread.Sleep(500);
+ TextType("Just run win.open without arguments, and this tutorial will be completed!");
+ while(TutorialProgress == 4)
+ {
+
+ }
+ TextType("This concludes the ShiftOS beginners' guide brought to you by the multi-user domain. Stay safe in a connected world.");
+ Thread.Sleep(2000);
+ this.Invoke(new Action(() =>
+ {
+ OnComplete?.Invoke(this, EventArgs.Empty);
+ this.Close();
+ SaveSystem.CurrentSave.StoryPosition = 2;
+ SaveSystem.SaveGame();
+ AppearanceManager.SetupWindow(new Applications.Terminal());
+ }));
+ });
+ t.IsBackground = true;
+ t.Start();
+ }
}
}
diff --git a/ShiftOS.WinForms/Oobe.resx b/ShiftOS.WinForms/Oobe.resx
index 1af7de1..2f015af 100644
--- a/ShiftOS.WinForms/Oobe.resx
+++ b/ShiftOS.WinForms/Oobe.resx
@@ -117,4 +117,16 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
+ <metadata name="conversationtimer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>17, 17</value>
+ </metadata>
+ <metadata name="textgen.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>17, 56</value>
+ </metadata>
+ <metadata name="hackeffecttimer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>17, 95</value>
+ </metadata>
+ <metadata name="BackgroundWorker1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>17, 134</value>
+ </metadata>
</root> \ No newline at end of file
diff --git a/ShiftOS.WinForms/Program.cs b/ShiftOS.WinForms/Program.cs
index 7db25b9..dfb935e 100644
--- a/ShiftOS.WinForms/Program.cs
+++ b/ShiftOS.WinForms/Program.cs
@@ -44,6 +44,9 @@ namespace ShiftOS.WinForms
[STAThread]
static void Main()
{
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ //if ANYONE puts code before those two winforms config lines they will be declared a drunky. - Michael
Localization.RegisterProvider(new WFLanguageProvider());
Shiftorium.RegisterProvider(new WinformsShiftoriumProvider());
AppearanceManager.OnExit += () =>
@@ -51,12 +54,12 @@ namespace ShiftOS.WinForms
Environment.Exit(0);
};
+ TutorialManager.RegisterTutorial(new Oobe());
+
TerminalBackend.TerminalRequested += () =>
{
AppearanceManager.SetupWindow(new Applications.Terminal());
};
- Application.EnableVisualStyles();
- Application.SetCompatibleTextRenderingDefault(false);
AppearanceManager.Initiate(new WinformsWindowManager());
OutOfBoxExperience.Init(new Oobe());
Infobox.Init(new WinformsInfobox());
diff --git a/ShiftOS.WinForms/Tools/ControlManager.cs b/ShiftOS.WinForms/Tools/ControlManager.cs
index 30fd296..456e46d 100644
--- a/ShiftOS.WinForms/Tools/ControlManager.cs
+++ b/ShiftOS.WinForms/Tools/ControlManager.cs
@@ -120,7 +120,7 @@ namespace ShiftOS.WinForms.Tools
{
var frm = OpenForms[0] as WindowBorder;
frm.Location = new Point(0, 0);
- frm.Size = frm.ParentForm.Size;
+ frm.Size = Desktop.Size;
OpenForms[0] = frm;
}