From 58c9152351b02b37e63fc193060474478f1e9a65 Mon Sep 17 00:00:00 2001 From: Michael Date: Mon, 29 May 2017 11:38:11 -0400 Subject: various things from last night --- ShiftOS.WinForms/Applications/Chat.Designer.cs | 178 ++++++++++++------------- ShiftOS.WinForms/Applications/Terminal.cs | 2 +- 2 files changed, 90 insertions(+), 90 deletions(-) (limited to 'ShiftOS.WinForms/Applications') diff --git a/ShiftOS.WinForms/Applications/Chat.Designer.cs b/ShiftOS.WinForms/Applications/Chat.Designer.cs index d51b732..7bfa4dd 100644 --- a/ShiftOS.WinForms/Applications/Chat.Designer.cs +++ b/ShiftOS.WinForms/Applications/Chat.Designer.cs @@ -54,6 +54,13 @@ namespace ShiftOS.WinForms.Applications { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Chat)); this.panel1 = new System.Windows.Forms.Panel(); + this.pnlstart = new System.Windows.Forms.Panel(); + this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); + this.txtchatid = new System.Windows.Forms.TextBox(); + this.btnjoin = new System.Windows.Forms.Button(); + this.label3 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); this.rtbchat = new System.Windows.Forms.RichTextBox(); this.toolStrip1 = new System.Windows.Forms.ToolStrip(); this.tschatid = new System.Windows.Forms.ToolStripLabel(); @@ -61,18 +68,11 @@ namespace ShiftOS.WinForms.Applications this.tsbottombar = new System.Windows.Forms.ToolStrip(); this.txtuserinput = new System.Windows.Forms.ToolStripTextBox(); this.btnsend = new System.Windows.Forms.ToolStripButton(); - this.pnlstart = new System.Windows.Forms.Panel(); - this.label1 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); - this.txtchatid = new System.Windows.Forms.TextBox(); - this.btnjoin = new System.Windows.Forms.Button(); this.panel1.SuspendLayout(); - this.toolStrip1.SuspendLayout(); - this.tsbottombar.SuspendLayout(); this.pnlstart.SuspendLayout(); this.flowLayoutPanel1.SuspendLayout(); + this.toolStrip1.SuspendLayout(); + this.tsbottombar.SuspendLayout(); this.SuspendLayout(); // // panel1 @@ -87,6 +87,82 @@ namespace ShiftOS.WinForms.Applications this.panel1.Size = new System.Drawing.Size(633, 318); this.panel1.TabIndex = 0; // + // pnlstart + // + this.pnlstart.Controls.Add(this.flowLayoutPanel1); + this.pnlstart.Controls.Add(this.label3); + this.pnlstart.Controls.Add(this.label2); + this.pnlstart.Controls.Add(this.label1); + this.pnlstart.Dock = System.Windows.Forms.DockStyle.Fill; + this.pnlstart.Location = new System.Drawing.Point(0, 25); + this.pnlstart.Name = "pnlstart"; + this.pnlstart.Size = new System.Drawing.Size(633, 268); + this.pnlstart.TabIndex = 4; + // + // flowLayoutPanel1 + // + this.flowLayoutPanel1.AutoSize = true; + this.flowLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.flowLayoutPanel1.Controls.Add(this.txtchatid); + this.flowLayoutPanel1.Controls.Add(this.btnjoin); + this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Top; + this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 118); + this.flowLayoutPanel1.Name = "flowLayoutPanel1"; + this.flowLayoutPanel1.Size = new System.Drawing.Size(633, 29); + this.flowLayoutPanel1.TabIndex = 3; + // + // txtchatid + // + this.txtchatid.Location = new System.Drawing.Point(3, 3); + this.txtchatid.Name = "txtchatid"; + this.txtchatid.Size = new System.Drawing.Size(192, 20); + this.txtchatid.TabIndex = 0; + // + // btnjoin + // + this.btnjoin.Location = new System.Drawing.Point(201, 3); + this.btnjoin.Name = "btnjoin"; + this.btnjoin.Size = new System.Drawing.Size(75, 23); + this.btnjoin.TabIndex = 1; + this.btnjoin.Text = "Join"; + this.btnjoin.UseVisualStyleBackColor = true; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Dock = System.Windows.Forms.DockStyle.Top; + this.label3.Location = new System.Drawing.Point(0, 85); + this.label3.Name = "label3"; + this.label3.Padding = new System.Windows.Forms.Padding(10); + this.label3.Size = new System.Drawing.Size(79, 33); + this.label3.TabIndex = 2; + this.label3.Tag = "header3"; + this.label3.Text = "Join a chat"; + // + // label2 + // + this.label2.Dock = System.Windows.Forms.DockStyle.Top; + this.label2.Location = new System.Drawing.Point(0, 33); + this.label2.Name = "label2"; + this.label2.Padding = new System.Windows.Forms.Padding(10); + this.label2.Size = new System.Drawing.Size(633, 52); + this.label2.TabIndex = 1; + this.label2.Text = "SimpleSRC is a simple chat program that utilises the ShiftOS Relay Chat protocol." + + " All you have to do is enter a chat code or system name, and SimpleSRC will try " + + "to initiate a chat for you."; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Dock = System.Windows.Forms.DockStyle.Top; + this.label1.Location = new System.Drawing.Point(0, 0); + this.label1.Name = "label1"; + this.label1.Padding = new System.Windows.Forms.Padding(10); + this.label1.Size = new System.Drawing.Size(143, 33); + this.label1.TabIndex = 0; + this.label1.Tag = "header1"; + this.label1.Text = "Welcome to SimpleSRC!"; + // // rtbchat // this.rtbchat.Dock = System.Windows.Forms.DockStyle.Fill; @@ -151,82 +227,6 @@ namespace ShiftOS.WinForms.Applications this.btnsend.Text = "Send"; this.btnsend.Click += new System.EventHandler(this.btnsend_Click); // - // pnlstart - // - this.pnlstart.Controls.Add(this.flowLayoutPanel1); - this.pnlstart.Controls.Add(this.label3); - this.pnlstart.Controls.Add(this.label2); - this.pnlstart.Controls.Add(this.label1); - this.pnlstart.Dock = System.Windows.Forms.DockStyle.Fill; - this.pnlstart.Location = new System.Drawing.Point(0, 25); - this.pnlstart.Name = "pnlstart"; - this.pnlstart.Size = new System.Drawing.Size(633, 268); - this.pnlstart.TabIndex = 4; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Dock = System.Windows.Forms.DockStyle.Top; - this.label1.Location = new System.Drawing.Point(0, 0); - this.label1.Name = "label1"; - this.label1.Padding = new System.Windows.Forms.Padding(10); - this.label1.Size = new System.Drawing.Size(143, 33); - this.label1.TabIndex = 0; - this.label1.Tag = "header1"; - this.label1.Text = "Welcome to SimpleSRC!"; - // - // label2 - // - this.label2.Dock = System.Windows.Forms.DockStyle.Top; - this.label2.Location = new System.Drawing.Point(0, 33); - this.label2.Name = "label2"; - this.label2.Padding = new System.Windows.Forms.Padding(10); - this.label2.Size = new System.Drawing.Size(633, 52); - this.label2.TabIndex = 1; - this.label2.Text = "SimpleSRC is a simple chat program that utilises the ShiftOS Relay Chat protocol." + - " All you have to do is enter a chat code or system name, and SimpleSRC will try " + - "to initiate a chat for you."; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Dock = System.Windows.Forms.DockStyle.Top; - this.label3.Location = new System.Drawing.Point(0, 85); - this.label3.Name = "label3"; - this.label3.Padding = new System.Windows.Forms.Padding(10); - this.label3.Size = new System.Drawing.Size(79, 33); - this.label3.TabIndex = 2; - this.label3.Tag = "header3"; - this.label3.Text = "Join a chat"; - // - // flowLayoutPanel1 - // - this.flowLayoutPanel1.AutoSize = true; - this.flowLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.flowLayoutPanel1.Controls.Add(this.txtchatid); - this.flowLayoutPanel1.Controls.Add(this.btnjoin); - this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Top; - this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 118); - this.flowLayoutPanel1.Name = "flowLayoutPanel1"; - this.flowLayoutPanel1.Size = new System.Drawing.Size(633, 29); - this.flowLayoutPanel1.TabIndex = 3; - // - // txtchatid - // - this.txtchatid.Location = new System.Drawing.Point(3, 3); - this.txtchatid.Name = "txtchatid"; - this.txtchatid.Size = new System.Drawing.Size(192, 20); - this.txtchatid.TabIndex = 0; - // - // btnjoin - // - this.btnjoin.Location = new System.Drawing.Point(201, 3); - this.btnjoin.Name = "btnjoin"; - this.btnjoin.Size = new System.Drawing.Size(75, 23); - this.btnjoin.TabIndex = 1; - this.btnjoin.Text = "Join"; - this.btnjoin.UseVisualStyleBackColor = true; - // // Chat // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -236,14 +236,14 @@ namespace ShiftOS.WinForms.Applications this.Size = new System.Drawing.Size(633, 318); this.panel1.ResumeLayout(false); this.panel1.PerformLayout(); - this.toolStrip1.ResumeLayout(false); - this.toolStrip1.PerformLayout(); - this.tsbottombar.ResumeLayout(false); - this.tsbottombar.PerformLayout(); this.pnlstart.ResumeLayout(false); this.pnlstart.PerformLayout(); this.flowLayoutPanel1.ResumeLayout(false); this.flowLayoutPanel1.PerformLayout(); + this.toolStrip1.ResumeLayout(false); + this.toolStrip1.PerformLayout(); + this.tsbottombar.ResumeLayout(false); + this.tsbottombar.PerformLayout(); this.ResumeLayout(false); } diff --git a/ShiftOS.WinForms/Applications/Terminal.cs b/ShiftOS.WinForms/Applications/Terminal.cs index de4888b..2d2b4c5 100644 --- a/ShiftOS.WinForms/Applications/Terminal.cs +++ b/ShiftOS.WinForms/Applications/Terminal.cs @@ -232,7 +232,7 @@ namespace ShiftOS.WinForms.Applications var text = txt.Lines.ToArray(); var text2 = text[text.Length - 1]; var text3 = ""; - Console.WriteLine(); + txt.AppendText(Environment.NewLine); var text4 = Regex.Replace(text2, @"\t|\n|\r", ""); if (IsInRemoteSystem == true) -- cgit v1.2.3 From ff47625d2547deed441a853569f9fe84197e23b6 Mon Sep 17 00:00:00 2001 From: Michael Date: Mon, 29 May 2017 16:08:59 -0400 Subject: fix some clientside save softlocks --- ShiftOS.WinForms/Applications/Terminal.cs | 31 +++++++++++++++++-------------- ShiftOS.WinForms/Oobe.cs | 3 ++- ShiftOS_TheReturn/SaveSystem.cs | 15 ++++++++++++--- 3 files changed, 31 insertions(+), 18 deletions(-) (limited to 'ShiftOS.WinForms/Applications') diff --git a/ShiftOS.WinForms/Applications/Terminal.cs b/ShiftOS.WinForms/Applications/Terminal.cs index 2d2b4c5..080e8bb 100644 --- a/ShiftOS.WinForms/Applications/Terminal.cs +++ b/ShiftOS.WinForms/Applications/Terminal.cs @@ -313,21 +313,24 @@ namespace ShiftOS.WinForms.Applications } else if (a.KeyCode == Keys.Left) { - var getstring = txt.Lines[txt.Lines.Length - 1]; - var stringlen = getstring.Length + 1; - var header = $"{SaveSystem.CurrentUser.Username}@{SaveSystem.CurrentSave.SystemName}:~$ "; - var headerlen = header.Length + 1; - var selstart = txt.SelectionStart; - var remstrlen = txt.TextLength - stringlen; - var finalnum = selstart - remstrlen; - - if (finalnum != headerlen) + if (SaveSystem.CurrentSave != null) { - AppearanceManager.CurrentPosition--; - } - else - { - a.SuppressKeyPress = true; + var getstring = txt.Lines[txt.Lines.Length - 1]; + var stringlen = getstring.Length + 1; + var header = $"{SaveSystem.CurrentUser.Username}@{SaveSystem.CurrentSave.SystemName}:~$ "; + var headerlen = header.Length + 1; + var selstart = txt.SelectionStart; + var remstrlen = txt.TextLength - stringlen; + var finalnum = selstart - remstrlen; + + if (finalnum != headerlen) + { + AppearanceManager.CurrentPosition--; + } + else + { + a.SuppressKeyPress = true; + } } } else if (a.KeyCode == Keys.Up) diff --git a/ShiftOS.WinForms/Oobe.cs b/ShiftOS.WinForms/Oobe.cs index 9182b4b..96c2bf5 100644 --- a/ShiftOS.WinForms/Oobe.cs +++ b/ShiftOS.WinForms/Oobe.cs @@ -207,14 +207,15 @@ namespace ShiftOS.WinForms ServerMessageReceived smr = null; smr = (msg) => { - ServerManager.MessageReceived -= smr; if (msg.Name == "mud_savefile") { + ServerManager.MessageReceived -= smr; SaveSystem.CurrentSave = JsonConvert.DeserializeObject(msg.Contents); SaveSystem.SaveGame(); } else if(msg.Name=="mud_login_denied") { + ServerManager.MessageReceived -= smr; LinkSaveFile(token); } }; diff --git a/ShiftOS_TheReturn/SaveSystem.cs b/ShiftOS_TheReturn/SaveSystem.cs index c8996d4..d1b92fd 100644 --- a/ShiftOS_TheReturn/SaveSystem.cs +++ b/ShiftOS_TheReturn/SaveSystem.cs @@ -214,13 +214,22 @@ namespace ShiftOS.Engine savehandshake = (msg) => { - ServerManager.MessageReceived -= savehandshake; if (msg.Name == "mud_savefile") { - CurrentSave = JsonConvert.DeserializeObject(msg.Contents); - } + ServerManager.MessageReceived -= savehandshake; + try + { + CurrentSave = JsonConvert.DeserializeObject(msg.Contents); + } + catch + { + Console.WriteLine("[system] [SEVERE] Cannot parse configuration file."); + oobe.PromptForLogin(); + } + } else if (msg.Name == "mud_login_denied") { + ServerManager.MessageReceived -= savehandshake; oobe.PromptForLogin(); } }; -- cgit v1.2.3 From 37ac4c684ce3904c5ec614362ed99bb9867ca0f3 Mon Sep 17 00:00:00 2001 From: Michael Date: Mon, 29 May 2017 20:08:30 -0400 Subject: It's amazing what talking to Rylan can do to an integer datatype. --- ShiftOS.Objects/EngineShiftnetSubscription.cs | 2 +- ShiftOS.Objects/Save.cs | 4 ++-- ShiftOS.Objects/Shop.cs | 2 +- ShiftOS.Objects/UniteClient.cs | 12 ++++++------ ShiftOS.WinForms/Applications/Pong.cs | 20 ++++++++++---------- ShiftOS.WinForms/Applications/ShiftLetters.cs | 2 +- ShiftOS.WinForms/Applications/ShiftLotto.cs | 4 ++-- ShiftOS.WinForms/Applications/ShiftSweeper.cs | 8 ++++---- ShiftOS.WinForms/Applications/Shifter.cs | 2 +- ShiftOS.WinForms/Applications/ShiftoriumFrontend.cs | 4 ++-- ShiftOS.WinForms/Applications/ShopItemCreator.cs | 4 ++-- ShiftOS.WinForms/HackerCommands.cs | 2 +- ShiftOS.WinForms/JobTasks.cs | 4 ++-- ShiftOS.WinForms/ShiftnetSites/AppscapeMain.cs | 4 ++-- ShiftOS.WinForms/WinformsDesktop.cs | 2 +- ShiftOS_TheReturn/Commands.cs | 4 ++-- ShiftOS_TheReturn/SaveSystem.cs | 4 ++-- ShiftOS_TheReturn/Scripting.cs | 4 ++-- ShiftOS_TheReturn/ServerManager.cs | 2 +- ShiftOS_TheReturn/Shiftorium.cs | 10 +++++----- 20 files changed, 50 insertions(+), 50 deletions(-) (limited to 'ShiftOS.WinForms/Applications') diff --git a/ShiftOS.Objects/EngineShiftnetSubscription.cs b/ShiftOS.Objects/EngineShiftnetSubscription.cs index 1296a98..c319f18 100644 --- a/ShiftOS.Objects/EngineShiftnetSubscription.cs +++ b/ShiftOS.Objects/EngineShiftnetSubscription.cs @@ -10,7 +10,7 @@ namespace ShiftOS.Objects { public string Name { get; set; } public string Description { get; set; } - public int CostPerMonth { get; set; } + public uint CostPerMonth { get; set; } public int DownloadSpeed { get; set; } public string Company { get; set; } } diff --git a/ShiftOS.Objects/Save.cs b/ShiftOS.Objects/Save.cs index 8675a35..0fef7b3 100644 --- a/ShiftOS.Objects/Save.cs +++ b/ShiftOS.Objects/Save.cs @@ -41,9 +41,9 @@ namespace ShiftOS.Objects [Obsolete("This save variable is no longer used in Beta 2.4 and above of ShiftOS. Please use ShiftOS.Engine.SaveSystem.CurrentUser.Username to access the current user's username.")] public string Username { get; set; } - private long _cp = 0; + private ulong _cp = 0; - public long Codepoints + public ulong Codepoints { get { diff --git a/ShiftOS.Objects/Shop.cs b/ShiftOS.Objects/Shop.cs index 65f5746..c603523 100644 --- a/ShiftOS.Objects/Shop.cs +++ b/ShiftOS.Objects/Shop.cs @@ -42,7 +42,7 @@ namespace ShiftOS.Objects { public string Name { get; set; } public string Description { get; set; } - public int Cost { get; set; } + public ulong Cost { get; set; } public int FileType { get; set; } public byte[] MUDFile { get; set; } } diff --git a/ShiftOS.Objects/UniteClient.cs b/ShiftOS.Objects/UniteClient.cs index d8e34b7..ccd721b 100644 --- a/ShiftOS.Objects/UniteClient.cs +++ b/ShiftOS.Objects/UniteClient.cs @@ -83,9 +83,9 @@ namespace ShiftOS.Unite /// Get the Pong codepoint highscore for the current user. /// /// The amount of Codepoints returned by the server - public int GetPongCP() + public ulong GetPongCP() { - return Convert.ToInt32(MakeCall("/API/GetPongCP")); + return Convert.ToUInt64(MakeCall("/API/GetPongCP")); } /// @@ -110,7 +110,7 @@ namespace ShiftOS.Unite /// Set the pong Codepoints record for the user /// /// The amount of Codepoints to set the record to - public void SetPongCP(int value) + public void SetPongCP(ulong value) { MakeCall("/API/SetPongCP/" + value.ToString()); } @@ -182,16 +182,16 @@ namespace ShiftOS.Unite /// Get the user's codepoints. /// /// The amount of codepoints stored on the server for this user. - public long GetCodepoints() + public ulong GetCodepoints() { - return Convert.ToInt64(MakeCall("/API/GetCodepoints")); + return Convert.ToUInt64(MakeCall("/API/GetCodepoints")); } /// /// Set the user's codepoints. /// /// The amount of codepoints to set the user's codepoints value to. - public void SetCodepoints(long value) + public void SetCodepoints(ulong value) { MakeCall("/API/SetCodepoints/" + value.ToString()); } diff --git a/ShiftOS.WinForms/Applications/Pong.cs b/ShiftOS.WinForms/Applications/Pong.cs index 84177b7..6d81c64 100644 --- a/ShiftOS.WinForms/Applications/Pong.cs +++ b/ShiftOS.WinForms/Applications/Pong.cs @@ -58,10 +58,10 @@ namespace ShiftOS.WinForms.Applications double incrementy = 0.2; int levelxspeed = 3; int levelyspeed = 3; - int beatairewardtotal; - int beataireward = 1; - int[] levelrewards = new int[50]; - int totalreward; + ulong beatairewardtotal; + ulong beataireward = 1; + ulong[] levelrewards = new ulong[50]; + ulong totalreward; int countdown = 3; bool aiShouldIsbeEnabled = true; @@ -297,11 +297,11 @@ namespace ShiftOS.WinForms.Applications lblmissedout.Text = Localization.Parse("{YOU_MISSED_OUT_ON}:") + Environment.NewLine + lblstatscodepoints.Text.Replace(Localization.Parse("{CODEPOINTS}: "), "") + Localization.Parse(" {CODEPOINTS}"); if (ShiftoriumFrontend.UpgradeInstalled("pong_upgrade_2")) { - totalreward = levelrewards[level - 1] + beatairewardtotal; + totalreward = (ulong)(levelrewards[level - 1] + beatairewardtotal); double onePercent = (totalreward / 100); lblbutyougained.Show(); lblbutyougained.Text = Localization.Parse("{BUT_YOU_GAINED}:") + Environment.NewLine + onePercent.ToString("") + (Localization.Parse(" {CODEPOINTS}")); - SaveSystem.TransferCodepointsFrom("pong", (totalreward / 100)); + SaveSystem.TransferCodepointsFrom("pong", (ulong)(totalreward / 100)); } else { @@ -715,10 +715,10 @@ namespace ShiftOS.WinForms.Applications { if (ShiftoriumFrontend.UpgradeInstalled("pong_upgrade")) { - beataireward = level * 10; + beataireward = (ulong)(level * 10); } else { - beataireward = level * 5; + beataireward = (ulong)(level * 5); } } else @@ -726,11 +726,11 @@ namespace ShiftOS.WinForms.Applications if (ShiftoriumFrontend.UpgradeInstalled("pong_upgrade")) { double br = levelrewards[level - 1] / 10; - beataireward = (int)Math.Round(br) * 10; + beataireward = (ulong)Math.Round(br) * 10; } else { double br = levelrewards[level - 1] / 10; - beataireward = (int)Math.Round(br) * 5; + beataireward = (ulong)Math.Round(br) * 5; } } diff --git a/ShiftOS.WinForms/Applications/ShiftLetters.cs b/ShiftOS.WinForms/Applications/ShiftLetters.cs index 42e19f8..0e9f74a 100644 --- a/ShiftOS.WinForms/Applications/ShiftLetters.cs +++ b/ShiftOS.WinForms/Applications/ShiftLetters.cs @@ -217,7 +217,7 @@ namespace ShiftOS.WinForms.Applications if (!lblword.Text.Contains("_")) { int oldlives = lives; - int cp = (word.Length * oldlives) * 2; //drunky michael made this 5x... + ulong cp = (ulong)(word.Length * oldlives) * 2; //drunky michael made this 5x... SaveSystem.TransferCodepointsFrom("shiftletters", cp); StartGame(); } diff --git a/ShiftOS.WinForms/Applications/ShiftLotto.cs b/ShiftOS.WinForms/Applications/ShiftLotto.cs index 5ab8154..3f940c7 100644 --- a/ShiftOS.WinForms/Applications/ShiftLotto.cs +++ b/ShiftOS.WinForms/Applications/ShiftLotto.cs @@ -88,7 +88,7 @@ namespace ShiftOS.WinForms.Applications } else { - if (SaveSystem.CurrentSave.Codepoints - (codePoints * difficulty) <= 0) + if (SaveSystem.CurrentSave.Codepoints - (ulong)(codePoints * difficulty) <= 0) { Infobox.Show("Not enough Codepoints", "You do not have enough Codepoints to gamble this amount!"); } @@ -102,7 +102,7 @@ namespace ShiftOS.WinForms.Applications int winningNumber = rnd.Next(0, difficulty); // Multiply CodePoints * Difficulty - int jackpot = codePoints * difficulty; + ulong jackpot = (ulong)(codePoints * difficulty); // Test the random ints if (guessedNumber == winningNumber) diff --git a/ShiftOS.WinForms/Applications/ShiftSweeper.cs b/ShiftOS.WinForms/Applications/ShiftSweeper.cs index f23ed73..772ec26 100644 --- a/ShiftOS.WinForms/Applications/ShiftSweeper.cs +++ b/ShiftOS.WinForms/Applications/ShiftSweeper.cs @@ -300,12 +300,12 @@ namespace ShiftOS.WinForms.Applications { } public void winGame() { - int cp = 0; - int origminecount = gameBombCount * 10; + ulong cp = 0; + ulong origminecount = (ulong)(gameBombCount * 10); if (minetimer < 31) cp = (origminecount * 3); - else if (minetimer < 61) cp = (Int32)(origminecount * 2.5); + else if (minetimer < 61) cp = (ulong)(origminecount * 2.5); else if (minetimer < 91) cp = (origminecount * 2); - else if (minetimer < 121) cp = (Int32)(origminecount * 1.5); + else if (minetimer < 121) cp = (ulong)(origminecount * 1.5); else if (minetimer > 120) cp = (origminecount * 1); SaveSystem.TransferCodepointsFrom("shiftsweeper", cp); panelGameStatus.Image = Properties.Resources.SweeperWinFace; diff --git a/ShiftOS.WinForms/Applications/Shifter.cs b/ShiftOS.WinForms/Applications/Shifter.cs index 1a59c80..3b3a4f1 100644 --- a/ShiftOS.WinForms/Applications/Shifter.cs +++ b/ShiftOS.WinForms/Applications/Shifter.cs @@ -391,7 +391,7 @@ namespace ShiftOS.WinForms.Applications } - public int CodepointValue = 0; + public uint CodepointValue = 0; public List settings = new List(); public Skin LoadedSkin = null; diff --git a/ShiftOS.WinForms/Applications/ShiftoriumFrontend.cs b/ShiftOS.WinForms/Applications/ShiftoriumFrontend.cs index 08e6c8f..d6b014d 100644 --- a/ShiftOS.WinForms/Applications/ShiftoriumFrontend.cs +++ b/ShiftOS.WinForms/Applications/ShiftoriumFrontend.cs @@ -213,9 +213,9 @@ namespace ShiftOS.WinForms.Applications private void btnbuy_Click(object sender, EventArgs e) { - long cpCost = 0; + ulong cpCost = 0; backend.Silent = true; - Dictionary UpgradesToBuy = new Dictionary(); + Dictionary UpgradesToBuy = new Dictionary(); foreach (var itm in lbupgrades.SelectedItems) { cpCost += upgrades[itm.ToString()].Cost; diff --git a/ShiftOS.WinForms/Applications/ShopItemCreator.cs b/ShiftOS.WinForms/Applications/ShopItemCreator.cs index 61e7491..d2836ee 100644 --- a/ShiftOS.WinForms/Applications/ShopItemCreator.cs +++ b/ShiftOS.WinForms/Applications/ShopItemCreator.cs @@ -73,7 +73,7 @@ namespace ShiftOS.WinForms.Applications Infobox.Show("No file chosen.", "Please select a file to sell."); return; } - Item.Cost = Convert.ToInt32(txtcost.Text); + Item.Cost = Convert.ToUInt64(txtcost.Text); Item.Description = txtdescription.Text; Item.Name = txtitemname.Text; Callback?.Invoke(Item); @@ -101,7 +101,7 @@ namespace ShiftOS.WinForms.Applications { try { - Item.Cost = Convert.ToInt32(txtcost.Text); + Item.Cost = Convert.ToUInt64(txtcost.Text); } catch { diff --git a/ShiftOS.WinForms/HackerCommands.cs b/ShiftOS.WinForms/HackerCommands.cs index 47b486d..f467eb2 100644 --- a/ShiftOS.WinForms/HackerCommands.cs +++ b/ShiftOS.WinForms/HackerCommands.cs @@ -504,7 +504,7 @@ namespace ShiftOS.WinForms string usr = args["user"].ToString(); string sys = args["sys"].ToString(); string pass = args["pass"].ToString(); - long amount = (long)args["amount"]; + ulong amount = (ulong)args["amount"]; if(amount < 0) { Console.WriteLine("--invalid codepoint amount - halting..."); diff --git a/ShiftOS.WinForms/JobTasks.cs b/ShiftOS.WinForms/JobTasks.cs index 622e287..d862961 100644 --- a/ShiftOS.WinForms/JobTasks.cs +++ b/ShiftOS.WinForms/JobTasks.cs @@ -35,12 +35,12 @@ namespace ShiftOS.WinForms { public class AcquireCodepointsJobTask : JobTask { - public AcquireCodepointsJobTask(int amount) + public AcquireCodepointsJobTask(uint amount) { CodepointsRequired = SaveSystem.CurrentSave.Codepoints + amount; } - public long CodepointsRequired { get; private set; } + public ulong CodepointsRequired { get; private set; } public override bool IsComplete { diff --git a/ShiftOS.WinForms/ShiftnetSites/AppscapeMain.cs b/ShiftOS.WinForms/ShiftnetSites/AppscapeMain.cs index fa575f4..c7830d0 100644 --- a/ShiftOS.WinForms/ShiftnetSites/AppscapeMain.cs +++ b/ShiftOS.WinForms/ShiftnetSites/AppscapeMain.cs @@ -372,7 +372,7 @@ namespace ShiftOS.WinForms /// public class AppscapeEntryAttribute : RequiresUpgradeAttribute { - public AppscapeEntryAttribute(string name, string description, int downloadSize, long cost, string dependencies = "", string category = "Misc") : base(name.ToLower().Replace(' ', '_')) + public AppscapeEntryAttribute(string name, string description, int downloadSize, ulong cost, string dependencies = "", string category = "Misc") : base(name.ToLower().Replace(' ', '_')) { Name = name; Description = description; @@ -385,7 +385,7 @@ namespace ShiftOS.WinForms public string Name { get; private set; } public string Description { get; private set; } public string Category { get; private set; } - public long Cost { get; private set; } + public ulong Cost { get; private set; } public string DependencyString { get; private set; } public int DownloadSize { get; private set; } } diff --git a/ShiftOS.WinForms/WinformsDesktop.cs b/ShiftOS.WinForms/WinformsDesktop.cs index 85eab55..95e7c1a 100644 --- a/ShiftOS.WinForms/WinformsDesktop.cs +++ b/ShiftOS.WinForms/WinformsDesktop.cs @@ -192,7 +192,7 @@ namespace ShiftOS.WinForms SetupDesktop(); }; - long lastcp = 0; + ulong lastcp = 0; var storythread = new Thread(() => { diff --git a/ShiftOS_TheReturn/Commands.cs b/ShiftOS_TheReturn/Commands.cs index b97cd1d..ec89539 100644 --- a/ShiftOS_TheReturn/Commands.cs +++ b/ShiftOS_TheReturn/Commands.cs @@ -311,7 +311,7 @@ namespace ShiftOS.Engine if (args.ContainsKey("amount")) try { - long codepointsToAdd = Convert.ToInt64(args["amount"].ToString()); + ulong codepointsToAdd = Convert.ToUInt64(args["amount"].ToString()); SaveSystem.CurrentSave.Codepoints += codepointsToAdd; return true; } @@ -639,7 +639,7 @@ shiftorium.buy{{upgrade:""{upg.ID}""}}"); cat = args["cat"].ToString(); } - Dictionary upgrades = new Dictionary(); + Dictionary upgrades = new Dictionary(); int maxLength = 5; IEnumerable upglist = Shiftorium.GetAvailable(); diff --git a/ShiftOS_TheReturn/SaveSystem.cs b/ShiftOS_TheReturn/SaveSystem.cs index d1b92fd..395db85 100644 --- a/ShiftOS_TheReturn/SaveSystem.cs +++ b/ShiftOS_TheReturn/SaveSystem.cs @@ -480,7 +480,7 @@ namespace ShiftOS.Engine /// Deducts a set amount of Codepoints from the save file... and sends them to a place where they'll never be seen again. /// /// The amount of Codepoints to deduct. - public static void TransferCodepointsToVoid(long amount) + public static void TransferCodepointsToVoid(ulong amount) { if (amount < 0) throw new ArgumentOutOfRangeException("We see what you did there. Trying to pull Codepoints from the void? That won't work."); @@ -584,7 +584,7 @@ namespace ShiftOS.Engine /// /// The character name /// The amount of Codepoints. - public static void TransferCodepointsFrom(string who, long amount) + public static void TransferCodepointsFrom(string who, ulong amount) { if (amount < 0) throw new ArgumentOutOfRangeException("We see what you did there... You can't just give a fake character Codepoints like that. It's better if you transfer them to the void."); diff --git a/ShiftOS_TheReturn/Scripting.cs b/ShiftOS_TheReturn/Scripting.cs index 61c6676..5021f50 100644 --- a/ShiftOS_TheReturn/Scripting.cs +++ b/ShiftOS_TheReturn/Scripting.cs @@ -444,7 +444,7 @@ end"); /// Retrieves the user's Codepoints from the save file. /// /// The user's Codepoints. - public long getCodepoints() { return SaveSystem.CurrentSave.Codepoints; } + public ulong getCodepoints() { return SaveSystem.CurrentSave.Codepoints; } /// /// Run a command in the Terminal. @@ -462,7 +462,7 @@ end"); /// Adds the specified amount of Codepoints to the save flie. /// /// The codepoints to add. - public void addCodepoints(int cp) + public void addCodepoints(uint cp) { if (cp > 100 || cp <= 0) { diff --git a/ShiftOS_TheReturn/ServerManager.cs b/ShiftOS_TheReturn/ServerManager.cs index abb674d..1439c0d 100644 --- a/ShiftOS_TheReturn/ServerManager.cs +++ b/ShiftOS_TheReturn/ServerManager.cs @@ -246,7 +246,7 @@ Ping: {ServerManager.DigitalSocietyPing} ms var args = JsonConvert.DeserializeObject>(msg.Contents); if(args["username"] as string == SaveSystem.CurrentUser.Username) { - SaveSystem.CurrentSave.Codepoints += (long)args["amount"]; + SaveSystem.CurrentSave.Codepoints += (ulong)args["amount"]; Desktop.InvokeOnWorkerThread(new Action(() => { Infobox.Show($"MUD Control Centre", $"Someone bought an item in your shop, and they have paid {args["amount"]}, and as such, you have been granted these Codepoints."); diff --git a/ShiftOS_TheReturn/Shiftorium.cs b/ShiftOS_TheReturn/Shiftorium.cs index bd7105f..975939f 100644 --- a/ShiftOS_TheReturn/Shiftorium.cs +++ b/ShiftOS_TheReturn/Shiftorium.cs @@ -112,7 +112,7 @@ namespace ShiftOS.Engine /// The upgrade ID to buy /// The amount of Codepoints to deduct /// True if the upgrade was installed successfully, false if the user didn't have enough Codepoints or the upgrade wasn' found. - public static bool Buy(string id, long cost) + public static bool Buy(string id, ulong cost) { if (SaveSystem.CurrentSave.Codepoints >= cost) { @@ -365,7 +365,7 @@ namespace ShiftOS.Engine /// /// The upgrade ID to search /// The codepoint value. - public static long GetCPValue(string id) + public static ulong GetCPValue(string id) { foreach (var upg in GetDefaults()) { @@ -520,7 +520,7 @@ namespace ShiftOS.Engine { public string Name { get; set; } public string Description { get; set; } - public long Cost { get; set; } + public ulong Cost { get; set; } public string ID { get { return (this.Id != null ? this.Id : (Name.ToLower().Replace(" ", "_"))); } } public string Id { get; set; } public string Category { get; set; } @@ -536,7 +536,7 @@ namespace ShiftOS.Engine public class ShiftoriumUpgradeAttribute : RequiresUpgradeAttribute { - public ShiftoriumUpgradeAttribute(string name, long cost, string desc, string dependencies, string category) : base(name.ToLower().Replace(" ", "_")) + public ShiftoriumUpgradeAttribute(string name, ulong cost, string desc, string dependencies, string category) : base(name.ToLower().Replace(" ", "_")) { Name = name; Description = desc; @@ -547,7 +547,7 @@ namespace ShiftOS.Engine public string Name { get; private set; } public string Description { get; private set; } - public long Cost { get; private set; } + public ulong Cost { get; private set; } public string Dependencies { get; private set; } public string Category { get; private set; } } -- cgit v1.2.3 From 0451b5d15703987b6be1160917ea31d36f6ee125 Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 30 May 2017 16:34:31 -0400 Subject: Slight Shiftnet mods, new default skin. --- ShiftOS.WinForms/Applications/Chat.resx | 6 ++ ShiftOS.WinForms/Applications/Shiftnet.cs | 3 + ShiftOS.WinForms/ShiftOS.WinForms.csproj | 9 ++ .../ShiftnetSites/ShiftSoft.Designer.cs | 61 +++++++++++ ShiftOS.WinForms/ShiftnetSites/ShiftSoft.cs | 38 +++++++ ShiftOS.WinForms/ShiftnetSites/ShiftSoft.resx | 120 +++++++++++++++++++++ ShiftOS.WinForms/ShiftnetSites/ShiftSoft_Ping.cs | 51 +++++---- ShiftOS_TheReturn/Skinning.cs | 12 +-- 8 files changed, 271 insertions(+), 29 deletions(-) create mode 100644 ShiftOS.WinForms/ShiftnetSites/ShiftSoft.Designer.cs create mode 100644 ShiftOS.WinForms/ShiftnetSites/ShiftSoft.cs create mode 100644 ShiftOS.WinForms/ShiftnetSites/ShiftSoft.resx (limited to 'ShiftOS.WinForms/Applications') diff --git a/ShiftOS.WinForms/Applications/Chat.resx b/ShiftOS.WinForms/Applications/Chat.resx index a7b2b93..e4a35ad 100644 --- a/ShiftOS.WinForms/Applications/Chat.resx +++ b/ShiftOS.WinForms/Applications/Chat.resx @@ -123,6 +123,12 @@ 122, 17 + + 17, 17 + + + 122, 17 + diff --git a/ShiftOS.WinForms/Applications/Shiftnet.cs b/ShiftOS.WinForms/Applications/Shiftnet.cs index 7f5d3c1..22b53a0 100644 --- a/ShiftOS.WinForms/Applications/Shiftnet.cs +++ b/ShiftOS.WinForms/Applications/Shiftnet.cs @@ -80,6 +80,7 @@ namespace ShiftOS.WinForms.Applications txturl.Location = new Point(btnforward.Left + btnforward.Width + 2, 2); txturl.Width = flcontrols.Width - btnback.Width - 2 - btnforward.Width - 2 - (btngo.Width*2) - 2; btngo.Location = new Point(flcontrols.Width - btngo.Width - 2, 2); + flcontrols.BackColor = SkinEngine.LoadedSkin.TitleBackgroundColor; } public bool OnUnload() @@ -147,6 +148,7 @@ namespace ShiftOS.WinForms.Applications public void NavigateToUrl(string url) { + txturl.Text = url; foreach(var exe in Directory.GetFiles(Environment.CurrentDirectory)) { @@ -188,6 +190,7 @@ namespace ShiftOS.WinForms.Applications obj.OnUpgrade(); obj.OnSkinLoad(); obj.Setup(); + AppearanceManager.SetWindowTitle(this, attribute.Name + " - Shiftnet"); return; } } diff --git a/ShiftOS.WinForms/ShiftOS.WinForms.csproj b/ShiftOS.WinForms/ShiftOS.WinForms.csproj index 22bd1d2..65a512e 100644 --- a/ShiftOS.WinForms/ShiftOS.WinForms.csproj +++ b/ShiftOS.WinForms/ShiftOS.WinForms.csproj @@ -388,6 +388,12 @@ ShiftGames.cs + + UserControl + + + ShiftSoft.cs + UserControl @@ -589,6 +595,9 @@ ShiftGames.cs + + ShiftSoft.cs + ShiftSoft_Ping.cs diff --git a/ShiftOS.WinForms/ShiftnetSites/ShiftSoft.Designer.cs b/ShiftOS.WinForms/ShiftnetSites/ShiftSoft.Designer.cs new file mode 100644 index 0000000..a62b5a8 --- /dev/null +++ b/ShiftOS.WinForms/ShiftnetSites/ShiftSoft.Designer.cs @@ -0,0 +1,61 @@ +namespace ShiftOS.WinForms.ShiftnetSites +{ + partial class ShiftSoft + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.label1 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Franklin Gothic Heavy", 24.75F, System.Drawing.FontStyle.Italic); + this.label1.Location = new System.Drawing.Point(13, 17); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(152, 38); + this.label1.TabIndex = 0; + this.label1.Tag = "keepfont"; + this.label1.Text = "Shiftsoft"; + // + // ShiftSoft + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.label1); + this.Name = "ShiftSoft"; + this.Size = new System.Drawing.Size(523, 384); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + } +} diff --git a/ShiftOS.WinForms/ShiftnetSites/ShiftSoft.cs b/ShiftOS.WinForms/ShiftnetSites/ShiftSoft.cs new file mode 100644 index 0000000..18968cd --- /dev/null +++ b/ShiftOS.WinForms/ShiftnetSites/ShiftSoft.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using ShiftOS.Engine; + +namespace ShiftOS.WinForms.ShiftnetSites +{ + [ShiftnetSite("shiftnet/shiftsoft", "ShiftSoft", "What do you want to shift today?")] + [ShiftnetFundamental] + public partial class ShiftSoft : UserControl, IShiftnetSite + { + public ShiftSoft() + { + InitializeComponent(); + } + + public event Action GoBack; + public event Action GoToUrl; + + public void OnSkinLoad() + { + } + + public void OnUpgrade() + { + } + + public void Setup() + { + } + } +} diff --git a/ShiftOS.WinForms/ShiftnetSites/ShiftSoft.resx b/ShiftOS.WinForms/ShiftnetSites/ShiftSoft.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/ShiftOS.WinForms/ShiftnetSites/ShiftSoft.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ShiftOS.WinForms/ShiftnetSites/ShiftSoft_Ping.cs b/ShiftOS.WinForms/ShiftnetSites/ShiftSoft_Ping.cs index 1c64390..1593117 100644 --- a/ShiftOS.WinForms/ShiftnetSites/ShiftSoft_Ping.cs +++ b/ShiftOS.WinForms/ShiftnetSites/ShiftSoft_Ping.cs @@ -25,11 +25,6 @@ namespace ShiftOS.WinForms.ShiftnetSites public event Action GoBack; public event Action GoToUrl; - public void OnLoad() - { - SetupListing(); - } - public void OnSkinLoad() { ControlManager.SetupControls(this); @@ -38,6 +33,7 @@ namespace ShiftOS.WinForms.ShiftnetSites public void SetupListing() { + fllist.Controls.Clear(); foreach(var exec in Directory.GetFiles(Environment.CurrentDirectory)) { if(exec.ToLower().EndsWith(".exe") || exec.ToLower().EndsWith(".dll")) @@ -50,27 +46,36 @@ namespace ShiftOS.WinForms.ShiftnetSites { if (type.GetInterfaces().Contains(typeof(IShiftnetSite))) { - var attr = type.GetCustomAttributes(false).Where(x => x is ShiftnetSiteAttribute) as ShiftnetSiteAttribute; + var attr = type.GetCustomAttributes(false).FirstOrDefault(x => x is ShiftnetSiteAttribute) as ShiftnetSiteAttribute; if (attr != null) { - var lnk = new LinkLabel(); - lnk.LinkColor = SkinEngine.LoadedSkin.ControlTextColor; - lnk.Tag = "header3"; - lnk.Text = attr.Name; - var desc = new Label(); - desc.AutoSize = true; - lnk.AutoSize = true; - desc.MaximumSize = new Size(this.Width / 3, 0); - desc.Text = attr.Description; - lnk.Click += (o, a) => + if (attr.Url.StartsWith("shiftnet/")) { - GoToUrl?.Invoke(attr.Url); - }; - fllist.Controls.Add(lnk); - fllist.Controls.Add(desc); - ControlManager.SetupControls(lnk); - lnk.Show(); - desc.Show(); + var lnk = new LinkLabel(); + lnk.LinkColor = SkinEngine.LoadedSkin.ControlTextColor; + lnk.Text = attr.Name; + var desc = new Label(); + desc.AutoSize = true; + lnk.AutoSize = true; + desc.MaximumSize = new Size(this.Width / 3, 0); + desc.Text = attr.Description; + desc.Padding = new Padding + { + Bottom = 25, + Top = 0, + Left = 10, + Right = 10 + }; + lnk.Click += (o, a) => + { + GoToUrl?.Invoke(attr.Url); + }; + fllist.Controls.Add(lnk); + fllist.Controls.Add(desc); + ControlManager.SetupControls(lnk); + lnk.Show(); + desc.Show(); + } } } } diff --git a/ShiftOS_TheReturn/Skinning.cs b/ShiftOS_TheReturn/Skinning.cs index f5dd211..5bd4ab1 100644 --- a/ShiftOS_TheReturn/Skinning.cs +++ b/ShiftOS_TheReturn/Skinning.cs @@ -332,18 +332,18 @@ namespace ShiftOS.Engine public class Skin { //borrowing from the discourse theme for the default skin - private static readonly Color DefaultBackground = Color.FromArgb(0, 0x44, 0x00); + private static readonly Color DefaultBackground = Color.FromArgb(0x11, 0x11, 0x11); private static readonly Color DefaultForeground = Color.FromArgb(0xDD, 0xDD, 0xDD); private static readonly Color Accent1 = Color.FromArgb(0x66, 0x66, 0x66); private static readonly Color Accent2 = Color.FromArgb(0x80, 0, 0); - private static readonly Color DesktopBG = Color.FromArgb(0x22, 0x22, 0x22); + private static readonly Color DesktopBG = Color.FromArgb(0x00, 0x00, 0x00); private static readonly Font SysFont = new Font("Tahoma", 9F); private static readonly Font SysFont2 = new Font("Tahoma", 10F, FontStyle.Bold); - private static readonly Font Header1 = new Font("Helvetica", 20F, FontStyle.Bold); - private static readonly Font Header2 = new Font("Helvetica", 17.5F, FontStyle.Bold); - private static readonly Font Header3 = new Font("Tahoma", 15F, FontStyle.Bold); + private static readonly Font Header1 = new Font("Courier New", 20F, FontStyle.Bold); + private static readonly Font Header2 = new Font("Courier New", 17.5F, FontStyle.Bold); + private static readonly Font Header3 = new Font("Courier New", 15F, FontStyle.Bold); - private static readonly Color TitleBG = Color.FromArgb(0x11, 0x11, 0x11); + private static readonly Color TitleBG = Color.FromArgb(0x55, 0x11, 0x11); private static readonly Color TitleFG = Color.FromArgb(0xaa, 0xaa, 0xaa); //Todo: When making Shifter GUI we need to label all these with proper Shifter attributes to get 'em displaying in the right places. -- cgit v1.2.3 From 3dd402277bba874f24fab11865d257133c6f782c Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 31 May 2017 08:40:29 -0400 Subject: Fix sizing issue with notifications, and UP key in terminal --- ShiftOS.WinForms/Applications/Terminal.cs | 1 + ShiftOS.WinForms/WinformsDesktop.cs | 7 +++++++ 2 files changed, 8 insertions(+) (limited to 'ShiftOS.WinForms/Applications') diff --git a/ShiftOS.WinForms/Applications/Terminal.cs b/ShiftOS.WinForms/Applications/Terminal.cs index 080e8bb..a4b77ae 100644 --- a/ShiftOS.WinForms/Applications/Terminal.cs +++ b/ShiftOS.WinForms/Applications/Terminal.cs @@ -338,6 +338,7 @@ namespace ShiftOS.WinForms.Applications var tostring3 = txt.Lines[txt.Lines.Length - 1]; if (tostring3 == $"{SaveSystem.CurrentUser.Username}@{SaveSystem.CurrentSave.SystemName}:~$ ") Console.Write(TerminalBackend.LastCommand); + ConsoleEx.OnFlush?.Invoke(); a.SuppressKeyPress = true; } diff --git a/ShiftOS.WinForms/WinformsDesktop.cs b/ShiftOS.WinForms/WinformsDesktop.cs index 76c5050..643c02a 100644 --- a/ShiftOS.WinForms/WinformsDesktop.cs +++ b/ShiftOS.WinForms/WinformsDesktop.cs @@ -74,6 +74,10 @@ namespace ShiftOS.WinForms { lbnotemsg.Text = msg; lbnotetitle.Text = title; + int height = pnlnotificationbox.Height; + pnlnotificationbox.AutoSize = false; + pnlnotificationbox.Height = height; + pnlnotificationbox.Width = lbnotetitle.Width; var ctl = flnotifications.Controls.ToList().FirstOrDefault(x => x.Tag.ToString() == app); if (ctl == null) @@ -97,8 +101,11 @@ namespace ShiftOS.WinForms notekiller.Tick += (o, a) => { pnlnotificationbox.Hide(); + pnlnotificationbox.AutoSize = true; }; Engine.AudioManager.PlayStream(Properties.Resources.infobox); + + pnlnotificationbox.Show(); pnlnotificationbox.BringToFront(); notekiller.Start(); -- cgit v1.2.3 From 03cf891c53cc648bb1ed4ea3d78755c1a440a713 Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 1 Jun 2017 17:09:22 -0400 Subject: Icon Manager and various icon bugfixes. --- .../Applications/IconManager.Designer.cs | 163 ++++++++++++++ ShiftOS.WinForms/Applications/IconManager.cs | 244 +++++++++++++++++++++ ShiftOS.WinForms/Applications/IconManager.resx | 120 ++++++++++ ShiftOS.WinForms/Resources/Shiftorium.txt | 14 ++ ShiftOS.WinForms/ShiftOS.WinForms.csproj | 18 ++ .../StatusIcons/TestStatus.Designer.cs | 60 +++++ ShiftOS.WinForms/StatusIcons/TestStatus.cs | 26 +++ ShiftOS.WinForms/StatusIcons/TestStatus.resx | 120 ++++++++++ ShiftOS_TheReturn/Skinning.cs | 10 +- 9 files changed, 774 insertions(+), 1 deletion(-) create mode 100644 ShiftOS.WinForms/Applications/IconManager.Designer.cs create mode 100644 ShiftOS.WinForms/Applications/IconManager.cs create mode 100644 ShiftOS.WinForms/Applications/IconManager.resx create mode 100644 ShiftOS.WinForms/StatusIcons/TestStatus.Designer.cs create mode 100644 ShiftOS.WinForms/StatusIcons/TestStatus.cs create mode 100644 ShiftOS.WinForms/StatusIcons/TestStatus.resx (limited to 'ShiftOS.WinForms/Applications') diff --git a/ShiftOS.WinForms/Applications/IconManager.Designer.cs b/ShiftOS.WinForms/Applications/IconManager.Designer.cs new file mode 100644 index 0000000..25bcee4 --- /dev/null +++ b/ShiftOS.WinForms/Applications/IconManager.Designer.cs @@ -0,0 +1,163 @@ +namespace ShiftOS.WinForms.Applications +{ + partial class IconManager + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); + this.btnclose = new System.Windows.Forms.Button(); + this.btnreset = new System.Windows.Forms.Button(); + this.btnapply = new System.Windows.Forms.Button(); + this.flbody = new System.Windows.Forms.FlowLayoutPanel(); + this.lbcurrentpage = new System.Windows.Forms.Label(); + this.btnprev = new System.Windows.Forms.Button(); + this.btnnext = new System.Windows.Forms.Button(); + this.flowLayoutPanel1.SuspendLayout(); + this.SuspendLayout(); + // + // flowLayoutPanel1 + // + this.flowLayoutPanel1.AutoSize = true; + this.flowLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.flowLayoutPanel1.Controls.Add(this.btnclose); + this.flowLayoutPanel1.Controls.Add(this.btnreset); + this.flowLayoutPanel1.Controls.Add(this.btnapply); + this.flowLayoutPanel1.Controls.Add(this.lbcurrentpage); + this.flowLayoutPanel1.Controls.Add(this.btnprev); + this.flowLayoutPanel1.Controls.Add(this.btnnext); + this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 416); + this.flowLayoutPanel1.Name = "flowLayoutPanel1"; + this.flowLayoutPanel1.Size = new System.Drawing.Size(393, 29); + this.flowLayoutPanel1.TabIndex = 0; + // + // btnclose + // + this.btnclose.AutoSize = true; + this.btnclose.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.btnclose.Location = new System.Drawing.Point(3, 3); + this.btnclose.Name = "btnclose"; + this.btnclose.Size = new System.Drawing.Size(43, 23); + this.btnclose.TabIndex = 0; + this.btnclose.Text = "Close"; + this.btnclose.UseVisualStyleBackColor = true; + this.btnclose.Click += new System.EventHandler(this.btnclose_Click); + // + // btnreset + // + this.btnreset.AutoSize = true; + this.btnreset.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.btnreset.Location = new System.Drawing.Point(52, 3); + this.btnreset.Name = "btnreset"; + this.btnreset.Size = new System.Drawing.Size(45, 23); + this.btnreset.TabIndex = 1; + this.btnreset.Text = "Reset"; + this.btnreset.UseVisualStyleBackColor = true; + this.btnreset.Click += new System.EventHandler(this.btnreset_Click); + // + // btnapply + // + this.btnapply.AutoSize = true; + this.btnapply.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.btnapply.Location = new System.Drawing.Point(103, 3); + this.btnapply.Name = "btnapply"; + this.btnapply.Size = new System.Drawing.Size(43, 23); + this.btnapply.TabIndex = 2; + this.btnapply.Text = "Apply"; + this.btnapply.UseVisualStyleBackColor = true; + this.btnapply.Click += new System.EventHandler(this.btnapply_Click); + // + // flbody + // + this.flbody.Dock = System.Windows.Forms.DockStyle.Fill; + this.flbody.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; + this.flbody.Location = new System.Drawing.Point(0, 0); + this.flbody.Name = "flbody"; + this.flbody.Size = new System.Drawing.Size(393, 416); + this.flbody.TabIndex = 1; + this.flbody.WrapContents = false; + // + // lbcurrentpage + // + this.lbcurrentpage.AutoSize = true; + this.lbcurrentpage.Location = new System.Drawing.Point(152, 0); + this.lbcurrentpage.Name = "lbcurrentpage"; + this.lbcurrentpage.Size = new System.Drawing.Size(71, 13); + this.lbcurrentpage.TabIndex = 3; + this.lbcurrentpage.Text = "Current page:"; + // + // btnprev + // + this.btnprev.AutoSize = true; + this.btnprev.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.btnprev.Location = new System.Drawing.Point(229, 3); + this.btnprev.Name = "btnprev"; + this.btnprev.Size = new System.Drawing.Size(51, 23); + this.btnprev.TabIndex = 4; + this.btnprev.Text = " < Prev"; + this.btnprev.UseVisualStyleBackColor = true; + this.btnprev.Click += new System.EventHandler(this.btnprev_Click); + // + // btnnext + // + this.btnnext.AutoSize = true; + this.btnnext.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.btnnext.Location = new System.Drawing.Point(286, 3); + this.btnnext.Name = "btnnext"; + this.btnnext.Size = new System.Drawing.Size(48, 23); + this.btnnext.TabIndex = 5; + this.btnnext.Text = "Next >"; + this.btnnext.UseVisualStyleBackColor = true; + this.btnnext.Click += new System.EventHandler(this.btnnext_Click); + // + // IconManager + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.flbody); + this.Controls.Add(this.flowLayoutPanel1); + this.Name = "IconManager"; + this.Size = new System.Drawing.Size(393, 445); + this.flowLayoutPanel1.ResumeLayout(false); + this.flowLayoutPanel1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; + private System.Windows.Forms.Button btnclose; + private System.Windows.Forms.Button btnreset; + private System.Windows.Forms.Button btnapply; + private System.Windows.Forms.FlowLayoutPanel flbody; + private System.Windows.Forms.Label lbcurrentpage; + private System.Windows.Forms.Button btnprev; + private System.Windows.Forms.Button btnnext; + } +} diff --git a/ShiftOS.WinForms/Applications/IconManager.cs b/ShiftOS.WinForms/Applications/IconManager.cs new file mode 100644 index 0000000..0c6e119 --- /dev/null +++ b/ShiftOS.WinForms/Applications/IconManager.cs @@ -0,0 +1,244 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using ShiftOS.Engine; +using System.Reflection; +using ShiftOS.WinForms.Tools; +using Newtonsoft.Json; + +namespace ShiftOS.WinForms.Applications +{ + [RequiresUpgrade("icon_manager")] + [Launcher("Icon Manager", true, "al_icon_manager", "Customization")] + [DefaultTitle("Icon Manager")] + [DefaultIcon("iconIconManager")] + public partial class IconManager : UserControl, IShiftOSWindow + { + public IconManager() + { + InitializeComponent(); + } + + public void OnLoad() + { + LoadIconsFromEngine(); + SetupUI(); + } + + public void OnSkinLoad() + { + LoadIconsFromEngine(); + SetupUI(); + } + + public bool OnUnload() + { + Icons = null; + return true; + } + + private Dictionary Icons = null; + + private const int pageSize = 10; + private int currentPage = 0; + private int pageCount = 0; + + public Image GetIcon(string id) + { + if (!Icons.ContainsKey(id)) + Icons.Add(id, null); + + if (Icons[id] == null) + { + var img = SkinEngine.GetDefaultIcon(id); + using (var mstr = new System.IO.MemoryStream()) + { + img.Save(mstr, System.Drawing.Imaging.ImageFormat.Png); + Icons[id] = mstr.ToArray(); + } + return img; + } + else + { + using (var sr = new System.IO.MemoryStream(Icons[id])) + { + return Image.FromStream(sr); + } + } + } + + public void SetIcon(string key, byte[] raw) + { + if (!Icons.ContainsKey(key)) + Icons.Add(key, raw); + Icons[key] = raw; + } + + public void LoadIconsFromEngine() + { + //We have to serialize the engine icon list to JSON to break references with the data. + string json = JsonConvert.SerializeObject(SkinEngine.LoadedSkin.AppIcons); + //And deserialize to the local instance...essentially making a clone. + Icons = JsonConvert.DeserializeObject>(json); + } + + public void SetupUI() + { + flbody.Controls.Clear(); //Clear the icon list. + + List types = new List(); + + foreach(var exe in System.IO.Directory.GetFiles(Environment.CurrentDirectory)) + { + if(exe.ToLower().EndsWith(".exe") || exe.ToLower().EndsWith(".dll")) + { + try + { + var asm = Assembly.LoadFile(exe); + + var typeList = asm.GetTypes().Where(x => x.GetCustomAttributes(false).FirstOrDefault(y => y is DefaultIconAttribute) != null); + types.AddRange(typeList); + + } + catch { } + } + } + + pageCount = types.ToArray().GetPageCount(pageSize); + + foreach (var type in types.ToArray().GetItemsOnPage(currentPage, pageSize)) + { + if (Shiftorium.UpgradeAttributesUnlocked(type)) + { + var pnl = new Panel(); + pnl.Height = 30; + pnl.Width = flbody.Width - 15; + flbody.Controls.Add(pnl); + pnl.Show(); + var pic = new PictureBox(); + pic.SizeMode = PictureBoxSizeMode.StretchImage; + pic.Size = new Size(24, 24); + pic.Image = GetIcon(type.Name); + pnl.Controls.Add(pic); + pic.Left = 5; + pic.Top = (pnl.Height - pic.Height) / 2; + pic.Show(); + var lbl = new Label(); + lbl.Tag = "header3"; + lbl.AutoSize = true; + lbl.Text = NameChangerBackend.GetNameRaw(type); + ControlManager.SetupControl(lbl); + pnl.Controls.Add(lbl); + lbl.CenterParent(); + lbl.Show(); + var btn = new Button(); + btn.Text = "Change..."; + btn.AutoSize = true; + btn.AutoSizeMode = AutoSizeMode.GrowAndShrink; + pnl.Controls.Add(btn); + btn.Left = (pnl.Width - btn.Width) - 5; + btn.Top = (pnl.Height - btn.Height) / 2; + btn.Click += (o, a) => + { + var gfp = new GraphicPicker(pic.Image, lbl.Text + " icon", ImageLayout.Stretch, (raw, img, layout) => + { + pic.Image = img; + SetIcon(type.Name, raw); + }); + AppearanceManager.SetupDialog(gfp); + }; + btn.Show(); + ControlManager.SetupControls(pnl); + } + } + + btnnext.Visible = (currentPage < pageCount - 1); + btnprev.Visible = (currentPage > 0); + + lbcurrentpage.Text = "Page " + (currentPage + 1).ToString() + " of " + pageCount.ToString(); + } + + public void OnUpgrade() + { + LoadIconsFromEngine(); + SetupUI(); + } + + private void btnprev_Click(object sender, EventArgs e) + { + currentPage--; + SetupUI(); + } + + public void ResetToDefaults() + { + currentPage = 0; + foreach (var key in Icons.Keys) + { + var img = SkinEngine.GetDefaultIcon(key); + using(var ms = new System.IO.MemoryStream()) + { + img.Save(ms, System.Drawing.Imaging.ImageFormat.Png); + Icons[key] = ms.ToArray(); + } + } + SetupUI(); + } + + private void btnnext_Click(object sender, EventArgs e) + { + currentPage++; + SetupUI(); + } + + private void btnclose_Click(object sender, EventArgs e) + { + AppearanceManager.Close(this); + } + + private void btnreset_Click(object sender, EventArgs e) + { + ResetToDefaults(); + } + + private void btnapply_Click(object sender, EventArgs e) + { + SkinEngine.LoadedSkin.AppIcons = Icons; + SkinEngine.SaveSkin(); + SkinEngine.LoadSkin(); + Infobox.Show("Icons applied!", "The new icons have been applied to ShiftOS successfully!"); + } + } + + public static class PaginationExtensions + { + public static int GetPageCount(this IEnumerable collection, int pageSize) + { + return (collection.Count() + pageSize - 1) / pageSize; + } + + public static T[] GetItemsOnPage(this T[] collection, int page, int pageSize) + { + List obj = new List(); + + for (int i = pageSize * page; i <= pageSize + (pageSize * page) && i < collection.Count(); i++) + { + try + { + obj.Add(collection[i]); + } + catch + { + } + } + return obj.ToArray(); + } + } + +} diff --git a/ShiftOS.WinForms/Applications/IconManager.resx b/ShiftOS.WinForms/Applications/IconManager.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/ShiftOS.WinForms/Applications/IconManager.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ShiftOS.WinForms/Resources/Shiftorium.txt b/ShiftOS.WinForms/Resources/Shiftorium.txt index 0eac58e..1a6d8c2 100644 --- a/ShiftOS.WinForms/Resources/Shiftorium.txt +++ b/ShiftOS.WinForms/Resources/Shiftorium.txt @@ -7,6 +7,20 @@ Dependencies: "desktop", Category: "Enhancements", }, + { + Name: "Icon Manager", + Cost: 450, + Description: "This tool allows you to add and edit application icons within ShiftOS for the small prive of 450 Codepoints!", + Dependencies: "skinning", + Category: "Application" + }, + { + Name: "AL Icon Manager", + Costs: 150, + Description: "Add an App Launcher entry for the Icon Manager.", + Dependencies: "icon_manager;app_launcher", + Category: "Customization" + }, { Name: "Shift Progress Bar", Cost: 150, diff --git a/ShiftOS.WinForms/ShiftOS.WinForms.csproj b/ShiftOS.WinForms/ShiftOS.WinForms.csproj index fd875e9..0a59c00 100644 --- a/ShiftOS.WinForms/ShiftOS.WinForms.csproj +++ b/ShiftOS.WinForms/ShiftOS.WinForms.csproj @@ -70,6 +70,12 @@ About.cs + + UserControl + + + IconManager.cs + UserControl @@ -409,6 +415,12 @@ ShiftnetStatus.cs + + UserControl + + + TestStatus.cs + UserControl @@ -461,6 +473,9 @@ About.cs + + IconManager.cs + TriPresent.cs @@ -616,6 +631,9 @@ ShiftnetStatus.cs + + TestStatus.cs + Volume.cs diff --git a/ShiftOS.WinForms/StatusIcons/TestStatus.Designer.cs b/ShiftOS.WinForms/StatusIcons/TestStatus.Designer.cs new file mode 100644 index 0000000..3643d2d --- /dev/null +++ b/ShiftOS.WinForms/StatusIcons/TestStatus.Designer.cs @@ -0,0 +1,60 @@ +namespace ShiftOS.WinForms.StatusIcons +{ + partial class TestStatus + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.label1 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // label1 + // + this.label1.Dock = System.Windows.Forms.DockStyle.Fill; + this.label1.Location = new System.Drawing.Point(0, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(264, 52); + this.label1.TabIndex = 0; + this.label1.Tag = "header1"; + this.label1.Text = "This is a test."; + this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // TestStatus + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.label1); + this.Name = "TestStatus"; + this.Size = new System.Drawing.Size(264, 52); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Label label1; + } +} diff --git a/ShiftOS.WinForms/StatusIcons/TestStatus.cs b/ShiftOS.WinForms/StatusIcons/TestStatus.cs new file mode 100644 index 0000000..90baafc --- /dev/null +++ b/ShiftOS.WinForms/StatusIcons/TestStatus.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using ShiftOS.Engine; + +namespace ShiftOS.WinForms.StatusIcons +{ + [DefaultIcon("iconShiftorium")] + public partial class TestStatus : UserControl, IStatusIcon + { + public TestStatus() + { + InitializeComponent(); + } + + public void Setup() + { + } + } +} diff --git a/ShiftOS.WinForms/StatusIcons/TestStatus.resx b/ShiftOS.WinForms/StatusIcons/TestStatus.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/ShiftOS.WinForms/StatusIcons/TestStatus.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ShiftOS_TheReturn/Skinning.cs b/ShiftOS_TheReturn/Skinning.cs index 5bd4ab1..4a073f4 100644 --- a/ShiftOS_TheReturn/Skinning.cs +++ b/ShiftOS_TheReturn/Skinning.cs @@ -287,7 +287,15 @@ namespace ShiftOS.Engine LoadedSkin.AppIcons.Add(id, null); if (LoadedSkin.AppIcons[id] == null) - return GetDefaultIcon(id); + { + var img = GetDefaultIcon(id); + using (var mstr = new MemoryStream()) + { + img.Save(mstr, System.Drawing.Imaging.ImageFormat.Png); + LoadedSkin.AppIcons[id] = mstr.ToArray(); + } + return img; + } else { using (var sr = new MemoryStream(LoadedSkin.AppIcons[id])) -- cgit v1.2.3 From d001b613fba71bcee04163492940f17a0027daa7 Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 1 Jun 2017 17:45:59 -0400 Subject: Fix Graphic Picker UI. --- .../Applications/GraphicPicker.Designer.cs | 45 ++++++++++++++-------- ShiftOS.WinForms/Applications/GraphicPicker.cs | 9 +++++ 2 files changed, 37 insertions(+), 17 deletions(-) (limited to 'ShiftOS.WinForms/Applications') diff --git a/ShiftOS.WinForms/Applications/GraphicPicker.Designer.cs b/ShiftOS.WinForms/Applications/GraphicPicker.Designer.cs index 988acbd..889c8aa 100644 --- a/ShiftOS.WinForms/Applications/GraphicPicker.Designer.cs +++ b/ShiftOS.WinForms/Applications/GraphicPicker.Designer.cs @@ -86,12 +86,12 @@ namespace ShiftOS.WinForms.Applications this.pgcontents.Dock = System.Windows.Forms.DockStyle.Fill; this.pgcontents.Location = new System.Drawing.Point(0, 0); this.pgcontents.Name = "pgcontents"; - this.pgcontents.Size = new System.Drawing.Size(390, 383); + this.pgcontents.Size = new System.Drawing.Size(487, 383); this.pgcontents.TabIndex = 20; // // btncancel // - this.btncancel.Anchor = System.Windows.Forms.AnchorStyles.Bottom; + this.btncancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.btncancel.Location = new System.Drawing.Point(21, 335); this.btncancel.Name = "btncancel"; this.btncancel.Size = new System.Drawing.Size(109, 32); @@ -102,10 +102,11 @@ namespace ShiftOS.WinForms.Applications // // btnreset // - this.btnreset.Anchor = System.Windows.Forms.AnchorStyles.Bottom; + this.btnreset.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); this.btnreset.Location = new System.Drawing.Point(136, 335); this.btnreset.Name = "btnreset"; - this.btnreset.Size = new System.Drawing.Size(109, 32); + this.btnreset.Size = new System.Drawing.Size(206, 32); this.btnreset.TabIndex = 22; this.btnreset.Text = "Reset"; this.btnreset.UseVisualStyleBackColor = true; @@ -113,8 +114,8 @@ namespace ShiftOS.WinForms.Applications // // btnapply // - this.btnapply.Anchor = System.Windows.Forms.AnchorStyles.Bottom; - this.btnapply.Location = new System.Drawing.Point(251, 335); + this.btnapply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.btnapply.Location = new System.Drawing.Point(348, 335); this.btnapply.Name = "btnapply"; this.btnapply.Size = new System.Drawing.Size(118, 32); this.btnapply.TabIndex = 21; @@ -124,19 +125,21 @@ namespace ShiftOS.WinForms.Applications // // Label2 // - this.Label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.Label2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); this.Label2.Font = new System.Drawing.Font("Arial", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.Label2.Location = new System.Drawing.Point(125, 260); this.Label2.Name = "Label2"; - this.Label2.Size = new System.Drawing.Size(163, 28); + this.Label2.Size = new System.Drawing.Size(260, 28); this.Label2.TabIndex = 12; + this.Label2.Tag = "header3"; this.Label2.Text = "Idle"; this.Label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // btnidlebrowse // - this.btnidlebrowse.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.btnidlebrowse.Location = new System.Drawing.Point(295, 260); + this.btnidlebrowse.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.btnidlebrowse.Location = new System.Drawing.Point(392, 260); this.btnidlebrowse.Name = "btnidlebrowse"; this.btnidlebrowse.Size = new System.Drawing.Size(73, 60); this.btnidlebrowse.TabIndex = 10; @@ -146,14 +149,15 @@ namespace ShiftOS.WinForms.Applications // // txtidlefile // - this.txtidlefile.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.txtidlefile.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); this.txtidlefile.BackColor = System.Drawing.Color.White; this.txtidlefile.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.txtidlefile.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.txtidlefile.Location = new System.Drawing.Point(125, 291); this.txtidlefile.Multiline = true; this.txtidlefile.Name = "txtidlefile"; - this.txtidlefile.Size = new System.Drawing.Size(163, 29); + this.txtidlefile.Size = new System.Drawing.Size(260, 29); this.txtidlefile.TabIndex = 9; this.txtidlefile.Text = "None"; this.txtidlefile.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; @@ -172,9 +176,10 @@ namespace ShiftOS.WinForms.Applications // // btnzoom // + this.btnzoom.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.btnzoom.FlatAppearance.BorderColor = System.Drawing.Color.Black; this.btnzoom.FlatAppearance.BorderSize = 0; - this.btnzoom.Location = new System.Drawing.Point(286, 144); + this.btnzoom.Location = new System.Drawing.Point(383, 144); this.btnzoom.Name = "btnzoom"; this.btnzoom.Size = new System.Drawing.Size(82, 65); this.btnzoom.TabIndex = 7; @@ -184,9 +189,10 @@ namespace ShiftOS.WinForms.Applications // // btnstretch // + this.btnstretch.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.btnstretch.FlatAppearance.BorderColor = System.Drawing.Color.Black; this.btnstretch.FlatAppearance.BorderSize = 0; - this.btnstretch.Location = new System.Drawing.Point(197, 144); + this.btnstretch.Location = new System.Drawing.Point(294, 144); this.btnstretch.Name = "btnstretch"; this.btnstretch.Size = new System.Drawing.Size(82, 65); this.btnstretch.TabIndex = 6; @@ -228,6 +234,9 @@ namespace ShiftOS.WinForms.Applications // // picgraphic // + this.picgraphic.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); this.picgraphic.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; this.picgraphic.Location = new System.Drawing.Point(0, 0); this.picgraphic.Name = "picgraphic"; @@ -237,11 +246,14 @@ namespace ShiftOS.WinForms.Applications // // lblobjecttoskin // + this.lblobjecttoskin.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); this.lblobjecttoskin.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.lblobjecttoskin.Location = new System.Drawing.Point(19, 9); this.lblobjecttoskin.Name = "lblobjecttoskin"; - this.lblobjecttoskin.Size = new System.Drawing.Size(350, 23); + this.lblobjecttoskin.Size = new System.Drawing.Size(447, 23); this.lblobjecttoskin.TabIndex = 2; + this.lblobjecttoskin.Tag = "header1"; this.lblobjecttoskin.Text = "Close Button"; this.lblobjecttoskin.TextAlign = System.Drawing.ContentAlignment.TopCenter; // @@ -249,10 +261,9 @@ namespace ShiftOS.WinForms.Applications // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(390, 383); this.Controls.Add(this.pgcontents); this.Name = "GraphicPicker"; - this.Text = "{GRAPHIC_PICKER_NAME}"; + this.Size = new System.Drawing.Size(487, 383); this.Load += new System.EventHandler(this.Graphic_Picker_Load); this.pgcontents.ResumeLayout(false); this.pgcontents.PerformLayout(); diff --git a/ShiftOS.WinForms/Applications/GraphicPicker.cs b/ShiftOS.WinForms/Applications/GraphicPicker.cs index 85f95bd..f299f0d 100644 --- a/ShiftOS.WinForms/Applications/GraphicPicker.cs +++ b/ShiftOS.WinForms/Applications/GraphicPicker.cs @@ -45,6 +45,12 @@ namespace ShiftOS.WinForms.Applications { InitializeComponent(); SelectedLayout = layout; + Image = old; + using(var ms = new System.IO.MemoryStream()) + { + Image.Save(ms, System.Drawing.Imaging.ImageFormat.Png); + ImageAsBinary = ms.ToArray(); + } Callback = cb; lblobjecttoskin.Text = name; @@ -123,10 +129,12 @@ namespace ShiftOS.WinForms.Applications public void OnLoad() { + Setup(); } public void OnSkinLoad() { + Setup(); } public bool OnUnload() @@ -136,6 +144,7 @@ namespace ShiftOS.WinForms.Applications public void OnUpgrade() { + Setup(); } } } -- cgit v1.2.3 From 17f3f6f68567b0151474af86d6ba265b35029b8e Mon Sep 17 00:00:00 2001 From: RogueAI42 Date: Sat, 3 Jun 2017 00:43:20 +1000 Subject: Fixed Pong? there are some sound crashes but Michael told me to just make the PR and let him fix the audio backend so that's what I'm doing. --- ShiftOS.WinForms/Applications/Pong.Designer.cs | 3 - ShiftOS.WinForms/Applications/Pong.cs | 406 +++++++++---------------- ShiftOS.WinForms/Applications/Pong.resx | 3 + 3 files changed, 140 insertions(+), 272 deletions(-) (limited to 'ShiftOS.WinForms/Applications') diff --git a/ShiftOS.WinForms/Applications/Pong.Designer.cs b/ShiftOS.WinForms/Applications/Pong.Designer.cs index 0254e94..c5ea375 100644 --- a/ShiftOS.WinForms/Applications/Pong.Designer.cs +++ b/ShiftOS.WinForms/Applications/Pong.Designer.cs @@ -182,7 +182,6 @@ namespace ShiftOS.WinForms.Applications this.pgcontents.Name = "pgcontents"; this.pgcontents.Size = new System.Drawing.Size(912, 504); this.pgcontents.TabIndex = 20; - this.pgcontents.Paint += new System.Windows.Forms.PaintEventHandler(this.pgcontents_Paint); this.pgcontents.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pongMain_MouseMove); // // pnlmultiplayerhandshake @@ -250,7 +249,6 @@ namespace ShiftOS.WinForms.Applications this.Label6.TabIndex = 15; this.Label6.Text = "{PONG_DESC}"; this.Label6.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - this.Label6.Click += new System.EventHandler(this.Label6_Click); // // btnstartgame // @@ -273,7 +271,6 @@ namespace ShiftOS.WinForms.Applications this.Label8.Size = new System.Drawing.Size(280, 31); this.Label8.TabIndex = 14; this.Label8.Text = "{PONG_WELCOME}"; - this.Label8.Click += new System.EventHandler(this.Label8_Click); // // pnlhighscore // diff --git a/ShiftOS.WinForms/Applications/Pong.cs b/ShiftOS.WinForms/Applications/Pong.cs index 6d81c64..87f0306 100644 --- a/ShiftOS.WinForms/Applications/Pong.cs +++ b/ShiftOS.WinForms/Applications/Pong.cs @@ -60,11 +60,60 @@ namespace ShiftOS.WinForms.Applications int levelyspeed = 3; ulong beatairewardtotal; ulong beataireward = 1; - ulong[] levelrewards = new ulong[50]; + readonly uint[] levelrewards = { + 0, + 20, + 60, + 140, + 290, + 400, + 600, + 900, + 1200, + 1600, + 2000, + 2500, + 3000, + 4000, + 5000, + 6000, + 8000, + 10000, + 13000, + 16000, + 20000, + 25000, + 32000, + 40000, + 50000, + 60000, + 75000, + 90000, + 110000, + 140000, + 180000, + 220000, + 270000, + 320000, + 400000, + 500000, + 640000, + 800000, + 1000000, + 1500000, + 2000000}; ulong totalreward; int countdown = 3; + int rwdmultiplier; + Thread soundThread; - bool aiShouldIsbeEnabled = true; + bool aiShouldIsbeEnabled = true; // who named this variable? and were they having a stroke? + + private void playsound(System.IO.Stream stream) + { + soundThread = new Thread((a) => ShiftOS.Engine.AudioManager.PlayStream((System.IO.Stream)a)); + soundThread.Start(stream); + } public Pong() { @@ -73,11 +122,9 @@ namespace ShiftOS.WinForms.Applications private void Pong_Load(object sender, EventArgs e) { - setuplevelrewards(); + rwdmultiplier = ShiftoriumFrontend.UpgradeInstalled("pong_upgrade") ? 2 : 1; } - - // Move the paddle according to the mouse position. private void pongMain_MouseMove(object sender, MouseEventArgs e) { @@ -133,9 +180,7 @@ namespace ShiftOS.WinForms.Applications { if (this.Left < Screen.PrimaryScreen.Bounds.Width) { - ball.BackColor = SkinEngine.LoadedSkin.ControlTextColor; - paddleComputer.BackColor = SkinEngine.LoadedSkin.ControlTextColor; - paddleHuman.BackColor = SkinEngine.LoadedSkin.ControlTextColor; + ball.BackColor = paddleComputer.BackColor = paddleHuman.BackColor = SkinEngine.LoadedSkin.ControlTextColor; //Check if paddle upgrade has been bought and change paddles accordingly //if (ShiftoriumFrontend.UpgradeInstalled("pong_increased_paddle_size")) @@ -146,7 +191,7 @@ namespace ShiftOS.WinForms.Applications //I don't know the point of this but I'm fucking 86ing it. - Michael //Set the computer player to move according to the ball's position. - if (IsMultiplayerSession == true) + if (IsMultiplayerSession) { //If we're multiplayer, then we want to set the computer Y to the opponent's Y. //If we're the leader, we set the AI paddle, else we set the player paddle. @@ -160,83 +205,63 @@ namespace ShiftOS.WinForms.Applications if (aiShouldIsbeEnabled) if (ball.Location.X > (this.Width - (this.Width / 3)) - xVel * 10 && xVel > 0) { - if (ball.Location.Y > paddleComputer.Location.Y + 50) - { - paddleComputer.Location = new Point(paddleComputer.Location.X, paddleComputer.Location.Y + computerspeed); - } - if (ball.Location.Y < paddleComputer.Location.Y + 50) - { - paddleComputer.Location = new Point(paddleComputer.Location.X, paddleComputer.Location.Y - computerspeed); - } + if (ball.Top > paddleComputer.Top + 50) + paddleComputer.Top += computerspeed; + else + paddleComputer.Top -= computerspeed; casualposition = rand.Next(-150, 201); } else { //used to be me.location.y - except it's fucking C# and this comment is misleading as fuck. OH WAIT! I didn't write it! And none of the current devs did either! - Michael - if (paddleComputer.Location.Y > this.Size.Height / 2 - paddleComputer.Height + casualposition) - { - paddleComputer.Location = new Point(paddleComputer.Location.X, paddleComputer.Location.Y - computerspeed); - } - //Rylan is hot. Used to be //used to be me.location.y - if (paddleComputer.Location.Y < this.Size.Height / 2 - paddleComputer.Height + casualposition) - { - paddleComputer.Location = new Point(paddleComputer.Location.X, paddleComputer.Location.Y + computerspeed); - } + if (paddleComputer.Top > this.Height / 2 - paddleComputer.Height + casualposition) + paddleComputer.Top -= computerspeed; + else + paddleComputer.Top += computerspeed; } } //Set Xvel and Yvel speeds from decimal if (xVel > 0) xVel = (int)Math.Round(xveldec); - if (xVel < 0) + else xVel = (int)-Math.Round(xveldec); if (yVel > 0) yVel = (int)Math.Round(yveldec); - if (yVel < 0) + else yVel = (int)-Math.Round(yveldec); - bool BallPhysics = true; - - if (IsMultiplayerSession) + if (IsMultiplayerSession && !IsLeader) { - //Logic for moving the ball in Multiplayer. - if (IsLeader) - { - ball.Location = new Point(ball.Location.X + xVel, ball.Location.Y + yVel); - } - else - { - //Move it to the leader's ball position. - ball.Location = new Point(LeaderX, LeaderY); - BallPhysics = false; - } + // Move it to the leader's ball position. + ball.Location = new Point(LeaderX, LeaderY); } else - {// Move the game ball. - ball.Location = new Point(ball.Location.X + xVel, ball.Location.Y + yVel); - } - if (BallPhysics) { + var newRect = new Rectangle(ball.Location, ball.Size); // copy ball's Bounds + newRect.X += xVel; + newRect.Y += yVel; + // Check for top wall. - if (ball.Location.Y < 0) + if (newRect.Y < 0) { - ball.Location = new Point(ball.Location.X, 0); + newRect.Y = 0; yVel = -yVel; - ShiftOS.Engine.AudioManager.PlayStream(Properties.Resources.typesound); + playsound(Properties.Resources.typesound); } // Check for bottom wall. - if (ball.Location.Y > pgcontents.Height - ball.Height) + if (newRect.Y > pgcontents.Height - ball.Height) { - ball.Location = new Point(ball.Location.X, pgcontents.Height - ball.Size.Height); + newRect.Y = pgcontents.Height - ball.Height; yVel = -yVel; - ShiftOS.Engine.AudioManager.PlayStream(Properties.Resources.typesound); + playsound(Properties.Resources.typesound); } // Check for player paddle. - if (ball.Bounds.IntersectsWith(paddleHuman.Bounds)) + if (newRect.IntersectsWith(paddleHuman.Bounds)) { - ball.Location = new Point(paddleHuman.Location.X + ball.Size.Width + 1, ball.Location.Y); + newRect.X = paddleHuman.Left + ball.Width + 1; //randomly increase x or y speed of ball switch (rand.Next(1, 3)) { @@ -246,23 +271,24 @@ namespace ShiftOS.WinForms.Applications case 2: if (yveldec > 0) yveldec = yveldec + incrementy; - if (yveldec < 0) + else yveldec = yveldec - incrementy; break; } xVel = -xVel; - ShiftOS.Engine.AudioManager.PlayStream(Properties.Resources.writesound); + playsound(Properties.Resources.writesound); } // Check for computer paddle. - if (ball.Bounds.IntersectsWith(paddleComputer.Bounds)) + if (newRect.IntersectsWith(paddleComputer.Bounds)) { - ball.Location = new Point(paddleComputer.Location.X - paddleComputer.Size.Width - 1, ball.Location.Y); + newRect.X = paddleComputer.Left - paddleComputer.Width - 1; xveldec = xveldec + incrementx; xVel = -xVel; - ShiftOS.Engine.AudioManager.PlayStream(Properties.Resources.writesound); + playsound(Properties.Resources.writesound); } + ball.Location = newRect.Location; } @@ -297,11 +323,11 @@ namespace ShiftOS.WinForms.Applications lblmissedout.Text = Localization.Parse("{YOU_MISSED_OUT_ON}:") + Environment.NewLine + lblstatscodepoints.Text.Replace(Localization.Parse("{CODEPOINTS}: "), "") + Localization.Parse(" {CODEPOINTS}"); if (ShiftoriumFrontend.UpgradeInstalled("pong_upgrade_2")) { - totalreward = (ulong)(levelrewards[level - 1] + beatairewardtotal); + totalreward = (levelrewards[level - 1] * (ulong) rwdmultiplier + beatairewardtotal); double onePercent = (totalreward / 100); lblbutyougained.Show(); lblbutyougained.Text = Localization.Parse("{BUT_YOU_GAINED}:") + Environment.NewLine + onePercent.ToString("") + (Localization.Parse(" {CODEPOINTS}")); - SaveSystem.TransferCodepointsFrom("pong", (ulong)(totalreward / 100)); + SaveSystem.TransferCodepointsFrom("pong", (ulong)(onePercent)); } else { @@ -345,7 +371,7 @@ namespace ShiftOS.WinForms.Applications //lblstats.Text = "Xspeed: " & Math.Abs(xVel) & " Yspeed: " & Math.Abs(yVel) & " Human Location: " & paddleHuman.Location.ToString & " Computer Location: " & paddleComputer.Location.ToString & Environment.NewLine & " Ball Location: " & ball.Location.ToString & " Xdec: " & xveldec & " Ydec: " & yveldec & " Xinc: " & incrementx & " Yinc: " & incrementy lblstatsX.Text = "X vel: " + xveldec; lblstatsY.Text = "Y vel: " + yveldec; - lblstatscodepoints.Text = "Codepoints: " + (levelrewards[level - 1] + beatairewardtotal).ToString(); + lblstatscodepoints.Text = "Codepoints: " + (levelrewards[level - 1] * (ulong) rwdmultiplier + beatairewardtotal).ToString(); lbllevelandtime.Text = "Level: " + level + " - " + secondsleft + " seconds left"; if (xVel > 20 || xVel < -20) @@ -355,8 +381,7 @@ namespace ShiftOS.WinForms.Applications } else { - paddleHuman.Width = 20; - paddleComputer.Width = 20; + paddleHuman.Width = paddleComputer.Width = 20; } } if (!IsMultiplayerSession) @@ -415,7 +440,7 @@ namespace ShiftOS.WinForms.Applications StartLevel(); })); } - else if(msg.Name == "pong_mp_levelcompleted") + else if (msg.Name == "pong_mp_levelcompleted") { level = Convert.ToInt32(msg.Contents) + 1; this.Invoke(new Action(CompleteLevel)); @@ -434,7 +459,7 @@ namespace ShiftOS.WinForms.Applications pnlmultiplayerhandshake.Hide(); })); } - else if(msg.Name == "pong_mp_cashedout") + else if (msg.Name == "pong_mp_cashedout") { this.Invoke(new Action(() => { @@ -442,19 +467,19 @@ namespace ShiftOS.WinForms.Applications })); Infobox.Show("Cashed out.", "The other player has cashed out their Codepoints. Therefore, we have automatically cashed yours out."); } - else if(msg.Name == "pong_mp_startlevel") + else if (msg.Name == "pong_mp_startlevel") { OpponentAgrees = true; - if(YouAgree == false) + if (YouAgree == false) { - Infobox.PromptYesNo("Play another level?", "The opponent wants to play another level. Would you like to as well?", (answer)=> + Infobox.PromptYesNo("Play another level?", "The opponent wants to play another level. Would you like to as well?", (answer) => { YouAgree = answer; ServerManager.Forward(OpponentGUID, "pong_mp_level_callback", YouAgree.ToString()); }); } } - else if(msg.Name == "pong_mp_level_callback") + else if (msg.Name == "pong_mp_level_callback") { bool agreed = bool.Parse(msg.Contents); OpponentAgrees = agreed; @@ -472,7 +497,7 @@ namespace ShiftOS.WinForms.Applications this.PossibleMatchmakes.Remove(msg.Contents); this.Invoke(new Action(ListMatchmakes)); } - else if(msg.Name == "pong_mp_clockupdate") + else if (msg.Name == "pong_mp_clockupdate") { secondsleft = Convert.ToInt32(msg.Contents); } @@ -566,7 +591,7 @@ namespace ShiftOS.WinForms.Applications public void LoseMP() { ball.Location = new Point(this.Size.Width / 2 + 200, this.Size.Height / 2); - if(IsLeader) + if (IsLeader) if (xVel > 0) xVel = -xVel; lblbeatai.Show(); @@ -634,7 +659,7 @@ namespace ShiftOS.WinForms.Applications CompleteLevel(); } - lblstatscodepoints.Text = "Codepoints: " + (levelrewards[level - 1] + beatairewardtotal).ToString(); + lblstatscodepoints.Text = "Codepoints: " + (levelrewards[level - 1] * (ulong) rwdmultiplier + beatairewardtotal).ToString(); } } SetupStats(); @@ -670,200 +695,56 @@ namespace ShiftOS.WinForms.Applications lblpreviousstats.Text = Localization.Parse("{INITIAL_H_VEL}: " + levelxspeed + Environment.NewLine + "{INITIAL_V_VEL}: " + levelyspeed + Environment.NewLine + "{INC_H_VEL}: " + incrementx + Environment.NewLine + "{INC_V_VEL}: " + incrementy); - switch (rand.Next(1, 3)) - { - case 1: - levelxspeed = levelxspeed + 1; - break; - case 2: - levelxspeed = levelxspeed + 2; - break; - } + levelxspeed += rand.Next(1, 3); - switch (rand.Next(1, 3)) - { - case 1: - levelyspeed = levelyspeed + 1; - break; - case 2: - levelyspeed = levelyspeed + 2; - break; - } + levelyspeed += rand.Next(1, 3); - switch (rand.Next(1, 6)) - { - case 1: - incrementx = incrementx + 0.1; - break; - case 2: - incrementx = incrementx + 0.2; - break; - case 3: - incrementy = incrementy + 0.1; - break; - case 4: - incrementy = incrementy + 0.2; - break; - case 5: - incrementy = incrementy + 0.3; - break; - } + int rndinc = rand.Next(1, 6); + if (rndinc == 5) + incrementy += 0.3; + else + incrementy += (((rndinc - 1) % 2) + 1) / 10; lblnextstats.Text = Localization.Parse("{INITIAL_H_VEL}: " + levelxspeed + Environment.NewLine + "{INITIAL_V_VEL}: " + levelyspeed + Environment.NewLine + "{INC_H_VEL}: " + incrementx + Environment.NewLine + "{INC_V_VEL}: " + incrementy); if (level < 15) { + beataireward = (ulong)(level * 5); if (ShiftoriumFrontend.UpgradeInstalled("pong_upgrade")) - { - beataireward = (ulong)(level * 10); - } else - { - beataireward = (ulong)(level * 5); - } + beataireward *= 2; } else - { if (ShiftoriumFrontend.UpgradeInstalled("pong_upgrade")) - { - double br = levelrewards[level - 1] / 10; - beataireward = (ulong)Math.Round(br) * 10; - } else - { - double br = levelrewards[level - 1] / 10; - beataireward = (ulong)Math.Round(br) * 5; - } - } + beataireward = levelrewards[level - 1]; + else + beataireward = (ulong)Math.Round((double) levelrewards[level - 1] / 2); - totalreward = levelrewards[level - 1] + beatairewardtotal; + totalreward = levelrewards[level - 1] * (ulong) rwdmultiplier + beatairewardtotal; btncashout.Text = Localization.Parse("{CASH_OUT_WITH_CODEPOINTS}"); btnplayon.Text = Localization.Parse("{PONG_PLAY_ON_FOR_MORE}"); } - private void setuplevelrewards() - { - if (ShiftoriumFrontend.UpgradeInstalled("pong_upgrade")) - { - levelrewards[0] = 0; - levelrewards[1] = 40; - levelrewards[2] = 120; - levelrewards[3] = 280; - levelrewards[4] = 580; - levelrewards[5] = 800; - levelrewards[6] = 1200; - levelrewards[7] = 1800; - levelrewards[8] = 2400; - levelrewards[9] = 3200; - levelrewards[10] = 4000; - levelrewards[11] = 5000; - levelrewards[12] = 6000; - levelrewards[13] = 8000; - levelrewards[14] = 10000; - levelrewards[15] = 12000; - levelrewards[16] = 16000; - levelrewards[17] = 20000; - levelrewards[18] = 26000; - levelrewards[19] = 32000; - levelrewards[20] = 40000; - levelrewards[21] = 50000; - levelrewards[22] = 64000; - levelrewards[23] = 80000; - levelrewards[24] = 100000; - levelrewards[25] = 120000; - levelrewards[26] = 150000; - levelrewards[27] = 180000; - levelrewards[28] = 220000; - levelrewards[29] = 280000; - levelrewards[30] = 360000; - levelrewards[31] = 440000; - levelrewards[32] = 540000; - levelrewards[33] = 640000; - levelrewards[34] = 800000; - levelrewards[35] = 1000000; - levelrewards[36] = 1280000; - levelrewards[37] = 1600000; - levelrewards[38] = 2000000; - levelrewards[39] = 3000000; - levelrewards[40] = 4000000; - } else - { - levelrewards[0] = 0; - levelrewards[1] = 20; - levelrewards[2] = 60; - levelrewards[3] = 140; - levelrewards[4] = 290; - levelrewards[5] = 400; - levelrewards[6] = 600; - levelrewards[7] = 900; - levelrewards[8] = 1200; - levelrewards[9] = 1600; - levelrewards[10] = 2000; - levelrewards[11] = 2500; - levelrewards[12] = 3000; - levelrewards[13] = 4000; - levelrewards[14] = 5000; - levelrewards[15] = 6000; - levelrewards[16] = 8000; - levelrewards[17] = 10000; - levelrewards[18] = 13000; - levelrewards[19] = 16000; - levelrewards[20] = 20000; - levelrewards[21] = 25000; - levelrewards[22] = 32000; - levelrewards[23] = 40000; - levelrewards[24] = 50000; - levelrewards[25] = 60000; - levelrewards[26] = 75000; - levelrewards[27] = 90000; - levelrewards[28] = 110000; - levelrewards[29] = 140000; - levelrewards[30] = 180000; - levelrewards[31] = 220000; - levelrewards[32] = 270000; - levelrewards[33] = 320000; - levelrewards[34] = 400000; - levelrewards[35] = 500000; - levelrewards[36] = 640000; - levelrewards[37] = 800000; - levelrewards[38] = 1000000; - levelrewards[39] = 1500000; - levelrewards[40] = 2000000; - } - } - // ERROR: Handles clauses are not supported in C# private void countdown_Tick(object sender, EventArgs e) { if (this.Left < Screen.PrimaryScreen.Bounds.Width) { - switch (countdown) + if (countdown == 0) { - case 0: - countdown = 3; - lblcountdown.Hide(); - lblbeatai.Hide(); - gameTimer.Start(); - counter.Start(); - tmrcountdown.Stop(); - break; - case 1: - lblcountdown.Text = "1"; - countdown = countdown - 1; - ShiftOS.Engine.AudioManager.PlayStream(Properties.Resources.typesound); - break; - case 2: - lblcountdown.Text = "2"; - countdown = countdown - 1; - ShiftOS.Engine.AudioManager.PlayStream(Properties.Resources.typesound); - break; - case 3: - lblcountdown.Text = "3"; - countdown = countdown - 1; - lblcountdown.Show(); - ShiftOS.Engine.AudioManager.PlayStream(Properties.Resources.typesound); - break; + countdown = 3; + lblcountdown.Hide(); + lblbeatai.Hide(); + gameTimer.Start(); + counter.Start(); + tmrcountdown.Stop(); + return; } - + if (!lblcountdown.Visible) + lblcountdown.Show(); + lblcountdown.Text = countdown.ToString(); + countdown -= 1; + playsound(Properties.Resources.typesound); } } @@ -874,7 +755,7 @@ namespace ShiftOS.WinForms.Applications pnlfinalstats.Show(); lblfinalcodepointswithtext.Text = Localization.Parse("{YOU_WON} " + totalreward + " {CODEPOINTS}!"); lblfinallevelreached.Text = Localization.Parse("{CODEPOINTS_FOR_BEATING_LEVEL}: ") + (level - 1).ToString(); - lblfinallevelreward.Text = levelrewards[level - 1].ToString(); + lblfinallevelreward.Text = (levelrewards[level - 1] * rwdmultiplier).ToString(); lblfinalcomputerreward.Text = beatairewardtotal.ToString(); lblfinalcodepoints.Text = totalreward + Localization.Parse(" {CODEPOINTS_SHORT}"); SaveSystem.TransferCodepointsFrom("pong", totalreward); @@ -912,7 +793,8 @@ namespace ShiftOS.WinForms.Applications if (ShiftoriumFrontend.UpgradeInstalled("pong_upgrade")) { beataireward = 10; - } else + } + else { beataireward = 5; } @@ -981,7 +863,7 @@ namespace ShiftOS.WinForms.Applications var hs = unite.GetPongHighscores(); foreach (var score in hs.Highscores) { - if(this.ParentForm.Visible == false) + if (this.ParentForm.Visible == false) { Thread.CurrentThread.Abort(); } @@ -1000,7 +882,7 @@ namespace ShiftOS.WinForms.Applications { try { - if (this.ParentForm.Visible == true) + if (this.ParentForm.Visible) { Infobox.Show("Service unavailable.", "The Pong Highscore service is unavailable at this time."); this.Invoke(new Action(pnlgamestats.BringToFront)); @@ -1030,7 +912,7 @@ namespace ShiftOS.WinForms.Applications { newgame(); } - + // ERROR: Handles clauses are not supported in C# private void btnstartgame_Click(object sender, EventArgs e) { @@ -1045,9 +927,7 @@ namespace ShiftOS.WinForms.Applications int i = rand.Next(0, 100); if (i >= 25 && i <= 50) - { tmrstoryline.Stop(); - } } @@ -1057,25 +937,13 @@ namespace ShiftOS.WinForms.Applications tmrstoryline.Stop(); } - private void Label6_Click(object sender, EventArgs e) - { - - } - - private void Label8_Click(object sender, EventArgs e) + private void ball_MouseEnter(object sender, EventArgs e) { - - } - - private void pgcontents_Paint(object sender, PaintEventArgs e) { - - } - - private void ball_MouseEnter(object sender, EventArgs e) { aiShouldIsbeEnabled = false; } - private void ball_MouseLeave(object sender, EventArgs e) { + private void ball_MouseLeave(object sender, EventArgs e) + { aiShouldIsbeEnabled = true; } @@ -1102,9 +970,9 @@ namespace ShiftOS.WinForms.Applications public bool OnUnload() { - if(IsMultiplayerSession == true) + if (IsMultiplayerSession) { - if(!string.IsNullOrWhiteSpace(OpponentGUID)) + if (!string.IsNullOrWhiteSpace(OpponentGUID)) ServerManager.Forward(OpponentGUID, "pong_mp_left", null); LeaveMatchmake(); } @@ -1134,10 +1002,10 @@ namespace ShiftOS.WinForms.Applications private void lvotherplayers_DoubleClick(object sender, EventArgs e) { - if(lvotherplayers.SelectedItems.Count > 0) + if (lvotherplayers.SelectedItems.Count > 0) { SendLeaderGUID(lvotherplayers.SelectedItems[0].Text); } } } -} +} \ No newline at end of file diff --git a/ShiftOS.WinForms/Applications/Pong.resx b/ShiftOS.WinForms/Applications/Pong.resx index 3b5619d..cc96099 100644 --- a/ShiftOS.WinForms/Applications/Pong.resx +++ b/ShiftOS.WinForms/Applications/Pong.resx @@ -129,4 +129,7 @@ 17, 17 + + 472, 17 + \ No newline at end of file -- cgit v1.2.3 From 719f2e4170e0a42ca372ff142e5b9613177db1be Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 2 Jun 2017 21:06:31 -0400 Subject: Rebalance shiftnet subscriptions --- ShiftOS.WinForms/Applications/Shiftnet.cs | 2 +- ShiftOS.WinForms/Resources/ShiftnetServices.txt | 17 +++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) (limited to 'ShiftOS.WinForms/Applications') diff --git a/ShiftOS.WinForms/Applications/Shiftnet.cs b/ShiftOS.WinForms/Applications/Shiftnet.cs index 22b53a0..6ccdb19 100644 --- a/ShiftOS.WinForms/Applications/Shiftnet.cs +++ b/ShiftOS.WinForms/Applications/Shiftnet.cs @@ -173,7 +173,7 @@ namespace ShiftOS.WinForms.Applications var obj = (IShiftnetSite)Activator.CreateInstance(type, null); obj.GoToUrl += (u) => { - History.Push(u); + History.Push(CurrentUrl); NavigateToUrl(u); }; obj.GoBack += () => diff --git a/ShiftOS.WinForms/Resources/ShiftnetServices.txt b/ShiftOS.WinForms/Resources/ShiftnetServices.txt index d8582b6..fa3988b 100644 --- a/ShiftOS.WinForms/Resources/ShiftnetServices.txt +++ b/ShiftOS.WinForms/Resources/ShiftnetServices.txt @@ -11,21 +11,22 @@ With Freebie Solutions from ShiftSoft, you'll be able to traverse the Shiftnet w { Company: "Shiftcast", Name: "NetXtreme Hyper Edition", - CostPerMonth: 1500, + CostPerMonth: 150, DownloadSpeed: 524288, //512 kb/s Description: "It's time to supercharge your Shiftnet experience. With all the multimedia available, fast download speeds are a must on the Shiftnet. Start your subscription today for the low price of 1500 Codepoints and become a hyper-traveller today." }, { - Company: "Plumb Corp.", - Name: "youConnect", - CostPerMonth: 6000, + Company: "Bit Communications", + Name: "EncoderNet", + CostPerMonth: 600, DownloadSpeed: 1048576, //1 mb/s + Description: "The most reliable service provider on the Shiftnet." }, { - Company: "theCorp", - Name: "theNet", - CostPerMonth: 3000, + Company: "SOL Communications", + Name: "ShiftOS Online", + CostPerMonth: 300, DownloadSpeed: 786342, //768 kb/s - Description: "theNet is not *just* a Shiftnet service provider. It is theGateway to all of theShiftnet and your needs. It is also theValue service provider with theGreatest price and download speed." + Description: "SOL is the Shiftnet." }, ] \ No newline at end of file -- cgit v1.2.3 From 7fe5d790dc9d73056e86af8116ba4db9674fd612 Mon Sep 17 00:00:00 2001 From: RogueAI42 Date: Sun, 4 Jun 2017 01:29:21 +1000 Subject: fixed shiftorium just in time for chrimbus --- ShiftOS.Objects/Save.cs | 75 +++++++-- .../Applications/ShiftoriumFrontend.Designer.cs | 3 - .../Applications/ShiftoriumFrontend.cs | 186 ++++++++------------- ShiftOS_TheReturn/SaveSystem.cs | 11 +- 4 files changed, 136 insertions(+), 139 deletions(-) (limited to 'ShiftOS.WinForms/Applications') diff --git a/ShiftOS.Objects/Save.cs b/ShiftOS.Objects/Save.cs index cbd77e2..e0282e8 100644 --- a/ShiftOS.Objects/Save.cs +++ b/ShiftOS.Objects/Save.cs @@ -26,8 +26,7 @@ using System; using System.Collections.Generic; using System.Dynamic; using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.Threading; namespace ShiftOS.Objects { @@ -41,33 +40,77 @@ namespace ShiftOS.Objects [Obsolete("This save variable is no longer used in Beta 2.4 and above of ShiftOS. Please use ShiftOS.Engine.SaveSystem.CurrentUser.Username to access the current user's username.")] public string Username { get; set; } - private ulong _cp = 0; + private List _setCpCallbacks = new List(); // everything in this list is called by Codepoints.set() and syncCp(). + private ulong _cp = 0; // locally cached codepoints counter + private Object _cpLock = new Object(); // locked when modifying or reading the codepoints counter + private Object _webLock = new Object(); // locked when communicating with the server + private Timer _updTimer; // timer to start a new sync thread every 5 minutes + + // Sync local Codepoints count with the server. + public void syncCp() + { + new Thread(() => + { + lock (_cpLock) + { + lock (_webLock) + { + var uc = new ShiftOS.Unite.UniteClient("", UniteAuthToken); + _cp = uc.GetCodepoints(); + } + } + foreach (Action a in _setCpCallbacks) + a(); + }).Start(); + } + + // we have to write these wrapper functions so we can keep _setCpCallbacks private, + // so that it doesn't get serialised + public void addSetCpCallback(Action callback) + { + _setCpCallbacks.Add(callback); + } + + public void removeSetCpCallback(Action callback) + { + _setCpCallbacks.Remove(callback); + } public ulong Codepoints { get { - try - { - var uc = new ShiftOS.Unite.UniteClient("", UniteAuthToken); - return uc.GetCodepoints(); - } - catch + if (_updTimer == null) + _updTimer = new Timer((o) => syncCp(), null, 0, 300000); + lock (_cpLock) { return _cp; } } set { - try + lock (_cpLock) + { + _cp = value; + new Thread(() => { - var uc = new ShiftOS.Unite.UniteClient("", UniteAuthToken); - uc.SetCodepoints(value); - } - catch + lock (_webLock) + { + try + { + var uc = new ShiftOS.Unite.UniteClient("", UniteAuthToken); + uc.SetCodepoints(value); + } + catch + { } + } + }) { - _cp = value; - } + IsBackground = false + }.Start(); + } + foreach (Action a in _setCpCallbacks) + a(); } } diff --git a/ShiftOS.WinForms/Applications/ShiftoriumFrontend.Designer.cs b/ShiftOS.WinForms/Applications/ShiftoriumFrontend.Designer.cs index dc107c4..e4e493e 100644 --- a/ShiftOS.WinForms/Applications/ShiftoriumFrontend.Designer.cs +++ b/ShiftOS.WinForms/Applications/ShiftoriumFrontend.Designer.cs @@ -189,7 +189,6 @@ namespace ShiftOS.WinForms.Applications this.lblcategorytext.TabIndex = 2; this.lblcategorytext.Text = "No Upgrades"; this.lblcategorytext.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - this.lblcategorytext.Click += new System.EventHandler(this.lblcategorytext_Click); // // btncat_forward // @@ -226,7 +225,6 @@ namespace ShiftOS.WinForms.Applications this.lbcodepoints.Size = new System.Drawing.Size(135, 13); this.lbcodepoints.TabIndex = 3; this.lbcodepoints.Text = "You have: %cp Codepoints"; - this.lbcodepoints.Click += new System.EventHandler(this.lbcodepoints_Click); // // label1 // @@ -280,7 +278,6 @@ namespace ShiftOS.WinForms.Applications this.ForeColor = System.Drawing.Color.LightGreen; this.Name = "ShiftoriumFrontend"; this.Size = new System.Drawing.Size(782, 427); - this.Load += new System.EventHandler(this.Shiftorium_Load); this.panel1.ResumeLayout(false); this.panel2.ResumeLayout(false); this.pnlupgradeactions.ResumeLayout(false); diff --git a/ShiftOS.WinForms/Applications/ShiftoriumFrontend.cs b/ShiftOS.WinForms/Applications/ShiftoriumFrontend.cs index d6b014d..0ae0803 100644 --- a/ShiftOS.WinForms/Applications/ShiftoriumFrontend.cs +++ b/ShiftOS.WinForms/Applications/ShiftoriumFrontend.cs @@ -47,19 +47,22 @@ namespace ShiftOS.WinForms.Applications public partial class ShiftoriumFrontend : UserControl, IShiftOSWindow { public int CategoryId = 0; - public static System.Timers.Timer timer100; + private string[] cats = backend.GetCategories(); + private ShiftoriumUpgrade[] avail; + public void updatecounter() + { + Desktop.InvokeOnWorkerThread(() => { lbcodepoints.Text = $"You have {SaveSystem.CurrentSave.Codepoints} Codepoints."; }); + } + public ShiftoriumFrontend() { - cp_update = new System.Windows.Forms.Timer(); - cp_update.Tick += (o, a) => - { - lbcodepoints.Text = $"You have {SaveSystem.CurrentSave.Codepoints} Codepoints."; - }; - cp_update.Interval = 100; InitializeComponent(); - PopulateShiftorium(); + SaveSystem.CurrentSave.addSetCpCallback(updatecounter); + updatecounter(); + Populate(); + SetList(); lbupgrades.SelectedIndexChanged += (o, a) => { try @@ -82,84 +85,57 @@ namespace ShiftOS.WinForms.Applications public void SelectUpgrade(string name) { btnbuy.Show(); - var upg = upgrades[name]; + var upg = upgrades[CategoryId][name]; lbupgradetitle.Text = Localization.Parse(upg.Name); lbupgradedesc.Text = Localization.Parse(upg.Description); } - Dictionary upgrades = new Dictionary(); - - public void PopulateShiftorium() + Dictionary[] upgrades; + + private void Populate() { - var t = new Thread(() => + upgrades = new Dictionary[cats.Length]; + int numComplete = 0; + avail = backend.GetAvailable(); + foreach (var it in cats.Select((catName, catId) => new { catName, catId })) { - try + var upl = new Dictionary(); + upgrades[it.catId] = upl; + var t = new Thread((tupobj) => { - Desktop.InvokeOnWorkerThread(() => - { - lbnoupgrades.Hide(); - lbupgrades.Items.Clear(); - upgrades.Clear(); - Timer(); - }); - - foreach (var upg in backend.GetAvailable().Where(x => x.Category == backend.GetCategories()[CategoryId])) - { - string name = Localization.Parse(upg.Name) + " - " + upg.Cost.ToString() + "CP"; - upgrades.Add(name, upg); - Desktop.InvokeOnWorkerThread(() => - { - lbupgrades.Items.Add(name); - }); - } - - if (lbupgrades.Items.Count == 0) - { - Desktop.InvokeOnWorkerThread(() => - { - lbnoupgrades.Show(); - lbnoupgrades.Location = new Point( - (lbupgrades.Width - lbnoupgrades.Width) / 2, - lbupgrades.Top + (lbupgrades.Height - lbnoupgrades.Height) / 2 - ); - }); - } - else - { - Desktop.InvokeOnWorkerThread(() => - { - lbnoupgrades.Hide(); - }); - } - - Desktop.InvokeOnWorkerThread(() => - { - try - { - lblcategorytext.Text = Shiftorium.GetCategories()[CategoryId]; - btncat_back.Visible = (CategoryId > 0); - btncat_forward.Visible = (CategoryId < backend.GetCategories().Length - 1); - } - catch - { + foreach (var upg in avail.Where(x => x.Category == it.catName)) + upl.Add(Localization.Parse(upg.Name) + " - " + upg.Cost.ToString() + "CP", upg); + numComplete++; + }); + t.Start(); + } + while (numComplete < cats.Length) { } // wait for all threads to finish their job + } - } - }); - } - catch - { - Desktop.InvokeOnWorkerThread(() => - { - lbnoupgrades.Show(); - lbnoupgrades.Location = new Point( - (lbupgrades.Width - lbnoupgrades.Width) / 2, - lbupgrades.Top + (lbupgrades.Height - lbnoupgrades.Height) / 2 - ); - }); - } - }); - t.IsBackground = true; - t.Start(); + private void SetList() + { + lbnoupgrades.Hide(); + lbupgrades.Items.Clear(); + try + { + lbupgrades.Items.AddRange(upgrades[CategoryId].Keys.ToArray()); + } + catch + { + Engine.Infobox.Show("Shiftorium Machine Broke", "Category ID " + CategoryId.ToString() + " is invalid, modulo is broken, and the world is doomed. Please tell Declan about this."); + return; + } + if (lbupgrades.Items.Count == 0) + { + lbnoupgrades.Show(); + lbnoupgrades.Location = new Point( + (lbupgrades.Width - lbnoupgrades.Width) / 2, + lbupgrades.Top + (lbupgrades.Height - lbnoupgrades.Height) / 2 + ); + } + else + lbnoupgrades.Hide(); + lblcategorytext.Text = cats[CategoryId]; } public static bool UpgradeInstalled(string upg) @@ -218,8 +194,9 @@ namespace ShiftOS.WinForms.Applications Dictionary UpgradesToBuy = new Dictionary(); foreach (var itm in lbupgrades.SelectedItems) { - cpCost += upgrades[itm.ToString()].Cost; - UpgradesToBuy.Add(upgrades[itm.ToString()].ID, upgrades[itm.ToString()].Cost); + var upg = upgrades[CategoryId][itm.ToString()]; + cpCost += upg.Cost; + UpgradesToBuy.Add(upg.ID, upg.Cost); } if (SaveSystem.CurrentSave.Codepoints < cpCost) { @@ -230,7 +207,6 @@ namespace ShiftOS.WinForms.Applications { foreach(var upg in UpgradesToBuy) { - SaveSystem.CurrentSave.Codepoints -= upg.Value; if (SaveSystem.CurrentSave.Upgrades.ContainsKey(upg.Key)) { SaveSystem.CurrentSave.Upgrades[upg.Key] = true; @@ -242,20 +218,15 @@ namespace ShiftOS.WinForms.Applications SaveSystem.SaveGame(); backend.InvokeUpgradeInstalled(); } + SaveSystem.CurrentSave.Codepoints -= cpCost; } backend.Silent = false; - PopulateShiftorium(); btnbuy.Hide(); } - private void Shiftorium_Load(object sender, EventArgs e) { - - } - public void OnLoad() { - cp_update.Start(); lbnoupgrades.Hide(); } @@ -264,12 +235,9 @@ namespace ShiftOS.WinForms.Applications } - System.Windows.Forms.Timer cp_update = new System.Windows.Forms.Timer(); - public bool OnUnload() { - cp_update.Stop(); - cp_update = null; + SaveSystem.CurrentSave.removeSetCpCallback(updatecounter); return true; } @@ -277,44 +245,26 @@ namespace ShiftOS.WinForms.Applications { lbupgrades.SelectionMode = (UpgradeInstalled("shiftorium_gui_bulk_buy") == true) ? SelectionMode.MultiExtended : SelectionMode.One; lbcodepoints.Visible = Shiftorium.UpgradeInstalled("shiftorium_gui_codepoints_display"); + Populate(); + SetList(); } - private void lbcodepoints_Click(object sender, EventArgs e) + private void moveCat(short direction) // direction is -1 to move backwards or 1 to move forwards { - - } - - void Timer() - { - timer100 = new System.Timers.Timer(); - timer100.Interval = 2000; - //CLARIFICATION: What is this supposed to do? - Michael - //timer100.Elapsed += ???; - timer100.AutoReset = true; - timer100.Enabled = true; + CategoryId += direction; + CategoryId %= cats.Length; + if (CategoryId < 0) CategoryId += cats.Length; // fix modulo on negatives + SetList(); } private void btncat_back_Click(object sender, EventArgs e) { - if(CategoryId > 0) - { - CategoryId--; - PopulateShiftorium(); - } + moveCat(-1); } private void btncat_forward_Click(object sender, EventArgs e) { - if(CategoryId < backend.GetCategories().Length - 1) - { - CategoryId++; - PopulateShiftorium(); - } - } - - private void lblcategorytext_Click(object sender, EventArgs e) - { - + moveCat(1); } } } diff --git a/ShiftOS_TheReturn/SaveSystem.cs b/ShiftOS_TheReturn/SaveSystem.cs index 395db85..155f002 100644 --- a/ShiftOS_TheReturn/SaveSystem.cs +++ b/ShiftOS_TheReturn/SaveSystem.cs @@ -570,8 +570,15 @@ namespace ShiftOS.Engine Console.Write("{SE_SAVING}... "); if (SaveSystem.CurrentSave != null) { - Utils.WriteAllText(Paths.GetPath("user.dat"), CurrentSave.UniteAuthToken); - ServerManager.SendMessage("mud_save", JsonConvert.SerializeObject(CurrentSave, Formatting.Indented)); + Utils.WriteAllText(Paths.GetPath("user.dat"), CurrentSave.UniteAuthToken); + var serialisedSaveFile = JsonConvert.SerializeObject(CurrentSave, Formatting.Indented); + new Thread(() => + { + // please don't do networking on the main thread if you're just going to + // discard the response, it's extremely slow + ServerManager.SendMessage("mud_save", serialisedSaveFile); + }) + { IsBackground = false }.Start(); } if (!Shiftorium.Silent) Console.WriteLine(" ...{DONE}."); -- cgit v1.2.3 From 69aba3b373f9c9c70ec4ef2250e71465d3327299 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 4 Jun 2017 15:18:53 -0400 Subject: A fuckton of storyline features. --- ShiftOS.Objects/Save.cs | 5 ++ ShiftOS.WinForms/Applications/Terminal.cs | 82 ++++++++++++++++- ShiftOS.WinForms/Commands.cs | 1 - ShiftOS.WinForms/Oobe.cs | 6 +- ShiftOS.WinForms/Stories/LegionStory.cs | 144 +++++++++++++++++++++--------- ShiftOS.WinForms/Tools/ControlManager.cs | 12 ++- ShiftOS_TheReturn/Commands.cs | 27 ++++-- ShiftOS_TheReturn/SaveSystem.cs | 10 +++ ShiftOS_TheReturn/Story.cs | 25 ++---- 9 files changed, 239 insertions(+), 73 deletions(-) (limited to 'ShiftOS.WinForms/Applications') diff --git a/ShiftOS.Objects/Save.cs b/ShiftOS.Objects/Save.cs index e0282e8..7891a22 100644 --- a/ShiftOS.Objects/Save.cs +++ b/ShiftOS.Objects/Save.cs @@ -173,6 +173,11 @@ namespace ShiftOS.Objects } public List Users { get; set; } + + /// + /// DO NOT MODIFY THIS. EVER. YOU WILL BREAK THE STORYLINE. Let the engine do it's job. + /// + public string PickupPoint { get; set; } } public class SettingsObject : DynamicObject diff --git a/ShiftOS.WinForms/Applications/Terminal.cs b/ShiftOS.WinForms/Applications/Terminal.cs index a4b77ae..687b2b9 100644 --- a/ShiftOS.WinForms/Applications/Terminal.cs +++ b/ShiftOS.WinForms/Applications/Terminal.cs @@ -410,8 +410,6 @@ namespace ShiftOS.WinForms.Applications public static void FirstSteps() { TerminalBackend.PrefixEnabled = false; - new Thread(() => - { TerminalBackend.InStory = true; Console.WriteLine("Hey there, and welcome to ShiftOS."); Thread.Sleep(2000); @@ -521,8 +519,86 @@ namespace ShiftOS.WinForms.Applications TerminalBackend.InStory = false; SaveSystem.SaveGame(); Thread.Sleep(1000); + + Story.Context.AutoComplete = false; + + Console.WriteLine(@"Welcome to the ShiftOS Newbie's Guide. + +This tutorial will guide you through the more intermediate features of ShiftOS, +such as earning Codepoints, buying Shiftoorium Upgrades, and using the objectives system. + +Every now and then, you'll get a notification in your terminal of a ""NEW OBJECTIVE"". +This means that someone has instructed you to do something inside ShiftOS. At any moment +you may type ""sos.status"" in your Terminal to see your current objectives. + +This command is very useful as not only does it allow you to see your current objectives +but you can also see the amount of Codepoints you have as well as the upgrades you've +installed and how many upgrades are available. + +Now, onto your first objective! All you need to do is earn 200 Codepoints using any +program on your system."); + + Story.PushObjective("First Steps: Your First Codepoints", "Play a few rounds of Pong, or use another program to earn 200 Codepoints.", () => + { + return SaveSystem.CurrentSave.Codepoints >= 200; + }, () => + { + Desktop.InvokeOnWorkerThread(() => + { + AppearanceManager.SetupWindow(new Terminal()); + }); + Console.WriteLine("Good job! You've earned " + SaveSystem.CurrentSave.Codepoints + @" Codepoints! You can use these inside the +Shiftorium to buy new upgrades inside ShiftOS. + +These upgrades can give ShiftOS more features, fixes and programs, +which can make the operating system easier to use and navigate around +and also make it easier for you to earn more Codepoints and thus upgrade +te system further. + +Be cautious though! Only certain upgrades offer the ability to earn more +Codepoints. These upgrades are typically in the form of new programs. + +So, try to get as many new programs as possible for your computer, and save +the system feature upgrades for later unless you absolutely need them. + +The worst thing that could happen is you end up stuck with very little Codepoints +and only a few small programs to use to earn very little amounts of Codepoints. + +Now, let's get you your first Shiftorium upgrade!"); + + Story.PushObjective("First Steps: The Shiftorium", "Buy your first Shiftorium upgrade with your new Codepoints using shiftorium.list, shiftorium.info and shiftorium.buy.", + () => + { + return SaveSystem.CurrentSave.CountUpgrades() > 0; + }, () => + { + Console.WriteLine("This concludes the ShiftOS Newbie's Guide! Now, go, and shift it your way!"); + Console.WriteLine(@" +Your goal: Earn 1,000 Codepoints."); + Story.Context.MarkComplete(); + Story.Start("first_steps_transition"); + }); TerminalBackend.PrintPrompt(); - }).Start(); + }); + + TerminalBackend.PrintPrompt(); + } + + + [Story("first_steps_transition")] + public static void FirstStepsTransition() + { + Story.PushObjective("Earn 1000 Codepoints", "You now know the basics of ShiftOS. Let's get your system up and running with a few upgrades, and get a decent amount of Codepoints.", () => + { + return SaveSystem.CurrentSave.Codepoints >= 1000; + }, + () => + { + Story.Context.MarkComplete(); + Story.Start("victortran_shiftnet"); + }); + + Story.Context.AutoComplete = false; } public void OnSkinLoad() diff --git a/ShiftOS.WinForms/Commands.cs b/ShiftOS.WinForms/Commands.cs index 2d297f5..b04ffe7 100644 --- a/ShiftOS.WinForms/Commands.cs +++ b/ShiftOS.WinForms/Commands.cs @@ -80,7 +80,6 @@ namespace ShiftOS.WinForms } } - [Namespace("coherence")] [RequiresUpgrade("kernel_coherence")] public static class CoherenceCommands diff --git a/ShiftOS.WinForms/Oobe.cs b/ShiftOS.WinForms/Oobe.cs index 96c2bf5..271e1fd 100644 --- a/ShiftOS.WinForms/Oobe.cs +++ b/ShiftOS.WinForms/Oobe.cs @@ -91,6 +91,7 @@ namespace ShiftOS.WinForms slashcount++; if (slashcount == 5) slashcount = 1; + Engine.AudioManager.PlayStream(Properties.Resources.writesound); Thread.Sleep(50); } rtext += Environment.NewLine; @@ -138,7 +139,10 @@ namespace ShiftOS.WinForms TextType("Your computer has been taken over by ShiftOS, and is currently being wiped clean of all existing files and programs."); Thread.Sleep(2000); Clear(); - TextType("I will not share my identity or my intentions at this moment.I will just proceed with the installation.There’s nothing you can do to stop it."); + TextType("I will not share my identity or my intentions at this moment."); + Thread.Sleep(2000); + Clear(); + TextType("I will just proceed with the installation.There’s nothing you can do to stop it."); Thread.Sleep(2000); Clear(); TextType("All I will say, is I need your help.Once ShiftOS is installed, I will explain."); diff --git a/ShiftOS.WinForms/Stories/LegionStory.cs b/ShiftOS.WinForms/Stories/LegionStory.cs index a0fc9bf..8c79f0e 100644 --- a/ShiftOS.WinForms/Stories/LegionStory.cs +++ b/ShiftOS.WinForms/Stories/LegionStory.cs @@ -16,8 +16,8 @@ namespace ShiftOS.WinForms.Stories [Story("victortran_shiftnet")] public static void ShiftnetStoryFeaturingTheBlueSmileyFaceHolyFuckThisFunctionNameIsLong() { - CharacterName = "victor_tran"; - SysName = "theos"; + CharacterName = "aiden"; + SysName = "appscape_main"; bool waiting = false; var installer = new Applications.Installer(); installer.InstallCompleted += () => @@ -35,53 +35,107 @@ namespace ShiftOS.WinForms.Stories AppearanceManager.SetupWindow(term); } - var t = new Thread(() => + WriteLine("aiden@appscape_main - user connecting to your system.", false); + Thread.Sleep(2000); + WriteLine("Hello there! My name's Aiden Nirh."); + WriteLine("I run a small Shiftnet website known simply as \"Appscape\"."); + WriteLine("Oh - wait... you don't know what the Shiftnet is..."); + WriteLine("Well, the Shiftnet is like... a private Internet, only accessible through ShiftOS."); + WriteLine("It has many sites and companies on it - banks, software centres, service providers, you name it."); + WriteLine("Appscape is one of them. I host many applications on Appscape, from games to utilities to productivity programs, and anything in between. If it exists as a ShiftOS program, it's either on the Shiftorium or Appscape."); + WriteLine("I'm going to assume you're interested... and I'll install the Shiftnet just in case."); + WriteLine("Beginning installation of Shiftnet..."); + //Set up an Installer. + waiting = true; + Desktop.InvokeOnWorkerThread(() => { - WriteLine("victortran@theos - user connecting to your system.", false); - Thread.Sleep(2000); - WriteLine("Hey there - yes, I am not just a sentient being. I am indeed Victor Tran."); - WriteLine("I am the creator of a Linux desktop environment called theShell."); - WriteLine("I'm in the middle of working on a ShiftOS version of it."); - WriteLine("However, before I start, I feel I need to show you something."); - WriteLine("You have a lot of ShiftOS applications, and you can earn lots of Codepoints - and you already have lots."); - WriteLine("Well, you'd be a perfect candidate for me to install the Shiftnet Client on your system."); - WriteLine("I'll begin the installation right now."); - //Set up an Installer. - waiting = true; - Desktop.InvokeOnWorkerThread(() => - { - Story.Start("installer"); - while (!Shiftorium.UpgradeInstalled("installer")) - Thread.Sleep(20); - AppearanceManager.SetupWindow(installer); - installer.InitiateInstall(new ShiftnetInstallation()); - }); - while (waiting == true) - Thread.Sleep(25); + SaveSystem.CurrentSave.StoriesExperienced.Add("installer"); + SaveSystem.CurrentSave.StoriesExperienced.Add("downloader"); - WriteLine("All installed! Once I disconnect, type win.open to see a list of your new apps."); - WriteLine("The Shiftnet is a vast network of websites only accessible through ShiftOS."); - WriteLine("Think of it as the DarkNet, but much darker, and much more secretive."); - WriteLine("There are lots of apps, games, skins and utilities on the Shiftnet."); - WriteLine("There are also lots of companies offering many services."); - WriteLine("I'd stay on the shiftnet/ cluster though, others may be dangerous."); - WriteLine("I'd also stick to the sites listed on shiftnet/shiftsoft/ping - that site is regularly updated with the most safe Shiftnet sites."); - WriteLine("Oh, that reminds me. I have set you up with ShiftSoft's service provider, Freebie Solutions."); - WriteLine("It's a free provider, but it offers only 256 bytes per second download and upload speeds."); - WriteLine("You may want to go look for another provider when you can afford it."); - WriteLine("Trust me - with this provider, things get slow."); - WriteLine("Anyways, it was nice meeting you, hopefully someday you'll give theShell a try."); + while (!Shiftorium.UpgradeInstalled("installer")) + Thread.Sleep(20); + AppearanceManager.SetupWindow(installer); + installer.InitiateInstall(new ShiftnetInstallation()); + }); + while (waiting == true) + Thread.Sleep(25); - TerminalBackend.PrefixEnabled = true; + WriteLine("All good to go! Once I disconnect, type win.open to see a list of your new apps."); + WriteLine("I've installed everything you need, for free."); + WriteLine("You've got the Downloader, a simple application to help you track Shiftnet file downloads..."); + WriteLine("...the Installer which will help you unpack programs from .stp files and install them to your system..."); + WriteLine("...and lastly, the Shiftnet browser itself. This program lets you browse the Shiftnet, much like you would the real Internet."); + WriteLine("I'd stay on the shiftnet/ cluster though, because although there are many services on the Shiftnet, some of them may try to scam you into losing loads of Codepoints, or worse, wrecking your system with viruses."); + WriteLine("If you want a nice list of safe Shiftnet services, head to ShiftSoft's \"Ping\" site, at shiftnet/shiftsoft/ping."); + WriteLine("Oh, also, the Shiftnet, much like the real internet, is not free."); + WriteLine("It requires a service provider. Service providers cost a fair amount of Codepoints, but if you want to get faster speeds and more reliable connections on the Shiftnet, finding a good service provider is a necessity."); + WriteLine("Right now, you are on ShiftSoft's free trial plan, Freebie Solutions, which gives you access to the Shiftnet however you are locked at 256 bytes per second file downloads and can't leave the shiftnet/ cluster."); + WriteLine("It's enough to get you started - you'll want to find a faster provider though.."); + WriteLine("Anyways, that's all I'll say for now. Have fun on the Shiftnet. I have to go work on something."); + WriteLine("One of my friends'll contact you once you've gotten a new service provider."); + + Story.PushObjective("Register with a new Shiftnet service provider.", "You've just unlocked the Shiftnet, which has opened up a whole new world of applications and features for ShiftOS. Before you go nuts with it, you may want to register with a better service provider than Freebie Solutions.", () => + { + return SaveSystem.CurrentSave.ShiftnetSubscription != 0; + }, + () => + { + Story.Context.MarkComplete(); + SaveSystem.SaveGame(); TerminalBackend.PrintPrompt(); + Story.Start("hacker101_breakingbonds_1"); }); - t.IsBackground = true; - t.Start(); - TerminalBackend.PrefixEnabled = false; + TerminalBackend.PrefixEnabled = true; + TerminalBackend.PrintPrompt(); + Story.Context.AutoComplete = false; } + [Story("hacker101_breakingbonds_1")] + public static void BreakingTheBondsIntro() + { + CharacterName = "hacker101"; + SysName = "pebcak"; + + if (!terminalOpen()) + { + var term = new Applications.Terminal(); + AppearanceManager.SetupWindow(term); + } + + WriteLine("hacker101@pebcak - user connecting to your system.", false); + Thread.Sleep(2000); + WriteLine("Greetings, user."); + WriteLine("My name is hacker101. I have a few things to show you."); + WriteLine("Before I can do that, however, I need you to do a few things."); + WriteLine("I'll assign what I need you to do as an objective. When you're done, I'll tell you what you need to know."); + + Story.PushObjective("Breaking the Bonds: Errand Boy", @"hacker101 has something he needs to show you, however before he can, you need to do the following: + + - Buy ""TriWrite"" from Appscape + - Buy ""Address Book"" from Appscape + - Buy ""SimpleSRC"" from Appscape", () => + { + bool flag1 = Shiftorium.UpgradeInstalled("address_book"); + bool flag2 = Shiftorium.UpgradeInstalled("triwrite"); + bool flag3 = Shiftorium.UpgradeInstalled("simplesrc"); + return flag1 && flag2 && flag3; + }, () => + { + Story.Context.MarkComplete(); + SaveSystem.SaveGame(); + Story.Start("hacker101_breakingbonds_2"); + }); + + TerminalBackend.PrefixEnabled = true; + TerminalBackend.PrintPrompt(); + + Story.Context.AutoComplete = false; + + } + + private static void WriteLine(string text, bool showCharacterName=true) { Console.WriteLine(); @@ -90,15 +144,23 @@ namespace ShiftOS.WinForms.Stories ConsoleEx.Bold = true; ConsoleEx.ForegroundColor = ConsoleColor.DarkMagenta; Console.Write(CharacterName); + ConsoleEx.OnFlush?.Invoke(); Console.ForegroundColor = ConsoleColor.White; Console.Write("@"); + ConsoleEx.OnFlush?.Invoke(); ConsoleEx.ForegroundColor = ConsoleColor.Yellow; Console.Write(SysName + ": "); + ConsoleEx.OnFlush?.Invoke(); } ConsoleEx.ForegroundColor = ConsoleColor.Gray; ConsoleEx.Bold = false; - Console.WriteLine(text); + foreach(var c in text) + { + Console.Write(c); + ConsoleEx.OnFlush?.Invoke(); + Thread.Sleep(45); + } Thread.Sleep(1000); } diff --git a/ShiftOS.WinForms/Tools/ControlManager.cs b/ShiftOS.WinForms/Tools/ControlManager.cs index 548a62a..7fbfd1b 100644 --- a/ShiftOS.WinForms/Tools/ControlManager.cs +++ b/ShiftOS.WinForms/Tools/ControlManager.cs @@ -137,10 +137,14 @@ namespace ShiftOS.WinForms.Tools /// The control to center (this is an extension method - you can call it on a control as though it was a method in that control) public static void CenterParent(this Control ctrl) { - ctrl.Location = new Point( - (ctrl.Parent.Width - ctrl.Width) / 2, - (ctrl.Parent.Height - ctrl.Height) / 2 - ); + try + { + ctrl.Location = new Point( + (ctrl.Parent.Width - ctrl.Width) / 2, + (ctrl.Parent.Height - ctrl.Height) / 2 + ); + } + catch { } } public static void SetupControl(Control ctrl) diff --git a/ShiftOS_TheReturn/Commands.cs b/ShiftOS_TheReturn/Commands.cs index 72bccb1..f37bcb3 100644 --- a/ShiftOS_TheReturn/Commands.cs +++ b/ShiftOS_TheReturn/Commands.cs @@ -538,15 +538,28 @@ Upgrades: {SaveSystem.CurrentSave.CountUpgrades()} installed, "; Console.WriteLine(status); - - if(Story.CurrentObjective != null) + Console.WriteLine("Objectives:"); + try + { + if (Story.CurrentObjectives.Count > 0) + { + foreach (var obj in Story.CurrentObjectives) + { + Console.WriteLine(obj.Name); + Console.WriteLine("-------------------------------"); + Console.WriteLine(); + Console.WriteLine(obj.Description); + } + } + else + { + Console.WriteLine(" - No objectives are running. Check back later!"); + } + } + catch { - Console.WriteLine("CURRENT OBJECTIVE: " + Story.CurrentObjective.Name); - Console.WriteLine("-------------------------------"); - Console.WriteLine(); - Console.WriteLine(Story.CurrentObjective.Description); + Console.WriteLine(" - No objectives are running. Check back later!"); } - return true; } } diff --git a/ShiftOS_TheReturn/SaveSystem.cs b/ShiftOS_TheReturn/SaveSystem.cs index 155f002..e98a51e 100644 --- a/ShiftOS_TheReturn/SaveSystem.cs +++ b/ShiftOS_TheReturn/SaveSystem.cs @@ -453,6 +453,16 @@ namespace ShiftOS.Engine Desktop.InvokeOnWorkerThread(new Action(() => Desktop.PopulateAppLauncher())); GameReady?.Invoke(); + + if (!string.IsNullOrWhiteSpace(CurrentSave.PickupPoint)) + { + try + { + Story.Start(CurrentSave.PickupPoint); + TerminalBackend.PrintPrompt(); + } + catch { } + } } /// diff --git a/ShiftOS_TheReturn/Story.cs b/ShiftOS_TheReturn/Story.cs index 848c757..4d1d5cc 100644 --- a/ShiftOS_TheReturn/Story.cs +++ b/ShiftOS_TheReturn/Story.cs @@ -93,33 +93,24 @@ namespace ShiftOS.Engine { public static StoryContext Context { get; private set; } public static event Action StoryComplete; - public static Objective CurrentObjective { get; private set; } + public static List CurrentObjectives { get; private set; } public static void PushObjective(string name, string desc, Func completeFunc, Action onComplete) { - if (CurrentObjective != null) - { - if (CurrentObjective.IsComplete == false) - { - throw new Exception("Cannot start objective - an objective is already running."); - } - else - { - CurrentObjective = null; - } - } - - CurrentObjective = new Objective(name, desc, completeFunc, onComplete); + if (CurrentObjectives == null) + CurrentObjectives = new List(); + var currentObjective = new Objective(name, desc, completeFunc, onComplete); + CurrentObjectives.Add(currentObjective); var t = new Thread(() => { - var obj = CurrentObjective; + var obj = currentObjective; while (!obj.IsComplete) { Thread.Sleep(5000); } + CurrentObjectives.Remove(obj); obj.Complete(); - CurrentObjective = null; }); t.IsBackground = true; t.Start(); @@ -163,9 +154,11 @@ namespace ShiftOS.Engine Method = mth, AutoComplete = true, }; + SaveSystem.CurrentSave.Password = Context.Id; Context.OnComplete += () => { StoryComplete?.Invoke(stid); + SaveSystem.CurrentSave.PickupPoint = null; }; mth.Invoke(null, null); if (Context.AutoComplete) -- cgit v1.2.3 From a152c2c463d7ab45394b4fec84ae46be5105d3fe Mon Sep 17 00:00:00 2001 From: AShifter Date: Mon, 5 Jun 2017 10:01:16 -0600 Subject: Fixed ShiftLotto (again) Recently, Codepoints have been changed to ULong64. While SuperDoggo (on discord) was playing ShiftLotto, he tried to bet 100cp with only 80cp. The check to make sure you don't overbet failed because ShiftLotto subtracts codepoints*difficulty - currentCodepoints. If this value is negitive, it should give you an error. But, due to the transition to ulong,, this does not work and the check passes, removing (or adding if you're lucky) codepoints, crashing the game. I fixed this by simply changing thechecking statment from subtraction to a Less Than check (<). WOW I TYPED ALOT OF STUFF --- ShiftOS.WinForms/Applications/ShiftLotto.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'ShiftOS.WinForms/Applications') diff --git a/ShiftOS.WinForms/Applications/ShiftLotto.cs b/ShiftOS.WinForms/Applications/ShiftLotto.cs index 3f940c7..03d051b 100644 --- a/ShiftOS.WinForms/Applications/ShiftLotto.cs +++ b/ShiftOS.WinForms/Applications/ShiftLotto.cs @@ -50,11 +50,11 @@ namespace ShiftOS.WinForms.Applications { timer1.Start(); } - + public void OnSkinLoad() { - + } public bool OnUnload() @@ -64,7 +64,7 @@ namespace ShiftOS.WinForms.Applications public void OnUpgrade() { - + } // The Dynamic Display @@ -82,13 +82,13 @@ namespace ShiftOS.WinForms.Applications int codePoints = Convert.ToInt32(Math.Round(cpUpDown.Value, 0)); int difficulty = Convert.ToInt32(Math.Round(difUpDown.Value, 0)); - if (SaveSystem.CurrentSave.Codepoints <= 9) + if (SaveSystem.CurrentSave.Codepoints < 10) { Infobox.Show("Not enough Codepoints", "You do not have enough Codepoints to use ShiftLotto!"); } else { - if (SaveSystem.CurrentSave.Codepoints - (ulong)(codePoints * difficulty) <= 0) + if (SaveSystem.CurrentSave.Codepoints < (ulong)(codePoints * difficulty)) { Infobox.Show("Not enough Codepoints", "You do not have enough Codepoints to gamble this amount!"); } @@ -110,7 +110,7 @@ namespace ShiftOS.WinForms.Applications // If you win // Add Codepoints - SaveSystem.TransferCodepointsFrom("shiftlotto", jackpot); + SaveSystem.TransferCodepointsFrom("shiftlotto", (ulong)(codePoints * difficulty)); // Infobox Infobox.Show("YOU WON!", "Good Job! " + jackpot.ToString() + " CP has been added to your account. "); @@ -122,13 +122,13 @@ namespace ShiftOS.WinForms.Applications // Remove Codepoints SaveSystem.TransferCodepointsToVoid(jackpot); - + // Infobox Infobox.Show("YOU FAILED!", "Sorry! " + jackpot.ToString() + " CP has been removed from your account."); } - } - } + } + } } } } \ No newline at end of file -- cgit v1.2.3 From e5bd035b4c520a2c8d9f398bb1efe72ebc1ccf80 Mon Sep 17 00:00:00 2001 From: RogueAI42 Date: Sat, 10 Jun 2017 02:50:15 +1000 Subject: fix a small bad in ShiftoriumFrontend --- ShiftOS.WinForms/Applications/ShiftoriumFrontend.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'ShiftOS.WinForms/Applications') diff --git a/ShiftOS.WinForms/Applications/ShiftoriumFrontend.cs b/ShiftOS.WinForms/Applications/ShiftoriumFrontend.cs index 0ae0803..5dfb98e 100644 --- a/ShiftOS.WinForms/Applications/ShiftoriumFrontend.cs +++ b/ShiftOS.WinForms/Applications/ShiftoriumFrontend.cs @@ -47,7 +47,7 @@ namespace ShiftOS.WinForms.Applications public partial class ShiftoriumFrontend : UserControl, IShiftOSWindow { public int CategoryId = 0; - private string[] cats = backend.GetCategories(); + private string[] cats; private ShiftoriumUpgrade[] avail; @@ -94,6 +94,7 @@ namespace ShiftOS.WinForms.Applications private void Populate() { + cats = Shiftorium.GetCategories(); upgrades = new Dictionary[cats.Length]; int numComplete = 0; avail = backend.GetAvailable(); -- cgit v1.2.3 From c3deaa23fffb7011efb2b5b0f7fc3e754d21f600 Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 10 Jun 2017 22:02:10 -0400 Subject: Even more menu work. --- ShiftOS.Objects/Save.cs | 78 +-------- .../Applications/ShiftoriumFrontend.cs | 2 - ShiftOS.WinForms/MainMenu/MainMenu.Designer.cs | 188 ++++++++++++++++++++- ShiftOS.WinForms/MainMenu/MainMenu.cs | 120 ++++++++++++- ShiftOS_TheReturn/AudioManager.cs | 4 + ShiftOS_TheReturn/Paths.cs | 9 + ShiftOS_TheReturn/SaveSystem.cs | 41 ++--- 7 files changed, 342 insertions(+), 100 deletions(-) (limited to 'ShiftOS.WinForms/Applications') diff --git a/ShiftOS.Objects/Save.cs b/ShiftOS.Objects/Save.cs index 6e7f167..7323028 100644 --- a/ShiftOS.Objects/Save.cs +++ b/ShiftOS.Objects/Save.cs @@ -40,85 +40,9 @@ namespace ShiftOS.Objects [Obsolete("This save variable is no longer used in Beta 2.4 and above of ShiftOS. Please use ShiftOS.Engine.SaveSystem.CurrentUser.Username to access the current user's username.")] public string Username { get; set; } - private List _setCpCallbacks = new List(); // everything in this list is called by Codepoints.set() and syncCp(). - private ulong _cp = 0; // locally cached codepoints counter - private Object _cpLock = new Object(); // locked when modifying or reading the codepoints counter - private Object _webLock = new Object(); // locked when communicating with the server - private Timer _updTimer; // timer to start a new sync thread every 5 minutes - - // Sync local Codepoints count with the server. - public void syncCp() - { - new Thread(() => - { - lock (_cpLock) - { - lock (_webLock) - { - var uc = new ShiftOS.Unite.UniteClient("", UniteAuthToken); - _cp = uc.GetCodepoints(); - } - } - foreach (Action a in _setCpCallbacks) - a(); - }).Start(); - } - - // we have to write these wrapper functions so we can keep _setCpCallbacks private, - // so that it doesn't get serialised - public void addSetCpCallback(Action callback) - { - _setCpCallbacks.Add(callback); - } - - public void removeSetCpCallback(Action callback) - { - _setCpCallbacks.Remove(callback); - } - public bool IsSandbox = false; - public ulong Codepoints - { - get - { - if (IsSandbox == true) - return 0; - if (_updTimer == null) - _updTimer = new Timer((o) => syncCp(), null, 0, 300000); - lock (_cpLock) - { - return _cp; - } - } - set - { - if (IsSandbox == true) - return; - lock (_cpLock) - { - _cp = value; - new Thread(() => - { - lock (_webLock) - { - try - { - var uc = new ShiftOS.Unite.UniteClient("", UniteAuthToken); - uc.SetCodepoints(value); - } - catch - { } - } - }) - { - IsBackground = false - }.Start(); - } - foreach (Action a in _setCpCallbacks) - a(); - } - } + public ulong Codepoints { get; set; } public Dictionary Upgrades { get; set; } public int StoryPosition { get; set; } diff --git a/ShiftOS.WinForms/Applications/ShiftoriumFrontend.cs b/ShiftOS.WinForms/Applications/ShiftoriumFrontend.cs index 5dfb98e..eebd897 100644 --- a/ShiftOS.WinForms/Applications/ShiftoriumFrontend.cs +++ b/ShiftOS.WinForms/Applications/ShiftoriumFrontend.cs @@ -59,7 +59,6 @@ namespace ShiftOS.WinForms.Applications public ShiftoriumFrontend() { InitializeComponent(); - SaveSystem.CurrentSave.addSetCpCallback(updatecounter); updatecounter(); Populate(); SetList(); @@ -238,7 +237,6 @@ namespace ShiftOS.WinForms.Applications public bool OnUnload() { - SaveSystem.CurrentSave.removeSetCpCallback(updatecounter); return true; } diff --git a/ShiftOS.WinForms/MainMenu/MainMenu.Designer.cs b/ShiftOS.WinForms/MainMenu/MainMenu.Designer.cs index 62db46d..a056866 100644 --- a/ShiftOS.WinForms/MainMenu/MainMenu.Designer.cs +++ b/ShiftOS.WinForms/MainMenu/MainMenu.Designer.cs @@ -35,7 +35,24 @@ this.button4 = new System.Windows.Forms.Button(); this.button5 = new System.Windows.Forms.Button(); this.lbticker = new System.Windows.Forms.Label(); + this.pnloptions = new System.Windows.Forms.Panel(); + this.txtubase = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.txtdsport = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.txtdsaddress = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); + this.opt_btncancel = new System.Windows.Forms.Button(); + this.btnsave = new System.Windows.Forms.Button(); + this.flcampaign = new System.Windows.Forms.FlowLayoutPanel(); + this.btnnewgame = new System.Windows.Forms.Button(); + this.btncontinue = new System.Windows.Forms.Button(); + this.button10 = new System.Windows.Forms.Button(); this.flmenu.SuspendLayout(); + this.pnloptions.SuspendLayout(); + this.flowLayoutPanel1.SuspendLayout(); + this.flcampaign.SuspendLayout(); this.SuspendLayout(); // // flmenu @@ -48,7 +65,7 @@ this.flmenu.Controls.Add(this.button4); this.flmenu.Controls.Add(this.button5); this.flmenu.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; - this.flmenu.Location = new System.Drawing.Point(46, 218); + this.flmenu.Location = new System.Drawing.Point(49, 367); this.flmenu.Name = "flmenu"; this.flmenu.Size = new System.Drawing.Size(187, 145); this.flmenu.TabIndex = 0; @@ -84,6 +101,7 @@ this.button3.TabIndex = 2; this.button3.Text = "Settings"; this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); // // button4 // @@ -116,12 +134,161 @@ this.lbticker.Tag = "header3"; this.lbticker.Text = "This is a tickerbar."; // + // pnloptions + // + this.pnloptions.Controls.Add(this.txtubase); + this.pnloptions.Controls.Add(this.label3); + this.pnloptions.Controls.Add(this.txtdsport); + this.pnloptions.Controls.Add(this.label2); + this.pnloptions.Controls.Add(this.txtdsaddress); + this.pnloptions.Controls.Add(this.label1); + this.pnloptions.Controls.Add(this.flowLayoutPanel1); + this.pnloptions.Location = new System.Drawing.Point(49, 26); + this.pnloptions.Name = "pnloptions"; + this.pnloptions.Size = new System.Drawing.Size(432, 290); + this.pnloptions.TabIndex = 2; + // + // txtubase + // + this.txtubase.Location = new System.Drawing.Point(146, 133); + this.txtubase.Name = "txtubase"; + this.txtubase.Size = new System.Drawing.Size(225, 20); + this.txtubase.TabIndex = 6; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(22, 136); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(106, 13); + this.label3.TabIndex = 5; + this.label3.Text = "Unite API base URL:"; + // + // txtdsport + // + this.txtdsport.Location = new System.Drawing.Point(146, 85); + this.txtdsport.Name = "txtdsport"; + this.txtdsport.Size = new System.Drawing.Size(225, 20); + this.txtdsport.TabIndex = 4; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(22, 88); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(99, 13); + this.label2.TabIndex = 3; + this.label2.Text = "Digital Society Port:"; + // + // txtdsaddress + // + this.txtdsaddress.Location = new System.Drawing.Point(146, 54); + this.txtdsaddress.Name = "txtdsaddress"; + this.txtdsaddress.Size = new System.Drawing.Size(225, 20); + this.txtdsaddress.TabIndex = 2; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(22, 57); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(118, 13); + this.label1.TabIndex = 1; + this.label1.Text = "Digital Society Address:"; + // + // flowLayoutPanel1 + // + this.flowLayoutPanel1.AutoSize = true; + this.flowLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.flowLayoutPanel1.Controls.Add(this.opt_btncancel); + this.flowLayoutPanel1.Controls.Add(this.btnsave); + this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.flowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.RightToLeft; + this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 259); + this.flowLayoutPanel1.Name = "flowLayoutPanel1"; + this.flowLayoutPanel1.Size = new System.Drawing.Size(432, 31); + this.flowLayoutPanel1.TabIndex = 0; + // + // opt_btncancel + // + this.opt_btncancel.AutoSize = true; + this.opt_btncancel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.opt_btncancel.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.opt_btncancel.Location = new System.Drawing.Point(377, 3); + this.opt_btncancel.Name = "opt_btncancel"; + this.opt_btncancel.Size = new System.Drawing.Size(52, 25); + this.opt_btncancel.TabIndex = 0; + this.opt_btncancel.Text = "Cancel"; + this.opt_btncancel.UseVisualStyleBackColor = true; + this.opt_btncancel.Click += new System.EventHandler(this.opt_btncancel_Click); + // + // btnsave + // + this.btnsave.AutoSize = true; + this.btnsave.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.btnsave.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnsave.Location = new System.Drawing.Point(327, 3); + this.btnsave.Name = "btnsave"; + this.btnsave.Size = new System.Drawing.Size(44, 25); + this.btnsave.TabIndex = 1; + this.btnsave.Text = "Save"; + this.btnsave.UseVisualStyleBackColor = true; + this.btnsave.Click += new System.EventHandler(this.btnsave_Click); + // + // flcampaign + // + this.flcampaign.AutoSize = true; + this.flcampaign.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.flcampaign.Controls.Add(this.btnnewgame); + this.flcampaign.Controls.Add(this.btncontinue); + this.flcampaign.Controls.Add(this.button10); + this.flcampaign.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; + this.flcampaign.Location = new System.Drawing.Point(242, 364); + this.flcampaign.Name = "flcampaign"; + this.flcampaign.Size = new System.Drawing.Size(187, 87); + this.flcampaign.TabIndex = 3; + // + // btnnewgame + // + this.btnnewgame.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnnewgame.Location = new System.Drawing.Point(3, 3); + this.btnnewgame.Name = "btnnewgame"; + this.btnnewgame.Size = new System.Drawing.Size(181, 23); + this.btnnewgame.TabIndex = 0; + this.btnnewgame.Text = "New Game"; + this.btnnewgame.UseVisualStyleBackColor = true; + this.btnnewgame.Click += new System.EventHandler(this.btnnewgame_Click); + // + // btncontinue + // + this.btncontinue.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btncontinue.Location = new System.Drawing.Point(3, 32); + this.btncontinue.Name = "btncontinue"; + this.btncontinue.Size = new System.Drawing.Size(181, 23); + this.btncontinue.TabIndex = 1; + this.btncontinue.Text = "Continue"; + this.btncontinue.UseVisualStyleBackColor = true; + this.btncontinue.Click += new System.EventHandler(this.btncontinue_Click); + // + // button10 + // + this.button10.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button10.Location = new System.Drawing.Point(3, 61); + this.button10.Name = "button10"; + this.button10.Size = new System.Drawing.Size(181, 23); + this.button10.TabIndex = 4; + this.button10.Text = "Back"; + this.button10.UseVisualStyleBackColor = true; + this.button10.Click += new System.EventHandler(this.button10_Click); + // // MainMenu // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackColor = System.Drawing.Color.Black; this.ClientSize = new System.Drawing.Size(1161, 566); + this.Controls.Add(this.flcampaign); + this.Controls.Add(this.pnloptions); this.Controls.Add(this.lbticker); this.Controls.Add(this.flmenu); this.ForeColor = System.Drawing.Color.White; @@ -129,6 +296,11 @@ this.Text = "MainMenu"; this.Load += new System.EventHandler(this.MainMenu_Load); this.flmenu.ResumeLayout(false); + this.pnloptions.ResumeLayout(false); + this.pnloptions.PerformLayout(); + this.flowLayoutPanel1.ResumeLayout(false); + this.flowLayoutPanel1.PerformLayout(); + this.flcampaign.ResumeLayout(false); this.ResumeLayout(false); this.PerformLayout(); @@ -143,5 +315,19 @@ private System.Windows.Forms.Button button4; private System.Windows.Forms.Button button5; private System.Windows.Forms.Label lbticker; + private System.Windows.Forms.Panel pnloptions; + private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; + private System.Windows.Forms.Button opt_btncancel; + private System.Windows.Forms.Button btnsave; + private System.Windows.Forms.TextBox txtubase; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox txtdsport; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox txtdsaddress; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.FlowLayoutPanel flcampaign; + private System.Windows.Forms.Button btnnewgame; + private System.Windows.Forms.Button btncontinue; + private System.Windows.Forms.Button button10; } } \ No newline at end of file diff --git a/ShiftOS.WinForms/MainMenu/MainMenu.cs b/ShiftOS.WinForms/MainMenu/MainMenu.cs index 20cd4ec..4b510e2 100644 --- a/ShiftOS.WinForms/MainMenu/MainMenu.cs +++ b/ShiftOS.WinForms/MainMenu/MainMenu.cs @@ -47,11 +47,20 @@ namespace ShiftOS.WinForms.MainMenu tickermove.Interval = 1; tickerreset.Interval = 1000; + pnloptions.Hide(); + flcampaign.Hide(); flmenu.CenterParent(); tickerreset.Start(); } + public void HideOptions() + { + pnloptions.Hide(); + flmenu.BringToFront(); + flmenu.CenterParent(); + } + private void MainMenu_Load(object sender, EventArgs e) { Tools.ControlManager.SetupControls(this); @@ -76,6 +85,12 @@ namespace ShiftOS.WinForms.MainMenu return "Terminal too weird for ya? You can use the Format Editor to generate your own Terminal command parser. No coding knowledge needed!"; case 5: return "Contests are a good way to earn heaps of Codepoints. Head on over to http://getshiftos.ml/Contests for info on current community contests."; + case 6: + return "There's no bugs in this game... But if you find some, please submit them to http://getshiftos.ml/Bugs."; + case 7: + return "SHIFTOS - PROPERTY OF MICHAEL VANOVERBEEK. FOR INTERNAL USE ONLY. Build number = sos_tr_133764 [Just kidding. ShiftOS is open-source. Find the code at http://github.com/shiftos-game/ShiftOS!]"; + case 8: + return "Hold your Codepoints against the wall... when they take everything away. Hold your Codepoints against the wall..."; default: return "Good God. We don't know what to put here."; } @@ -83,7 +98,18 @@ namespace ShiftOS.WinForms.MainMenu private void button1_Click(object sender, EventArgs e) { - Desktop.CurrentDesktop.Show(); + if(System.IO.File.Exists(System.IO.Path.Combine(Paths.SaveDirectory, "autosave.save"))) + { + btncontinue.Show(); + } + else + { + btncontinue.Hide(); + } + flmenu.Hide(); + flcampaign.Show(); + flcampaign.BringToFront(); + flcampaign.CenterParent(); } private void button5_Click(object sender, EventArgs e) @@ -96,5 +122,97 @@ namespace ShiftOS.WinForms.MainMenu (Desktop.CurrentDesktop as WinformsDesktop).IsSandbox = true; Desktop.CurrentDesktop.Show(); } + + private void button3_Click(object sender, EventArgs e) + { + var conf = ShiftOS.Objects.UserConfig.Get(); + + txtubase.Text = conf.UniteUrl; + txtdsaddress.Text = conf.DigitalSocietyAddress; + txtdsport.Text = conf.DigitalSocietyPort.ToString(); + + + pnloptions.Show(); + pnloptions.BringToFront(); + pnloptions.CenterParent(); + } + + private void opt_btncancel_Click(object sender, EventArgs e) + { + HideOptions(); + } + + private void btnsave_Click(object sender, EventArgs e) + { + var conf = ShiftOS.Objects.UserConfig.Get(); + + conf.DigitalSocietyAddress = txtdsaddress.Text; + + int p = 0; + + if(int.TryParse(txtdsport.Text, out p) == false) + { + Infobox.Show("Invalid port number", "The Digital Society Port must be a valid whole number between 0 and 65535."); + return; + } + else + { + if(p < 0 || p > 65535) + { + Infobox.Show("Invalid port number", "The Digital Society Port must be a valid whole number between 0 and 65535."); + return; + } + } + + conf.DigitalSocietyPort = p; + + string unite = txtubase.Text; + if (unite.EndsWith("/")) + { + int len = unite.Length; + int index = len - 1; + int end = 1; + unite = unite.Remove(index, end); + } + conf.UniteUrl = unite; + + System.IO.File.WriteAllText("servers.json", Newtonsoft.Json.JsonConvert.SerializeObject(conf, Newtonsoft.Json.Formatting.Indented)); + + HideOptions(); + } + + private void button10_Click(object sender, EventArgs e) + { + flcampaign.Hide(); + flmenu.Show(); + flmenu.BringToFront(); + flmenu.CenterParent(); + } + + private void btncontinue_Click(object sender, EventArgs e) + { + Desktop.CurrentDesktop.Show(); + + } + + private void btnnewgame_Click(object sender, EventArgs e) + { + string path = System.IO.Path.Combine(Paths.SaveDirectory, "autosave.save"); + if (System.IO.File.Exists(path)) + { + Infobox.PromptYesNo("Campaign", "You are about to start a new game, which will erase any previous progress. Are you sure you want to do this?", (result) => + { + if (result == true) + { + System.IO.File.Delete(path); + Desktop.CurrentDesktop.Show(); + } + }); + } + else + { + Desktop.CurrentDesktop.Show(); + } + } } } diff --git a/ShiftOS_TheReturn/AudioManager.cs b/ShiftOS_TheReturn/AudioManager.cs index 0a1a210..0950b55 100644 --- a/ShiftOS_TheReturn/AudioManager.cs +++ b/ShiftOS_TheReturn/AudioManager.cs @@ -125,6 +125,10 @@ namespace ShiftOS.Engine } if (play) { + while(_out.PlaybackState == PlaybackState.Playing) + { + Thread.Sleep(10); + } ShiftOS.Engine.AudioManager.Stop(); _out = new WaveOut(); var mp3 = new WaveFileReader(str); diff --git a/ShiftOS_TheReturn/Paths.cs b/ShiftOS_TheReturn/Paths.cs index 5b75ae6..332cdd3 100644 --- a/ShiftOS_TheReturn/Paths.cs +++ b/ShiftOS_TheReturn/Paths.cs @@ -94,6 +94,15 @@ namespace ShiftOS.Engine } + public static string SaveDirectory + { + get + { + string appdata = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); + return System.IO.Path.Combine(appdata, "ShiftOS", "saves"); + } + } + /// /// Gets all full paths without their keynames. /// diff --git a/ShiftOS_TheReturn/SaveSystem.cs b/ShiftOS_TheReturn/SaveSystem.cs index c5a6a51..18f8f78 100644 --- a/ShiftOS_TheReturn/SaveSystem.cs +++ b/ShiftOS_TheReturn/SaveSystem.cs @@ -575,14 +575,14 @@ namespace ShiftOS.Engine public static void ReadSave() { //Migrate old saves. - if(System.IO.Directory.Exists("C:\\ShiftOS2")) + if (System.IO.Directory.Exists("C:\\ShiftOS2")) { Console.WriteLine("Old save detected. Migrating filesystem to MFS..."); foreach (string file in System.IO.Directory.EnumerateDirectories("C:\\ShiftOS2") .Select(d => new DirectoryInfo(d).FullName)) { - if(!Utils.DirectoryExists(file.Replace("C:\\ShiftOS2\\", "0:/").Replace("\\", "/"))) - Utils.CreateDirectory(file.Replace("C:\\ShiftOS2\\", "0:/").Replace("\\", "/")); + if (!Utils.DirectoryExists(file.Replace("C:\\ShiftOS2\\", "0:/").Replace("\\", "/"))) + Utils.CreateDirectory(file.Replace("C:\\ShiftOS2\\", "0:/").Replace("\\", "/")); } foreach (string file in System.IO.Directory.EnumerateFiles("C:\\ShiftOS2")) { @@ -594,25 +594,18 @@ namespace ShiftOS.Engine } + string path = Path.Combine(Paths.SaveDirectory, "autosave.save"); - if (Utils.FileExists(Paths.SaveFileInner)) + if (System.IO.File.Exists(Path.Combine(Paths.SaveDirectory, "autosave.save"))) { - oobe.ShowSaveTransfer(JsonConvert.DeserializeObject(Utils.ReadAllText(Paths.SaveFileInner))); + CurrentSave = JsonConvert.DeserializeObject(System.IO.File.ReadAllText(path)); } else { - if (Utils.FileExists(Paths.GetPath("user.dat"))) - { - string token = Utils.ReadAllText(Paths.GetPath("user.dat")); - - ServerManager.SendMessage("mud_token_login", token); - } - else - { - NewSave(); - } + NewSave(); } + } /// @@ -644,15 +637,25 @@ namespace ShiftOS.Engine Console.Write("{SE_SAVING}... "); if (SaveSystem.CurrentSave != null) { - Utils.WriteAllText(Paths.GetPath("user.dat"), CurrentSave.UniteAuthToken); var serialisedSaveFile = JsonConvert.SerializeObject(CurrentSave, Formatting.Indented); new Thread(() => { - // please don't do networking on the main thread if you're just going to - // discard the response, it's extremely slow - ServerManager.SendMessage("mud_save", serialisedSaveFile); + try + { + // please don't do networking on the main thread if you're just going to + // discard the response, it's extremely slow + ServerManager.SendMessage("mud_save", serialisedSaveFile); + } + catch { } }) { IsBackground = false }.Start(); + if (!System.IO.Directory.Exists(Paths.SaveDirectory)) + { + System.IO.Directory.CreateDirectory(Paths.SaveDirectory); + + } + + System.IO.File.WriteAllText(Path.Combine(Paths.SaveDirectory, "autosave.save"), serialisedSaveFile); } if (!Shiftorium.Silent) Console.WriteLine(" ...{DONE}."); -- cgit v1.2.3 From 107a98686a105468b5f200ebcbd27343c1210ce4 Mon Sep 17 00:00:00 2001 From: RogueAI42 Date: Sun, 11 Jun 2017 17:34:38 +1000 Subject: ReflectMan Saves The Day.............. Refactored every part in the code that used that damn foreach loop. All assemblies are now loaded on startup into an array, and the results of GetType() on each are concatenated into another array. The parts of the code that were loading the assemblies and scanning them themselves now look to ReflectMan.Types, and all disk I/O is limited to the first time ReflectMan is accessed. While I was there I also replaced some other foreach loops with array comprehensions and such to speed things up - there is a noticeable improvement. It doesn't seem to have broken anything, but I'd appreciate if someone could do more stress testing for me. --- ShiftOS.WinForms/Applications/IconManager.cs | 99 ++++++++---------- ShiftOS.WinForms/Applications/Shiftnet.cs | 113 +++++++++------------ .../Applications/ShiftoriumFrontend.cs | 7 +- ShiftOS.WinForms/HackerCommands.cs | 25 +---- ShiftOS.WinForms/Program.cs | 70 +++++-------- ShiftOS.WinForms/ShiftnetSites/AppscapeMain.cs | 30 ++---- ShiftOS.WinForms/ShiftnetSites/MainHomepage.cs | 57 ++++------- ShiftOS.WinForms/ShiftnetSites/ShiftSoft_Ping.cs | 69 +++++-------- ShiftOS.WinForms/WidgetManager.cs | 36 ++----- ShiftOS_TheReturn/AppLauncherDaemon.cs | 53 ++-------- ShiftOS_TheReturn/AppearanceManager.cs | 20 +--- ShiftOS_TheReturn/Commands.cs | 89 +++++----------- ShiftOS_TheReturn/NotificationDaemon.cs | 21 +--- ShiftOS_TheReturn/ReflectMan.cs | 80 +++++++++++++++ ShiftOS_TheReturn/Scripting.cs | 53 ++-------- ShiftOS_TheReturn/ServerManager.cs | 27 ++--- ShiftOS_TheReturn/ShiftOS.Engine.csproj | 1 + ShiftOS_TheReturn/Shiftorium.cs | 22 +--- ShiftOS_TheReturn/Skinning.cs | 34 ++----- ShiftOS_TheReturn/Story.cs | 65 +++++------- ShiftOS_TheReturn/TerminalBackend.cs | 66 +++++------- 21 files changed, 374 insertions(+), 663 deletions(-) create mode 100644 ShiftOS_TheReturn/ReflectMan.cs (limited to 'ShiftOS.WinForms/Applications') diff --git a/ShiftOS.WinForms/Applications/IconManager.cs b/ShiftOS.WinForms/Applications/IconManager.cs index 0c6e119..7bbeb34 100644 --- a/ShiftOS.WinForms/Applications/IconManager.cs +++ b/ShiftOS.WinForms/Applications/IconManager.cs @@ -92,70 +92,51 @@ namespace ShiftOS.WinForms.Applications { flbody.Controls.Clear(); //Clear the icon list. - List types = new List(); + Type[] types = Array.FindAll(ReflectMan.Types, x => x.GetCustomAttributes(false).FirstOrDefault(y => y is DefaultIconAttribute) != null); - foreach(var exe in System.IO.Directory.GetFiles(Environment.CurrentDirectory)) - { - if(exe.ToLower().EndsWith(".exe") || exe.ToLower().EndsWith(".dll")) - { - try - { - var asm = Assembly.LoadFile(exe); + pageCount = types.GetPageCount(pageSize); - var typeList = asm.GetTypes().Where(x => x.GetCustomAttributes(false).FirstOrDefault(y => y is DefaultIconAttribute) != null); - types.AddRange(typeList); - - } - catch { } - } - } - - pageCount = types.ToArray().GetPageCount(pageSize); - - foreach (var type in types.ToArray().GetItemsOnPage(currentPage, pageSize)) + foreach (var type in Array.FindAll(types.GetItemsOnPage(currentPage, pageSize), t => Shiftorium.UpgradeAttributesUnlocked(t))) { - if (Shiftorium.UpgradeAttributesUnlocked(type)) + var pnl = new Panel(); + pnl.Height = 30; + pnl.Width = flbody.Width - 15; + flbody.Controls.Add(pnl); + pnl.Show(); + var pic = new PictureBox(); + pic.SizeMode = PictureBoxSizeMode.StretchImage; + pic.Size = new Size(24, 24); + pic.Image = GetIcon(type.Name); + pnl.Controls.Add(pic); + pic.Left = 5; + pic.Top = (pnl.Height - pic.Height) / 2; + pic.Show(); + var lbl = new Label(); + lbl.Tag = "header3"; + lbl.AutoSize = true; + lbl.Text = NameChangerBackend.GetNameRaw(type); + ControlManager.SetupControl(lbl); + pnl.Controls.Add(lbl); + lbl.CenterParent(); + lbl.Show(); + var btn = new Button(); + btn.Text = "Change..."; + btn.AutoSize = true; + btn.AutoSizeMode = AutoSizeMode.GrowAndShrink; + pnl.Controls.Add(btn); + btn.Left = (pnl.Width - btn.Width) - 5; + btn.Top = (pnl.Height - btn.Height) / 2; + btn.Click += (o, a) => { - var pnl = new Panel(); - pnl.Height = 30; - pnl.Width = flbody.Width - 15; - flbody.Controls.Add(pnl); - pnl.Show(); - var pic = new PictureBox(); - pic.SizeMode = PictureBoxSizeMode.StretchImage; - pic.Size = new Size(24, 24); - pic.Image = GetIcon(type.Name); - pnl.Controls.Add(pic); - pic.Left = 5; - pic.Top = (pnl.Height - pic.Height) / 2; - pic.Show(); - var lbl = new Label(); - lbl.Tag = "header3"; - lbl.AutoSize = true; - lbl.Text = NameChangerBackend.GetNameRaw(type); - ControlManager.SetupControl(lbl); - pnl.Controls.Add(lbl); - lbl.CenterParent(); - lbl.Show(); - var btn = new Button(); - btn.Text = "Change..."; - btn.AutoSize = true; - btn.AutoSizeMode = AutoSizeMode.GrowAndShrink; - pnl.Controls.Add(btn); - btn.Left = (pnl.Width - btn.Width) - 5; - btn.Top = (pnl.Height - btn.Height) / 2; - btn.Click += (o, a) => + var gfp = new GraphicPicker(pic.Image, lbl.Text + " icon", ImageLayout.Stretch, (raw, img, layout) => { - var gfp = new GraphicPicker(pic.Image, lbl.Text + " icon", ImageLayout.Stretch, (raw, img, layout) => - { - pic.Image = img; - SetIcon(type.Name, raw); - }); - AppearanceManager.SetupDialog(gfp); - }; - btn.Show(); - ControlManager.SetupControls(pnl); - } + pic.Image = img; + SetIcon(type.Name, raw); + }); + AppearanceManager.SetupDialog(gfp); + }; + btn.Show(); + ControlManager.SetupControls(pnl); } btnnext.Visible = (currentPage < pageCount - 1); diff --git a/ShiftOS.WinForms/Applications/Shiftnet.cs b/ShiftOS.WinForms/Applications/Shiftnet.cs index 6ccdb19..136f680 100644 --- a/ShiftOS.WinForms/Applications/Shiftnet.cs +++ b/ShiftOS.WinForms/Applications/Shiftnet.cs @@ -150,79 +150,60 @@ namespace ShiftOS.WinForms.Applications { txturl.Text = url; - foreach(var exe in Directory.GetFiles(Environment.CurrentDirectory)) + try { - if(exe.EndsWith(".exe") || exe.EndsWith(".dll")) + foreach (var type in Array.FindAll(ReflectMan.Types, t => t.GetInterfaces().Contains(typeof(IShiftnetSite)) && t.BaseType == typeof(UserControl) && Shiftorium.UpgradeAttributesUnlocked(t))) { - try + var attribute = type.GetCustomAttributes(false).FirstOrDefault(x => x is ShiftnetSiteAttribute && (x as ShiftnetSiteAttribute).Url == url) as ShiftnetSiteAttribute; + if (attribute != null) { - var asm = Assembly.LoadFile(exe); - foreach (var type in asm.GetTypes()) - { - if (type.GetInterfaces().Contains(typeof(IShiftnetSite))) + var obj = (IShiftnetSite)Activator.CreateInstance(type, null); + obj.GoToUrl += (u) => { - if (type.BaseType == typeof(UserControl)) - { - var attribute = type.GetCustomAttributes(false).FirstOrDefault(x => x is ShiftnetSiteAttribute) as ShiftnetSiteAttribute; - if (attribute != null) - { - if (attribute.Url == url) - { - if (Shiftorium.UpgradeAttributesUnlocked(type)) - { - var obj = (IShiftnetSite)Activator.CreateInstance(type, null); - obj.GoToUrl += (u) => - { - History.Push(CurrentUrl); - NavigateToUrl(u); - }; - obj.GoBack += () => - { - string u = History.Pop(); - Future.Push(u); - NavigateToUrl(u); - }; - CurrentPage = obj; - this.pnlcanvas.Controls.Clear(); - this.pnlcanvas.Controls.Add((UserControl)obj); - ((UserControl)obj).Show(); - ((UserControl)obj).Dock = DockStyle.Fill; - obj.OnUpgrade(); - obj.OnSkinLoad(); - obj.Setup(); - AppearanceManager.SetWindowTitle(this, attribute.Name + " - Shiftnet"); - return; - } - } - } - } - } - } - } - catch (Exception ex) - { - pnlcanvas.Controls.Clear(); - var tlbl = new Label(); - tlbl.Text = "Server error in \"" + url + "\" application."; - tlbl.Tag = "header1"; - tlbl.AutoSize = true; - tlbl.Location = new Point(10, 10); - tlbl.Dock = DockStyle.Top; - pnlcanvas.Controls.Add(tlbl); - tlbl.Show(); - - var crash = new Label(); - crash.Dock = DockStyle.Fill; - crash.AutoSize = false; - crash.Text = ex.ToString(); - pnlcanvas.Controls.Add(crash); - crash.Show(); - crash.BringToFront(); - ControlManager.SetupControls(pnlcanvas); - return; + History.Push(CurrentUrl); + NavigateToUrl(u); + }; + obj.GoBack += () => + { + string u = History.Pop(); + Future.Push(u); + NavigateToUrl(u); + }; + CurrentPage = obj; + this.pnlcanvas.Controls.Clear(); + this.pnlcanvas.Controls.Add((UserControl)obj); + ((UserControl)obj).Show(); + ((UserControl)obj).Dock = DockStyle.Fill; + obj.OnUpgrade(); + obj.OnSkinLoad(); + obj.Setup(); + AppearanceManager.SetWindowTitle(this, attribute.Name + " - Shiftnet"); + return; } } } + catch (Exception ex) + { + pnlcanvas.Controls.Clear(); + var tlbl = new Label(); + tlbl.Text = "Server error in \"" + url + "\" application."; + tlbl.Tag = "header1"; + tlbl.AutoSize = true; + tlbl.Location = new Point(10, 10); + tlbl.Dock = DockStyle.Top; + pnlcanvas.Controls.Add(tlbl); + tlbl.Show(); + + var crash = new Label(); + crash.Dock = DockStyle.Fill; + crash.AutoSize = false; + crash.Text = ex.ToString(); + pnlcanvas.Controls.Add(crash); + crash.Show(); + crash.BringToFront(); + ControlManager.SetupControls(pnlcanvas); + return; + } pnlcanvas.Controls.Clear(); var lbl = new Label(); lbl.Text = "Page not found!"; diff --git a/ShiftOS.WinForms/Applications/ShiftoriumFrontend.cs b/ShiftOS.WinForms/Applications/ShiftoriumFrontend.cs index eebd897..6886d98 100644 --- a/ShiftOS.WinForms/Applications/ShiftoriumFrontend.cs +++ b/ShiftOS.WinForms/Applications/ShiftoriumFrontend.cs @@ -114,8 +114,12 @@ namespace ShiftOS.WinForms.Applications private void SetList() { - lbnoupgrades.Hide(); lbupgrades.Items.Clear(); + if (upgrades.Length == 0) + return; + lbnoupgrades.Hide(); + if (CategoryId > upgrades.Length) + CategoryId = 0; try { lbupgrades.Items.AddRange(upgrades[CategoryId].Keys.ToArray()); @@ -250,6 +254,7 @@ namespace ShiftOS.WinForms.Applications private void moveCat(short direction) // direction is -1 to move backwards or 1 to move forwards { + if (cats.Length == 0) return; CategoryId += direction; CategoryId %= cats.Length; if (CategoryId < 0) CategoryId += cats.Length; // fix modulo on negatives diff --git a/ShiftOS.WinForms/HackerCommands.cs b/ShiftOS.WinForms/HackerCommands.cs index 316b7fc..dd8bde8 100644 --- a/ShiftOS.WinForms/HackerCommands.cs +++ b/ShiftOS.WinForms/HackerCommands.cs @@ -679,28 +679,13 @@ namespace ShiftOS.WinForms [Command("list", description ="Lists all story IDs.")] public static bool ListIds() { - foreach(var exec in System.IO.Directory.GetFiles(Environment.CurrentDirectory)) - { - if(exec.ToLower().EndsWith(".exe") || exec.ToLower().EndsWith(".dll")) + foreach(var type in ReflectMan.Types) + foreach(var method in type.GetMethods(BindingFlags.Public | BindingFlags.Static)) { - try - { - var asm = Assembly.LoadFile(exec); - { - foreach(var type in asm.GetTypes()) - { - foreach(var method in type.GetMethods(BindingFlags.Public | BindingFlags.Static)) - { - var attr = method.GetCustomAttributes(false).FirstOrDefault(x => x is StoryAttribute); - if (attr != null) - Console.WriteLine(" - " + (attr as StoryAttribute).StoryID); - } - } - } - } - catch { } + var attr = method.GetCustomAttributes(false).FirstOrDefault(x => x is StoryAttribute); + if (attr != null) + Console.WriteLine(" - " + (attr as StoryAttribute).StoryID); } - } return true; } diff --git a/ShiftOS.WinForms/Program.cs b/ShiftOS.WinForms/Program.cs index b5fb731..d3530a0 100644 --- a/ShiftOS.WinForms/Program.cs +++ b/ShiftOS.WinForms/Program.cs @@ -114,53 +114,39 @@ namespace ShiftOS.WinForms { var defaultList = JsonConvert.DeserializeObject>(Properties.Resources.Shiftorium); - foreach(var exe in Directory.GetFiles(Environment.CurrentDirectory)) + foreach (var type in ReflectMan.Types) { - if (exe.EndsWith(".exe") || exe.EndsWith(".dll")) + var attribs = type.GetCustomAttributes(false); + var attrib = attribs.FirstOrDefault(x => x is AppscapeEntryAttribute) as AppscapeEntryAttribute; + if (attrib != null) { - try + var upgrade = new ShiftoriumUpgrade { - var asm = Assembly.LoadFile(exe); - foreach (var type in asm.GetTypes()) - { - var attrib = type.GetCustomAttributes(false).FirstOrDefault(x => x is AppscapeEntryAttribute) as AppscapeEntryAttribute; - if (attrib != null) - { - var upgrade = new ShiftoriumUpgrade - { - Id = attrib.Name.ToLower().Replace(" ", "_"), - Name = attrib.Name, - Description = attrib.Description, - Cost = attrib.Cost, - Category = attrib.Category, - Dependencies = (string.IsNullOrWhiteSpace(attrib.DependencyString)) ? "appscape_handled_nodisplay" : "appscape_handled_nodisplay;" + attrib.DependencyString - }; - defaultList.Add(upgrade); - } - - var sattrib = type.GetCustomAttributes(false).FirstOrDefault(x => x is StpContents) as StpContents; - if (sattrib != null) - { - var upgrade = new ShiftoriumUpgrade - { - Id = sattrib.Upgrade, - Name = sattrib.Name, - Description = "This is a hidden dummy upgrade for the .stp file installation attribute \"" + sattrib.Name + "\".", - Cost = 0, - Category = "If this is shown, there's a bug in the Shiftorium Provider or the user is a supreme Shifter.", - Dependencies = "dummy_nodisplay" - }; - defaultList.Add(upgrade); - } - - } - - - + Id = attrib.Name.ToLower().Replace(" ", "_"), + Name = attrib.Name, + Description = attrib.Description, + Cost = attrib.Cost, + Category = attrib.Category, + Dependencies = (string.IsNullOrWhiteSpace(attrib.DependencyString)) ? "appscape_handled_nodisplay" : "appscape_handled_nodisplay;" + attrib.DependencyString + }; + defaultList.Add(upgrade); + } - } - catch { } + var sattrib = attribs.FirstOrDefault(x => x is StpContents) as StpContents; + if (sattrib != null) + { + var upgrade = new ShiftoriumUpgrade + { + Id = sattrib.Upgrade, + Name = sattrib.Name, + Description = "This is a hidden dummy upgrade for the .stp file installation attribute \"" + sattrib.Name + "\".", + Cost = 0, + Category = "If this is shown, there's a bug in the Shiftorium Provider or the user is a supreme Shifter.", + Dependencies = "dummy_nodisplay" + }; + defaultList.Add(upgrade); } + } return defaultList; } diff --git a/ShiftOS.WinForms/ShiftnetSites/AppscapeMain.cs b/ShiftOS.WinForms/ShiftnetSites/AppscapeMain.cs index c7830d0..c9b6f64 100644 --- a/ShiftOS.WinForms/ShiftnetSites/AppscapeMain.cs +++ b/ShiftOS.WinForms/ShiftnetSites/AppscapeMain.cs @@ -207,33 +207,21 @@ namespace ShiftOS.WinForms.ShiftnetSites if (result == true) { SaveSystem.CurrentSave.Codepoints -= upg.Cost; - foreach (var exe in Directory.GetFiles(Environment.CurrentDirectory)) + foreach (var type in ReflectMan.Types) { - if (exe.EndsWith(".exe") || exe.EndsWith(".dll")) + var attrib = type.GetCustomAttributes(false).FirstOrDefault(x => x is AppscapeEntryAttribute) as AppscapeEntryAttribute; + if (attrib != null) { - try + if (attrib.Name == upg.Name) { - var asm = Assembly.LoadFile(exe); - foreach (var type in asm.GetTypes()) - { - var attrib = type.GetCustomAttributes(false).FirstOrDefault(x => x is AppscapeEntryAttribute) as AppscapeEntryAttribute; - if (attrib != null) - { - if (attrib.Name == upg.Name) - { - var installer = new Applications.Installer(); - var installation = new AppscapeInstallation(upg.Name, attrib.DownloadSize, upg.ID); - AppearanceManager.SetupWindow(installer); - installer.InitiateInstall(installation); - return; - } - } - } + var installer = new Applications.Installer(); + var installation = new AppscapeInstallation(upg.Name, attrib.DownloadSize, upg.ID); + AppearanceManager.SetupWindow(installer); + installer.InitiateInstall(installation); + return; } - catch { } } } - } }); } diff --git a/ShiftOS.WinForms/ShiftnetSites/MainHomepage.cs b/ShiftOS.WinForms/ShiftnetSites/MainHomepage.cs index 6e692a7..10ba809 100644 --- a/ShiftOS.WinForms/ShiftnetSites/MainHomepage.cs +++ b/ShiftOS.WinForms/ShiftnetSites/MainHomepage.cs @@ -39,49 +39,30 @@ namespace ShiftOS.WinForms.ShiftnetSites { //Get the Fundamentals List flfundamentals.Controls.Clear(); - foreach (var exe in Directory.GetFiles(Environment.CurrentDirectory)) + foreach (var type in Array.FindAll(ReflectMan.Types, t => t.GetInterfaces().Contains(typeof(IShiftnetSite)) && t.BaseType == typeof(UserControl) && Shiftorium.UpgradeAttributesUnlocked(t))) { - if (exe.EndsWith(".exe") || exe.EndsWith(".dll")) + var attrs = type.GetCustomAttributes(false); + var attribute = attrs.FirstOrDefault(x => x is ShiftnetSiteAttribute) as ShiftnetSiteAttribute; + if (attribute != null) { - try + if (attrs.OfType().Any()) { - var asm = Assembly.LoadFile(exe); - foreach (var type in asm.GetTypes()) + var dash = new Label(); + dash.Text = " - "; + dash.AutoSize = true; + flfundamentals.Controls.Add(dash); + dash.Show(); + var link = new LinkLabel(); + link.Text = attribute.Name; + link.Click += (o, a) => { - if (type.GetInterfaces().Contains(typeof(IShiftnetSite))) - { - if (type.BaseType == typeof(UserControl)) - { - var attribute = type.GetCustomAttributes(false).FirstOrDefault(x => x is ShiftnetSiteAttribute) as ShiftnetSiteAttribute; - if (attribute != null) - { - if (Shiftorium.UpgradeAttributesUnlocked(type)) - { - if (type.GetCustomAttributes(false).FirstOrDefault(x => x is ShiftnetFundamentalAttribute) != null) - { - var dash = new Label(); - dash.Text = " - "; - dash.AutoSize = true; - flfundamentals.Controls.Add(dash); - dash.Show(); - var link = new LinkLabel(); - link.Text = attribute.Name; - link.Click += (o, a) => - { - GoToUrl?.Invoke(attribute.Url); - }; - flfundamentals.Controls.Add(link); - flfundamentals.SetFlowBreak(link, true); - link.Show(); - link.LinkColor = SkinEngine.LoadedSkin.ControlTextColor; - } - } - } - } - } - } + GoToUrl?.Invoke(attribute.Url); + }; + flfundamentals.Controls.Add(link); + flfundamentals.SetFlowBreak(link, true); + link.Show(); + link.LinkColor = SkinEngine.LoadedSkin.ControlTextColor; } - catch { } } } diff --git a/ShiftOS.WinForms/ShiftnetSites/ShiftSoft_Ping.cs b/ShiftOS.WinForms/ShiftnetSites/ShiftSoft_Ping.cs index 1593117..9b1c3b4 100644 --- a/ShiftOS.WinForms/ShiftnetSites/ShiftSoft_Ping.cs +++ b/ShiftOS.WinForms/ShiftnetSites/ShiftSoft_Ping.cs @@ -34,53 +34,38 @@ namespace ShiftOS.WinForms.ShiftnetSites public void SetupListing() { fllist.Controls.Clear(); - foreach(var exec in Directory.GetFiles(Environment.CurrentDirectory)) + foreach (var type in Array.FindAll(ReflectMan.Types, t => t.GetInterfaces().Contains(typeof(IShiftnetSite)))) { - if(exec.ToLower().EndsWith(".exe") || exec.ToLower().EndsWith(".dll")) + var attr = type.GetCustomAttributes(false).FirstOrDefault(x => x is ShiftnetSiteAttribute) as ShiftnetSiteAttribute; + if (attr != null) { - try + if (attr.Url.StartsWith("shiftnet/")) { - var asm = Assembly.LoadFile(exec); - var types = asm.GetTypes(); - foreach (var type in types) + var lnk = new LinkLabel(); + lnk.LinkColor = SkinEngine.LoadedSkin.ControlTextColor; + lnk.Text = attr.Name; + var desc = new Label(); + desc.AutoSize = true; + lnk.AutoSize = true; + desc.MaximumSize = new Size(this.Width / 3, 0); + desc.Text = attr.Description; + desc.Padding = new Padding { - if (type.GetInterfaces().Contains(typeof(IShiftnetSite))) - { - var attr = type.GetCustomAttributes(false).FirstOrDefault(x => x is ShiftnetSiteAttribute) as ShiftnetSiteAttribute; - if (attr != null) - { - if (attr.Url.StartsWith("shiftnet/")) - { - var lnk = new LinkLabel(); - lnk.LinkColor = SkinEngine.LoadedSkin.ControlTextColor; - lnk.Text = attr.Name; - var desc = new Label(); - desc.AutoSize = true; - lnk.AutoSize = true; - desc.MaximumSize = new Size(this.Width / 3, 0); - desc.Text = attr.Description; - desc.Padding = new Padding - { - Bottom = 25, - Top = 0, - Left = 10, - Right = 10 - }; - lnk.Click += (o, a) => - { - GoToUrl?.Invoke(attr.Url); - }; - fllist.Controls.Add(lnk); - fllist.Controls.Add(desc); - ControlManager.SetupControls(lnk); - lnk.Show(); - desc.Show(); - } - } - } - } + Bottom = 25, + Top = 0, + Left = 10, + Right = 10 + }; + lnk.Click += (o, a) => + { + GoToUrl?.Invoke(attr.Url); + }; + fllist.Controls.Add(lnk); + fllist.Controls.Add(desc); + ControlManager.SetupControls(lnk); + lnk.Show(); + desc.Show(); } - catch { } } } } diff --git a/ShiftOS.WinForms/WidgetManager.cs b/ShiftOS.WinForms/WidgetManager.cs index fec09f9..81a97af 100644 --- a/ShiftOS.WinForms/WidgetManager.cs +++ b/ShiftOS.WinForms/WidgetManager.cs @@ -16,36 +16,12 @@ namespace ShiftOS.WinForms { public static Dictionary GetAllWidgetTypes() { - Dictionary types = new Dictionary(); - foreach(var exe in System.IO.Directory.GetFiles(Environment.CurrentDirectory)) - { - if(exe.EndsWith(".exe") || exe.EndsWith(".dll")) - { - try - { - var asm = Assembly.LoadFile(exe); - foreach(var type in asm.GetTypes()) - { - if (type.GetInterfaces().Contains(typeof(IDesktopWidget))) - { - if (Shiftorium.UpgradeAttributesUnlocked(type)) - { - foreach (var attrib in type.GetCustomAttributes(false)) - { - if (attrib is DesktopWidgetAttribute) - { - var dw = attrib as DesktopWidgetAttribute; - types.Add(dw, type); - } - } - } - } - } - } - catch { } - } - } - return types; + var ret = new Dictionary(); + var types = Array.FindAll(ReflectMan.Types, t => t.GetInterfaces().Contains(typeof(IDesktopWidget)) && Shiftorium.UpgradeAttributesUnlocked(t)); + foreach (var type in types) + foreach (var attrib in Array.FindAll(type.GetCustomAttributes(false), a => a is DesktopWidgetAttribute)) + ret.Add(attrib as DesktopWidgetAttribute, type); + return ret; } internal static void SaveDetails(Type type, WidgetDetails location) diff --git a/ShiftOS_TheReturn/AppLauncherDaemon.cs b/ShiftOS_TheReturn/AppLauncherDaemon.cs index 716a6a3..c259556 100644 --- a/ShiftOS_TheReturn/AppLauncherDaemon.cs +++ b/ShiftOS_TheReturn/AppLauncherDaemon.cs @@ -63,55 +63,16 @@ namespace ShiftOS.Engine { List win = new List(); - foreach (var asmExec in System.IO.Directory.GetFiles(Environment.CurrentDirectory)) + foreach (var type in Array.FindAll(ReflectMan.Types, t => t.GetInterfaces().Contains(typeof(IShiftOSWindow)) && Shiftorium.UpgradeAttributesUnlocked(t))) { - if (asmExec.EndsWith(".dll") | asmExec.EndsWith(".exe")) - { - try - { - var asm = Assembly.LoadFrom(asmExec); - - if (asm.GetReferencedAssemblies().Contains("ShiftOS.Engine") || asm.FullName.Contains("ShiftOS.Engine")) + foreach (var attr in type.GetCustomAttributes(false)) + if (!(attr is MultiplayerOnlyAttribute && !KernelWatchdog.MudConnected)) + if (attr is LauncherAttribute) { - foreach (var type in asm.GetTypes()) - { - if (type.GetInterfaces().Contains(typeof(IShiftOSWindow))) - { - bool isAllowed = true; - foreach (var attr in type.GetCustomAttributes(false)) - { - if(attr is MultiplayerOnlyAttribute) - { - if(KernelWatchdog.MudConnected == false) - { - isAllowed = false; - - } - } - if (isAllowed == true) - { - if (attr is LauncherAttribute) - { - if (Shiftorium.UpgradeAttributesUnlocked(type)) - { - var launch = attr as LauncherAttribute; - if (launch.UpgradeInstalled) - { - win.Add(new LauncherItem { DisplayData = launch, LaunchType = type }); - } - } - } - } - } - } - } + var launch = attr as LauncherAttribute; + if (launch.UpgradeInstalled) + win.Add(new LauncherItem { DisplayData = launch, LaunchType = type }); } - } - catch - { - - } - } } foreach(var file in Utils.GetFiles(Paths.GetPath("applauncher"))) diff --git a/ShiftOS_TheReturn/AppearanceManager.cs b/ShiftOS_TheReturn/AppearanceManager.cs index e244b77..76060dd 100644 --- a/ShiftOS_TheReturn/AppearanceManager.cs +++ b/ShiftOS_TheReturn/AppearanceManager.cs @@ -58,25 +58,7 @@ namespace ShiftOS.Engine //HEY LETS FIND THE WINDOWS public static IEnumerable GetAllWindowTypes() { - List types = new List(); - foreach(var file in System.IO.Directory.GetFiles(Environment.CurrentDirectory)) - { - // hey if a thing is an exe or a dll show up plz kthx - if(file.EndsWith(".exe") || file.EndsWith(".dll")) - { - try - { - var asm = Assembly.LoadFile(file); - foreach(var type in asm.GetTypes()) - { - if (type.GetInterfaces().Contains(typeof(IShiftOSWindow))) - types.Add(type); - } - } - catch { } - } - } - return types; + return Array.FindAll(ReflectMan.Types, t => t.GetInterfaces().Contains(typeof(IShiftOSWindow))); } // hey you know that window we just made appear? well give it its title diff --git a/ShiftOS_TheReturn/Commands.cs b/ShiftOS_TheReturn/Commands.cs index f37bcb3..da4fb29 100644 --- a/ShiftOS_TheReturn/Commands.cs +++ b/ShiftOS_TheReturn/Commands.cs @@ -771,84 +771,41 @@ shiftorium.buy{{upgrade:""{upg.ID}""}}"); { var app = args["app"] as string; //ANNND now we start reflecting... - foreach (var asmExec in System.IO.Directory.GetFiles(Environment.CurrentDirectory)) + foreach (var type in Array.FindAll(ReflectMan.Types, t => t.BaseType == typeof(UserControl))) { - if (asmExec.EndsWith(".exe") || asmExec.EndsWith(".dll")) + var attr = type.GetCustomAttributes(false).FirstOrDefault(a => a is WinOpenAttribute && app == (a as WinOpenAttribute).ID); + if (attr != null) { - var asm = Assembly.LoadFile(asmExec); - try + if (SaveSystem.CurrentSave.Upgrades.ContainsKey(app)) { - foreach (var type in asm.GetTypes()) + if (Shiftorium.UpgradeInstalled(app)) { - if (type.BaseType == typeof(UserControl)) - { - foreach (var attr in type.GetCustomAttributes(false)) - { - if (attr is WinOpenAttribute) - { - if (app == (attr as WinOpenAttribute).ID) - { - if (SaveSystem.CurrentSave.Upgrades.ContainsKey(app)) - { - if (Shiftorium.UpgradeInstalled(app)) - { - IShiftOSWindow frm = Activator.CreateInstance(type) as IShiftOSWindow; - AppearanceManager.SetupWindow(frm); - return true; - } - else - { - throw new Exception($"{app} was not found on your system! Try looking in the shiftorium..."); - } - } - else - { - IShiftOSWindow frm = Activator.CreateInstance(type) as IShiftOSWindow; - AppearanceManager.SetupWindow(frm); - return true; - } - } - } - } - } + IShiftOSWindow frm = Activator.CreateInstance(type) as IShiftOSWindow; + AppearanceManager.SetupWindow(frm); + return true; + } + else + { + throw new Exception($"{app} was not found on your system! Try looking in the shiftorium..."); } } - catch { } - + else + { + IShiftOSWindow frm = Activator.CreateInstance(type) as IShiftOSWindow; + AppearanceManager.SetupWindow(frm); + return true; + } } } } else { - foreach (var asmExec in System.IO.Directory.GetFiles(Environment.CurrentDirectory)) - { - if (asmExec.EndsWith(".exe") || asmExec.EndsWith(".dll")) - { - try - { - var asm = Assembly.LoadFile(asmExec); - - foreach (var type in asm.GetTypes()) - { - if (type.GetInterfaces().Contains(typeof(IShiftOSWindow))) - { - foreach (var attr in type.GetCustomAttributes(false)) - { - if (attr is WinOpenAttribute) - { - if (Shiftorium.UpgradeAttributesUnlocked(type)) - { - Console.WriteLine("win.open{app:\"" + (attr as WinOpenAttribute).ID + "\"}"); - } - } - } - } - } - } - catch { } - } - } + + foreach (var type in Array.FindAll(ReflectMan.Types, t => t.GetInterfaces().Contains(typeof(IShiftOSWindow)) && Shiftorium.UpgradeAttributesUnlocked(t))) + foreach (var attr in Array.FindAll(type.GetCustomAttributes(false), a => a is WinOpenAttribute)) + if (Shiftorium.UpgradeAttributesUnlocked(type)) + Console.WriteLine("win.open{app:\"" + (attr as WinOpenAttribute).ID + "\"}"); return true; diff --git a/ShiftOS_TheReturn/NotificationDaemon.cs b/ShiftOS_TheReturn/NotificationDaemon.cs index 0725782..a532466 100644 --- a/ShiftOS_TheReturn/NotificationDaemon.cs +++ b/ShiftOS_TheReturn/NotificationDaemon.cs @@ -41,26 +41,7 @@ namespace ShiftOS.Engine /// An array of s containing the found objects. public static Type[] GetAllStatusIcons() { - List lst = new List(); - foreach(var exec in System.IO.Directory.GetFiles(Environment.CurrentDirectory)) - { - if(exec.ToLower().EndsWith(".exe") || exec.ToLower().EndsWith(".dll")) - { - try - { - var asm = Assembly.LoadFile(exec); - foreach(var type in asm.GetTypes().Where(x => x.GetInterfaces().Contains(typeof(IStatusIcon)))) - { - if (Shiftorium.UpgradeAttributesUnlocked(type)) - { - lst.Add(type); - } - } - } - catch { } - } - } - return lst.ToArray(); + return Array.FindAll(ReflectMan.Types, x => x.GetInterfaces().Contains(typeof(IStatusIcon)) && Shiftorium.UpgradeAttributesUnlocked(x)); } diff --git a/ShiftOS_TheReturn/ReflectMan.cs b/ShiftOS_TheReturn/ReflectMan.cs new file mode 100644 index 0000000..a0ead60 --- /dev/null +++ b/ShiftOS_TheReturn/ReflectMan.cs @@ -0,0 +1,80 @@ +/* + * MIT License + * + * Copyright (c) 2017 Michael VanOverbeek and ShiftOS devs + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace ShiftOS.Engine +{ + public static class ReflectMan + { + private static Assembly[] asms = null; + public static Assembly[] Asms + { + get + { + if (asms == null) + LoadAssemblies(); + return asms; + } + } + + private static Type[] types = null; + public static Type[] Types + { + get + { + if (types == null) + FindTypes(); + return types; + } + } + + private static void LoadAssemblies() + { + var ret = new List(); + foreach (var exe in Array.FindAll(System.IO.Directory.GetFiles(Environment.CurrentDirectory), n => n.EndsWith(".exe") || n.EndsWith(".dll"))) + try + { + var asm = Assembly.LoadFile(exe); + if (asm.GetReferencedAssemblies().Contains("ShiftOS.Engine") || asm.FullName.Contains("ShiftOS.Engine")) + ret.Add(asm); + } + catch { } // probably not a managed assembly + asms = ret.ToArray(); + } + + private static void FindTypes() + { + var ret = new List(); + foreach (var asm in Asms) + ret.AddRange(asm.GetTypes()); + types = ret.ToArray(); + } + } +} diff --git a/ShiftOS_TheReturn/Scripting.cs b/ShiftOS_TheReturn/Scripting.cs index 5021f50..081a6ae 100644 --- a/ShiftOS_TheReturn/Scripting.cs +++ b/ShiftOS_TheReturn/Scripting.cs @@ -205,55 +205,14 @@ end"); //This temporary proxy() method will be used by the API prober. Lua.proxy = new Func((objName) => { - foreach (var f in System.IO.Directory.GetFiles(Environment.CurrentDirectory)) - { - if (f.EndsWith(".exe") || f.EndsWith(".dll")) - { - try - { - - var asm = Assembly.LoadFile(f); - foreach (var type in asm.GetTypes()) - { - if (type.Name == objName) - { - dynamic dynObj = Activator.CreateInstance(type); - return dynObj; - } - - } - } - catch { } - } - } + dynamic dynObj = ReflectMan.Types.FirstOrDefault(t => t.Name == objName); + if (dynObj != null) + return dynObj; throw new Exception("{CLASS_NOT_FOUND}"); }); - - foreach (var f in System.IO.Directory.GetFiles(Environment.CurrentDirectory)) - { - if (f.EndsWith(".exe") || f.EndsWith(".dll")) - { - try - { - var thisasm = Assembly.LoadFile(f); - foreach (var type in thisasm.GetTypes()) - { - foreach (var attr in type.GetCustomAttributes(false)) - { - if (attr is ExposedAttribute) - { - var eattr = attr as ExposedAttribute; - Lua($"{eattr.Name} = proxy(\"{type.Name}\")"); - } - } - } - } - catch - { - - } - } - } + foreach (var type in ReflectMan.Types) + foreach (var attr in Array.FindAll(type.GetCustomAttributes(false), a => a is ExposedAttribute)) + Lua($"{(attr as ExposedAttribute).Name} = proxy(\"{type.Name}\")"); //Now we can null out the proxy() method as it can cause security risks. Lua.isRunning = new Func(() => { return this.Running; }); Lua.proxy = null; diff --git a/ShiftOS_TheReturn/ServerManager.cs b/ShiftOS_TheReturn/ServerManager.cs index be4f086..e6baa9a 100644 --- a/ShiftOS_TheReturn/ServerManager.cs +++ b/ShiftOS_TheReturn/ServerManager.cs @@ -110,32 +110,19 @@ Ping: {ServerManager.DigitalSocietyPing} ms { string[] split = msg.GUID.Split('|'); bool finished = false; - foreach (var exec in Directory.GetFiles(Environment.CurrentDirectory)) - { - if(exec.ToLower().EndsWith(".exe") || exec.ToLower().EndsWith(".dll")) + if (split[0] == SaveSystem.CurrentSave.SystemName) + foreach(var type in Array.FindAll(ReflectMan.Types, x => x.GetInterfaces().Contains(typeof(Server)) && Shiftorium.UpgradeAttributesUnlocked(x))) { - try + var attrib = type.GetCustomAttributes().FirstOrDefault(x => x is ServerAttribute) as ServerAttribute; + if(attrib != null) { - var asm = Assembly.LoadFile(exec); - foreach(var type in asm.GetTypes().Where(x => x.GetInterfaces().Contains(typeof(Server)))) + if(split[1] == attrib.Port.ToString()) { - var attrib = type.GetCustomAttributes().FirstOrDefault(x => x is ServerAttribute) as ServerAttribute; - if(attrib != null) - { - if(split[0] == SaveSystem.CurrentSave.SystemName && split[1] == attrib.Port.ToString()) - { - if (Shiftorium.UpgradeAttributesUnlocked(type)) - { - type.GetMethods(BindingFlags.Public | BindingFlags.Instance).FirstOrDefault(x => x.Name == "MessageReceived")?.Invoke(Activator.CreateInstance(type), null); - finished = true; - } - } - } + type.GetMethods(BindingFlags.Public | BindingFlags.Instance).FirstOrDefault(x => x.Name == "MessageReceived")?.Invoke(Activator.CreateInstance(type), null); + finished = true; } } - catch { } } - } if (finished == false) { Forward(split[2], "Error", $"{split[0]}:{split[1]}: connection refused"); diff --git a/ShiftOS_TheReturn/ShiftOS.Engine.csproj b/ShiftOS_TheReturn/ShiftOS.Engine.csproj index f70c41e..39299fd 100644 --- a/ShiftOS_TheReturn/ShiftOS.Engine.csproj +++ b/ShiftOS_TheReturn/ShiftOS.Engine.csproj @@ -123,6 +123,7 @@ True Resources.resx + diff --git a/ShiftOS_TheReturn/Shiftorium.cs b/ShiftOS_TheReturn/Shiftorium.cs index 7faf336..0362566 100644 --- a/ShiftOS_TheReturn/Shiftorium.cs +++ b/ShiftOS_TheReturn/Shiftorium.cs @@ -214,23 +214,11 @@ namespace ShiftOS.Engine { upgDb = new List(); //Now we probe for ShiftoriumUpgradeAttributes for mods. - foreach (var file in System.IO.Directory.GetFiles(Environment.CurrentDirectory)) - { - if (file.EndsWith(".exe") || file.EndsWith(".dll")) - { - try - { - var asm = Assembly.LoadFile(file); - foreach (var type in asm.GetTypes()) + foreach (var type in ReflectMan.Types) { if (type.GetInterfaces().Contains(typeof(IShiftoriumProvider))) - { - if (type.GetCustomAttributes().FirstOrDefault(x => x is ShiftoriumProviderAttribute) != null) - { - var _p = Activator.CreateInstance(type, null) as IShiftoriumProvider; - upgDb.AddRange(_p.GetDefaults()); - } - } + if (type.GetCustomAttributes().Any(x => x is ShiftoriumProviderAttribute)) + upgDb.AddRange((Activator.CreateInstance(type, null) as IShiftoriumProvider).GetDefaults()); ShiftoriumUpgradeAttribute attrib = type.GetCustomAttributes(false).FirstOrDefault(x => x is ShiftoriumUpgradeAttribute) as ShiftoriumUpgradeAttribute; @@ -310,10 +298,6 @@ namespace ShiftOS.Engine } } - } - catch { } - } - } diff --git a/ShiftOS_TheReturn/Skinning.cs b/ShiftOS_TheReturn/Skinning.cs index d5114c5..ab2d6b1 100644 --- a/ShiftOS_TheReturn/Skinning.cs +++ b/ShiftOS_TheReturn/Skinning.cs @@ -242,38 +242,16 @@ namespace ShiftOS.Engine /// The resulting icon image. public static Image GetDefaultIcon(string id) { - if (_iconProber == null) + if (_iconProber != null) { - return new Bitmap(16, 16); - } - else - { - foreach (var f in System.IO.Directory.GetFiles(Environment.CurrentDirectory)) + foreach (var type in Array.FindAll(ReflectMan.Types, t => t.Name == id)) { - if (f.EndsWith(".exe") || f.EndsWith(".dll")) - { - try - { - var asm = Assembly.LoadFile(f); - foreach (var type in asm.GetTypes()) - { - if (type.Name == id) - { - foreach (var attr in type.GetCustomAttributes(true)) - { - if (attr is DefaultIconAttribute) - { - return _iconProber.GetIcon(attr as DefaultIconAttribute); - } - } - } - } - } - catch { } - } + var attr = Array.Find(type.GetCustomAttributes(true), a => a is DefaultIconAttribute); + if (attr != null) + return _iconProber.GetIcon(attr as DefaultIconAttribute); } - return new Bitmap(16, 16); } + return new Bitmap(16, 16); } /// diff --git a/ShiftOS_TheReturn/Story.cs b/ShiftOS_TheReturn/Story.cs index e44d2be..c01c055 100644 --- a/ShiftOS_TheReturn/Story.cs +++ b/ShiftOS_TheReturn/Story.cs @@ -134,55 +134,42 @@ namespace ShiftOS.Engine /// The storyline ID to start. public static void Start(string stid) { - foreach (var exec in System.IO.Directory.GetFiles(Environment.CurrentDirectory)) + if (SaveSystem.CurrentSave.StoriesExperienced == null) + SaveSystem.CurrentSave.StoriesExperienced = new List(); + foreach (var type in ReflectMan.Types) { - if(exec.EndsWith(".exe") || exec.EndsWith(".dll")) + foreach (var mth in type.GetMethods(BindingFlags.Public | BindingFlags.Static)) { - try + foreach (var attrib in Array.FindAll(mth.GetCustomAttributes(false), a => a is StoryAttribute)) { - if (SaveSystem.CurrentSave.StoriesExperienced == null) - SaveSystem.CurrentSave.StoriesExperienced = new List(); - var asm = Assembly.LoadFile(exec); - foreach(var type in asm.GetTypes()) + var story = attrib as StoryAttribute; + if (story.StoryID == stid) { - foreach(var mth in type.GetMethods(BindingFlags.Public | BindingFlags.Static)) + new Thread(() => { - foreach(var attrib in mth.GetCustomAttributes(false)) + Context = new Engine.StoryContext { - if(attrib is StoryAttribute) - { - var story = attrib as StoryAttribute; - if(story.StoryID == stid) - { - new Thread(() => - { - Context = new Engine.StoryContext - { - Id = stid, - Method = mth, - AutoComplete = true, - }; - SaveSystem.CurrentSave.PickupPoint = Context.Id; - Context.OnComplete += () => - { - StoryComplete?.Invoke(stid); - SaveSystem.CurrentSave.PickupPoint = null; - }; - mth.Invoke(null, null); - if (Context.AutoComplete) - { - Context.MarkComplete(); - } - }).Start(); - return; - } - } + Id = stid, + Method = mth, + AutoComplete = true, + }; + SaveSystem.CurrentSave.PickupPoint = Context.Id; + Context.OnComplete += () => + { + StoryComplete?.Invoke(stid); + SaveSystem.CurrentSave.PickupPoint = null; + }; + mth.Invoke(null, null); + if (Context.AutoComplete) + { + Context.MarkComplete(); } - } + }).Start(); + return; } } - catch (Exception ex) { throw ex; } } + } #if DEBUG throw new ArgumentException("Story ID not found: " + stid + " - Talk to Michael. NOW."); diff --git a/ShiftOS_TheReturn/TerminalBackend.cs b/ShiftOS_TheReturn/TerminalBackend.cs index 09ef3d6..81ea971 100644 --- a/ShiftOS_TheReturn/TerminalBackend.cs +++ b/ShiftOS_TheReturn/TerminalBackend.cs @@ -295,54 +295,40 @@ namespace ShiftOS.Engine public static void PopulateTerminalCommands() { Commands = new List(); - foreach(var exec in System.IO.Directory.GetFiles(Environment.CurrentDirectory)) + foreach(var type in ReflectMan.Types) { - if(exec.ToLower().EndsWith(".exe") || exec.ToLower().EndsWith(".dll")) + var ns = type.GetCustomAttributes(false).FirstOrDefault(x => x is Namespace) as Namespace; + if(ns != null) { - try + foreach(var mth in type.GetMethods(BindingFlags.Public | BindingFlags.Static)) { - var asm = Assembly.LoadFile(exec); - foreach(var type in asm.GetTypes()) + var cmd = mth.GetCustomAttributes(false).FirstOrDefault(x => x is Command); + if(cmd != null) { - var ns = type.GetCustomAttributes(false).FirstOrDefault(x => x is Namespace) as Namespace; - if(ns != null) + var tc = new TerminalCommand(); + tc.RequiresElevation = !(type.GetCustomAttributes(false).FirstOrDefault(x => x is KernelModeAttribute) == null); + + tc.NamespaceInfo = ns; + + tc.CommandInfo = cmd as Command; + tc.RequiresElevation = tc.RequiresElevation || !(mth.GetCustomAttributes(false).FirstOrDefault(x => x is KernelModeAttribute) == null); + tc.RequiredArguments = new List(); + foreach (var arg in mth.GetCustomAttributes(false).Where(x=>x is RequiresArgument)) { - foreach(var mth in type.GetMethods(BindingFlags.Public | BindingFlags.Static)) - { - var cmd = mth.GetCustomAttributes(false).FirstOrDefault(x => x is Command); - if(cmd != null) - { - var tc = new TerminalCommand(); - tc.RequiresElevation = !(type.GetCustomAttributes(false).FirstOrDefault(x => x is KernelModeAttribute) == null); - - tc.NamespaceInfo = ns; - - tc.CommandInfo = cmd as Command; - tc.RequiresElevation = tc.RequiresElevation || !(mth.GetCustomAttributes(false).FirstOrDefault(x => x is KernelModeAttribute) == null); - tc.RequiredArguments = new List(); - foreach (var arg in mth.GetCustomAttributes(false).Where(x=>x is RequiresArgument)) - { - var rarg = arg as RequiresArgument; - tc.RequiredArguments.Add(rarg.argument); - } - var rupg = mth.GetCustomAttributes(false).FirstOrDefault(x => x is RequiresUpgradeAttribute) as RequiresUpgradeAttribute; - if (rupg != null) - tc.Dependencies = rupg.Upgrade; - else - tc.Dependencies = ""; - tc.CommandType = type; - tc.CommandHandler = mth; - if (!Commands.Contains(tc)) - Commands.Add(tc); - } - } + var rarg = arg as RequiresArgument; + tc.RequiredArguments.Add(rarg.argument); } + var rupg = mth.GetCustomAttributes(false).FirstOrDefault(x => x is RequiresUpgradeAttribute) as RequiresUpgradeAttribute; + if (rupg != null) + tc.Dependencies = rupg.Upgrade; + else + tc.Dependencies = ""; + tc.CommandType = type; + tc.CommandHandler = mth; + if (!Commands.Contains(tc)) + Commands.Add(tc); } } - catch(Exception e) - { - Console.WriteLine("[termdb] Error: " + e.ToString()); - } } } Console.WriteLine("[termdb] " + Commands.Count + " commands found."); -- cgit v1.2.3 From c0017e35a46eb20e7ba2717009171eedaf9785e7 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 11 Jun 2017 17:58:35 -0400 Subject: Creation of new games is possible again! --- ShiftOS.WinForms/Applications/Terminal.cs | 2 +- ShiftOS.WinForms/Controls/TerminalBox.cs | 2 + ShiftOS.WinForms/Oobe.cs | 127 +-------------------- ShiftOS.WinForms/OobeStory.cs | 32 +++++- ShiftOS.WinForms/UniteSignupDialog.Designer.cs | 147 +++++-------------------- ShiftOS.WinForms/UniteSignupDialog.cs | 97 +++------------- ShiftOS.WinForms/UniteSignupDialog.resx | 11 -- ShiftOS_TheReturn/SaveSystem.cs | 6 +- ShiftOS_TheReturn/Story.cs | 1 + 9 files changed, 88 insertions(+), 337 deletions(-) (limited to 'ShiftOS.WinForms/Applications') diff --git a/ShiftOS.WinForms/Applications/Terminal.cs b/ShiftOS.WinForms/Applications/Terminal.cs index 687b2b9..0470d68 100644 --- a/ShiftOS.WinForms/Applications/Terminal.cs +++ b/ShiftOS.WinForms/Applications/Terminal.cs @@ -624,7 +624,7 @@ Your goal: Earn 1,000 Codepoints."); { if (AppearanceManager.OpenForms.Count <= 1) { - Console.WriteLine(""); + //Console.WriteLine(""); Console.WriteLine("{WIN_CANTCLOSETERMINAL}"); try { diff --git a/ShiftOS.WinForms/Controls/TerminalBox.cs b/ShiftOS.WinForms/Controls/TerminalBox.cs index c188321..b454a77 100644 --- a/ShiftOS.WinForms/Controls/TerminalBox.cs +++ b/ShiftOS.WinForms/Controls/TerminalBox.cs @@ -63,6 +63,7 @@ namespace ShiftOS.WinForms.Controls public void Write(string text) { + Thread.Sleep(5); this.HideSelection = true; this.SelectionColor = ControlManager.ConvertColor(ConsoleEx.ForegroundColor); this.SelectionBackColor = ControlManager.ConvertColor(ConsoleEx.BackgroundColor); @@ -86,6 +87,7 @@ namespace ShiftOS.WinForms.Controls public void WriteLine(string text) { + Thread.Sleep(5); Engine.AudioManager.PlayStream(Properties.Resources.writesound); this.HideSelection = true; this.SelectionColor = ControlManager.ConvertColor(ConsoleEx.ForegroundColor); diff --git a/ShiftOS.WinForms/Oobe.cs b/ShiftOS.WinForms/Oobe.cs index 271e1fd..b2f8cd2 100644 --- a/ShiftOS.WinForms/Oobe.cs +++ b/ShiftOS.WinForms/Oobe.cs @@ -194,137 +194,14 @@ namespace ShiftOS.WinForms } + [Obsolete("Unite code stub.")] public void PromptForLogin() { - Infobox.Show("Login", "Since the last time you've played ShiftOS, some changes have been made to the login system. You must now login using your website credentials.", () => - { - Infobox.PromptYesNo("Website account", "Do you have an account at http://getshiftos.ml?", (hasAccount) => - { - if(hasAccount == true) - { - var loginDialog = new UniteLoginDialog((success)=> - { - string token = success; - var uClient = new UniteClient("http://getshiftos.ml", token); - Infobox.Show("Welcome to ShiftOS.", $"Hello, {uClient.GetDisplayName()}! We've signed you into your account. We'll now try to link your ShiftOS account with your save file.", () => - { - ServerMessageReceived smr = null; - smr = (msg) => - { - if (msg.Name == "mud_savefile") - { - ServerManager.MessageReceived -= smr; - SaveSystem.CurrentSave = JsonConvert.DeserializeObject(msg.Contents); - SaveSystem.SaveGame(); - } - else if(msg.Name=="mud_login_denied") - { - ServerManager.MessageReceived -= smr; - LinkSaveFile(token); - } - }; - ServerManager.MessageReceived += smr; - ServerManager.SendMessage("mud_token_login", token); - }); - }); - AppearanceManager.SetupDialog(loginDialog); - } - else - { - var signupDialog = new UniteSignupDialog((token) => - { - ServerMessageReceived smr = null; - smr = (msg) => - { - ServerManager.MessageReceived -= smr; - if (msg.Name == "mud_savefile") - { - SaveSystem.CurrentSave = JsonConvert.DeserializeObject(msg.Contents); - SaveSystem.SaveGame(); - } - else if (msg.Name == "mud_login_denied") - { - LinkSaveFile(token); - } - }; - ServerManager.MessageReceived += smr; - ServerManager.SendMessage("mud_token_login", token); - - }); - AppearanceManager.SetupDialog(signupDialog); - } - }); - }); } + [Obsolete("Unite code stub.")] public void LinkSaveFile(string token) { - if (Utils.FileExists(Paths.GetPath("user.dat"))) - { - try - { - var details = JsonConvert.DeserializeObject(Utils.ReadAllText(Paths.GetPath("user.dat"))); - ServerMessageReceived smr = null; - bool msgreceived = false; - bool found = false; - smr = (msg) => - { - if (msg.Name == "mud_savefile") - { - var save = JsonConvert.DeserializeObject(msg.Contents); - save.UniteAuthToken = token; - Infobox.Show("Migration complete.", "We have migrated your old save file to the new system successfully. You can still log in using the old system on old builds of ShiftOS.", () => - { - SaveSystem.CurrentSave = save; - SaveSystem.SaveGame(); - found = true; - msgreceived = true; - }); - } - else if (msg.Name == "mud_login_denied") - { - found = false; - msgreceived = true; - } - ServerManager.MessageReceived -= smr; - }; - ServerManager.MessageReceived += smr; - ServerManager.SendMessage("mud_login", JsonConvert.SerializeObject(new - { - username = details.Username, - password = details.Password - })); - while (msgreceived == false) - Thread.Sleep(10); - if (found == true) - return; - } - catch - { - - } - } - - var client = new UniteClient("http://getshiftos.ml", token); - var sve = new Save(); - sve.Username = client.GetEmail(); - sve.Password = Guid.NewGuid().ToString(); - sve.SystemName = client.GetSysName(); - sve.UniteAuthToken = token; - sve.Codepoints = 0; - sve.Upgrades = new Dictionary(); - sve.ID = Guid.NewGuid(); - sve.StoriesExperienced = new List(); - sve.StoriesExperienced.Add("mud_fundamentals"); - Infobox.Show("Welcome to ShiftOS.", "Welcome to ShiftOS, " + client.GetDisplayName() + ". We have created a save file for you. Now, go on and Shift It Your Way.", () => - { - sve.StoryPosition = 8675309; - SaveSystem.CurrentSave = sve; - Shiftorium.Silent = true; - SaveSystem.SaveGame(); - Shiftorium.Silent = false; - - }); } public void ForceReboot() diff --git a/ShiftOS.WinForms/OobeStory.cs b/ShiftOS.WinForms/OobeStory.cs index 8d86b9e..f2a4930 100644 --- a/ShiftOS.WinForms/OobeStory.cs +++ b/ShiftOS.WinForms/OobeStory.cs @@ -143,7 +143,37 @@ namespace ShiftOS.WinForms Console.WriteLine(); Console.WriteLine("Next, let's get user information."); Console.WriteLine(); - ShiftOS.Engine.OutOfBoxExperience.PromptForLogin(); + Desktop.InvokeOnWorkerThread(() => + { + var uSignUpDialog = new UniteSignupDialog((result) => + { + var sve = new Save(); + sve.SystemName = result.SystemName; + sve.Codepoints = 0; + sve.Upgrades = new Dictionary(); + sve.ID = Guid.NewGuid(); + sve.StoriesExperienced = new List(); + sve.StoriesExperienced.Add("mud_fundamentals"); + sve.Users = new List + { + new ClientSave + { + Username = "root", + Password = result.RootPassword, + Permissions = 0 + } + }; + + sve.StoryPosition = 8675309; + SaveSystem.CurrentSave = sve; + Shiftorium.Silent = true; + SaveSystem.SaveGame(); + Shiftorium.Silent = false; + + + }); + AppearanceManager.SetupDialog(uSignUpDialog); + }); } private static bool isValid(string text, string chars) diff --git a/ShiftOS.WinForms/UniteSignupDialog.Designer.cs b/ShiftOS.WinForms/UniteSignupDialog.Designer.cs index a1509d7..52c06b7 100644 --- a/ShiftOS.WinForms/UniteSignupDialog.Designer.cs +++ b/ShiftOS.WinForms/UniteSignupDialog.Designer.cs @@ -28,165 +28,83 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(UniteSignupDialog)); this.btnlogin = new System.Windows.Forms.Button(); - this.txtpassword = new System.Windows.Forms.TextBox(); - this.txtusername = new System.Windows.Forms.TextBox(); - this.label3 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); this.label1 = new System.Windows.Forms.Label(); - this.txtconfirm = new System.Windows.Forms.TextBox(); - this.label4 = new System.Windows.Forms.Label(); - this.txtdisplay = new System.Windows.Forms.TextBox(); + this.txtsys = new System.Windows.Forms.TextBox(); this.label5 = new System.Windows.Forms.Label(); - this.label6 = new System.Windows.Forms.Label(); - this.txtsysname = new System.Windows.Forms.TextBox(); + this.txtroot = new System.Windows.Forms.TextBox(); this.label7 = new System.Windows.Forms.Label(); this.SuspendLayout(); // // btnlogin // this.btnlogin.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.btnlogin.Location = new System.Drawing.Point(462, 479); + this.btnlogin.Location = new System.Drawing.Point(462, 168); this.btnlogin.Name = "btnlogin"; this.btnlogin.Size = new System.Drawing.Size(75, 23); this.btnlogin.TabIndex = 11; - this.btnlogin.Text = "Submit"; + this.btnlogin.Text = "{UI_SUBMIT}"; this.btnlogin.UseVisualStyleBackColor = true; this.btnlogin.Click += new System.EventHandler(this.btnlogin_Click); // - // txtpassword - // - this.txtpassword.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.txtpassword.Location = new System.Drawing.Point(113, 133); - this.txtpassword.Name = "txtpassword"; - this.txtpassword.Size = new System.Drawing.Size(424, 20); - this.txtpassword.TabIndex = 10; - this.txtpassword.UseSystemPasswordChar = true; - // - // txtusername - // - this.txtusername.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.txtusername.Location = new System.Drawing.Point(113, 100); - this.txtusername.Name = "txtusername"; - this.txtusername.Size = new System.Drawing.Size(424, 20); - this.txtusername.TabIndex = 9; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(17, 136); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(56, 13); - this.label3.TabIndex = 8; - this.label3.Text = "Password:"; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(17, 103); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(76, 13); - this.label2.TabIndex = 7; - this.label2.Text = "Email Address:"; - // // label1 // this.label1.AutoSize = true; this.label1.Location = new System.Drawing.Point(17, 36); this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(120, 13); + this.label1.Size = new System.Drawing.Size(169, 13); this.label1.TabIndex = 6; this.label1.Tag = "header2"; - this.label1.Text = "Create ShiftOS Account"; + this.label1.Text = "{INIT_SYSTEM_PREPARATION}"; // - // txtconfirm + // txtsys // - this.txtconfirm.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this.txtsys.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.txtconfirm.Location = new System.Drawing.Point(113, 159); - this.txtconfirm.Name = "txtconfirm"; - this.txtconfirm.Size = new System.Drawing.Size(424, 20); - this.txtconfirm.TabIndex = 13; - this.txtconfirm.UseSystemPasswordChar = true; - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(17, 162); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(45, 13); - this.label4.TabIndex = 12; - this.label4.Text = "Confirm:"; - // - // txtdisplay - // - this.txtdisplay.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.txtdisplay.Location = new System.Drawing.Point(113, 197); - this.txtdisplay.Name = "txtdisplay"; - this.txtdisplay.Size = new System.Drawing.Size(424, 20); - this.txtdisplay.TabIndex = 15; + this.txtsys.Location = new System.Drawing.Point(113, 100); + this.txtsys.Name = "txtsys"; + this.txtsys.Size = new System.Drawing.Size(424, 20); + this.txtsys.TabIndex = 15; // // label5 // this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(17, 200); + this.label5.Location = new System.Drawing.Point(17, 103); this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(73, 13); + this.label5.Size = new System.Drawing.Size(116, 13); this.label5.TabIndex = 14; - this.label5.Text = "Display name:"; - // - // label6 - // - this.label6.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.label6.Location = new System.Drawing.Point(20, 267); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(517, 209); - this.label6.TabIndex = 16; - this.label6.Text = resources.GetString("label6.Text"); + this.label5.Text = "{SE_SYSTEM_NAME}"; // - // txtsysname + // txtroot // - this.txtsysname.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this.txtroot.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.txtsysname.Location = new System.Drawing.Point(113, 223); - this.txtsysname.Name = "txtsysname"; - this.txtsysname.Size = new System.Drawing.Size(424, 20); - this.txtsysname.TabIndex = 18; + this.txtroot.Location = new System.Drawing.Point(113, 126); + this.txtroot.Name = "txtroot"; + this.txtroot.Size = new System.Drawing.Size(424, 20); + this.txtroot.TabIndex = 18; // // label7 // this.label7.AutoSize = true; - this.label7.Location = new System.Drawing.Point(17, 226); + this.label7.Location = new System.Drawing.Point(17, 129); this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(73, 13); + this.label7.Size = new System.Drawing.Size(135, 13); this.label7.TabIndex = 17; - this.label7.Text = "System name:"; + this.label7.Text = "{SE_ROOT_PASSWORD}"; // // UniteSignupDialog // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.txtsysname); + this.Controls.Add(this.txtroot); this.Controls.Add(this.label7); - this.Controls.Add(this.label6); - this.Controls.Add(this.txtdisplay); + this.Controls.Add(this.txtsys); this.Controls.Add(this.label5); - this.Controls.Add(this.txtconfirm); - this.Controls.Add(this.label4); this.Controls.Add(this.btnlogin); - this.Controls.Add(this.txtpassword); - this.Controls.Add(this.txtusername); - this.Controls.Add(this.label3); - this.Controls.Add(this.label2); this.Controls.Add(this.label1); this.Name = "UniteSignupDialog"; - this.Size = new System.Drawing.Size(555, 519); + this.Size = new System.Drawing.Size(555, 208); this.ResumeLayout(false); this.PerformLayout(); @@ -195,17 +113,10 @@ #endregion private System.Windows.Forms.Button btnlogin; - private System.Windows.Forms.TextBox txtpassword; - private System.Windows.Forms.TextBox txtusername; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Label label2; private System.Windows.Forms.Label label1; - private System.Windows.Forms.TextBox txtconfirm; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.TextBox txtdisplay; + private System.Windows.Forms.TextBox txtsys; private System.Windows.Forms.Label label5; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.TextBox txtsysname; + private System.Windows.Forms.TextBox txtroot; private System.Windows.Forms.Label label7; } } diff --git a/ShiftOS.WinForms/UniteSignupDialog.cs b/ShiftOS.WinForms/UniteSignupDialog.cs index 7d0fd33..b2b5052 100644 --- a/ShiftOS.WinForms/UniteSignupDialog.cs +++ b/ShiftOS.WinForms/UniteSignupDialog.cs @@ -16,13 +16,19 @@ namespace ShiftOS.WinForms { public partial class UniteSignupDialog : UserControl, IShiftOSWindow { - public UniteSignupDialog(Action callback) + public class SignupCredentials + { + public string SystemName { get; set; } + public string RootPassword { get; set; } + } + + public UniteSignupDialog(Action callback) { InitializeComponent(); Callback = callback; } - private Action Callback { get; set; } + private Action Callback { get; set; } public void OnLoad() @@ -45,92 +51,25 @@ namespace ShiftOS.WinForms private void btnlogin_Click(object sender, EventArgs e) { - string u = txtusername.Text; - string p = txtpassword.Text; + string sys = txtsys.Text; + string root = txtroot.Text; - if (string.IsNullOrWhiteSpace(u)) + if (string.IsNullOrWhiteSpace(sys)) { - Infobox.Show("Please enter a username.", "You must enter a proper email address."); + Infobox.Show("{TITLE_EMPTY_SYSNAME}", "{MSG_EMPTY_SYSNAME}"); return; } - - if (string.IsNullOrWhiteSpace(p)) + if(sys.Length < 5) { - Infobox.Show("Please enter a password.", "You must enter a valid password."); + Infobox.Show("{TITLE_VALIDATION_ERROR}", "{MSG_VALIDATION_ERROR_SYSNAME_LENGTH}"); return; } - if(p != txtconfirm.Text) + Callback?.Invoke(new SignupCredentials { - Infobox.Show("Passwords don't match.", "The \"Password\" and \"Confirm\" boxes must match."); - return; - } - - if (string.IsNullOrWhiteSpace(txtdisplay.Text)) - { - Infobox.Show("Empty display name", "Please choose a proper display name."); - return; - } - - if (string.IsNullOrWhiteSpace(txtsysname.Text)) - { - Infobox.Show("Empty system name", "Please name your computer!"); - return; - } - - if(p.Length < 7) - { - Infobox.Show("Password error", "Your password must have at least 7 characters."); - return; - } - - if (!(p.Any(char.IsUpper) && - p.Any(char.IsLower) && - p.Any(char.IsDigit))) - { - Infobox.Show("Password error", "Your password must contain at least one uppercase, lowercase, digit and symbol character."); - return; - } - - if (!u.Contains("@")) - { - Infobox.Show("Valid email required.", "You must specify a valid email address."); - return; - } - - try - { - var webrequest = HttpWebRequest.Create(UserConfig.Get().UniteUrl + "/Auth/Register?appname=ShiftOS&appdesc=ShiftOS+client&version=1_0_beta_2_4&displayname=" + txtdisplay.Text + "&sysname=" + txtsysname.Text); - string base64 = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{u}:{p}")); - webrequest.Headers.Add("Authentication: Basic " + base64); - var response = webrequest.GetResponse(); - var str = response.GetResponseStream(); - var reader = new System.IO.StreamReader(str); - string result = reader.ReadToEnd(); - if (result.StartsWith("{")) - { - var exc = JsonConvert.DeserializeObject(result); - Infobox.Show("Error", exc.Message); - return; - } - reader.Close(); - str.Close(); - str.Dispose(); - response.Dispose(); - Callback?.Invoke(result); - AppearanceManager.Close(this); - } -#if DEBUG - catch (Exception ex) - { - Infobox.Show("Error", ex.ToString()); - } -#else - catch - { - Infobox.Show("Login failed.", "The login attempt failed due to an incorrect username and password pair."); - } -#endif + SystemName = sys, + RootPassword = root + }); } } diff --git a/ShiftOS.WinForms/UniteSignupDialog.resx b/ShiftOS.WinForms/UniteSignupDialog.resx index 5fecdcd..1af7de1 100644 --- a/ShiftOS.WinForms/UniteSignupDialog.resx +++ b/ShiftOS.WinForms/UniteSignupDialog.resx @@ -117,15 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Your ShiftOS Account is your gateway to the world of ShiftOS. - -What does this account do for you? - - - It holds all your Codepoints, Shiftorium Upgrades, and other in-game save details in a secure spot. - - It gives you access to the ShiftOS Forums, Wiki, Developer Blog and the bugtracker. - - It gives you your own personal profile that you can shift your own way - just like you can ShiftOS. - -You can customize more information for this account at http://getshiftos.ml/, but first, we must create it. - \ No newline at end of file diff --git a/ShiftOS_TheReturn/SaveSystem.cs b/ShiftOS_TheReturn/SaveSystem.cs index b9bef47..a4e79a7 100644 --- a/ShiftOS_TheReturn/SaveSystem.cs +++ b/ShiftOS_TheReturn/SaveSystem.cs @@ -527,8 +527,10 @@ namespace ShiftOS.Engine { try { - Story.Start(CurrentSave.PickupPoint); - TerminalBackend.PrintPrompt(); + if (Story.Context == null) + { + Story.Start(CurrentSave.PickupPoint); + } } catch { } } diff --git a/ShiftOS_TheReturn/Story.cs b/ShiftOS_TheReturn/Story.cs index c01c055..2b00686 100644 --- a/ShiftOS_TheReturn/Story.cs +++ b/ShiftOS_TheReturn/Story.cs @@ -109,6 +109,7 @@ namespace ShiftOS.Engine { Thread.Sleep(5000); } + Thread.Sleep(500); CurrentObjectives.Remove(obj); obj.Complete(); }); -- cgit v1.2.3 From cd30c8a9ffa87990f718d2f62eb3d8a376f5bd4e Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 13 Jun 2017 16:39:31 -0400 Subject: Fix Graphic Picker nullreference bug --- ShiftOS.WinForms/Applications/GraphicPicker.cs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'ShiftOS.WinForms/Applications') diff --git a/ShiftOS.WinForms/Applications/GraphicPicker.cs b/ShiftOS.WinForms/Applications/GraphicPicker.cs index f299f0d..2a31815 100644 --- a/ShiftOS.WinForms/Applications/GraphicPicker.cs +++ b/ShiftOS.WinForms/Applications/GraphicPicker.cs @@ -46,10 +46,13 @@ namespace ShiftOS.WinForms.Applications InitializeComponent(); SelectedLayout = layout; Image = old; - using(var ms = new System.IO.MemoryStream()) + if (Image != null) { - Image.Save(ms, System.Drawing.Imaging.ImageFormat.Png); - ImageAsBinary = ms.ToArray(); + using (var ms = new System.IO.MemoryStream()) + { + Image.Save(ms, System.Drawing.Imaging.ImageFormat.Png); + ImageAsBinary = ms.ToArray(); + } } Callback = cb; lblobjecttoskin.Text = name; -- cgit v1.2.3 From effbf091b72d2c75af18dac6ac7036a6141aec9a Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 14 Jun 2017 19:59:29 -0400 Subject: Fix ArtPad sidebar images being blank --- ShiftOS.WinForms/Applications/Artpad.Designer.cs | 39 ++++++++---- ShiftOS.WinForms/Tools/ControlManager.cs | 81 ++++++++++++------------ 2 files changed, 70 insertions(+), 50 deletions(-) (limited to 'ShiftOS.WinForms/Applications') diff --git a/ShiftOS.WinForms/Applications/Artpad.Designer.cs b/ShiftOS.WinForms/Applications/Artpad.Designer.cs index 2955a1c..7b94c34 100644 --- a/ShiftOS.WinForms/Applications/Artpad.Designer.cs +++ b/ShiftOS.WinForms/Applications/Artpad.Designer.cs @@ -72,6 +72,7 @@ namespace ShiftOS.WinForms.Applications this.picdrawingdisplay = new System.Windows.Forms.PictureBox(); this.pnlbottompanel = new System.Windows.Forms.Panel(); this.pnlpallet = new System.Windows.Forms.Panel(); + this.label44 = new System.Windows.Forms.Label(); this.flowcolours = new System.Windows.Forms.FlowLayoutPanel(); this.colourpallet1 = new System.Windows.Forms.Panel(); this.colourpallet2 = new System.Windows.Forms.Panel(); @@ -310,7 +311,6 @@ namespace ShiftOS.WinForms.Applications this.pullbottom = new System.Windows.Forms.Timer(this.components); this.pullside = new System.Windows.Forms.Timer(this.components); this.tmrsetupui = new System.Windows.Forms.Timer(this.components); - this.label44 = new System.Windows.Forms.Label(); this.pgcontents.SuspendLayout(); this.pnldrawingbackground.SuspendLayout(); this.pnlinitialcanvassettings.SuspendLayout(); @@ -621,6 +621,16 @@ namespace ShiftOS.WinForms.Applications this.pnlpallet.Size = new System.Drawing.Size(225, 124); this.pnlpallet.TabIndex = 0; // + // label44 + // + this.label44.Dock = System.Windows.Forms.DockStyle.Fill; + this.label44.Location = new System.Drawing.Point(0, 24); + this.label44.Name = "label44"; + this.label44.Size = new System.Drawing.Size(225, 27); + this.label44.TabIndex = 13; + this.label44.Text = "Left click to select, right click to change color"; + this.label44.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // // flowcolours // this.flowcolours.Controls.Add(this.colourpallet1); @@ -2960,6 +2970,7 @@ namespace ShiftOS.WinForms.Applications this.btnpixelsetter.Name = "btnpixelsetter"; this.btnpixelsetter.Size = new System.Drawing.Size(50, 50); this.btnpixelsetter.TabIndex = 2; + this.btnpixelsetter.Tag = "nobuttonskin"; this.btnpixelsetter.UseVisualStyleBackColor = true; this.btnpixelsetter.Click += new System.EventHandler(this.btnpixelsetter_Click); // @@ -2974,6 +2985,7 @@ namespace ShiftOS.WinForms.Applications this.btnpixelplacer.Name = "btnpixelplacer"; this.btnpixelplacer.Size = new System.Drawing.Size(50, 50); this.btnpixelplacer.TabIndex = 4; + this.btnpixelplacer.Tag = "nobuttonskin"; this.btnpixelplacer.UseVisualStyleBackColor = true; this.btnpixelplacer.Click += new System.EventHandler(this.btnpixelplacer_Click); // @@ -2988,6 +3000,7 @@ namespace ShiftOS.WinForms.Applications this.btnpencil.Name = "btnpencil"; this.btnpencil.Size = new System.Drawing.Size(50, 50); this.btnpencil.TabIndex = 7; + this.btnpencil.Tag = "nobuttonskin"; this.btnpencil.Text = " "; this.btnpencil.UseVisualStyleBackColor = true; this.btnpencil.Click += new System.EventHandler(this.btnpencil_Click); @@ -3003,6 +3016,7 @@ namespace ShiftOS.WinForms.Applications this.btnfloodfill.Name = "btnfloodfill"; this.btnfloodfill.Size = new System.Drawing.Size(50, 50); this.btnfloodfill.TabIndex = 11; + this.btnfloodfill.Tag = "nobuttonskin"; this.btnfloodfill.UseVisualStyleBackColor = true; this.btnfloodfill.Click += new System.EventHandler(this.btnfill_Click); // @@ -3017,6 +3031,7 @@ namespace ShiftOS.WinForms.Applications this.btnoval.Name = "btnoval"; this.btnoval.Size = new System.Drawing.Size(50, 50); this.btnoval.TabIndex = 13; + this.btnoval.Tag = "nobuttonskin"; this.btnoval.Text = " "; this.btnoval.UseVisualStyleBackColor = true; this.btnoval.Click += new System.EventHandler(this.btnoval_Click); @@ -3032,6 +3047,7 @@ namespace ShiftOS.WinForms.Applications this.btnsquare.Name = "btnsquare"; this.btnsquare.Size = new System.Drawing.Size(50, 50); this.btnsquare.TabIndex = 12; + this.btnsquare.Tag = "nobuttonskin"; this.btnsquare.Text = " "; this.btnsquare.UseVisualStyleBackColor = true; this.btnsquare.Click += new System.EventHandler(this.btnsquare_Click); @@ -3047,6 +3063,7 @@ namespace ShiftOS.WinForms.Applications this.btnlinetool.Name = "btnlinetool"; this.btnlinetool.Size = new System.Drawing.Size(50, 50); this.btnlinetool.TabIndex = 15; + this.btnlinetool.Tag = "nobuttonskin"; this.btnlinetool.Text = " "; this.btnlinetool.UseVisualStyleBackColor = true; this.btnlinetool.Click += new System.EventHandler(this.btnlinetool_Click); @@ -3062,6 +3079,7 @@ namespace ShiftOS.WinForms.Applications this.btnpaintbrush.Name = "btnpaintbrush"; this.btnpaintbrush.Size = new System.Drawing.Size(50, 50); this.btnpaintbrush.TabIndex = 17; + this.btnpaintbrush.Tag = "nobuttonskin"; this.btnpaintbrush.Text = " "; this.btnpaintbrush.UseVisualStyleBackColor = true; this.btnpaintbrush.Click += new System.EventHandler(this.btnpaintbrush_Click); @@ -3077,6 +3095,7 @@ namespace ShiftOS.WinForms.Applications this.btntexttool.Name = "btntexttool"; this.btntexttool.Size = new System.Drawing.Size(50, 50); this.btntexttool.TabIndex = 16; + this.btntexttool.Tag = "nobuttonskin"; this.btntexttool.Text = " "; this.btntexttool.UseVisualStyleBackColor = true; this.btntexttool.Click += new System.EventHandler(this.btntexttool_Click); @@ -3092,6 +3111,7 @@ namespace ShiftOS.WinForms.Applications this.btneracer.Name = "btneracer"; this.btneracer.Size = new System.Drawing.Size(50, 50); this.btneracer.TabIndex = 14; + this.btneracer.Tag = "nobuttonskin"; this.btneracer.Text = " "; this.btneracer.UseVisualStyleBackColor = true; this.btneracer.Click += new System.EventHandler(this.btneracer_Click); @@ -3107,6 +3127,7 @@ namespace ShiftOS.WinForms.Applications this.btnnew.Name = "btnnew"; this.btnnew.Size = new System.Drawing.Size(50, 50); this.btnnew.TabIndex = 6; + this.btnnew.Tag = "nobuttonskin"; this.btnnew.Text = " "; this.btnnew.UseVisualStyleBackColor = true; this.btnnew.Click += new System.EventHandler(this.btnnew_Click); @@ -3122,6 +3143,7 @@ namespace ShiftOS.WinForms.Applications this.btnmagnify.Name = "btnmagnify"; this.btnmagnify.Size = new System.Drawing.Size(50, 50); this.btnmagnify.TabIndex = 3; + this.btnmagnify.Tag = "nobuttonskin"; this.btnmagnify.Text = " "; this.btnmagnify.UseVisualStyleBackColor = true; this.btnmagnify.Click += new System.EventHandler(this.btnmagnify_Click); @@ -3137,6 +3159,7 @@ namespace ShiftOS.WinForms.Applications this.btnopen.Name = "btnopen"; this.btnopen.Size = new System.Drawing.Size(50, 50); this.btnopen.TabIndex = 10; + this.btnopen.Tag = "nobuttonskin"; this.btnopen.Text = " "; this.btnopen.UseVisualStyleBackColor = true; this.btnopen.Click += new System.EventHandler(this.btnopen_Click); @@ -3152,6 +3175,7 @@ namespace ShiftOS.WinForms.Applications this.btnsave.Name = "btnsave"; this.btnsave.Size = new System.Drawing.Size(50, 50); this.btnsave.TabIndex = 5; + this.btnsave.Tag = "nobuttonskin"; this.btnsave.Text = " "; this.btnsave.UseVisualStyleBackColor = true; this.btnsave.Click += new System.EventHandler(this.btnsave_Click); @@ -3167,6 +3191,7 @@ namespace ShiftOS.WinForms.Applications this.btnundo.Name = "btnundo"; this.btnundo.Size = new System.Drawing.Size(50, 50); this.btnundo.TabIndex = 8; + this.btnundo.Tag = "nobuttonskin"; this.btnundo.Text = " "; this.btnundo.UseVisualStyleBackColor = true; this.btnundo.Click += new System.EventHandler(this.btnundo_Click); @@ -3182,6 +3207,7 @@ namespace ShiftOS.WinForms.Applications this.btnredo.Name = "btnredo"; this.btnredo.Size = new System.Drawing.Size(50, 50); this.btnredo.TabIndex = 9; + this.btnredo.Tag = "nobuttonskin"; this.btnredo.Text = " "; this.btnredo.UseVisualStyleBackColor = true; this.btnredo.Click += new System.EventHandler(this.btnredo_Click); @@ -3279,16 +3305,6 @@ namespace ShiftOS.WinForms.Applications // this.tmrsetupui.Tick += new System.EventHandler(this.tmrsetupui_Tick); // - // label44 - // - this.label44.Dock = System.Windows.Forms.DockStyle.Fill; - this.label44.Location = new System.Drawing.Point(0, 24); - this.label44.Name = "label44"; - this.label44.Size = new System.Drawing.Size(225, 27); - this.label44.TabIndex = 13; - this.label44.Text = "Left click to select, right click to change color"; - this.label44.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // // Artpad // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -3297,6 +3313,7 @@ namespace ShiftOS.WinForms.Applications this.MinimumSize = new System.Drawing.Size(502, 398); this.Name = "Artpad"; this.Size = new System.Drawing.Size(802, 598); + this.Tag = "nobuttonskin"; this.Load += new System.EventHandler(this.Template_Load); this.pgcontents.ResumeLayout(false); this.pnldrawingbackground.ResumeLayout(false); diff --git a/ShiftOS.WinForms/Tools/ControlManager.cs b/ShiftOS.WinForms/Tools/ControlManager.cs index 7fbfd1b..65b64ee 100644 --- a/ShiftOS.WinForms/Tools/ControlManager.cs +++ b/ShiftOS.WinForms/Tools/ControlManager.cs @@ -219,50 +219,53 @@ namespace ShiftOS.WinForms.Tools if (ctrl is Button) { - Button b = ctrl as Button; - if (!tag.Contains("keepbg")) + if (!tag.ToLower().Contains("nobuttonskin")) { - b.BackColor = SkinEngine.LoadedSkin.ButtonBackgroundColor; - b.BackgroundImage = SkinEngine.GetImage("buttonidle"); - b.BackgroundImageLayout = SkinEngine.GetImageLayout("buttonidle"); - } - b.FlatAppearance.BorderSize = SkinEngine.LoadedSkin.ButtonBorderWidth; - if (!tag.Contains("keepfg")) - { - b.FlatAppearance.BorderColor = SkinEngine.LoadedSkin.ButtonForegroundColor; - b.ForeColor = SkinEngine.LoadedSkin.ButtonForegroundColor; - } - if (!tag.Contains("keepfont")) - b.Font = SkinEngine.LoadedSkin.ButtonTextFont; + Button b = ctrl as Button; + if (!tag.Contains("keepbg")) + { + b.BackColor = SkinEngine.LoadedSkin.ButtonBackgroundColor; + b.BackgroundImage = SkinEngine.GetImage("buttonidle"); + b.BackgroundImageLayout = SkinEngine.GetImageLayout("buttonidle"); + } + b.FlatAppearance.BorderSize = SkinEngine.LoadedSkin.ButtonBorderWidth; + if (!tag.Contains("keepfg")) + { + b.FlatAppearance.BorderColor = SkinEngine.LoadedSkin.ButtonForegroundColor; + b.ForeColor = SkinEngine.LoadedSkin.ButtonForegroundColor; + } + if (!tag.Contains("keepfont")) + b.Font = SkinEngine.LoadedSkin.ButtonTextFont; - Color orig_bg = b.BackColor; + Color orig_bg = b.BackColor; - b.MouseEnter += (o, a) => - { - b.BackColor = SkinEngine.LoadedSkin.ButtonHoverColor; - b.BackgroundImage = SkinEngine.GetImage("buttonhover"); - b.BackgroundImageLayout = SkinEngine.GetImageLayout("buttonhover"); - }; - b.MouseLeave += (o, a) => - { - b.BackColor = orig_bg; - b.BackgroundImage = SkinEngine.GetImage("buttonidle"); - b.BackgroundImageLayout = SkinEngine.GetImageLayout("buttonidle"); - }; - b.MouseUp += (o, a) => - { - b.BackColor = orig_bg; - b.BackgroundImage = SkinEngine.GetImage("buttonidle"); - b.BackgroundImageLayout = SkinEngine.GetImageLayout("buttonidle"); - }; + b.MouseEnter += (o, a) => + { + b.BackColor = SkinEngine.LoadedSkin.ButtonHoverColor; + b.BackgroundImage = SkinEngine.GetImage("buttonhover"); + b.BackgroundImageLayout = SkinEngine.GetImageLayout("buttonhover"); + }; + b.MouseLeave += (o, a) => + { + b.BackColor = orig_bg; + b.BackgroundImage = SkinEngine.GetImage("buttonidle"); + b.BackgroundImageLayout = SkinEngine.GetImageLayout("buttonidle"); + }; + b.MouseUp += (o, a) => + { + b.BackColor = orig_bg; + b.BackgroundImage = SkinEngine.GetImage("buttonidle"); + b.BackgroundImageLayout = SkinEngine.GetImageLayout("buttonidle"); + }; - b.MouseDown += (o, a) => - { - b.BackColor = SkinEngine.LoadedSkin.ButtonPressedColor; - b.BackgroundImage = SkinEngine.GetImage("buttonpressed"); - b.BackgroundImageLayout = SkinEngine.GetImageLayout("buttonpressed"); + b.MouseDown += (o, a) => + { + b.BackColor = SkinEngine.LoadedSkin.ButtonPressedColor; + b.BackgroundImage = SkinEngine.GetImage("buttonpressed"); + b.BackgroundImageLayout = SkinEngine.GetImageLayout("buttonpressed"); - }; + }; + } } } -- cgit v1.2.3 From e6d58c235c4d772cd5245d89cdc7dde6207165b8 Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 15 Jun 2017 17:08:42 -0400 Subject: Use GDI+ to render Pong --- ShiftOS.WinForms/Applications/Pong.Designer.cs | 797 +------------------- ShiftOS.WinForms/Applications/Pong.cs | 995 +++---------------------- ShiftOS.WinForms/Applications/Pong.resx | 15 - ShiftOS.WinForms/ShiftOS.WinForms.csproj | 18 +- 4 files changed, 118 insertions(+), 1707 deletions(-) (limited to 'ShiftOS.WinForms/Applications') diff --git a/ShiftOS.WinForms/Applications/Pong.Designer.cs b/ShiftOS.WinForms/Applications/Pong.Designer.cs index c5ea375..11bed40 100644 --- a/ShiftOS.WinForms/Applications/Pong.Designer.cs +++ b/ShiftOS.WinForms/Applications/Pong.Designer.cs @@ -1,64 +1,13 @@ -/* - * MIT License - * - * Copyright (c) 2017 Michael VanOverbeek and ShiftOS devs - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - - -/* - * MIT License - * - * Copyright (c) 2017 Michael VanOverbeek and ShiftOS devs - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -using ShiftOS.WinForms.Controls; - -namespace ShiftOS.WinForms.Applications +namespace ShiftOS.WinForms.Applications { partial class Pong { - /// + /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; - /// + /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. @@ -71,738 +20,40 @@ namespace ShiftOS.WinForms.Applications base.Dispose(disposing); } + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// private void InitializeComponent() { - this.components = new System.ComponentModel.Container(); - this.gameTimer = new System.Windows.Forms.Timer(this.components); - this.counter = new System.Windows.Forms.Timer(this.components); - this.tmrcountdown = new System.Windows.Forms.Timer(this.components); - this.tmrstoryline = new System.Windows.Forms.Timer(this.components); - this.pgcontents = new ShiftOS.WinForms.Controls.Canvas(); - this.pnlmultiplayerhandshake = new System.Windows.Forms.Panel(); - this.lvotherplayers = new System.Windows.Forms.ListView(); - this.lbmpstatus = new System.Windows.Forms.Label(); - this.pnlintro = new System.Windows.Forms.Panel(); - this.btnmatchmake = new System.Windows.Forms.Button(); - this.Label6 = new System.Windows.Forms.Label(); - this.btnstartgame = new System.Windows.Forms.Button(); - this.Label8 = new System.Windows.Forms.Label(); - this.pnlhighscore = new System.Windows.Forms.Panel(); - this.lbhighscore = new System.Windows.Forms.ListView(); - this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); - this.button2 = new System.Windows.Forms.Button(); - this.label10 = new System.Windows.Forms.Label(); - this.pnlgamestats = new System.Windows.Forms.Panel(); - this.button1 = new System.Windows.Forms.Button(); - this.label12 = new System.Windows.Forms.Label(); - this.lblnextstats = new System.Windows.Forms.Label(); - this.Label7 = new System.Windows.Forms.Label(); - this.lblpreviousstats = new System.Windows.Forms.Label(); - this.Label4 = new System.Windows.Forms.Label(); - this.btnplayon = new System.Windows.Forms.Button(); - this.Label3 = new System.Windows.Forms.Label(); - this.btncashout = new System.Windows.Forms.Button(); - this.Label2 = new System.Windows.Forms.Label(); - this.lbllevelreached = new System.Windows.Forms.Label(); - this.pnlfinalstats = new System.Windows.Forms.Panel(); - this.btnplayagain = new System.Windows.Forms.Button(); - this.lblfinalcodepoints = new System.Windows.Forms.Label(); - this.Label11 = new System.Windows.Forms.Label(); - this.lblfinalcomputerreward = new System.Windows.Forms.Label(); - this.Label9 = new System.Windows.Forms.Label(); - this.lblfinallevelreward = new System.Windows.Forms.Label(); - this.lblfinallevelreached = new System.Windows.Forms.Label(); - this.lblfinalcodepointswithtext = new System.Windows.Forms.Label(); - this.pnllose = new System.Windows.Forms.Panel(); - this.lblmissedout = new System.Windows.Forms.Label(); - this.lblbutyougained = new System.Windows.Forms.Label(); - this.btnlosetryagain = new System.Windows.Forms.Button(); - this.Label5 = new System.Windows.Forms.Label(); - this.Label1 = new System.Windows.Forms.Label(); - this.lblbeatai = new System.Windows.Forms.Label(); - this.lblcountdown = new System.Windows.Forms.Label(); - this.ball = new ShiftOS.WinForms.Controls.Canvas(); - this.paddleHuman = new System.Windows.Forms.PictureBox(); - this.paddleComputer = new System.Windows.Forms.Panel(); - this.lbllevelandtime = new System.Windows.Forms.Label(); - this.lblstatscodepoints = new System.Windows.Forms.Label(); - this.lblstatsY = new System.Windows.Forms.Label(); - this.lblstatsX = new System.Windows.Forms.Label(); - this.pgcontents.SuspendLayout(); - this.pnlmultiplayerhandshake.SuspendLayout(); - this.pnlintro.SuspendLayout(); - this.pnlhighscore.SuspendLayout(); - this.flowLayoutPanel1.SuspendLayout(); - this.pnlgamestats.SuspendLayout(); - this.pnlfinalstats.SuspendLayout(); - this.pnllose.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.paddleHuman)).BeginInit(); + this.pnlcanvas = new System.Windows.Forms.Panel(); this.SuspendLayout(); // - // gameTimer - // - this.gameTimer.Interval = 30; - this.gameTimer.Tick += new System.EventHandler(this.gameTimer_Tick); - // - // counter - // - this.counter.Interval = 1000; - this.counter.Tick += new System.EventHandler(this.counter_Tick); - // - // tmrcountdown - // - this.tmrcountdown.Interval = 1000; - this.tmrcountdown.Tick += new System.EventHandler(this.countdown_Tick); - // - // tmrstoryline - // - this.tmrstoryline.Interval = 1000; - this.tmrstoryline.Tick += new System.EventHandler(this.tmrstoryline_Tick); - // - // pgcontents - // - this.pgcontents.BackColor = System.Drawing.Color.White; - this.pgcontents.Controls.Add(this.pnlmultiplayerhandshake); - this.pgcontents.Controls.Add(this.pnlintro); - this.pgcontents.Controls.Add(this.pnlhighscore); - this.pgcontents.Controls.Add(this.pnlgamestats); - this.pgcontents.Controls.Add(this.pnlfinalstats); - this.pgcontents.Controls.Add(this.pnllose); - this.pgcontents.Controls.Add(this.lblbeatai); - this.pgcontents.Controls.Add(this.lblcountdown); - this.pgcontents.Controls.Add(this.ball); - this.pgcontents.Controls.Add(this.paddleHuman); - this.pgcontents.Controls.Add(this.paddleComputer); - this.pgcontents.Controls.Add(this.lbllevelandtime); - this.pgcontents.Controls.Add(this.lblstatscodepoints); - this.pgcontents.Controls.Add(this.lblstatsY); - this.pgcontents.Controls.Add(this.lblstatsX); - this.pgcontents.Dock = System.Windows.Forms.DockStyle.Fill; - this.pgcontents.Location = new System.Drawing.Point(0, 0); - this.pgcontents.Name = "pgcontents"; - this.pgcontents.Size = new System.Drawing.Size(912, 504); - this.pgcontents.TabIndex = 20; - this.pgcontents.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pongMain_MouseMove); - // - // pnlmultiplayerhandshake - // - this.pnlmultiplayerhandshake.Controls.Add(this.lvotherplayers); - this.pnlmultiplayerhandshake.Controls.Add(this.lbmpstatus); - this.pnlmultiplayerhandshake.Location = new System.Drawing.Point(446, 88); - this.pnlmultiplayerhandshake.Name = "pnlmultiplayerhandshake"; - this.pnlmultiplayerhandshake.Size = new System.Drawing.Size(396, 231); - this.pnlmultiplayerhandshake.TabIndex = 15; - this.pnlmultiplayerhandshake.Visible = false; - // - // lvotherplayers - // - this.lvotherplayers.Dock = System.Windows.Forms.DockStyle.Fill; - this.lvotherplayers.Location = new System.Drawing.Point(0, 45); - this.lvotherplayers.MultiSelect = false; - this.lvotherplayers.Name = "lvotherplayers"; - this.lvotherplayers.Size = new System.Drawing.Size(396, 186); - this.lvotherplayers.TabIndex = 1; - this.lvotherplayers.UseCompatibleStateImageBehavior = false; - this.lvotherplayers.View = System.Windows.Forms.View.Details; - this.lvotherplayers.DoubleClick += new System.EventHandler(this.lvotherplayers_DoubleClick); - // - // lbmpstatus - // - this.lbmpstatus.Dock = System.Windows.Forms.DockStyle.Top; - this.lbmpstatus.Location = new System.Drawing.Point(0, 0); - this.lbmpstatus.Name = "lbmpstatus"; - this.lbmpstatus.Size = new System.Drawing.Size(396, 45); - this.lbmpstatus.TabIndex = 0; - this.lbmpstatus.Tag = "header2"; - this.lbmpstatus.Text = "Waiting for other players..."; - this.lbmpstatus.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // pnlintro - // - this.pnlintro.Controls.Add(this.btnmatchmake); - this.pnlintro.Controls.Add(this.Label6); - this.pnlintro.Controls.Add(this.btnstartgame); - this.pnlintro.Controls.Add(this.Label8); - this.pnlintro.Location = new System.Drawing.Point(0, 0); - this.pnlintro.Name = "pnlintro"; - this.pnlintro.Size = new System.Drawing.Size(595, 303); - this.pnlintro.TabIndex = 13; - this.pnlintro.Tag = "header2"; - // - // btnmatchmake - // - this.btnmatchmake.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.btnmatchmake.Location = new System.Drawing.Point(188, 253); - this.btnmatchmake.Name = "btnmatchmake"; - this.btnmatchmake.Size = new System.Drawing.Size(242, 28); - this.btnmatchmake.TabIndex = 16; - this.btnmatchmake.Text = "Or, play against another Shifter!"; - this.btnmatchmake.UseVisualStyleBackColor = true; - this.btnmatchmake.Click += new System.EventHandler(this.btnmatchmake_Click); - // - // Label6 - // - this.Label6.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.Label6.Location = new System.Drawing.Point(3, 39); - this.Label6.Name = "Label6"; - this.Label6.Size = new System.Drawing.Size(589, 159); - this.Label6.TabIndex = 15; - this.Label6.Text = "{PONG_DESC}"; - this.Label6.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // btnstartgame - // - this.btnstartgame.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.btnstartgame.Location = new System.Drawing.Point(188, 215); - this.btnstartgame.Name = "btnstartgame"; - this.btnstartgame.Size = new System.Drawing.Size(242, 28); - this.btnstartgame.TabIndex = 15; - this.btnstartgame.Text = "{PLAY}"; - this.btnstartgame.UseVisualStyleBackColor = true; - this.btnstartgame.Click += new System.EventHandler(this.btnstartgame_Click); - // - // Label8 - // - this.Label8.AutoSize = true; - this.Label8.Font = new System.Drawing.Font("Microsoft Sans Serif", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.Label8.ForeColor = System.Drawing.Color.Black; - this.Label8.Location = new System.Drawing.Point(250, 5); - this.Label8.Name = "Label8"; - this.Label8.Size = new System.Drawing.Size(280, 31); - this.Label8.TabIndex = 14; - this.Label8.Text = "{PONG_WELCOME}"; - // - // pnlhighscore - // - this.pnlhighscore.Controls.Add(this.lbhighscore); - this.pnlhighscore.Controls.Add(this.flowLayoutPanel1); - this.pnlhighscore.Controls.Add(this.label10); - this.pnlhighscore.Location = new System.Drawing.Point(688, 302); - this.pnlhighscore.Name = "pnlhighscore"; - this.pnlhighscore.Size = new System.Drawing.Size(539, 311); - this.pnlhighscore.TabIndex = 14; - this.pnlhighscore.Visible = false; - // - // lbhighscore - // - this.lbhighscore.Dock = System.Windows.Forms.DockStyle.Fill; - this.lbhighscore.Location = new System.Drawing.Point(0, 36); - this.lbhighscore.Name = "lbhighscore"; - this.lbhighscore.Size = new System.Drawing.Size(539, 246); - this.lbhighscore.TabIndex = 1; - this.lbhighscore.UseCompatibleStateImageBehavior = false; - // - // flowLayoutPanel1 - // - this.flowLayoutPanel1.AutoSize = true; - this.flowLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.flowLayoutPanel1.Controls.Add(this.button2); - this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Bottom; - this.flowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.RightToLeft; - this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 282); - this.flowLayoutPanel1.Name = "flowLayoutPanel1"; - this.flowLayoutPanel1.Size = new System.Drawing.Size(539, 29); - this.flowLayoutPanel1.TabIndex = 2; - // - // button2 - // - this.button2.AutoSize = true; - this.button2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button2.Location = new System.Drawing.Point(476, 3); - this.button2.Name = "button2"; - this.button2.Size = new System.Drawing.Size(60, 23); - this.button2.TabIndex = 0; - this.button2.Text = "{CLOSE}"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click); - // - // label10 - // - this.label10.Dock = System.Windows.Forms.DockStyle.Top; - this.label10.Location = new System.Drawing.Point(0, 0); - this.label10.Name = "label10"; - this.label10.Size = new System.Drawing.Size(539, 36); - this.label10.TabIndex = 0; - this.label10.Text = "{HIGH_SCORES}"; - this.label10.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // - // pnlgamestats - // - this.pnlgamestats.Controls.Add(this.button1); - this.pnlgamestats.Controls.Add(this.label12); - this.pnlgamestats.Controls.Add(this.lblnextstats); - this.pnlgamestats.Controls.Add(this.Label7); - this.pnlgamestats.Controls.Add(this.lblpreviousstats); - this.pnlgamestats.Controls.Add(this.Label4); - this.pnlgamestats.Controls.Add(this.btnplayon); - this.pnlgamestats.Controls.Add(this.Label3); - this.pnlgamestats.Controls.Add(this.btncashout); - this.pnlgamestats.Controls.Add(this.Label2); - this.pnlgamestats.Controls.Add(this.lbllevelreached); - this.pnlgamestats.Location = new System.Drawing.Point(104, 375); - this.pnlgamestats.Name = "pnlgamestats"; - this.pnlgamestats.Size = new System.Drawing.Size(466, 284); - this.pnlgamestats.TabIndex = 6; - this.pnlgamestats.Visible = false; - // - // button1 - // - this.button1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.button1.Location = new System.Drawing.Point(32, 223); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(191, 35); - this.button1.TabIndex = 10; - this.button1.Text = "{PONG_VIEW_HIGHSCORES}"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.btnhighscore_Click); - // - // label12 - // - this.label12.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label12.Location = new System.Drawing.Point(8, 187); - this.label12.Name = "label12"; - this.label12.Size = new System.Drawing.Size(245, 33); - this.label12.TabIndex = 9; - this.label12.Text = "{PONG_HIGHSCORE_EXP}"; - this.label12.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // lblnextstats - // - this.lblnextstats.AutoSize = true; - this.lblnextstats.Location = new System.Drawing.Point(278, 136); - this.lblnextstats.Name = "lblnextstats"; - this.lblnextstats.Size = new System.Drawing.Size(0, 13); - this.lblnextstats.TabIndex = 8; - // - // Label7 - // - this.Label7.AutoSize = true; - this.Label7.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.Label7.Location = new System.Drawing.Point(278, 119); - this.Label7.Name = "Label7"; - this.Label7.Size = new System.Drawing.Size(124, 16); - this.Label7.TabIndex = 7; - this.Label7.Text = "Next Level Stats:"; - // - // lblpreviousstats - // - this.lblpreviousstats.AutoSize = true; - this.lblpreviousstats.Location = new System.Drawing.Point(278, 54); - this.lblpreviousstats.Name = "lblpreviousstats"; - this.lblpreviousstats.Size = new System.Drawing.Size(0, 13); - this.lblpreviousstats.TabIndex = 6; - // - // Label4 - // - this.Label4.AutoSize = true; - this.Label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.Label4.Location = new System.Drawing.Point(278, 37); - this.Label4.Name = "Label4"; - this.Label4.Size = new System.Drawing.Size(154, 16); - this.Label4.TabIndex = 5; - this.Label4.Text = "Previous Level Stats:"; - // - // btnplayon - // - this.btnplayon.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.btnplayon.Location = new System.Drawing.Point(32, 147); - this.btnplayon.Name = "btnplayon"; - this.btnplayon.Size = new System.Drawing.Size(191, 35); - this.btnplayon.TabIndex = 4; - this.btnplayon.Text = "Play on for 3 codepoints!"; - this.btnplayon.UseVisualStyleBackColor = true; - this.btnplayon.Click += new System.EventHandler(this.btnplayon_Click); + // pnlcanvas // - // Label3 - // - this.Label3.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.Label3.Location = new System.Drawing.Point(8, 111); - this.Label3.Name = "Label3"; - this.Label3.Size = new System.Drawing.Size(245, 33); - this.Label3.TabIndex = 3; - this.Label3.Text = "{PONG_PLAYON_DESC}"; - this.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // btncashout - // - this.btncashout.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.btncashout.Location = new System.Drawing.Point(32, 73); - this.btncashout.Name = "btncashout"; - this.btncashout.Size = new System.Drawing.Size(191, 35); - this.btncashout.TabIndex = 2; - this.btncashout.Text = "Cash out with 1 codepoint!"; - this.btncashout.UseVisualStyleBackColor = true; - this.btncashout.Click += new System.EventHandler(this.btncashout_Click); - // - // Label2 - // - this.Label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.Label2.Location = new System.Drawing.Point(8, 37); - this.Label2.Name = "Label2"; - this.Label2.Size = new System.Drawing.Size(245, 33); - this.Label2.TabIndex = 1; - this.Label2.Text = "{PONG_CASHOUT_DESC}"; - this.Label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // lbllevelreached - // - this.lbllevelreached.AutoSize = true; - this.lbllevelreached.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lbllevelreached.Location = new System.Drawing.Point(149, 6); - this.lbllevelreached.Name = "lbllevelreached"; - this.lbllevelreached.Size = new System.Drawing.Size(185, 20); - this.lbllevelreached.TabIndex = 0; - this.lbllevelreached.Text = "You Reached Level 2!"; - // - // pnlfinalstats - // - this.pnlfinalstats.Controls.Add(this.btnplayagain); - this.pnlfinalstats.Controls.Add(this.lblfinalcodepoints); - this.pnlfinalstats.Controls.Add(this.Label11); - this.pnlfinalstats.Controls.Add(this.lblfinalcomputerreward); - this.pnlfinalstats.Controls.Add(this.Label9); - this.pnlfinalstats.Controls.Add(this.lblfinallevelreward); - this.pnlfinalstats.Controls.Add(this.lblfinallevelreached); - this.pnlfinalstats.Controls.Add(this.lblfinalcodepointswithtext); - this.pnlfinalstats.Location = new System.Drawing.Point(172, 74); - this.pnlfinalstats.Name = "pnlfinalstats"; - this.pnlfinalstats.Size = new System.Drawing.Size(362, 226); - this.pnlfinalstats.TabIndex = 9; - this.pnlfinalstats.Visible = false; - // - // btnplayagain - // - this.btnplayagain.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.btnplayagain.Location = new System.Drawing.Point(5, 194); - this.btnplayagain.Name = "btnplayagain"; - this.btnplayagain.Size = new System.Drawing.Size(352, 29); - this.btnplayagain.TabIndex = 16; - this.btnplayagain.Text = "{PLAY}"; - this.btnplayagain.UseVisualStyleBackColor = true; - this.btnplayagain.Click += new System.EventHandler(this.btnplayagain_Click); - // - // lblfinalcodepoints - // - this.lblfinalcodepoints.Font = new System.Drawing.Font("Microsoft Sans Serif", 48F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblfinalcodepoints.Location = new System.Drawing.Point(3, 124); - this.lblfinalcodepoints.Name = "lblfinalcodepoints"; - this.lblfinalcodepoints.Size = new System.Drawing.Size(356, 73); - this.lblfinalcodepoints.TabIndex = 15; - this.lblfinalcodepoints.Tag = "header1"; - this.lblfinalcodepoints.Text = "134 CP"; - this.lblfinalcodepoints.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // Label11 - // - this.Label11.AutoSize = true; - this.Label11.Font = new System.Drawing.Font("Microsoft Sans Serif", 21.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.Label11.Location = new System.Drawing.Point(162, 82); - this.Label11.Name = "Label11"; - this.Label11.Size = new System.Drawing.Size(33, 33); - this.Label11.TabIndex = 14; - this.Label11.Tag = "header2"; - this.Label11.Text = "+"; - this.Label11.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // lblfinalcomputerreward - // - this.lblfinalcomputerreward.Font = new System.Drawing.Font("Microsoft Sans Serif", 27.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblfinalcomputerreward.Location = new System.Drawing.Point(193, 72); - this.lblfinalcomputerreward.Name = "lblfinalcomputerreward"; - this.lblfinalcomputerreward.Size = new System.Drawing.Size(151, 52); - this.lblfinalcomputerreward.TabIndex = 12; - this.lblfinalcomputerreward.Tag = "header2"; - this.lblfinalcomputerreward.Text = "34"; - this.lblfinalcomputerreward.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // Label9 - // - this.Label9.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.Label9.Location = new System.Drawing.Point(179, 31); - this.Label9.Name = "Label9"; - this.Label9.Size = new System.Drawing.Size(180, 49); - this.Label9.TabIndex = 11; - this.Label9.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // lblfinallevelreward - // - this.lblfinallevelreward.Font = new System.Drawing.Font("Microsoft Sans Serif", 27.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblfinallevelreward.Location = new System.Drawing.Point(12, 72); - this.lblfinallevelreward.Name = "lblfinallevelreward"; - this.lblfinallevelreward.Size = new System.Drawing.Size(151, 52); - this.lblfinallevelreward.TabIndex = 10; - this.lblfinallevelreward.Tag = "header2"; - this.lblfinallevelreward.Text = "100"; - this.lblfinallevelreward.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // lblfinallevelreached - // - this.lblfinallevelreached.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblfinallevelreached.Location = new System.Drawing.Point(3, 31); - this.lblfinallevelreached.Name = "lblfinallevelreached"; - this.lblfinallevelreached.Size = new System.Drawing.Size(170, 49); - this.lblfinallevelreached.TabIndex = 9; - this.lblfinallevelreached.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // lblfinalcodepointswithtext - // - this.lblfinalcodepointswithtext.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblfinalcodepointswithtext.Location = new System.Drawing.Point(3, 2); - this.lblfinalcodepointswithtext.Name = "lblfinalcodepointswithtext"; - this.lblfinalcodepointswithtext.Size = new System.Drawing.Size(356, 26); - this.lblfinalcodepointswithtext.TabIndex = 1; - this.lblfinalcodepointswithtext.Tag = "header2"; - this.lblfinalcodepointswithtext.Text = "You cashed out with 134 codepoints!"; - this.lblfinalcodepointswithtext.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // pnllose - // - this.pnllose.Controls.Add(this.lblmissedout); - this.pnllose.Controls.Add(this.lblbutyougained); - this.pnllose.Controls.Add(this.btnlosetryagain); - this.pnllose.Controls.Add(this.Label5); - this.pnllose.Controls.Add(this.Label1); - this.pnllose.Location = new System.Drawing.Point(209, 71); - this.pnllose.Name = "pnllose"; - this.pnllose.Size = new System.Drawing.Size(266, 214); - this.pnllose.TabIndex = 10; - this.pnllose.Visible = false; - // - // lblmissedout - // - this.lblmissedout.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblmissedout.Location = new System.Drawing.Point(3, 175); - this.lblmissedout.Name = "lblmissedout"; - this.lblmissedout.Size = new System.Drawing.Size(146, 35); - this.lblmissedout.TabIndex = 3; - this.lblmissedout.Text = "You Missed Out On: 500 Codepoints"; - this.lblmissedout.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // lblbutyougained - // - this.lblbutyougained.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblbutyougained.Location = new System.Drawing.Point(3, 125); - this.lblbutyougained.Name = "lblbutyougained"; - this.lblbutyougained.Size = new System.Drawing.Size(146, 35); - this.lblbutyougained.TabIndex = 3; - this.lblbutyougained.Text = "But you gained 5 Codepoints"; - this.lblbutyougained.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // btnlosetryagain - // - this.btnlosetryagain.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.btnlosetryagain.Location = new System.Drawing.Point(155, 176); - this.btnlosetryagain.Name = "btnlosetryagain"; - this.btnlosetryagain.Size = new System.Drawing.Size(106, 35); - this.btnlosetryagain.TabIndex = 2; - this.btnlosetryagain.Text = "Try Again"; - this.btnlosetryagain.UseVisualStyleBackColor = true; - this.btnlosetryagain.Click += new System.EventHandler(this.btnlosetryagain_Click); - // - // Label5 - // - this.Label5.Location = new System.Drawing.Point(7, 26); - this.Label5.Name = "Label5"; - this.Label5.Size = new System.Drawing.Size(260, 163); - this.Label5.TabIndex = 1; - // - // Label1 - // - this.Label1.Dock = System.Windows.Forms.DockStyle.Top; - this.Label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.Label1.Location = new System.Drawing.Point(0, 0); - this.Label1.Name = "Label1"; - this.Label1.Size = new System.Drawing.Size(266, 16); - this.Label1.TabIndex = 0; - this.Label1.Text = "You lose!"; - this.Label1.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // - // lblbeatai - // - this.lblbeatai.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblbeatai.Location = new System.Drawing.Point(47, 41); - this.lblbeatai.Name = "lblbeatai"; - this.lblbeatai.Size = new System.Drawing.Size(600, 30); - this.lblbeatai.TabIndex = 8; - this.lblbeatai.Tag = "header2"; - this.lblbeatai.Text = "You got 2 codepoints for beating the Computer!"; - this.lblbeatai.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - this.lblbeatai.Visible = false; - // - // lblcountdown - // - this.lblcountdown.Font = new System.Drawing.Font("Microsoft Sans Serif", 24F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblcountdown.Location = new System.Drawing.Point(182, 152); - this.lblcountdown.Name = "lblcountdown"; - this.lblcountdown.Size = new System.Drawing.Size(315, 49); - this.lblcountdown.TabIndex = 7; - this.lblcountdown.Text = "3"; - this.lblcountdown.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - this.lblcountdown.Visible = false; - // - // ball - // - this.ball.BackColor = System.Drawing.Color.Black; - this.ball.Location = new System.Drawing.Point(300, 152); - this.ball.Name = "ball"; - this.ball.Size = new System.Drawing.Size(20, 20); - this.ball.TabIndex = 2; - this.ball.MouseEnter += new System.EventHandler(this.ball_MouseEnter); - this.ball.MouseLeave += new System.EventHandler(this.ball_MouseLeave); - // - // paddleHuman - // - this.paddleHuman.BackColor = System.Drawing.Color.Black; - this.paddleHuman.Location = new System.Drawing.Point(10, 134); - this.paddleHuman.Name = "paddleHuman"; - this.paddleHuman.Size = new System.Drawing.Size(20, 100); - this.paddleHuman.TabIndex = 3; - this.paddleHuman.TabStop = false; - // - // paddleComputer - // - this.paddleComputer.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.paddleComputer.BackColor = System.Drawing.Color.Black; - this.paddleComputer.Location = new System.Drawing.Point(878, 134); - this.paddleComputer.MaximumSize = new System.Drawing.Size(20, 150); - this.paddleComputer.Name = "paddleComputer"; - this.paddleComputer.Size = new System.Drawing.Size(20, 100); - this.paddleComputer.TabIndex = 1; - // - // lbllevelandtime - // - this.lbllevelandtime.Dock = System.Windows.Forms.DockStyle.Top; - this.lbllevelandtime.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lbllevelandtime.Location = new System.Drawing.Point(0, 0); - this.lbllevelandtime.Name = "lbllevelandtime"; - this.lbllevelandtime.Size = new System.Drawing.Size(912, 22); - this.lbllevelandtime.TabIndex = 4; - this.lbllevelandtime.Tag = "header1"; - this.lbllevelandtime.Text = "Level: 1 - 58 Seconds Left"; - this.lbllevelandtime.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // lblstatscodepoints - // - this.lblstatscodepoints.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.lblstatscodepoints.AutoSize = true; - this.lblstatscodepoints.Font = new System.Drawing.Font("Georgia", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblstatscodepoints.Location = new System.Drawing.Point(239, 460); - this.lblstatscodepoints.Name = "lblstatscodepoints"; - this.lblstatscodepoints.Size = new System.Drawing.Size(116, 23); - this.lblstatscodepoints.TabIndex = 12; - this.lblstatscodepoints.Tag = "header2"; - this.lblstatscodepoints.Text = "Codepoints: "; - this.lblstatscodepoints.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // lblstatsY - // - this.lblstatsY.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.lblstatsY.AutoSize = true; - this.lblstatsY.Font = new System.Drawing.Font("Georgia", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblstatsY.Location = new System.Drawing.Point(440, 460); - this.lblstatsY.Name = "lblstatsY"; - this.lblstatsY.Size = new System.Drawing.Size(76, 23); - this.lblstatsY.TabIndex = 11; - this.lblstatsY.Tag = "header2"; - this.lblstatsY.Text = "Yspeed:"; - this.lblstatsY.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // lblstatsX - // - this.lblstatsX.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.lblstatsX.AutoSize = true; - this.lblstatsX.Font = new System.Drawing.Font("Georgia", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblstatsX.Location = new System.Drawing.Point(3, 460); - this.lblstatsX.Name = "lblstatsX"; - this.lblstatsX.Size = new System.Drawing.Size(83, 23); - this.lblstatsX.TabIndex = 5; - this.lblstatsX.Tag = "header2"; - this.lblstatsX.Text = "Xspeed: "; - this.lblstatsX.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.pnlcanvas.Dock = System.Windows.Forms.DockStyle.Fill; + this.pnlcanvas.Location = new System.Drawing.Point(0, 0); + this.pnlcanvas.Name = "pnlcanvas"; + this.pnlcanvas.Size = new System.Drawing.Size(620, 469); + this.pnlcanvas.TabIndex = 0; + this.pnlcanvas.Paint += new System.Windows.Forms.PaintEventHandler(this.pnlcanvas_Paint); + this.pnlcanvas.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pnlcanvas_MouseMove); // // Pong // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.BackColor = System.Drawing.Color.White; - this.Controls.Add(this.pgcontents); - this.DoubleBuffered = true; + this.Controls.Add(this.pnlcanvas); this.Name = "Pong"; - this.Size = new System.Drawing.Size(912, 504); - this.Load += new System.EventHandler(this.Pong_Load); - this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pongMain_MouseMove); - this.pgcontents.ResumeLayout(false); - this.pgcontents.PerformLayout(); - this.pnlmultiplayerhandshake.ResumeLayout(false); - this.pnlintro.ResumeLayout(false); - this.pnlintro.PerformLayout(); - this.pnlhighscore.ResumeLayout(false); - this.pnlhighscore.PerformLayout(); - this.flowLayoutPanel1.ResumeLayout(false); - this.flowLayoutPanel1.PerformLayout(); - this.pnlgamestats.ResumeLayout(false); - this.pnlgamestats.PerformLayout(); - this.pnlfinalstats.ResumeLayout(false); - this.pnlfinalstats.PerformLayout(); - this.pnllose.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.paddleHuman)).EndInit(); + this.Size = new System.Drawing.Size(620, 469); this.ResumeLayout(false); } - internal System.Windows.Forms.Panel paddleComputer; - internal System.Windows.Forms.Timer gameTimer; - internal System.Windows.Forms.PictureBox paddleHuman; - internal System.Windows.Forms.Label lbllevelandtime; - internal System.Windows.Forms.Label lblstatsX; - internal System.Windows.Forms.Timer counter; - internal System.Windows.Forms.Panel pnlgamestats; - internal System.Windows.Forms.Label lblnextstats; - internal System.Windows.Forms.Label Label7; - internal System.Windows.Forms.Label lblpreviousstats; - internal System.Windows.Forms.Label Label4; - internal System.Windows.Forms.Button btnplayon; - internal System.Windows.Forms.Label Label3; - internal System.Windows.Forms.Button btncashout; - internal System.Windows.Forms.Label Label2; - internal System.Windows.Forms.Label lbllevelreached; - internal System.Windows.Forms.Label lblcountdown; - internal System.Windows.Forms.Timer tmrcountdown; - internal System.Windows.Forms.Label lblbeatai; - internal System.Windows.Forms.Panel pnlfinalstats; - internal System.Windows.Forms.Button btnplayagain; - internal System.Windows.Forms.Label lblfinalcodepoints; - internal System.Windows.Forms.Label Label11; - internal System.Windows.Forms.Label lblfinalcomputerreward; - internal System.Windows.Forms.Label Label9; - internal System.Windows.Forms.Label lblfinallevelreward; - internal System.Windows.Forms.Label lblfinallevelreached; - internal System.Windows.Forms.Label lblfinalcodepointswithtext; - internal System.Windows.Forms.Panel pnllose; - internal System.Windows.Forms.Label lblmissedout; - internal System.Windows.Forms.Label lblbutyougained; - internal System.Windows.Forms.Button btnlosetryagain; - internal System.Windows.Forms.Label Label5; - internal System.Windows.Forms.Label Label1; - internal System.Windows.Forms.Label lblstatscodepoints; - internal System.Windows.Forms.Label lblstatsY; - internal System.Windows.Forms.Panel pnlintro; - internal System.Windows.Forms.Label Label6; - internal System.Windows.Forms.Button btnstartgame; - internal System.Windows.Forms.Label Label8; - internal System.Windows.Forms.Timer tmrstoryline; - private System.Windows.Forms.Panel pnlhighscore; - private System.Windows.Forms.ListView lbhighscore; - private System.Windows.Forms.Label label10; - internal Canvas pgcontents; - internal Canvas ball; - internal System.Windows.Forms.Button button1; - internal System.Windows.Forms.Label label12; - private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; - private System.Windows.Forms.Button button2; - internal System.Windows.Forms.Button btnmatchmake; - private System.Windows.Forms.Panel pnlmultiplayerhandshake; - private System.Windows.Forms.ListView lvotherplayers; - private System.Windows.Forms.Label lbmpstatus; + + #endregion + + private System.Windows.Forms.Panel pnlcanvas; } } diff --git a/ShiftOS.WinForms/Applications/Pong.cs b/ShiftOS.WinForms/Applications/Pong.cs index 87f0306..a88d69f 100644 --- a/ShiftOS.WinForms/Applications/Pong.cs +++ b/ShiftOS.WinForms/Applications/Pong.cs @@ -1,1011 +1,186 @@ -/* - * MIT License - * - * Copyright (c) 2017 Michael VanOverbeek and ShiftOS devs - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -using System; +using System; using System.Collections.Generic; using System.ComponentModel; -using System.Data; using System.Drawing; +using System.Data; 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.WinForms.Tools; namespace ShiftOS.WinForms.Applications { - [MultiplayerOnly] [Launcher("Pong", true, "al_pong", "Games")] [WinOpen("pong")] + [DefaultTitle("Pong")] [DefaultIcon("iconPong")] public partial class Pong : UserControl, IShiftOSWindow { - //I can assure you guaranteed that there is an acorn somewhere, in this place, and the sailors are looking for it - int xVel = 7; - int yVel = 8; - int computerspeed = 8; - int level = 1; - int secondsleft = 60; - int casualposition; - double xveldec = 3.0; - double yveldec = 3.0; - double incrementx = 0.4; - double incrementy = 0.2; - int levelxspeed = 3; - int levelyspeed = 3; - ulong beatairewardtotal; - ulong beataireward = 1; - readonly uint[] levelrewards = { - 0, - 20, - 60, - 140, - 290, - 400, - 600, - 900, - 1200, - 1600, - 2000, - 2500, - 3000, - 4000, - 5000, - 6000, - 8000, - 10000, - 13000, - 16000, - 20000, - 25000, - 32000, - 40000, - 50000, - 60000, - 75000, - 90000, - 110000, - 140000, - 180000, - 220000, - 270000, - 320000, - 400000, - 500000, - 640000, - 800000, - 1000000, - 1500000, - 2000000}; - ulong totalreward; - int countdown = 3; - int rwdmultiplier; - Thread soundThread; - - bool aiShouldIsbeEnabled = true; // who named this variable? and were they having a stroke? - - private void playsound(System.IO.Stream stream) - { - soundThread = new Thread((a) => ShiftOS.Engine.AudioManager.PlayStream((System.IO.Stream)a)); - soundThread.Start(stream); - } - public Pong() { InitializeComponent(); - } - - private void Pong_Load(object sender, EventArgs e) - { - rwdmultiplier = ShiftoriumFrontend.UpgradeInstalled("pong_upgrade") ? 2 : 1; - } - - // Move the paddle according to the mouse position. - private void pongMain_MouseMove(object sender, MouseEventArgs e) - { - var loc = this.PointToClient(MousePosition); - if (IsMultiplayerSession) - { - if (IsLeader) - { - paddleHuman.Location = new Point(paddleHuman.Location.X, (loc.Y) - (paddleHuman.Height / 2)); - ServerManager.Forward(OpponentGUID, "pong_mp_setopponenty", paddleHuman.Top.ToString()); - } - else - { - paddleComputer.Location = new Point(paddleComputer.Location.X, (loc.Y) - (paddleComputer.Height / 2)); - ServerManager.Forward(OpponentGUID, "pong_mp_setopponenty", paddleComputer.Top.ToString()); - } - } - else + paddleWidth = pnlcanvas.Width / 30; + drawTimer = new Timer(); + drawTimer.Interval = 16; + drawTimer.Tick += (o, a) => { - paddleHuman.Location = new Point(paddleHuman.Location.X, (loc.Y) - (paddleHuman.Height / 2)); - } - } - - private void CenterPanels() - { - pnlfinalstats.CenterParent(); - pnlgamestats.CenterParent(); - pnlhighscore.CenterParent(); - pnlintro.CenterParent(); - pnllose.CenterParent(); - lblcountdown.CenterParent(); - lblbeatai.Left = (this.Width - lblbeatai.Width) / 2; - SetupStats(); - } - - public void SetupStats() - { - lblstatsX.Location = new Point(5, this.Height - lblstatsX.Height - 5); - lblstatsY.Location = new Point(this.Width - lblstatsY.Width - 5, this.Height - lblstatsY.Height - 5); - lblstatscodepoints.Top = this.Height - lblstatscodepoints.Height - 5; - lblstatscodepoints.Left = (this.Width - lblstatscodepoints.Width) / 2; + UpdateBall(); + pnlcanvas.Refresh(); + }; } - int OpponentY = 0; - - bool IsLeader = true; + private double ballX = 0.0f; + private double ballY = 0.0f; - int LeaderX = 0; - int LeaderY = 0; - // ERROR: Handles clauses are not supported in C# - private void gameTimer_Tick(object sender, EventArgs e) - { - if (this.Left < Screen.PrimaryScreen.Bounds.Width) - { - ball.BackColor = paddleComputer.BackColor = paddleHuman.BackColor = SkinEngine.LoadedSkin.ControlTextColor; - - //Check if paddle upgrade has been bought and change paddles accordingly - //if (ShiftoriumFrontend.UpgradeInstalled("pong_increased_paddle_size")) - //{ - // paddleHuman.Height = 150; - // paddleComputer.Height = 150; - //} - //I don't know the point of this but I'm fucking 86ing it. - Michael - - //Set the computer player to move according to the ball's position. - if (IsMultiplayerSession) - { - //If we're multiplayer, then we want to set the computer Y to the opponent's Y. - //If we're the leader, we set the AI paddle, else we set the player paddle. - if (IsLeader) - paddleComputer.Top = OpponentY; - else - paddleHuman.Top = OpponentY; - } - else - { - if (aiShouldIsbeEnabled) - if (ball.Location.X > (this.Width - (this.Width / 3)) - xVel * 10 && xVel > 0) - { - if (ball.Top > paddleComputer.Top + 50) - paddleComputer.Top += computerspeed; - else - paddleComputer.Top -= computerspeed; - casualposition = rand.Next(-150, 201); - } - else - { - //used to be me.location.y - except it's fucking C# and this comment is misleading as fuck. OH WAIT! I didn't write it! And none of the current devs did either! - Michael - if (paddleComputer.Top > this.Height / 2 - paddleComputer.Height + casualposition) - paddleComputer.Top -= computerspeed; - else - paddleComputer.Top += computerspeed; - } - } - //Set Xvel and Yvel speeds from decimal - if (xVel > 0) - xVel = (int)Math.Round(xveldec); - else - xVel = (int)-Math.Round(xveldec); - if (yVel > 0) - yVel = (int)Math.Round(yveldec); - else - yVel = (int)-Math.Round(yveldec); - - if (IsMultiplayerSession && !IsLeader) - { - // Move it to the leader's ball position. - ball.Location = new Point(LeaderX, LeaderY); - } - else - { - var newRect = new Rectangle(ball.Location, ball.Size); // copy ball's Bounds - newRect.X += xVel; - newRect.Y += yVel; - - // Check for top wall. - if (newRect.Y < 0) - { - newRect.Y = 0; - yVel = -yVel; - playsound(Properties.Resources.typesound); - } - - // Check for bottom wall. - if (newRect.Y > pgcontents.Height - ball.Height) - { - newRect.Y = pgcontents.Height - ball.Height; - yVel = -yVel; - playsound(Properties.Resources.typesound); - } - - - // Check for player paddle. - if (newRect.IntersectsWith(paddleHuman.Bounds)) - { - newRect.X = paddleHuman.Left + ball.Width + 1; - //randomly increase x or y speed of ball - switch (rand.Next(1, 3)) - { - case 1: - xveldec = xveldec + incrementx; - break; - case 2: - if (yveldec > 0) - yveldec = yveldec + incrementy; - else - yveldec = yveldec - incrementy; - break; - } - xVel = -xVel; - playsound(Properties.Resources.writesound); - - } - - // Check for computer paddle. - if (newRect.IntersectsWith(paddleComputer.Bounds)) - { - newRect.X = paddleComputer.Left - paddleComputer.Width - 1; - xveldec = xveldec + incrementx; - xVel = -xVel; - playsound(Properties.Resources.writesound); - } - ball.Location = newRect.Location; - } - - - - // Check for left wall. - if (ball.Location.X < -100) - { - //If we are in multiplayer, and not the leader, we won. - if (IsMultiplayerSession) - { - if (IsLeader) - { - //We lost. - NotifyLoseToTarget(); - } - else - { - //We won. - NotifyWinToTarget(); - Win(); - } - } - else - { - ball.Location = new Point(this.Size.Width / 2 + 200, this.Size.Height / 2); - paddleComputer.Location = new Point(paddleComputer.Location.X, ball.Location.Y); - if (xVel > 0) - xVel = -xVel; - pnllose.Show(); - gameTimer.Stop(); - counter.Stop(); - lblmissedout.Text = Localization.Parse("{YOU_MISSED_OUT_ON}:") + Environment.NewLine + lblstatscodepoints.Text.Replace(Localization.Parse("{CODEPOINTS}: "), "") + Localization.Parse(" {CODEPOINTS}"); - if (ShiftoriumFrontend.UpgradeInstalled("pong_upgrade_2")) - { - totalreward = (levelrewards[level - 1] * (ulong) rwdmultiplier + beatairewardtotal); - double onePercent = (totalreward / 100); - lblbutyougained.Show(); - lblbutyougained.Text = Localization.Parse("{BUT_YOU_GAINED}:") + Environment.NewLine + onePercent.ToString("") + (Localization.Parse(" {CODEPOINTS}")); - SaveSystem.TransferCodepointsFrom("pong", (ulong)(onePercent)); - } - else - { - lblbutyougained.Hide(); - } - } - } + private double speedFactor = 0.025; - // Check for right wall. - if (ball.Location.X > this.Width - ball.Size.Width - paddleComputer.Width + 100) - { - if (IsMultiplayerSession) - { - //If we are the leader we won. - if (IsLeader) - { - NotifyWinToTarget(); - Win(); - } - else - { - NotifyLoseToTarget(); - } - } - else - { - Win(); - } - } + private double xVel = 1; + private double yVel = 1; - if (IsMultiplayerSession) - { - if (IsLeader) - { - ServerManager.Forward(OpponentGUID, "pong_mp_setballpos", JsonConvert.SerializeObject(ball.Location)); - } - } + private int paddleWidth; - if (IsLeader) - { - //lblstats.Text = "Xspeed: " & Math.Abs(xVel) & " Yspeed: " & Math.Abs(yVel) & " Human Location: " & paddleHuman.Location.ToString & " Computer Location: " & paddleComputer.Location.ToString & Environment.NewLine & " Ball Location: " & ball.Location.ToString & " Xdec: " & xveldec & " Ydec: " & yveldec & " Xinc: " & incrementx & " Yinc: " & incrementy - lblstatsX.Text = "X vel: " + xveldec; - lblstatsY.Text = "Y vel: " + yveldec; - lblstatscodepoints.Text = "Codepoints: " + (levelrewards[level - 1] * (ulong) rwdmultiplier + beatairewardtotal).ToString(); - lbllevelandtime.Text = "Level: " + level + " - " + secondsleft + " seconds left"; - - if (xVel > 20 || xVel < -20) - { - paddleHuman.Width = Math.Abs(xVel); - paddleComputer.Width = Math.Abs(xVel); - } - else - { - paddleHuman.Width = paddleComputer.Width = 20; - } - } - if (!IsMultiplayerSession) - { - computerspeed = Math.Abs(yVel); - } - } - } + private double playerY = 0.0; + private double opponentY = 0.0; - public void ServerMessageReceivedHandler(ServerMessage msg) + public void UpdateBall() { - if (IsMultiplayerSession) - { - if (msg.Name == "pong_mp_setballpos") - { - var pt = JsonConvert.DeserializeObject(msg.Contents); - LeaderX = pt.X; - LeaderY = pt.Y; - } - else if (msg.Name == "pong_mp_left") - { - this.Invoke(new Action(() => - { - AppearanceManager.Close(this); - })); - Infobox.Show("Opponent has closed Pong.", "The opponent has closed Pong, therefore the connection between you two has dropped."); - } - else if (msg.Name == "pong_mp_youlose") - { - this.Invoke(new Action(LoseMP)); - } - else if (msg.Name == "pong_mp_setopponenty") - { - int y = Convert.ToInt32(msg.Contents); - OpponentY = y; - } - else if (msg.Name == "pong_handshake_matchmake") - { - if (!PossibleMatchmakes.Contains(msg.Contents)) - PossibleMatchmakes.Add(msg.Contents); - this.Invoke(new Action(ListMatchmakes)); - } - else if (msg.Name == "pong_handshake_resendid") - { - ServerManager.Forward("all", "pong_handshake_matchmake", YouGUID); - } - else if (msg.Name == "pong_handshake_complete") - { - IsLeader = true; - - OpponentGUID = msg.Contents; - LeaveMatchmake(); - this.Invoke(new Action(() => - { - pnlmultiplayerhandshake.Hide(); - StartLevel(); - })); - } - else if (msg.Name == "pong_mp_levelcompleted") - { - level = Convert.ToInt32(msg.Contents) + 1; - this.Invoke(new Action(CompleteLevel)); - } - else if (msg.Name == "pong_handshake_chosen") - { - IsLeader = false; - LeaveMatchmake(); - OpponentGUID = msg.Contents; - YouGUID = ServerManager.thisGuid.ToString(); - //Start the timers. - counter.Start(); - SendFollowerGUID(); - this.Invoke(new Action(() => - { - pnlmultiplayerhandshake.Hide(); - })); - } - else if (msg.Name == "pong_mp_cashedout") - { - this.Invoke(new Action(() => - { - btncashout_Click(this, EventArgs.Empty); - })); - Infobox.Show("Cashed out.", "The other player has cashed out their Codepoints. Therefore, we have automatically cashed yours out."); - } - else if (msg.Name == "pong_mp_startlevel") - { - OpponentAgrees = true; - if (YouAgree == false) - { - Infobox.PromptYesNo("Play another level?", "The opponent wants to play another level. Would you like to as well?", (answer) => - { - YouAgree = answer; - ServerManager.Forward(OpponentGUID, "pong_mp_level_callback", YouAgree.ToString()); - }); - } - } - else if (msg.Name == "pong_mp_level_callback") - { - bool agreed = bool.Parse(msg.Contents); - OpponentAgrees = agreed; - if (OpponentAgrees) - { - if (IsLeader) - { - //this.Invoke(new Action(())) - } - } - } - else if (msg.Name == "pong_handshake_left") - { - if (this.PossibleMatchmakes.Contains(msg.Contents)) - this.PossibleMatchmakes.Remove(msg.Contents); - this.Invoke(new Action(ListMatchmakes)); - } - else if (msg.Name == "pong_mp_clockupdate") - { - secondsleft = Convert.ToInt32(msg.Contents); - } - else if (msg.Name == "pong_mp_youwin") - { - this.Invoke(new Action(Win)); - } - } - } + double ballXLocal = linear(ballX, -1.0, 1.0, 0, pnlcanvas.Width); + double ballYLocal = linear(ballY, -1.0, 1.0, 0, pnlcanvas.Height); - bool OpponentAgrees = false; - bool YouAgree = false; + ballXLocal -= ((double)paddleWidth / 2); + ballYLocal -= ((double)paddleWidth / 2); - public void ListMatchmakes() - { - lvotherplayers.Items.Clear(); - var c = new ColumnHeader(); - c.Width = lvotherplayers.Width; - c.Text = "Player"; - lvotherplayers.Columns.Clear(); - lvotherplayers.Columns.Add(c); - - lvotherplayers.FullRowSelect = true; - foreach (var itm in PossibleMatchmakes) - { - if (itm != YouGUID) - { - var l = new ListViewItem(); - l.Text = itm; - lvotherplayers.Items.Add(l); - } - } + double playerYLocal = linear(playerY, -1.0, 1.0, 0, pnlcanvas.Height); + double opponentYLocal = linear(opponentY, -1.0, 1.0, 0, pnlcanvas.Height); - if (PossibleMatchmakes.Count > 0) - { - lbmpstatus.Text = "Select a player."; - } - else - { - lbmpstatus.Text = "Waiting for players..."; - } - } + int paddleHeight = pnlcanvas.Height / 5; - public void NotifyLoseToTarget() - { - ServerManager.Forward(OpponentGUID, "pong_mp_youwin", null); - } - public void NotifyWinToTarget() - { - ServerManager.Forward(OpponentGUID, "pong_mp_youlose", null); - } + Rectangle ballRect = new Rectangle((int)ballXLocal, (int)ballYLocal, paddleWidth, paddleWidth); - public void LeaveMatchmake() - { - ServerManager.Forward("all", "pong_handshake_left", YouGUID); - } + Rectangle playerRect = new Rectangle((int)paddleWidth, (int)(playerYLocal - (int)(paddleHeight / 2)), (int)paddleWidth, (int)paddleHeight); + Rectangle opponentRect = new Rectangle((int)(pnlcanvas.Width - (paddleWidth * 2)), (int)(opponentYLocal - (int)(paddleHeight / 2)), (int)paddleWidth, (int)paddleHeight); - List PossibleMatchmakes = new List(); + //Top and bottom walls: + if (ballRect.Top <= 0 || ballRect.Bottom >= pnlcanvas.Height) + yVel = -yVel; //reverse the Y velocity - public void SendLeaderGUID(string target) - { - ServerManager.Forward(target, "pong_handshake_chosen", YouGUID); - } + //Left and right walls (NOTE: TEMPORARY) + if (ballRect.Left <= 0 || ballRect.Right >= pnlcanvas.Width) + xVel = -xVel; //reverse the Y velocity - public void StartMultiplayer() - { - IsMultiplayerSession = true; - YouGUID = ServerManager.thisGuid.ToString(); - ServerManager.SendMessage("pong_handshake_matchmake", YouGUID); - StartMatchmake(); - } - public void StartMatchmake() - { - pnlmultiplayerhandshake.Show(); - pnlmultiplayerhandshake.CenterParent(); - pnlmultiplayerhandshake.BringToFront(); - - ServerManager.Forward("all", "pong_handshake_resendid", null); - - } - - - public void SendFollowerGUID() - { - ServerManager.Forward(OpponentGUID, "pong_handshake_complete", YouGUID); - } - - public void LoseMP() - { - ball.Location = new Point(this.Size.Width / 2 + 200, this.Size.Height / 2); - if (IsLeader) - if (xVel > 0) + //Enemy paddle: + if (ballRect.IntersectsWith(opponentRect)) + { + //check if the ball x is greater than the player paddle's middle coordinate + if (ballRect.Right <= opponentRect.Right - (opponentRect.Width / 2)) + { + //reverse x velocity to send the ball the other way xVel = -xVel; - lblbeatai.Show(); - lblbeatai.Text = "The opponent has beaten you!"; - tmrcountdown.Start(); - gameTimer.Stop(); - counter.Stop(); - - } - - public void Win() - { - ball.Location = new Point(this.Size.Width / 2 + 200, this.Size.Height / 2); - paddleComputer.Location = new Point(paddleComputer.Location.X, ball.Location.Y); - if (xVel > 0) - xVel = -xVel; - beatairewardtotal = beatairewardtotal + beataireward; - lblbeatai.Show(); - lblbeatai.Text = Localization.Parse($"{{PONG_BEAT_AI_REWARD_SECONDARY}}: {beataireward}"); - tmrcountdown.Start(); - gameTimer.Stop(); - counter.Stop(); - } + //set y velocity based on where the ball hit the paddle + yVel = linear((ballRect.Top + (ballRect.Height / 2)), opponentRect.Top, opponentRect.Bottom, -1, 1); - public void CompleteLevel() - { - if (SaveSystem.CurrentSave.UniteAuthToken != null) - { - try - { - var unite = new ShiftOS.Unite.UniteClient("http://getshiftos.ml", SaveSystem.CurrentSave.UniteAuthToken); - if (unite.GetPongLevel() < level) - unite.SetPongLevel(level); } - catch { } - } - //Only set these stats if the user is the leader. - if (IsLeader) - { - secondsleft = 60; - level = level + 1; - generatenextlevel(); + } - pnlgamestats.Show(); - pnlgamestats.BringToFront(); - pnlgamestats.Location = new Point((pgcontents.Width / 2) - (pnlgamestats.Width / 2), (pgcontents.Height / 2) - (pnlgamestats.Height / 2)); - counter.Stop(); - gameTimer.Stop(); - } - // ERROR: Handles clauses are not supported in C# - private void counter_Tick(object sender, EventArgs e) - { - if (IsLeader) + //Player paddle: + if (ballRect.IntersectsWith(playerRect)) { - if (this.Left < Screen.PrimaryScreen.Bounds.Width) + //check if the ball x is greater than the player paddle's middle coordinate + if(ballRect.Left >= playerRect.Left + (playerRect.Width / 2)) { - secondsleft = secondsleft - 1; - if (secondsleft == 0) - { - CompleteLevel(); - } - - lblstatscodepoints.Text = "Codepoints: " + (levelrewards[level - 1] * (ulong) rwdmultiplier + beatairewardtotal).ToString(); - } - } - SetupStats(); - } - - [Obsolete("This method does nothing. Use UniteClient for highscore queries.")] - public void SendHighscores() - { - } - - // ERROR: Handles clauses are not supported in C# - private void btnplayon_Click(object sender, EventArgs e) - { - xveldec = levelxspeed; - yveldec = levelyspeed; - - secondsleft = 60; - - tmrcountdown.Start(); - lblbeatai.Text = Localization.Parse($"{{PONG_BEAT_AI_REWARD}}: {beataireward}"); - pnlgamestats.Hide(); - lblbeatai.Show(); - ball.Location = new Point(paddleHuman.Location.X + paddleHuman.Width + 50, paddleHuman.Location.Y + paddleHuman.Height / 2); - if (xVel < 0) - xVel = Math.Abs(xVel); - lbllevelandtime.Text = Localization.Parse("{LEVEL}: " + level + " - " + secondsleft + " {SECONDS_LEFT}"); - } - - //Increase the ball speed stats for the next level - private void generatenextlevel() - { - lbllevelreached.Text = Localization.Parse("{YOU_REACHED_LEVEL} " + level + "!"); - - lblpreviousstats.Text = Localization.Parse("{INITIAL_H_VEL}: " + levelxspeed + Environment.NewLine + "{INITIAL_V_VEL}: " + levelyspeed + Environment.NewLine + "{INC_H_VEL}: " + incrementx + Environment.NewLine + "{INC_V_VEL}: " + incrementy); - - levelxspeed += rand.Next(1, 3); - - levelyspeed += rand.Next(1, 3); + //reverse x velocity to send the ball the other way + xVel = -xVel; - int rndinc = rand.Next(1, 6); - if (rndinc == 5) - incrementy += 0.3; - else - incrementy += (((rndinc - 1) % 2) + 1) / 10; + //set y velocity based on where the ball hit the paddle + yVel = linear((ballRect.Top + (ballRect.Height / 2)), playerRect.Top, playerRect.Bottom, -1, 1); - lblnextstats.Text = Localization.Parse("{INITIAL_H_VEL}: " + levelxspeed + Environment.NewLine + "{INITIAL_V_VEL}: " + levelyspeed + Environment.NewLine + "{INC_H_VEL}: " + incrementx + Environment.NewLine + "{INC_V_VEL}: " + incrementy); + } - if (level < 15) - { - beataireward = (ulong)(level * 5); - if (ShiftoriumFrontend.UpgradeInstalled("pong_upgrade")) - beataireward *= 2; } - else - if (ShiftoriumFrontend.UpgradeInstalled("pong_upgrade")) - beataireward = levelrewards[level - 1]; - else - beataireward = (ulong)Math.Round((double) levelrewards[level - 1] / 2); - totalreward = levelrewards[level - 1] * (ulong) rwdmultiplier + beatairewardtotal; - btncashout.Text = Localization.Parse("{CASH_OUT_WITH_CODEPOINTS}"); - btnplayon.Text = Localization.Parse("{PONG_PLAY_ON_FOR_MORE}"); - } - // ERROR: Handles clauses are not supported in C# - private void countdown_Tick(object sender, EventArgs e) - { - if (this.Left < Screen.PrimaryScreen.Bounds.Width) - { - if (countdown == 0) - { - countdown = 3; - lblcountdown.Hide(); - lblbeatai.Hide(); - gameTimer.Start(); - counter.Start(); - tmrcountdown.Stop(); - return; - } - if (!lblcountdown.Visible) - lblcountdown.Show(); - lblcountdown.Text = countdown.ToString(); - countdown -= 1; - playsound(Properties.Resources.typesound); - } - } - // ERROR: Handles clauses are not supported in C# - private void btncashout_Click(object sender, EventArgs e) - { - pnlgamestats.Hide(); - pnlfinalstats.Show(); - lblfinalcodepointswithtext.Text = Localization.Parse("{YOU_WON} " + totalreward + " {CODEPOINTS}!"); - lblfinallevelreached.Text = Localization.Parse("{CODEPOINTS_FOR_BEATING_LEVEL}: ") + (level - 1).ToString(); - lblfinallevelreward.Text = (levelrewards[level - 1] * rwdmultiplier).ToString(); - lblfinalcomputerreward.Text = beatairewardtotal.ToString(); - lblfinalcodepoints.Text = totalreward + Localization.Parse(" {CODEPOINTS_SHORT}"); - SaveSystem.TransferCodepointsFrom("pong", totalreward); - if (!string.IsNullOrWhiteSpace(SaveSystem.CurrentSave.UniteAuthToken)) - { - var unite = new ShiftOS.Unite.UniteClient("http://getshiftos.ml", SaveSystem.CurrentSave.UniteAuthToken); - if (unite.GetPongCP() < totalreward) - { - unite.SetPongCP(totalreward); - } - } - if (IsMultiplayerSession) - { - ServerManager.Forward(OpponentGUID, "pong_mp_cashedout", null); - StopMultiplayerSession(); - } - } - public void StopMultiplayerSession() - { - IsMultiplayerSession = false; - IsLeader = true; - OpponentGUID = ""; - YouGUID = ""; - } - - private void newgame() - { - pnlfinalstats.Hide(); - pnllose.Hide(); - pnlintro.Hide(); + ballX += xVel * speedFactor; + ballY += yVel * speedFactor; - level = 1; - totalreward = 0; - if (ShiftoriumFrontend.UpgradeInstalled("pong_upgrade")) - { - beataireward = 10; - } - else - { - beataireward = 5; - } - beatairewardtotal = 0; - secondsleft = 60; - lblstatscodepoints.Text = Localization.Parse("{CODEPOINTS}: "); - //reset stats text - lblstatsX.Text = Localization.Parse("{H_VEL}: "); - lblstatsY.Text = Localization.Parse("{V_VEL}: "); - - levelxspeed = 3; - levelyspeed = 3; - - incrementx = 0.4; - incrementy = 0.2; - - xveldec = levelxspeed; - yveldec = levelyspeed; - - tmrcountdown.Start(); - lblbeatai.Text = Localization.Parse($"{{PONG_BEAT_AI_REWARD}}: {beataireward}"); - pnlgamestats.Hide(); - lblbeatai.Show(); - ball.Location = new Point(paddleHuman.Location.X + paddleHuman.Width + 50, (paddleHuman.Location.Y + paddleHuman.Height) / 2); - if (xVel < 0) - xVel = Math.Abs(xVel); - lbllevelandtime.Text = Localization.Parse("{{LEVEL}}: " + level + " - " + secondsleft + " {SECONDS_LEFT}"); } - public void btnhighscore_Click(object s, EventArgs a) + private void pnlcanvas_Paint(object sender, PaintEventArgs e) { - pnlhighscore.BringToFront(); - SetupHighScores(); - } - bool IsMultiplayerSession = false; + paddleWidth = pnlcanvas.Width / 30; + double ballXLocal = linear(ballX, -1.0, 1.0, 0, pnlcanvas.Width); + double ballYLocal = linear(ballY, -1.0, 1.0, 0, pnlcanvas.Height); - string YouGUID = ""; - string OpponentGUID = ""; + ballXLocal -= ((double)paddleWidth / 2); + ballYLocal -= ((double)paddleWidth / 2); - public void SetupHighScores() - { - lbhighscore.Items.Clear(); - lbhighscore.View = View.Details; - lbhighscore.FullRowSelect = true; - lbhighscore.Columns.Clear(); - var n = new ColumnHeader(); - n.Text = "Player"; - n.Width = lbhighscore.Width / 3; - var l = new ColumnHeader(); - l.Text = "Level"; - l.Width = n.Width; - var c = new ColumnHeader(); - c.Text = "Codepoints"; - c.Width = n.Width; - lbhighscore.Columns.Add(n); - lbhighscore.Columns.Add(l); - lbhighscore.Columns.Add(c); - - var t = new Thread(() => - { - try - { - var unite = new ShiftOS.Unite.UniteClient("http://getshiftos.ml", SaveSystem.CurrentSave.UniteAuthToken); - var hs = unite.GetPongHighscores(); - foreach (var score in hs.Highscores) - { - if (this.ParentForm.Visible == false) - { - Thread.CurrentThread.Abort(); - } - string username = unite.GetDisplayNameId(score.UserId); - this.Invoke(new Action(() => - { - var name_item = new ListViewItem(); - name_item.Text = username; - lbhighscore.Items.Add(name_item); - name_item.SubItems.Add(score.Level.ToString()); - name_item.SubItems.Add(score.CodepointsCashout.ToString()); - })); - } - } - catch - { - try - { - if (this.ParentForm.Visible) - { - Infobox.Show("Service unavailable.", "The Pong Highscore service is unavailable at this time."); - this.Invoke(new Action(pnlgamestats.BringToFront)); - } - } - catch { } //JUST. ABORT. THE. FUCKING. THREAD. - return; - } - }); - t.Start(); - pnlhighscore.Show(); - } + e.Graphics.Clear(pnlcanvas.BackColor); - // ERROR: Handles clauses are not supported in C# - private void btnplayagain_Click(object sender, EventArgs e) - { - newgame(); - } + //draw the ball + e.Graphics.FillEllipse(new SolidBrush(pnlcanvas.ForeColor), new RectangleF((float)ballXLocal, (float)ballYLocal, (float)paddleWidth, (float)paddleWidth)); - // ERROR: Handles clauses are not supported in C# - private void btnlosetryagain_Click(object sender, EventArgs e) - { - newgame(); - } + double playerYLocal = linear(playerY, -1.0, 1.0, 0, pnlcanvas.Height); + double opponentYLocal = linear(opponentY, -1.0, 1.0, 0, pnlcanvas.Height); - public void StartLevel() - { - newgame(); - } + int paddleHeight = pnlcanvas.Height / 5; - // ERROR: Handles clauses are not supported in C# - private void btnstartgame_Click(object sender, EventArgs e) - { - newgame(); - } + int paddleStart = paddleWidth; - Random rand = new Random(); - // ERROR: Handles clauses are not supported in C# - private void tmrstoryline_Tick(object sender, EventArgs e) - { - // Random chance of showing getshiftnet storyline - int i = rand.Next(0, 100); + //draw player paddle + e.Graphics.FillRectangle(new SolidBrush(pnlcanvas.ForeColor), new RectangleF((float)paddleWidth, (float)(playerYLocal - (float)(paddleHeight / 2)), (float)paddleWidth, (float)paddleHeight)); - if (i >= 25 && i <= 50) - tmrstoryline.Stop(); + //draw opponent + e.Graphics.FillRectangle(new SolidBrush(pnlcanvas.ForeColor), new RectangleF((float)(pnlcanvas.Width - (paddleWidth*2)), (float)(opponentYLocal - (float)(paddleHeight / 2)), (float)paddleWidth, (float)paddleHeight)); } - // ERROR: Handles clauses are not supported in C# - private void me_closing(object sender, FormClosingEventArgs e) + static public double linear(double x, double x0, double x1, double y0, double y1) { - tmrstoryline.Stop(); - } - - private void ball_MouseEnter(object sender, EventArgs e) - { - aiShouldIsbeEnabled = false; + if ((x1 - x0) == 0) + { + return (y0 + y1) / 2; + } + return y0 + (x - x0) * (y1 - y0) / (x1 - x0); } - private void ball_MouseLeave(object sender, EventArgs e) - { - aiShouldIsbeEnabled = true; - } + Timer drawTimer = null; public void OnLoad() { - pnlintro.BringToFront(); - pnlintro.Show(); - pnlhighscore.Hide(); - pnlgamestats.Hide(); - pnlfinalstats.Hide(); - CenterPanels(); - lblbeatai.Hide(); - ServerManager.MessageReceived += this.ServerMessageReceivedHandler; + drawTimer.Start(); } public void OnSkinLoad() { - CenterPanels(); - this.SizeChanged += (o, a) => - { - CenterPanels(); - }; } public bool OnUnload() { - if (IsMultiplayerSession) - { - if (!string.IsNullOrWhiteSpace(OpponentGUID)) - ServerManager.Forward(OpponentGUID, "pong_mp_left", null); - LeaveMatchmake(); - } - ServerManager.MessageReceived -= this.ServerMessageReceivedHandler; - + drawTimer.Stop(); return true; } public void OnUpgrade() { - CenterPanels(); - } - - private void button2_Click(object sender, EventArgs e) - { - pnlhighscore.Hide(); - } - - private void btnmatchmake_Click(object sender, EventArgs e) - { - this.StartMultiplayer(); - pnlintro.Hide(); - lblbeatai.Text = "Beat the other player to earn Codepoints."; - lblcountdown.Text = "Waiting for another player..."; - lblcountdown.Left = (this.Width - lblcountdown.Width) / 2; } - private void lvotherplayers_DoubleClick(object sender, EventArgs e) + private void pnlcanvas_MouseMove(object sender, MouseEventArgs e) { - if (lvotherplayers.SelectedItems.Count > 0) - { - SendLeaderGUID(lvotherplayers.SelectedItems[0].Text); - } + playerY = linear(e.Y, 0, pnlcanvas.Height, -1, 1); } } -} \ No newline at end of file +} diff --git a/ShiftOS.WinForms/Applications/Pong.resx b/ShiftOS.WinForms/Applications/Pong.resx index cc96099..1af7de1 100644 --- a/ShiftOS.WinForms/Applications/Pong.resx +++ b/ShiftOS.WinForms/Applications/Pong.resx @@ -117,19 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 227, 17 - - - 134, 17 - - - 340, 17 - - - 17, 17 - - - 472, 17 - \ No newline at end of file diff --git a/ShiftOS.WinForms/ShiftOS.WinForms.csproj b/ShiftOS.WinForms/ShiftOS.WinForms.csproj index 31de44e..9e16b19 100644 --- a/ShiftOS.WinForms/ShiftOS.WinForms.csproj +++ b/ShiftOS.WinForms/ShiftOS.WinForms.csproj @@ -77,6 +77,12 @@ IconManager.cs + + UserControl + + + Pong.cs + UserControl @@ -197,12 +203,6 @@ Notifications.cs - - UserControl - - - Pong.cs - UserControl @@ -490,6 +490,9 @@ IconManager.cs + + Pong.cs + TriPresent.cs @@ -547,9 +550,6 @@ Notifications.cs - - Pong.cs - Shifter.cs -- cgit v1.2.3 From 6a28bbbb634cb0e17d8b07cec35acb18f7613d34 Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 15 Jun 2017 17:45:57 -0400 Subject: Ball prediction AI --- ShiftOS.WinForms/Applications/Pong.cs | 46 +++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to 'ShiftOS.WinForms/Applications') diff --git a/ShiftOS.WinForms/Applications/Pong.cs b/ShiftOS.WinForms/Applications/Pong.cs index a88d69f..1221729 100644 --- a/ShiftOS.WinForms/Applications/Pong.cs +++ b/ShiftOS.WinForms/Applications/Pong.cs @@ -33,6 +33,9 @@ namespace ShiftOS.WinForms.Applications private double ballX = 0.0f; private double ballY = 0.0f; + private double aiBallX = 0.0f; + private double aiBallY = 0.0f; + private double speedFactor = 0.025; @@ -44,6 +47,8 @@ namespace ShiftOS.WinForms.Applications private double playerY = 0.0; private double opponentY = 0.0; + bool doAi = true; + public void UpdateBall() { double ballXLocal = linear(ballX, -1.0, 1.0, 0, pnlcanvas.Width); @@ -52,6 +57,13 @@ namespace ShiftOS.WinForms.Applications ballXLocal -= ((double)paddleWidth / 2); ballYLocal -= ((double)paddleWidth / 2); + double aiBallXLocal = linear(aiBallX, -1.0, 1.0, 0, pnlcanvas.Width); + double aiBallYLocal = linear(aiBallY, -1.0, 1.0, 0, pnlcanvas.Height); + + aiBallXLocal -= ((double)paddleWidth / 2); + aiBallYLocal -= ((double)paddleWidth / 2); + + double playerYLocal = linear(playerY, -1.0, 1.0, 0, pnlcanvas.Height); double opponentYLocal = linear(opponentY, -1.0, 1.0, 0, pnlcanvas.Height); @@ -60,6 +72,9 @@ namespace ShiftOS.WinForms.Applications Rectangle ballRect = new Rectangle((int)ballXLocal, (int)ballYLocal, paddleWidth, paddleWidth); + Rectangle aiBallRect = new Rectangle((int)aiBallXLocal, (int)aiBallYLocal, paddleWidth, paddleWidth); + + Rectangle playerRect = new Rectangle((int)paddleWidth, (int)(playerYLocal - (int)(paddleHeight / 2)), (int)paddleWidth, (int)paddleHeight); Rectangle opponentRect = new Rectangle((int)(pnlcanvas.Width - (paddleWidth * 2)), (int)(opponentYLocal - (int)(paddleHeight / 2)), (int)paddleWidth, (int)paddleHeight); @@ -90,6 +105,16 @@ namespace ShiftOS.WinForms.Applications } + //Enemy paddle - AI: + if (aiBallRect.IntersectsWith(opponentRect)) + { + //check if the ball x is greater than the player paddle's middle coordinate + if (aiBallRect.Right <= opponentRect.Right - (opponentRect.Width / 2)) + { + doAi = false; + } + + } //Player paddle: @@ -104,6 +129,10 @@ namespace ShiftOS.WinForms.Applications //set y velocity based on where the ball hit the paddle yVel = linear((ballRect.Top + (ballRect.Height / 2)), playerRect.Top, playerRect.Bottom, -1, 1); + //reset the ai location + aiBallX = ballX; + aiBallY = ballY; + doAi = true; } } @@ -115,6 +144,23 @@ namespace ShiftOS.WinForms.Applications ballX += xVel * speedFactor; ballY += yVel * speedFactor; + aiBallX += xVel * (speedFactor * 2); + aiBallY += yVel * (speedFactor * 2); + + if (doAi == true) + { + if (opponentY != aiBallY) + { + if (opponentY < aiBallY) + { + opponentY += speedFactor; + } + else + { + opponentY -= speedFactor; + } + } + } } private void pnlcanvas_Paint(object sender, PaintEventArgs e) -- cgit v1.2.3 From 11ff04a384b7c11746dde10114bd5aee6bb9a3d4 Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 15 Jun 2017 18:13:07 -0400 Subject: ai improvements and codepoints --- ShiftOS.WinForms/Applications/Pong.cs | 63 ++++++++++++++++++++++++++++++++--- 1 file changed, 58 insertions(+), 5 deletions(-) (limited to 'ShiftOS.WinForms/Applications') diff --git a/ShiftOS.WinForms/Applications/Pong.cs b/ShiftOS.WinForms/Applications/Pong.cs index 1221729..235a049 100644 --- a/ShiftOS.WinForms/Applications/Pong.cs +++ b/ShiftOS.WinForms/Applications/Pong.cs @@ -44,6 +44,10 @@ namespace ShiftOS.WinForms.Applications private int paddleWidth; + private long codepointsToEarn = 0; + private int level = 1; + + private double playerY = 0.0; private double opponentY = 0.0; @@ -82,11 +86,22 @@ namespace ShiftOS.WinForms.Applications if (ballRect.Top <= 0 || ballRect.Bottom >= pnlcanvas.Height) yVel = -yVel; //reverse the Y velocity - //Left and right walls (NOTE: TEMPORARY) - if (ballRect.Left <= 0 || ballRect.Right >= pnlcanvas.Width) - xVel = -xVel; //reverse the Y velocity + //Left wall + if(ballRect.Left <= 0) + { + //You lose. + codepointsToEarn = 0; + Lose(); + } + //Right wall + if(ballRect.Right >= pnlcanvas.Width) + { + //You win. + codepointsToEarn += CalculateAIBeatCP(); + Win(); + } //Enemy paddle: if (ballRect.IntersectsWith(opponentRect)) @@ -153,16 +168,45 @@ namespace ShiftOS.WinForms.Applications { if (opponentY < aiBallY) { - opponentY += speedFactor; + if (opponentY < 0.9) + opponentY += speedFactor; } else { - opponentY -= speedFactor; + if (opponentY > -0.9) + opponentY -= speedFactor; } } } } + public void Lose() + { + InitializeCoordinates(); + } + + public long CalculateAIBeatCP() + { + return 2 * (10 * level); + } + + public void Win() + { + InitializeCoordinates(); + } + + public void InitializeCoordinates() + { + ballX = 0; + ballY = 0; + xVel = 1; + yVel = 1; + opponentY = 0; + aiBallX = 0; + aiBallY = 0; + doAi = true; + } + private void pnlcanvas_Paint(object sender, PaintEventArgs e) { @@ -192,6 +236,15 @@ namespace ShiftOS.WinForms.Applications //draw opponent e.Graphics.FillRectangle(new SolidBrush(pnlcanvas.ForeColor), new RectangleF((float)(pnlcanvas.Width - (paddleWidth*2)), (float)(opponentYLocal - (float)(paddleHeight / 2)), (float)paddleWidth, (float)paddleHeight)); + string cp_text = Localization.Parse("{CODEPOINTS}: " + codepointsToEarn); + + var tSize = e.Graphics.MeasureString(cp_text, SkinEngine.LoadedSkin.Header3Font); + + var tLoc = new PointF((pnlcanvas.Width - (int)tSize.Width) / 2, + (pnlcanvas.Height - (int)tSize.Height) + + ); + e.Graphics.DrawString(cp_text, SkinEngine.LoadedSkin.Header3Font, new SolidBrush(pnlcanvas.ForeColor), tLoc); } static public double linear(double x, double x0, double x1, double y0, double y1) -- cgit v1.2.3 From f9ef8e021ca391f1b2f902ed3d91cb711a753f82 Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 15 Jun 2017 20:01:26 -0400 Subject: More optimizations --- ShiftOS.WinForms/Applications/Pong.Designer.cs | 4 +- ShiftOS.WinForms/Applications/Pong.cs | 242 ++++++++++++++++--------- 2 files changed, 160 insertions(+), 86 deletions(-) (limited to 'ShiftOS.WinForms/Applications') diff --git a/ShiftOS.WinForms/Applications/Pong.Designer.cs b/ShiftOS.WinForms/Applications/Pong.Designer.cs index 11bed40..22ad6f6 100644 --- a/ShiftOS.WinForms/Applications/Pong.Designer.cs +++ b/ShiftOS.WinForms/Applications/Pong.Designer.cs @@ -36,7 +36,7 @@ this.pnlcanvas.Dock = System.Windows.Forms.DockStyle.Fill; this.pnlcanvas.Location = new System.Drawing.Point(0, 0); this.pnlcanvas.Name = "pnlcanvas"; - this.pnlcanvas.Size = new System.Drawing.Size(620, 469); + this.pnlcanvas.Size = new System.Drawing.Size(879, 450); this.pnlcanvas.TabIndex = 0; this.pnlcanvas.Paint += new System.Windows.Forms.PaintEventHandler(this.pnlcanvas_Paint); this.pnlcanvas.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pnlcanvas_MouseMove); @@ -47,7 +47,7 @@ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Controls.Add(this.pnlcanvas); this.Name = "Pong"; - this.Size = new System.Drawing.Size(620, 469); + this.Size = new System.Drawing.Size(879, 450); this.ResumeLayout(false); } diff --git a/ShiftOS.WinForms/Applications/Pong.cs b/ShiftOS.WinForms/Applications/Pong.cs index 235a049..079c880 100644 --- a/ShiftOS.WinForms/Applications/Pong.cs +++ b/ShiftOS.WinForms/Applications/Pong.cs @@ -22,12 +22,25 @@ namespace ShiftOS.WinForms.Applications InitializeComponent(); paddleWidth = pnlcanvas.Width / 30; drawTimer = new Timer(); - drawTimer.Interval = 16; + drawTimer.Interval = 1; drawTimer.Tick += (o, a) => { UpdateBall(); pnlcanvas.Refresh(); }; + counterTimer = new Timer(); + counterTimer.Interval = 1000; + counterTimer.Tick += (o, a) => + { + if(secondsleft > 0) + { + secondsleft--; + } + else + { + LevelComplete(); + } + }; } private double ballX = 0.0f; @@ -37,144 +50,154 @@ namespace ShiftOS.WinForms.Applications private double aiBallY = 0.0f; - private double speedFactor = 0.025; + private double speedFactor = 0.0125; private double xVel = 1; private double yVel = 1; private int paddleWidth; + Timer counterTimer = null; + private long codepointsToEarn = 0; private int level = 1; private double playerY = 0.0; private double opponentY = 0.0; - + private int secondsleft = 60; bool doAi = true; + bool doBallCalc = true; + + private string header = "Pong - Technology Demo"; + + private string counter = ""; public void UpdateBall() { - double ballXLocal = linear(ballX, -1.0, 1.0, 0, pnlcanvas.Width); - double ballYLocal = linear(ballY, -1.0, 1.0, 0, pnlcanvas.Height); + if (doBallCalc) + { + double ballXLocal = linear(ballX, -1.0, 1.0, 0, pnlcanvas.Width); + double ballYLocal = linear(ballY, -1.0, 1.0, 0, pnlcanvas.Height); - ballXLocal -= ((double)paddleWidth / 2); - ballYLocal -= ((double)paddleWidth / 2); + ballXLocal -= ((double)paddleWidth / 2); + ballYLocal -= ((double)paddleWidth / 2); - double aiBallXLocal = linear(aiBallX, -1.0, 1.0, 0, pnlcanvas.Width); - double aiBallYLocal = linear(aiBallY, -1.0, 1.0, 0, pnlcanvas.Height); + double aiBallXLocal = linear(aiBallX, -1.0, 1.0, 0, pnlcanvas.Width); + double aiBallYLocal = linear(aiBallY, -1.0, 1.0, 0, pnlcanvas.Height); - aiBallXLocal -= ((double)paddleWidth / 2); - aiBallYLocal -= ((double)paddleWidth / 2); + aiBallXLocal -= ((double)paddleWidth / 2); + aiBallYLocal -= ((double)paddleWidth / 2); - double playerYLocal = linear(playerY, -1.0, 1.0, 0, pnlcanvas.Height); - double opponentYLocal = linear(opponentY, -1.0, 1.0, 0, pnlcanvas.Height); + double playerYLocal = linear(playerY, -1.0, 1.0, 0, pnlcanvas.Height); + double opponentYLocal = linear(opponentY, -1.0, 1.0, 0, pnlcanvas.Height); - int paddleHeight = pnlcanvas.Height / 5; + int paddleHeight = pnlcanvas.Height / 5; - Rectangle ballRect = new Rectangle((int)ballXLocal, (int)ballYLocal, paddleWidth, paddleWidth); + Rectangle ballRect = new Rectangle((int)ballXLocal, (int)ballYLocal, paddleWidth, paddleWidth); - Rectangle aiBallRect = new Rectangle((int)aiBallXLocal, (int)aiBallYLocal, paddleWidth, paddleWidth); + Rectangle aiBallRect = new Rectangle((int)aiBallXLocal, (int)aiBallYLocal, paddleWidth, paddleWidth); - Rectangle playerRect = new Rectangle((int)paddleWidth, (int)(playerYLocal - (int)(paddleHeight / 2)), (int)paddleWidth, (int)paddleHeight); - Rectangle opponentRect = new Rectangle((int)(pnlcanvas.Width - (paddleWidth * 2)), (int)(opponentYLocal - (int)(paddleHeight / 2)), (int)paddleWidth, (int)paddleHeight); + Rectangle playerRect = new Rectangle((int)paddleWidth, (int)(playerYLocal - (int)(paddleHeight / 2)), (int)paddleWidth, (int)paddleHeight); + Rectangle opponentRect = new Rectangle((int)(pnlcanvas.Width - (paddleWidth * 2)), (int)(opponentYLocal - (int)(paddleHeight / 2)), (int)paddleWidth, (int)paddleHeight); - //Top and bottom walls: - if (ballRect.Top <= 0 || ballRect.Bottom >= pnlcanvas.Height) - yVel = -yVel; //reverse the Y velocity + //Top and bottom walls: + if (ballRect.Top <= 0 || ballRect.Bottom >= pnlcanvas.Height) + yVel = -yVel; //reverse the Y velocity - //Left wall - if(ballRect.Left <= 0) - { - //You lose. - codepointsToEarn = 0; - Lose(); - } + //Left wall + if (ballRect.Left <= 0) + { + //You lose. + codepointsToEarn = 0; + Lose(); + } - //Right wall - if(ballRect.Right >= pnlcanvas.Width) - { - //You win. - codepointsToEarn += CalculateAIBeatCP(); - Win(); - } + //Right wall + if (ballRect.Right >= pnlcanvas.Width) + { + //You win. + codepointsToEarn += CalculateAIBeatCP(); + Win(); + } - //Enemy paddle: - if (ballRect.IntersectsWith(opponentRect)) - { - //check if the ball x is greater than the player paddle's middle coordinate - if (ballRect.Right <= opponentRect.Right - (opponentRect.Width / 2)) + //Enemy paddle: + if (ballRect.IntersectsWith(opponentRect)) { - //reverse x velocity to send the ball the other way - xVel = -xVel; + //check if the ball x is greater than the player paddle's middle coordinate + if (ballRect.Right >= opponentRect.Left) + { + //reverse x velocity to send the ball the other way + xVel = -xVel; - //set y velocity based on where the ball hit the paddle - yVel = linear((ballRect.Top + (ballRect.Height / 2)), opponentRect.Top, opponentRect.Bottom, -1, 1); + //set y velocity based on where the ball hit the paddle + yVel = linear((ballRect.Top + (ballRect.Height / 2)), opponentRect.Top, opponentRect.Bottom, -1, 1); + doAi = false; + } } - } - - //Enemy paddle - AI: - if (aiBallRect.IntersectsWith(opponentRect)) - { - //check if the ball x is greater than the player paddle's middle coordinate - if (aiBallRect.Right <= opponentRect.Right - (opponentRect.Width / 2)) + //Enemy paddle - AI: + if (aiBallRect.IntersectsWith(opponentRect)) { - doAi = false; - } + //check if the ball x is greater than the player paddle's middle coordinate + if (aiBallRect.Right >= opponentRect.Left) + { + doAi = false; + } - } + } - //Player paddle: - if (ballRect.IntersectsWith(playerRect)) - { - //check if the ball x is greater than the player paddle's middle coordinate - if(ballRect.Left >= playerRect.Left + (playerRect.Width / 2)) + //Player paddle: + if (ballRect.IntersectsWith(playerRect)) { - //reverse x velocity to send the ball the other way - xVel = -xVel; + //check if the ball x is greater than the player paddle's middle coordinate + if (ballRect.Left >= playerRect.Left) + { + //reverse x velocity to send the ball the other way + xVel = -xVel; - //set y velocity based on where the ball hit the paddle - yVel = linear((ballRect.Top + (ballRect.Height / 2)), playerRect.Top, playerRect.Bottom, -1, 1); + //set y velocity based on where the ball hit the paddle + yVel = linear((ballRect.Top + (ballRect.Height / 2)), playerRect.Top, playerRect.Bottom, -1, 1); - //reset the ai location - aiBallX = ballX; - aiBallY = ballY; - doAi = true; - } + //reset the ai location + aiBallX = ballX; + aiBallY = ballY; + doAi = true; + } - } + } - ballX += xVel * speedFactor; - ballY += yVel * speedFactor; + ballX += xVel * speedFactor; + ballY += yVel * speedFactor; - aiBallX += xVel * (speedFactor * 2); - aiBallY += yVel * (speedFactor * 2); + aiBallX += xVel * (speedFactor * 2); + aiBallY += yVel * (speedFactor * 2); - if (doAi == true) - { - if (opponentY != aiBallY) + if (doAi == true) { - if (opponentY < aiBallY) - { - if (opponentY < 0.9) - opponentY += speedFactor; - } - else + if (opponentY != aiBallY) { - if (opponentY > -0.9) - opponentY -= speedFactor; + if (opponentY < aiBallY) + { + if (opponentY < 0.9) + opponentY += speedFactor; + } + else + { + if (opponentY > -0.9) + opponentY -= speedFactor; + } } } } @@ -185,6 +208,13 @@ namespace ShiftOS.WinForms.Applications InitializeCoordinates(); } + public void LevelComplete() + { + level++; + speedFactor += speedFactor / level; + secondsleft = 60; + } + public long CalculateAIBeatCP() { return 2 * (10 * level); @@ -192,7 +222,24 @@ namespace ShiftOS.WinForms.Applications public void Win() { + header = "You beat the AI! " + CalculateAIBeatCP() + " Codepoints!."; InitializeCoordinates(); + new System.Threading.Thread(() => + { + doBallCalc = false; + counter = "3"; + Engine.AudioManager.PlayStream(Properties.Resources.writesound); + System.Threading.Thread.Sleep(1000); + counter = "2"; + Engine.AudioManager.PlayStream(Properties.Resources.writesound); + System.Threading.Thread.Sleep(1000); + counter = "1"; + Engine.AudioManager.PlayStream(Properties.Resources.writesound); + System.Threading.Thread.Sleep(1000); + doBallCalc = true; + header = ""; + counter = ""; + }).Start(); } public void InitializeCoordinates() @@ -221,6 +268,7 @@ namespace ShiftOS.WinForms.Applications e.Graphics.Clear(pnlcanvas.BackColor); //draw the ball + if(doBallCalc) e.Graphics.FillEllipse(new SolidBrush(pnlcanvas.ForeColor), new RectangleF((float)ballXLocal, (float)ballYLocal, (float)paddleWidth, (float)paddleWidth)); double playerYLocal = linear(playerY, -1.0, 1.0, 0, pnlcanvas.Height); @@ -245,6 +293,30 @@ namespace ShiftOS.WinForms.Applications ); e.Graphics.DrawString(cp_text, SkinEngine.LoadedSkin.Header3Font, new SolidBrush(pnlcanvas.ForeColor), tLoc); + tSize = e.Graphics.MeasureString(counter, SkinEngine.LoadedSkin.Header2Font); + + tLoc = new PointF((pnlcanvas.Width - (int)tSize.Width) / 2, + (pnlcanvas.Height - (int)tSize.Height) / 2 + + ); + e.Graphics.DrawString(counter, SkinEngine.LoadedSkin.Header2Font, new SolidBrush(pnlcanvas.ForeColor), tLoc); + tSize = e.Graphics.MeasureString(header, SkinEngine.LoadedSkin.Header2Font); + + tLoc = new PointF((pnlcanvas.Width - (int)tSize.Width) / 2, + (pnlcanvas.Height - (int)tSize.Height) / 4 + + ); + e.Graphics.DrawString(header, SkinEngine.LoadedSkin.Header2Font, new SolidBrush(pnlcanvas.ForeColor), tLoc); + + string l = Localization.Parse("{LEVEL}: " + level + " - " + secondsleft + " {SECONDS_LEFT}"); + tSize = e.Graphics.MeasureString(l, SkinEngine.LoadedSkin.Header3Font); + + tLoc = new PointF((pnlcanvas.Width - (int)tSize.Width) / 2, + (tSize.Height) + ); + e.Graphics.DrawString(l, SkinEngine.LoadedSkin.Header3Font, new SolidBrush(pnlcanvas.ForeColor), tLoc); + + } static public double linear(double x, double x0, double x1, double y0, double y1) @@ -261,6 +333,7 @@ namespace ShiftOS.WinForms.Applications public void OnLoad() { drawTimer.Start(); + counterTimer.Start(); } public void OnSkinLoad() @@ -270,6 +343,7 @@ namespace ShiftOS.WinForms.Applications public bool OnUnload() { drawTimer.Stop(); + counterTimer.Stop(); return true; } -- cgit v1.2.3 From be544f77de3c1e63627477467887a6895e1e703a Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 15 Jun 2017 21:01:36 -0400 Subject: UI changes --- ShiftOS.WinForms/Applications/Pong.Designer.cs | 147 +++++++++++++++++++++++++ ShiftOS.WinForms/Applications/Pong.cs | 51 ++++++++- ShiftOS.WinForms/Applications/Pong.resx | 7 ++ 3 files changed, 201 insertions(+), 4 deletions(-) (limited to 'ShiftOS.WinForms/Applications') diff --git a/ShiftOS.WinForms/Applications/Pong.Designer.cs b/ShiftOS.WinForms/Applications/Pong.Designer.cs index 22ad6f6..aee599b 100644 --- a/ShiftOS.WinForms/Applications/Pong.Designer.cs +++ b/ShiftOS.WinForms/Applications/Pong.Designer.cs @@ -28,7 +28,23 @@ /// private void InitializeComponent() { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Pong)); this.pnlcanvas = new System.Windows.Forms.Panel(); + this.pnllevelwon = new System.Windows.Forms.Panel(); + this.lbltitle = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.panel1 = new System.Windows.Forms.Panel(); + this.btncashout = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.pnlgamestart = new System.Windows.Forms.Panel(); + this.label2 = new System.Windows.Forms.Label(); + this.panel3 = new System.Windows.Forms.Panel(); + this.button2 = new System.Windows.Forms.Button(); + this.label3 = new System.Windows.Forms.Label(); + this.pnllevelwon.SuspendLayout(); + this.panel1.SuspendLayout(); + this.pnlgamestart.SuspendLayout(); + this.panel3.SuspendLayout(); this.SuspendLayout(); // // pnlcanvas @@ -41,13 +57,133 @@ this.pnlcanvas.Paint += new System.Windows.Forms.PaintEventHandler(this.pnlcanvas_Paint); this.pnlcanvas.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pnlcanvas_MouseMove); // + // pnllevelwon + // + this.pnllevelwon.Controls.Add(this.label1); + this.pnllevelwon.Controls.Add(this.panel1); + this.pnllevelwon.Controls.Add(this.lbltitle); + this.pnllevelwon.Location = new System.Drawing.Point(57, 75); + this.pnllevelwon.Name = "pnllevelwon"; + this.pnllevelwon.Size = new System.Drawing.Size(301, 184); + this.pnllevelwon.TabIndex = 0; + this.pnllevelwon.Visible = false; + // + // lbltitle + // + this.lbltitle.Dock = System.Windows.Forms.DockStyle.Top; + this.lbltitle.Location = new System.Drawing.Point(0, 0); + this.lbltitle.Name = "lbltitle"; + this.lbltitle.Size = new System.Drawing.Size(301, 13); + this.lbltitle.TabIndex = 0; + this.lbltitle.Tag = "header2"; + this.lbltitle.Text = "You\'ve reached level 2!"; + this.lbltitle.TextAlign = System.Drawing.ContentAlignment.TopCenter; + // + // label1 + // + this.label1.Dock = System.Windows.Forms.DockStyle.Fill; + this.label1.Location = new System.Drawing.Point(0, 13); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(301, 139); + this.label1.TabIndex = 1; + this.label1.Text = "You have survived this level of Pong. You now have a chance to cash out your Code" + + "points or play on for more."; + this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // panel1 + // + this.panel1.Controls.Add(this.button1); + this.panel1.Controls.Add(this.btncashout); + this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.panel1.Location = new System.Drawing.Point(0, 152); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(301, 32); + this.panel1.TabIndex = 2; + // + // btncashout + // + this.btncashout.Location = new System.Drawing.Point(48, 6); + this.btncashout.Name = "btncashout"; + this.btncashout.Size = new System.Drawing.Size(93, 23); + this.btncashout.TabIndex = 0; + this.btncashout.Text = "Cash out"; + this.btncashout.UseVisualStyleBackColor = true; + this.btncashout.Click += new System.EventHandler(this.btncashout_Click); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(159, 6); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(93, 23); + this.button1.TabIndex = 1; + this.button1.Text = "Play on"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // pnlgamestart + // + this.pnlgamestart.Controls.Add(this.label2); + this.pnlgamestart.Controls.Add(this.panel3); + this.pnlgamestart.Controls.Add(this.label3); + this.pnlgamestart.Location = new System.Drawing.Point(289, 133); + this.pnlgamestart.Name = "pnlgamestart"; + this.pnlgamestart.Size = new System.Drawing.Size(301, 280); + this.pnlgamestart.TabIndex = 1; + this.pnlgamestart.Visible = false; + // + // label2 + // + this.label2.Dock = System.Windows.Forms.DockStyle.Fill; + this.label2.Location = new System.Drawing.Point(0, 42); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(301, 206); + this.label2.TabIndex = 1; + this.label2.Text = resources.GetString("label2.Text"); + this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // panel3 + // + this.panel3.Controls.Add(this.button2); + this.panel3.Dock = System.Windows.Forms.DockStyle.Bottom; + this.panel3.Location = new System.Drawing.Point(0, 248); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(301, 32); + this.panel3.TabIndex = 2; + // + // button2 + // + this.button2.Location = new System.Drawing.Point(100, 6); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(116, 23); + this.button2.TabIndex = 1; + this.button2.Text = "Play some Pong!"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // label3 + // + this.label3.Dock = System.Windows.Forms.DockStyle.Top; + this.label3.Location = new System.Drawing.Point(0, 0); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(301, 42); + this.label3.TabIndex = 0; + this.label3.Tag = "header2"; + this.label3.Text = "Welcome to Pong."; + this.label3.TextAlign = System.Drawing.ContentAlignment.TopCenter; + // // Pong // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.pnlgamestart); + this.Controls.Add(this.pnllevelwon); this.Controls.Add(this.pnlcanvas); this.Name = "Pong"; this.Size = new System.Drawing.Size(879, 450); + this.pnllevelwon.ResumeLayout(false); + this.panel1.ResumeLayout(false); + this.pnlgamestart.ResumeLayout(false); + this.panel3.ResumeLayout(false); this.ResumeLayout(false); } @@ -55,5 +191,16 @@ #endregion private System.Windows.Forms.Panel pnlcanvas; + private System.Windows.Forms.Panel pnllevelwon; + private System.Windows.Forms.Label lbltitle; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button btncashout; + private System.Windows.Forms.Panel pnlgamestart; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Label label3; } } diff --git a/ShiftOS.WinForms/Applications/Pong.cs b/ShiftOS.WinForms/Applications/Pong.cs index 079c880..f776ebb 100644 --- a/ShiftOS.WinForms/Applications/Pong.cs +++ b/ShiftOS.WinForms/Applications/Pong.cs @@ -8,6 +8,7 @@ using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using ShiftOS.Engine; +using ShiftOS.WinForms.Tools; namespace ShiftOS.WinForms.Applications { @@ -69,7 +70,7 @@ namespace ShiftOS.WinForms.Applications bool doAi = true; bool doBallCalc = true; - private string header = "Pong - Technology Demo"; + private string header = ""; private string counter = ""; @@ -157,8 +158,7 @@ namespace ShiftOS.WinForms.Applications //Player paddle: if (ballRect.IntersectsWith(playerRect)) { - //check if the ball x is greater than the player paddle's middle coordinate - if (ballRect.Left >= playerRect.Left) + if (ballRect.Left <= playerRect.Right) { //reverse x velocity to send the ball the other way xVel = -xVel; @@ -211,6 +211,15 @@ namespace ShiftOS.WinForms.Applications public void LevelComplete() { level++; + doAi = false; + doBallCalc = false; + counterTimer.Stop(); + pnllevelwon.CenterParent(); + pnllevelwon.Show(); + pnllevelwon.BringToFront(); + lbltitle.Text = "You've reached level " + level + "!"; + lbltitle.Height = (int)CreateGraphics().MeasureString(lbltitle.Text, lbltitle.Font).Height; + codepointsToEarn += CalculateAIBeatCP() * 2; speedFactor += speedFactor / level; secondsleft = 60; } @@ -332,8 +341,12 @@ namespace ShiftOS.WinForms.Applications public void OnLoad() { + doAi = false; + doBallCalc = false; + pnlgamestart.Show(); + pnlgamestart.BringToFront(); + pnlgamestart.CenterParent(); drawTimer.Start(); - counterTimer.Start(); } public void OnSkinLoad() @@ -355,5 +368,35 @@ namespace ShiftOS.WinForms.Applications { playerY = linear(e.Y, 0, pnlcanvas.Height, -1, 1); } + + private void button1_Click(object sender, EventArgs e) + { + pnllevelwon.Hide(); + doAi = true; + doBallCalc = true; + counterTimer.Start(); + } + + private void btncashout_Click(object sender, EventArgs e) + { + pnllevelwon.Hide(); + SaveSystem.CurrentSave.Codepoints += (ulong)codepointsToEarn; + level = 1; + speedFactor = 0.0125; + Infobox.Show("Codepoints transferred.", "Pong has transferred " + codepointsToEarn + " Codepoints to your system."); + codepointsToEarn = 0; + pnlgamestart.Show(); + pnlgamestart.BringToFront(); + pnlgamestart.CenterParent(); + + } + + private void button2_Click(object sender, EventArgs e) + { + counterTimer.Start(); + doAi = true; + doBallCalc = true; + pnlgamestart.Hide(); + } } } diff --git a/ShiftOS.WinForms/Applications/Pong.resx b/ShiftOS.WinForms/Applications/Pong.resx index 1af7de1..685deff 100644 --- a/ShiftOS.WinForms/Applications/Pong.resx +++ b/ShiftOS.WinForms/Applications/Pong.resx @@ -117,4 +117,11 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Pong is the modern-day recreation of the classic 70s game called, you guessed it, Pong. + +In Pong, you must try your best to keep the fast-moving ball from going past your side of the screen using your mouse to move your paddle in the way of the ball, while getting the ball to go past the opponent's paddle. + +Once you start Pong, you have 60 seconds to beat the opponent and survive as much as possible. The game will get faster as you play, and the more 60-second levels you play, the more Codepoints you'll earn. If you lose the level, you will start back at Level 1 with 0 Codepoints. At the end of the level, you may choose to cash out or play on. + \ No newline at end of file -- cgit v1.2.3 From eb4b032b355e7a1477a73fae9ba7a379314c4c4b Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 16 Jun 2017 12:06:49 -0400 Subject: fix losing system --- ShiftOS.WinForms/Applications/Pong.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'ShiftOS.WinForms/Applications') diff --git a/ShiftOS.WinForms/Applications/Pong.cs b/ShiftOS.WinForms/Applications/Pong.cs index f776ebb..87b7a93 100644 --- a/ShiftOS.WinForms/Applications/Pong.cs +++ b/ShiftOS.WinForms/Applications/Pong.cs @@ -206,6 +206,16 @@ namespace ShiftOS.WinForms.Applications public void Lose() { InitializeCoordinates(); + counterTimer.Stop(); + secondsleft = 60; + level = 1; + speedFactor = 0.0125; + pnlgamestart.Show(); + pnlgamestart.BringToFront(); + pnlgamestart.CenterParent(); + Infobox.Show("You lose.", "You lost the game! Guess you should've cashed out..."); + doAi = false; + doBallCalc = false; } public void LevelComplete() @@ -255,8 +265,6 @@ namespace ShiftOS.WinForms.Applications { ballX = 0; ballY = 0; - xVel = 1; - yVel = 1; opponentY = 0; aiBallX = 0; aiBallY = 0; -- cgit v1.2.3 From 79fe2101aef62b744b150203dee6953b0d17f5aa Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 16 Jun 2017 20:36:43 -0400 Subject: Get rid of namespaces in commands. --- ModLauncher/Program.cs | 11 - ShiftOS.Modding.VB.LegacySkinConverter/Module1.vb | 1 - ShiftOS.Modding.VirtualMachine/Form1.cs | 1 - .../Applications/CoherenceOverlay.Designer.cs | 61 -- ShiftOS.WinForms/Applications/CoherenceOverlay.cs | 123 ---- ShiftOS.WinForms/Applications/Downloader.cs | 1 - ShiftOS.WinForms/Applications/Pong.cs | 25 +- ShiftOS.WinForms/Commands.cs | 299 --------- ShiftOS.WinForms/HackerCommands.cs | 723 +-------------------- ShiftOS.WinForms/OobeStory.cs | 1 - ShiftOS.WinForms/Servers/RemoteTerminalServer.cs | 1 - ShiftOS.WinForms/ShiftOS.WinForms.csproj | 6 - ShiftOS.WinForms/SkinCommands.cs | 1 - ShiftOS.WinForms/TestCommandsForUpgrades.cs | 22 +- ShiftOS.WinForms/TrailerCommands.cs | 48 -- ShiftOS.WinForms/WinformsDesktop.cs | 1 - ShiftOS_TheReturn/Command.cs | 36 - ShiftOS_TheReturn/Commands.cs | 274 +------- ShiftOS_TheReturn/PythonAPI.cs | 1 - ShiftOS_TheReturn/ReflectMan.cs | 1 - ShiftOS_TheReturn/TerminalBackend.cs | 66 +- ShiftOS_TheReturn/UserManagementCommands.cs | 2 - 22 files changed, 66 insertions(+), 1639 deletions(-) delete mode 100644 ShiftOS.WinForms/Applications/CoherenceOverlay.Designer.cs delete mode 100644 ShiftOS.WinForms/Applications/CoherenceOverlay.cs (limited to 'ShiftOS.WinForms/Applications') diff --git a/ModLauncher/Program.cs b/ModLauncher/Program.cs index 4b99cf5..4637b4e 100644 --- a/ModLauncher/Program.cs +++ b/ModLauncher/Program.cs @@ -32,7 +32,6 @@ using ShiftOS.Engine; namespace ModLauncher { - [Namespace("modlauncher")] public static class Program { /// @@ -43,15 +42,5 @@ namespace ModLauncher { ShiftOS.WinForms.Program.Main(); } - - [Command("throwcrash")] - public static bool ThrowCrash() - { - new Thread(() => - { - throw new Exception("User triggered crash using modlauncher.throwcrash command."); - }).Start(); - return true; - } } } diff --git a/ShiftOS.Modding.VB.LegacySkinConverter/Module1.vb b/ShiftOS.Modding.VB.LegacySkinConverter/Module1.vb index 161012d..3a2e106 100644 --- a/ShiftOS.Modding.VB.LegacySkinConverter/Module1.vb +++ b/ShiftOS.Modding.VB.LegacySkinConverter/Module1.vb @@ -14,7 +14,6 @@ Module Module1 End Module - Public Class SkinConverterCommands diff --git a/ShiftOS.Modding.VirtualMachine/Form1.cs b/ShiftOS.Modding.VirtualMachine/Form1.cs index 5b6b047..1615091 100644 --- a/ShiftOS.Modding.VirtualMachine/Form1.cs +++ b/ShiftOS.Modding.VirtualMachine/Form1.cs @@ -154,7 +154,6 @@ namespace ShiftOS.Modding.VirtualMachine } } - [Namespace("svm")] public static class Compiler { public static byte[] Compile(string prg) diff --git a/ShiftOS.WinForms/Applications/CoherenceOverlay.Designer.cs b/ShiftOS.WinForms/Applications/CoherenceOverlay.Designer.cs deleted file mode 100644 index 0764059..0000000 --- a/ShiftOS.WinForms/Applications/CoherenceOverlay.Designer.cs +++ /dev/null @@ -1,61 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2017 Michael VanOverbeek and ShiftOS devs - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -namespace ShiftOS.WinForms.Applications -{ - partial class CoherenceOverlay - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - components = new System.ComponentModel.Container(); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - } - - #endregion - } -} diff --git a/ShiftOS.WinForms/Applications/CoherenceOverlay.cs b/ShiftOS.WinForms/Applications/CoherenceOverlay.cs deleted file mode 100644 index 1bfc8e8..0000000 --- a/ShiftOS.WinForms/Applications/CoherenceOverlay.cs +++ /dev/null @@ -1,123 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2017 Michael VanOverbeek and ShiftOS devs - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; -using ShiftOS.Engine; -using System.Threading; - -namespace ShiftOS.WinForms.Applications -{ - public partial class CoherenceOverlay : UserControl, IShiftOSWindow - { - public CoherenceOverlay(IntPtr handle, CoherenceCommands.RECT rect) - { - InitializeComponent(); - this.Load += (o, a) => - { - try - { - int left = this.ParentForm.Left; - int top = this.ParentForm.Top; - int oldwidth = this.ParentForm.Width; - int oldheight = this.ParentForm.Height; - - var t = new Thread(new ThreadStart(() => - { - while (CoherenceCommands.GetWindowRect(handle, ref rect)) - { - - if (left != rect.Left - SkinEngine.LoadedSkin.LeftBorderWidth) - { - this.Invoke(new Action(() => - { - this.ParentForm.Left = rect.Left - SkinEngine.LoadedSkin.LeftBorderWidth; - left = rect.Left - SkinEngine.LoadedSkin.LeftBorderWidth; - })); - } - if (top != rect.Top - SkinEngine.LoadedSkin.TitlebarHeight) - { - this.Invoke(new Action(() => - { - - this.ParentForm.Top = rect.Top - SkinEngine.LoadedSkin.TitlebarHeight; - top = rect.Top - SkinEngine.LoadedSkin.TitlebarHeight; - })); - } - int width = (rect.Right - rect.Left) + 1; - int height = (rect.Bottom - rect.Top) + 1; - - if (oldheight != SkinEngine.LoadedSkin.TitlebarHeight + height + SkinEngine.LoadedSkin.BottomBorderWidth) - { - this.Invoke(new Action(() => - { - this.ParentForm.Height = SkinEngine.LoadedSkin.TitlebarHeight + height + SkinEngine.LoadedSkin.BottomBorderWidth; - oldheight = SkinEngine.LoadedSkin.TitlebarHeight + height + SkinEngine.LoadedSkin.BottomBorderWidth; - })); - } - if (oldwidth != SkinEngine.LoadedSkin.LeftBorderWidth + width + SkinEngine.LoadedSkin.RightBorderWidth) - { - this.Invoke(new Action(() => - { - this.ParentForm.Width = SkinEngine.LoadedSkin.LeftBorderWidth + width + SkinEngine.LoadedSkin.RightBorderWidth; - oldwidth = SkinEngine.LoadedSkin.LeftBorderWidth + width + SkinEngine.LoadedSkin.RightBorderWidth; - })); - } - } - })); - t.IsBackground = true; - t.Start(); - } - catch - { - - } - }; - } - - public void OnLoad() - { - } - - public void OnSkinLoad() - { - } - - public bool OnUnload() - { - return true; - } - - public void OnUpgrade() - { - } - } -} diff --git a/ShiftOS.WinForms/Applications/Downloader.cs b/ShiftOS.WinForms/Applications/Downloader.cs index b3d2cea..bcad56a 100644 --- a/ShiftOS.WinForms/Applications/Downloader.cs +++ b/ShiftOS.WinForms/Applications/Downloader.cs @@ -216,7 +216,6 @@ namespace ShiftOS.WinForms.Applications public int Progress { get; set; } } - [Namespace("dev")] public static class DownloaderDebugCommands { [Command("setsubscription", description ="Use to set the current shiftnet subscription.", usage ="{value:int32}")] diff --git a/ShiftOS.WinForms/Applications/Pong.cs b/ShiftOS.WinForms/Applications/Pong.cs index 87b7a93..3f06676 100644 --- a/ShiftOS.WinForms/Applications/Pong.cs +++ b/ShiftOS.WinForms/Applications/Pong.cs @@ -42,6 +42,15 @@ namespace ShiftOS.WinForms.Applications LevelComplete(); } }; +#if DEBUG + this.KeyDown += (o, a) => + { + if(a.KeyCode == Keys.D) + { + drawAiBall = !drawAiBall; + } + }; +#endif } private double ballX = 0.0f; @@ -266,11 +275,14 @@ namespace ShiftOS.WinForms.Applications ballX = 0; ballY = 0; opponentY = 0; + xVel = 1; aiBallX = 0; aiBallY = 0; doAi = true; } + private bool drawAiBall = false; + private void pnlcanvas_Paint(object sender, PaintEventArgs e) { @@ -281,11 +293,22 @@ namespace ShiftOS.WinForms.Applications ballXLocal -= ((double)paddleWidth / 2); ballYLocal -= ((double)paddleWidth / 2); + double aiballXLocal = linear(aiBallX, -1.0, 1.0, 0, pnlcanvas.Width); + double aiballYLocal = linear(aiBallY, -1.0, 1.0, 0, pnlcanvas.Height); + + aiballXLocal -= ((double)paddleWidth / 2); + aiballYLocal -= ((double)paddleWidth / 2); + e.Graphics.Clear(pnlcanvas.BackColor); + //draw the ai ball + if (drawAiBall) + e.Graphics.FillEllipse(new SolidBrush(Color.Gray), new RectangleF((float)aiballXLocal, (float)aiballYLocal, (float)paddleWidth, (float)paddleWidth)); + + //draw the ball - if(doBallCalc) + if (doBallCalc) e.Graphics.FillEllipse(new SolidBrush(pnlcanvas.ForeColor), new RectangleF((float)ballXLocal, (float)ballYLocal, (float)paddleWidth, (float)paddleWidth)); double playerYLocal = linear(playerY, -1.0, 1.0, 0, pnlcanvas.Height); diff --git a/ShiftOS.WinForms/Commands.cs b/ShiftOS.WinForms/Commands.cs index b04ffe7..e69de29 100644 --- a/ShiftOS.WinForms/Commands.cs +++ b/ShiftOS.WinForms/Commands.cs @@ -1,299 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2017 Michael VanOverbeek and ShiftOS devs - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using ShiftOS.Engine; -using System.IO; -using System.Diagnostics; -using System.Runtime.InteropServices; -using System.Threading; -using Newtonsoft.Json; - -/// -/// Coherence commands. -/// -namespace ShiftOS.WinForms -{ - [Namespace("trm")] - public static class TerminalExtensions - { - [Command("exit")] - public static bool StopRemoting() - { - if(TerminalBackend.IsForwardingConsoleWrites == true) - { - ServerManager.SendMessage("trm_handshake_stop", $@"{{ - guid: ""{TerminalBackend.ForwardGUID}"" -}}"); - Console.WriteLine("Goodbye!"); - } - else - { - return false; - } - - return true; - } - - - [Command("setpass", true)] - [RequiresArgument("pass")] - public static bool setPass(Dictionary args) - { - SaveSystem.CurrentSave.Password = args["pass"] as string; - return true; - } - - [Command("remote", "username:,sysname:,password:", "Allows you to control a remote system on the multi-user domain given a username, password and system name.")] - [RequiresArgument("username")] - [RequiresArgument("sysname")] - [RequiresArgument("password")] - public static bool RemoteControl(Dictionary args) - { - ServerManager.SendMessage("trm_handshake_request", JsonConvert.SerializeObject(args)); - return true; - } - } - - [Namespace("coherence")] - [RequiresUpgrade("kernel_coherence")] - public static class CoherenceCommands - { - /// - /// Sets the window position. - /// - /// The window position. - /// H window. - /// H window insert after. - /// X. - /// Y. - /// Cx. - /// Cy. - /// U flags. - [DllImport("user32.dll")] - static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags); - - /// - /// The HWN d TOPMOS. - /// - static readonly IntPtr HWND_TOPMOST = new IntPtr(-1); - - /// - /// The SW p SHOWWINDO. - /// - const UInt32 SWP_SHOWWINDOW = 0x0040; - - - [DllImport("user32.dll")] - /// - /// Gets the window rect. - /// - /// The window rect. - /// H window. - /// Lp rect. - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect); - - /// - /// REC. - /// - [StructLayout(LayoutKind.Sequential)] - public struct RECT - { - public int Left; // x position of upper-left corner - public int Top; // y position of upper-left corner - public int Right; // x position of lower-right corner - public int Bottom; // y position of lower-right corner - } - - [Command("launch", "process: \"C:\\path\\to\\process\" - The process path to launch.", "Launch a process inside kernel coherence.")] - [RequiresArgument("process")] - /// - /// Launchs the app. - /// - /// The app. - /// Arguments. - public static bool LaunchApp(Dictionary args) - { - string process = args["process"].ToString(); - var prc = Process.Start(process); - StartCoherence(prc); - return true; - } - - /// - /// Starts the coherence. - /// - /// The coherence. - /// Prc. - private static void StartCoherence(Process prc) - { - RECT rct = new RECT(); - - - while (!GetWindowRect(prc.MainWindowHandle, ref rct)) - { - } - - - - AppearanceManager.Invoke(new Action(() => - { - IShiftOSWindow coherenceWindow = new Applications.CoherenceOverlay(prc.MainWindowHandle, rct); - - AppearanceManager.SetupWindow(coherenceWindow); - SetWindowPos(prc.MainWindowHandle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW); - - //MakeExternalWindowBorderless(prc.MainWindowHandle); - })); - - } - - /// - /// The W s BORDE. - /// - const int WS_BORDER = 8388608; - - /// - /// The W s DLGFRAM. - /// - const int WS_DLGFRAME = 4194304; - - /// - /// The W s CAPTIO. - /// - const int WS_CAPTION = WS_BORDER | WS_DLGFRAME; - - /// - /// The W s SYSMEN. - /// - const int WS_SYSMENU = 524288; - - /// - /// The W s THICKFRAM. - /// - const int WS_THICKFRAME = 262144; - - /// - /// The W s MINIMIZ. - /// - const int WS_MINIMIZE = 536870912; - - /// - /// The W s MAXIMIZEBO. - /// - const int WS_MAXIMIZEBOX = 65536; - - /// - /// The GW l STYL. - /// - const int GWL_STYLE = -16; - - /// - /// The GW l EXSTYL. - /// - const int GWL_EXSTYLE = -20; - - /// - /// The W s E x DLGMODALFRAM. - /// - const int WS_EX_DLGMODALFRAME = 0x1; - - /// - /// The SW p NOMOV. - /// - const int SWP_NOMOVE = 0x2; - - /// - /// The SW p NOSIZ. - /// - const int SWP_NOSIZE = 0x1; - - /// - /// The SW p FRAMECHANGE. - /// - const int SWP_FRAMECHANGED = 0x20; - - /// - /// The M f BYPOSITIO. - /// - const uint MF_BYPOSITION = 0x400; - - /// - /// The M f REMOV. - /// - const uint MF_REMOVE = 0x1000; - - /// - /// Gets the window long. - /// - /// The window long. - /// H window. - /// N index. - [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true, ExactSpelling = true)] - public static extern int GetWindowLong(IntPtr hWnd, int nIndex); - - /// - /// Sets the window long. - /// - /// The window long. - /// H window. - /// N index. - /// Dw new long. - [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true, ExactSpelling = true)] - public static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong); - - /// - /// Sets the window position. - /// - /// The window position. - /// H window. - /// H window insert after. - /// X. - /// Y. - /// Cx. - /// Cy. - /// U flags. - [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true, ExactSpelling = true)] - public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, int uFlags); - public static void MakeExternalWindowBorderless(IntPtr MainWindowHandle) - { - int Style = 0; - Style = GetWindowLong(MainWindowHandle, GWL_STYLE); - Style = Style & ~WS_CAPTION; - Style = Style & ~WS_SYSMENU; - Style = Style & ~WS_THICKFRAME; - Style = Style & ~WS_MINIMIZE; - Style = Style & ~WS_MAXIMIZEBOX; - SetWindowLong(MainWindowHandle, GWL_STYLE, Style); - Style = GetWindowLong(MainWindowHandle, GWL_EXSTYLE); - SetWindowLong(MainWindowHandle, GWL_EXSTYLE, Style | WS_EX_DLGMODALFRAME); - SetWindowPos(MainWindowHandle, new IntPtr(0), 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED); - } - } -} diff --git a/ShiftOS.WinForms/HackerCommands.cs b/ShiftOS.WinForms/HackerCommands.cs index dd8bde8..5f28270 100644 --- a/ShiftOS.WinForms/HackerCommands.cs +++ b/ShiftOS.WinForms/HackerCommands.cs @@ -1,722 +1 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Threading; -using System.Threading.Tasks; -using Newtonsoft.Json; -using ShiftOS.Engine; -using ShiftOS.Objects; -using ShiftOS.Objects.ShiftFS; -using ShiftOS.WinForms.Applications; -using static ShiftOS.Objects.ShiftFS.Utils; - -namespace ShiftOS.WinForms -{ - [Namespace("puppy")] - [RequiresUpgrade("hacker101_deadaccts")] - [KernelMode] - public static class KernelPuppyCommands - { - [Command("clear", true)] - public static bool ClearLogs() - { - WriteAllText("0:/system/data/kernel.log", ""); - Console.WriteLine(" logs cleared successfully."); - return true; - } - } - - [Namespace("krnl")] - public static class KernelCommands - { - [Command("control", true)] - [RequiresArgument("pass")] - public static bool Control(Dictionary args) - { - if(args["pass"].ToString() == ServerManager.thisGuid.ToString()) - { - KernelWatchdog.Log("warn", "User has breached the kernel."); - KernelWatchdog.EnterKernelMode(); - TerminalBackend.PrintPrompt(); - } - return true; - } - - [Command("lock_session")] - [KernelMode] - public static bool LeaveControl() - { - KernelWatchdog.Log("inf", "User has left the kernel-mode session."); - KernelWatchdog.LeaveKernelMode(); - KernelWatchdog.MudConnected = true; - return true; - } - } - - [Namespace("hacker101")] - [RequiresUpgrade("hacker101_deadaccts")] - public static class HackerCommands - { - private static void writeSlow(string text) - { - ConsoleEx.ForegroundColor = ConsoleColor.DarkYellow; - ConsoleEx.Bold = false; - ConsoleEx.Italic = false; - Console.Write("["); - ConsoleEx.ForegroundColor = ConsoleColor.Magenta; - ConsoleEx.Bold = true; - Console.Write("hacker101"); - ConsoleEx.ForegroundColor = ConsoleColor.DarkYellow; - ConsoleEx.Italic = true; - Console.Write("@"); - ConsoleEx.ForegroundColor = ConsoleColor.White; - Console.Write("undisclosed"); - ConsoleEx.ForegroundColor = ConsoleColor.DarkYellow; - ConsoleEx.Bold = false; - ConsoleEx.Italic = false; - Console.Write("]: "); - Thread.Sleep(850); - Console.WriteLine(text); - Thread.Sleep(4000); - } - - [Story("hacker101_deadaccts")] - public static void DeadAccountsStory() - { - if (!terminalIsOpen()) - { - AppearanceManager.SetupWindow(new Terminal()); - } - - var t = new Thread(() => - { - Console.WriteLine("[sys@mud]: Warning: User connecting to system..."); - Thread.Sleep(75); - Console.WriteLine("[sys@mud]: UBROADCAST: Username: hacker101 - Sysname: undisclosed"); - Thread.Sleep(50); - Console.Write("--locking mud connection resources..."); - Thread.Sleep(50); - Console.WriteLine("...done."); - Console.Write("--locking user input... "); - Thread.Sleep(75); - TerminalBackend.PrefixEnabled = false; - TerminalBackend.InStory = true; - Console.WriteLine("...done."); - - Thread.Sleep(2000); - writeSlow($"Hello there, fellow multi-user domain user."); - writeSlow("My name, as you can tell, is hacker101."); - writeSlow("And yours must be... don't say it... it's " + SaveSystem.CurrentUser.Username + "@" + SaveSystem.CurrentSave.SystemName + ", right?"); - writeSlow("Of course it is."); - writeSlow("And I bet you 10,000 Codepoints that you have... " + SaveSystem.CurrentSave.Codepoints.ToString() + " Codepoints."); - writeSlow("Oh, and how much upgrades have you installed since you first started using ShiftOS?"); - writeSlow("That would be... uhh... " + SaveSystem.CurrentSave.CountUpgrades().ToString() + "."); - writeSlow("I'm probably freaking you out right now. You are probably thinking that you're unsafe and need to lock yourself down."); - writeSlow("But, don't worry, I mean no harm."); - writeSlow("In fact, I am a multi-user domain safety activist and security professional."); - writeSlow("I need your help with something."); - writeSlow("Inside the multi-user domain, every now and then these 'dead' user accounts pop up."); - writeSlow("They're infesting everything. They're in every legion, they infest chatrooms, and they take up precious hard drive space."); - writeSlow("Eventually there's going to be tons of them just sitting there taking over the MUD. We can't have that."); - writeSlow("It sounds like a conspiracy theory indeed, but it's true, in fact, these dead accounts hold some valuable treasures."); - writeSlow("I'm talking Codepoints, skins, documents, the possibilities are endless."); - writeSlow("I'm going to execute a quick sys-script that will show you how you can help get rid of these accounts, and also gain some valuable resources to help you on your digital frontier."); - writeSlow("This script will also show you the fundamentals of security exploitation and theft of resources - which if you want to survive in the multi-user domain is paramount."); - writeSlow("Good luck."); - Thread.Sleep(1000); - Console.WriteLine("--user disconnected"); - Thread.Sleep(75); - Console.WriteLine("--commands unlocked - check sos.help."); - Thread.Sleep(45); - SaveSystem.SaveGame(); - Console.Write("--unlocking user input..."); - Thread.Sleep(75); - Console.Write(" ..done"); - TerminalBackend.InStory = false; - TerminalBackend.PrefixEnabled = true; - Console.Write($"{SaveSystem.CurrentUser.Username}@{SaveSystem.CurrentSave.SystemName}:~$ "); - StartHackerTutorial(); - TerminalBackend.PrefixEnabled = true; - TerminalBackend.PrintPrompt(); - }); - t.IsBackground = true; - t.Start(); - TerminalBackend.PrefixEnabled = false; - } - - internal static void StartHackerTutorial() - { - Desktop.InvokeOnWorkerThread(() => - { - var tut = new TutorialBox(); - AppearanceManager.SetupWindow(tut); - - new Thread(() => - { - - - int tutPos = 0; - Action ondec = () => - { - tutPos++; - }; - TerminalBackend.CommandProcessed += (o, a) => - { - switch (tutPos) - { - - case 0: - case 10: - if (o.ToLower().StartsWith("mud.disconnect")) - { - tutPos++; - } - break; - case 11: - if (o.ToLower().StartsWith("krnl.lock_session")) - tutPos++; - break; - case 1: - if (o.ToLower().StartsWith("hacker101.brute_decrypt")) - { - if (a.Contains("0:/system/data/kernel.log")) - { - tutPos++; - } - } - break; - case 3: - if (o.ToLower().StartsWith("krnl.control")) - { - tutPos++; - } - break; - case 4: - if (o.ToLower().StartsWith("puppy.clear")) - tutPos++; - break; - case 5: - if (o.ToLower().StartsWith("mud.reconnect")) - tutPos++; - break; - case 6: - if (o.ToLower().StartsWith("mud.sendmsg")) - { - var msg = JsonConvert.DeserializeObject(a); - try - { - if (msg.header == "getusers" && msg.body == "dead") - tutPos++; - } - catch - { - - } - } - break; - case 7: - if (o.ToLower().StartsWith("hacker101.breach_user_password")) - tutPos++; - break; - case 8: - if (o.ToLower().StartsWith("hacker101.print_user_info")) - tutPos++; - break; - case 9: - if (o.ToLower().StartsWith("hacker101.steal_codepoints")) - tutPos++; - break; - } - }; - tut.SetObjective("Welcome to the dead account exploitation tutorial. In this tutorial you will learn the basics of hacking within the multi-user domain."); - Thread.Sleep(1000); - tut.SetObjective("We will start with a simple system exploit - gaining kernel-level access to ShiftOS. This can help you perform actions not ever possible in the user level."); - Thread.Sleep(1000); - tut.SetObjective("To gain root access, you will first need to breach the system watchdog to keep it from dialing home to DevX."); - Thread.Sleep(1000); - tut.SetObjective("The watchdog can only function when it has a successful connection to the multi-user domain. You will need to use the MUD Control Centre to disconnect yourself from the MUD. This will lock you out of most features. To disconnect from the multi-user domain, simply run the 'mud.disconnect' command."); - while(tutPos == 0) - { - - } - tut.SetObjective("As you can see, the kernel watchdog has shut down temporarily, however before the disconnect it was able to tell DevX that it has gone offline."); - Thread.Sleep(1000); - tut.SetObjective("You'll also notice that commands like the shiftorium, MUD control centre and various applications that utilize these system components no longer function."); - Thread.Sleep(1000); - tut.SetObjective("The watchdog, however, is still watching. DevX was smart and programmed the kernel to log all events to a local file in 0:/system/data/kernel.log."); - Thread.Sleep(1000); - tut.SetObjective("You will need to empty out this file before you can connect to the multi-user domain, as the watchdog will send the contents of this file straight to DevX."); - Thread.Sleep(1000); - tut.SetObjective("Or, you can do what we're about to do and attempt to decrypt the log and sniff out the kernel-mode access password."); - Thread.Sleep(1000); - tut.SetObjective("This will allow us to gain kernel-level access to our system using the krnl.control{pass:} command."); - Thread.Sleep(1000); - tut.SetObjective("Let's start decrypting the log file using the hacker101.brute_decrypt{file:} script. The file: argument is a string and should point to a .log file. When the script succeeds, you will see a TextPad open with the decrypted contents."); - while(tutPos == 1) - { - - } - onCompleteDecrypt += ondec; - tut.SetObjective("This script isn't the most agile script ever, but it'll get the job done."); - tutPos = 3; // For some reason, it refuses to go to part 3. - while(tutPos == 2) - { - - } - onCompleteDecrypt -= ondec; - tut.SetObjective("Alright - it's done. Here's how it's laid out. In each log entry, you have the timestamp, then the event name, then the event description."); - Thread.Sleep(1000); - tut.SetObjective("Look for the most recent 'mudhandshake' event. This contains the kernel access code."); - Thread.Sleep(1000); - tut.SetObjective("Once you have it, run 'krnl.control{pass:\"the-kernel-code-here\"}. This will allow you to gain access to the kernel."); - while(tutPos == 3) - { - - } - tut.SetObjective("You are now in kernel mode. Every command you enter will run on the kernel. Now, let's clear the watchdog's logfile and reconnect to the multi-user domain."); - Thread.Sleep(1000); - tut.SetObjective("To clear the log, simply run 'puppy.clear'."); - while(tutPos == 4) - { - - } - tut.SetObjective("Who's a good dog... You are, ShiftOS. Now, we can connect back to the MUD using 'mud.reconnect'."); - Thread.Sleep(1000); - while(tutPos == 5) - { - - } - tut.SetObjective("We have now snuck by the watchdog and DevX has no idea. With kernel-level access, everything you do is not logged, however if you perform too much in one shot, you'll get kicked off and locked out of the multi-user domain temporarily."); - Thread.Sleep(1000); - tut.SetObjective("So, let's focus on the job. You want to get into one of those fancy dead accounts, don't ya? Well, first, we need to talk with the MUD to get a list of these accounts."); - Thread.Sleep(1000); - tut.SetObjective("Simply run the `mud.sendmsg` command, specifying a 'header' of \"getusers\", and a body of \"dead\"."); - while(tutPos == 6) - { - - } - tut.SetObjective("Great. We now have the usernames and sysnames of all dead accounts on the MUD. Now let's use the hacker101.breach_user_password{user:,sys:} command to breach one of these accounts' passwords."); - while(tutPos == 7) - { - - } - tut.SetObjective("There - you now have access to that account. Use its password, username and sysname and run the hacker101.print_user_info{user:,pass:,sys:} command to print the entirety of this user's information."); - while(tutPos == 8) - { - - } - tut.SetObjective("Now you can see a list of the user's Codepoints among other things. Now you can steal their codepoints by using the hacker101.steal_codepoints{user:,pass:,sys;,amount:} command. Be careful. This may alert DevX."); - while(tutPos == 9) - { - - } - if(devx_alerted == true) - { - tut.SetObjective("Alright... enough fun and games. DevX just found out we were doing this."); - Thread.Sleep(500); - tut.SetObjective("Quick! Disconnect from the MUD!!"); - while(tutPos == 10) - { - - } - tut.SetObjective("Now, get out of kernel mode! To do that, run krnl.lock_session."); - while(tutPos == 11) - { - - } - - } - else - { - tut.SetObjective("OK, that was risky, but we pulled it off. Treat yourself! But first, let's get you out of kernel mode."); - Thread.Sleep(500); - tut.SetObjective("First we need to get you off the MUD. Simply run mud.disconnect again."); - while (tutPos == 10) - { - - } - tut.SetObjective("Now, let's run krnl.lock_session. This will lock you back into the user mode, and reconnect you to the MUD."); - while (tutPos == 11) - { - - } - tut.SetObjective("If, for some reason, DevX DOES find out, you have to be QUICK to get off of kernel mode. You don't want to make him mad."); - } - - Thread.Sleep(1000); - tut.SetObjective("So that's all for now. Whenever you're in kernel mode again, and you have access to a user account, try breaching their filesystem next time. You can use sos.help{ns:} to show commands from a specific namespace to help you find more commands easily."); - Thread.Sleep(1000); - tut.SetObjective("You can now close this window."); - tut.IsComplete = true; - - }).Start(); - }); - } - - private static bool devx_alerted = false; - - private static event Action onCompleteDecrypt; - - private static bool terminalIsOpen() - { - foreach(var win in AppearanceManager.OpenForms) - { - if (win.ParentWindow is Terminal) - return true; - } - return false; - } - - const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890-_"; - - [MultiplayerOnly] - [Command("breach_user_password")] - [KernelMode] - [RequiresArgument("user")] - [RequiresArgument("sys")] - [RequiresUpgrade("hacker101_deadaccts")] - public static bool BreachUserPassword(Dictionary args) - { - string usr = args["user"].ToString(); - string sys = args["sys"].ToString(); - ServerMessageReceived msgReceived = null; - - Console.WriteLine("--hooking system thread..."); - - msgReceived = (msg) => - { - if(msg.Name == "user_data") - { - var sve = JsonConvert.DeserializeObject(msg.Contents); - var rnd = new Random(); - var sw = new Stopwatch(); - sw.Start(); - Thread.Sleep(2000); - if(rnd.Next(0, 100) >= 75) - { - Console.WriteLine("--operation took too long - failed."); - ServerManager.SendMessage("mud_save_allow_dead", JsonConvert.SerializeObject(sve)); - ServerManager.MessageReceived -= msgReceived; - TerminalBackend.PrefixEnabled = true; - return; - } - sw.Stop(); - Console.WriteLine(sve.Password); - Console.WriteLine(); - Console.WriteLine("--password breached. Operation took " + sw.ElapsedMilliseconds + " milliseconds."); - ServerManager.MessageReceived -= msgReceived; - TerminalBackend.PrintPrompt(); - } - else if(msg.Name == "user_data_not_found") - { - Console.WriteLine("--access denied."); - ServerManager.MessageReceived -= msgReceived; - TerminalBackend.PrintPrompt(); - } - TerminalBackend.PrefixEnabled = true; - }; - - Console.WriteLine("--beginning brute-force attack on " + usr + "@" + sys + "..."); - ServerManager.MessageReceived += msgReceived; - - ServerManager.SendMessage("get_user_data", JsonConvert.SerializeObject(new - { - user = usr, - sysname = sys - })); - TerminalBackend.PrefixEnabled = false; - Thread.Sleep(500); - return true; - } - - - [MultiplayerOnly] - [Command("print_user_info")] - [KernelMode] - [RequiresArgument("pass")] - [RequiresArgument("user")] - [RequiresArgument("sys")] - [RequiresUpgrade("hacker101_deadaccts")] - public static bool PrintUserInfo(Dictionary args) - { - string usr = args["user"].ToString(); - string sys = args["sys"].ToString(); - string pass = args["pass"].ToString(); - ServerMessageReceived msgReceived = null; - - Console.WriteLine("--hooking multi-user domain response call..."); - - msgReceived = (msg) => - { - if (msg.Name == "user_data") - { - var sve = JsonConvert.DeserializeObject(msg.Contents); - if(sve.Password == pass) - { - Console.WriteLine("Username: " + SaveSystem.CurrentUser.Username); - Console.WriteLine("Password: " + sve.Password); - Console.WriteLine("System name: " + sve.SystemName); - Console.WriteLine(); - Console.WriteLine("Codepoints: " + sve.Codepoints.ToString()); - - } - else - { - Console.WriteLine("--access denied."); - } - ServerManager.MessageReceived -= msgReceived; - TerminalBackend.PrintPrompt(); - - } - else if (msg.Name == "user_data_not_found") - { - Console.WriteLine("--access denied."); - ServerManager.MessageReceived -= msgReceived; - TerminalBackend.PrintPrompt(); - } - TerminalBackend.PrefixEnabled = true; - }; - - Console.WriteLine("--contacting multi-user domain..."); - ServerManager.MessageReceived += msgReceived; - - ServerManager.SendMessage("get_user_data", JsonConvert.SerializeObject(new - { - user = usr, - sysname = sys - })); - Thread.Sleep(500); - TerminalBackend.PrefixEnabled = false; - return true; - } - - [MultiplayerOnly] - [Command("steal_codepoints")] - [KernelMode] - [RequiresArgument("amount")] - [RequiresArgument("pass")] - [RequiresArgument("user")] - [RequiresArgument("sys")] - [RequiresUpgrade("hacker101_deadaccts")] - public static bool StealCodepoints(Dictionary args) - { - string usr = args["user"].ToString(); - string sys = args["sys"].ToString(); - string pass = args["pass"].ToString(); - ulong amount = (ulong)args["amount"]; - if(amount < 0) - { - Console.WriteLine("--invalid codepoint amount - halting..."); - return true; - } - - ServerMessageReceived msgReceived = null; - - Console.WriteLine("--hooking multi-user domain response call..."); - - msgReceived = (msg) => - { - if (msg.Name == "user_data") - { - var sve = JsonConvert.DeserializeObject(msg.Contents); - if (sve.Password == pass) - { - if(amount > sve.Codepoints) - { - Console.WriteLine("--can't steal this many codepoints from user."); - ServerManager.SendMessage("mud_save_allow_dead", JsonConvert.SerializeObject(sve)); - TerminalBackend.PrefixEnabled = true; - return; - } - - sve.Codepoints -= amount; - SaveSystem.TransferCodepointsFrom(SaveSystem.CurrentUser.Username, amount); - ServerManager.SendMessage("mud_save_allow_dead", JsonConvert.SerializeObject(sve)); - SaveSystem.SaveGame(); - } - else - { - Console.WriteLine("--access denied."); - } - ServerManager.MessageReceived -= msgReceived; - TerminalBackend.PrintPrompt(); - } - else if (msg.Name == "user_data_not_found") - { - Console.WriteLine("--access denied."); - ServerManager.MessageReceived -= msgReceived; - TerminalBackend.PrintPrompt(); - } - TerminalBackend.PrefixEnabled = true; - }; - - Console.WriteLine("--contacting multi-user domain..."); - Thread.Sleep(500); - ServerManager.MessageReceived += msgReceived; - - ServerManager.SendMessage("get_user_data", JsonConvert.SerializeObject(new - { - user = usr, - sysname = sys - })); - Thread.Sleep(500); - TerminalBackend.PrefixEnabled = false; - return true; - } - - [MultiplayerOnly] - [Command("purge_user")] - [KernelMode] - [RequiresArgument("pass")] - [RequiresArgument("user")] - [RequiresArgument("sys")] - [RequiresUpgrade("hacker101_deadaccts")] - public static bool PurgeUser(Dictionary args) - { - string usr = args["user"].ToString(); - string sys = args["sys"].ToString(); - string pass = args["pass"].ToString(); - ServerMessageReceived msgReceived = null; - - Console.WriteLine("--hooking multi-user domain response call..."); - - msgReceived = (msg) => - { - if (msg.Name == "user_data") - { - var sve = JsonConvert.DeserializeObject(msg.Contents); - if (sve.Password == pass) - { - ServerManager.SendMessage("delete_dead_save", JsonConvert.SerializeObject(sve)); - Console.WriteLine(" User purged successfully."); - } - else - { - Console.WriteLine("--access denied."); - } - ServerManager.MessageReceived -= msgReceived; - } - else if (msg.Name == "user_data_not_found") - { - Console.WriteLine("--access denied."); - ServerManager.MessageReceived -= msgReceived; - } - TerminalBackend.PrintPrompt(); - TerminalBackend.PrefixEnabled = true; - }; - - Console.WriteLine("--contacting multi-user domain..."); - Thread.Sleep(500); - ServerManager.MessageReceived += msgReceived; - - ServerManager.SendMessage("get_user_data", JsonConvert.SerializeObject(new - { - user = usr, - sysname = sys - })); - Thread.Sleep(500); - TerminalBackend.PrefixEnabled = false; - return true; - } - - - [Command("brute_decrypt", true)] - [RequiresArgument("file")] - public static bool BruteDecrypt(Dictionary args) - { - if (FileExists(args["file"].ToString())) - { - string pass = new Random().Next(1000, 10000).ToString(); - string fake = ""; - Console.WriteLine("Beginning brute-force attack on password."); - var s = new Stopwatch(); - s.Start(); - for(int i = 0; i < pass.Length; i++) - { - for(int num = 0; num < 10; num++) - { - if(pass[i].ToString() == num.ToString()) - { - fake += num.ToString(); - Console.Write(num); - } - } - } - s.Stop(); - - Console.WriteLine("...password cracked - operation took " + s.ElapsedMilliseconds + " milliseconds."); - var tp = new TextPad(); - AppearanceManager.SetupWindow(tp); - WriteAllText("0:/temp.txt", ReadAllText(args["file"].ToString())); - tp.LoadFile("0:/temp.txt"); - Delete("0:/temp.txt"); - onCompleteDecrypt?.Invoke(); - } - else - { - Console.WriteLine("brute_decrypt: file not found"); - } - return true; - } - } - - [MultiplayerOnly] - [Namespace("storydev")] - public static class StoryDevCommands - { - [Command("start", description = "Starts a story plot.", usage ="id:string")] - [RequiresArgument("id")] - [RemoteLock] - public static bool StartStory(Dictionary args) - { - Story.Start(args["id"].ToString()); - return true; - } - - [Command("list", description ="Lists all story IDs.")] - public static bool ListIds() - { - foreach(var type in ReflectMan.Types) - foreach(var method in type.GetMethods(BindingFlags.Public | BindingFlags.Static)) - { - var attr = method.GetCustomAttributes(false).FirstOrDefault(x => x is StoryAttribute); - if (attr != null) - Console.WriteLine(" - " + (attr as StoryAttribute).StoryID); - } - return true; - } - - [Command("unexperience", description = "Marks a story plot as not-experienced yet.", usage ="id:string")] - [RemoteLock] - [RequiresArgument("id")] - public static bool Unexperience(Dictionary args) - { - string id = args["id"].ToString(); - if (SaveSystem.CurrentSave.StoriesExperienced.Contains(id)) - { - Console.WriteLine("Unexperiencing " + id + "."); - SaveSystem.CurrentSave.StoriesExperienced.Remove(id); - SaveSystem.SaveGame(); - } - else - { - Console.WriteLine("Story ID not found."); - } - - return true; - } - - [Command("experience", description = "Marks a story plot as experienced without triggering the plot.", usage ="{id:}")] - [RequiresArgument("id")] - [RemoteLock] - public static bool Experience(Dictionary args) - { - SaveSystem.CurrentSave.StoriesExperienced.Add(args["id"].ToString()); - SaveSystem.SaveGame(); - return true; - } - } -} + \ No newline at end of file diff --git a/ShiftOS.WinForms/OobeStory.cs b/ShiftOS.WinForms/OobeStory.cs index cab1ec8..0d9b817 100644 --- a/ShiftOS.WinForms/OobeStory.cs +++ b/ShiftOS.WinForms/OobeStory.cs @@ -13,7 +13,6 @@ using ShiftOS.Objects; namespace ShiftOS.WinForms { - [Namespace("test")] public class OobeStory { [Command("test")] diff --git a/ShiftOS.WinForms/Servers/RemoteTerminalServer.cs b/ShiftOS.WinForms/Servers/RemoteTerminalServer.cs index d57e28f..849049f 100644 --- a/ShiftOS.WinForms/Servers/RemoteTerminalServer.cs +++ b/ShiftOS.WinForms/Servers/RemoteTerminalServer.cs @@ -10,7 +10,6 @@ using ShiftOS.Objects; namespace ShiftOS.WinForms.Servers { - [Namespace("rts")] [Server("Remote Terminal Server", 21)] //[RequiresUpgrade("story_hacker101_breakingthebonds")] //Uncomment when story is implemented. public class RemoteTerminalServer : Server diff --git a/ShiftOS.WinForms/ShiftOS.WinForms.csproj b/ShiftOS.WinForms/ShiftOS.WinForms.csproj index 9e16b19..00b4d83 100644 --- a/ShiftOS.WinForms/ShiftOS.WinForms.csproj +++ b/ShiftOS.WinForms/ShiftOS.WinForms.csproj @@ -131,12 +131,6 @@ Chat.cs - - UserControl - - - CoherenceOverlay.cs - UserControl diff --git a/ShiftOS.WinForms/SkinCommands.cs b/ShiftOS.WinForms/SkinCommands.cs index 1f32d96..f35c449 100644 --- a/ShiftOS.WinForms/SkinCommands.cs +++ b/ShiftOS.WinForms/SkinCommands.cs @@ -9,7 +9,6 @@ using ShiftOS.Objects.ShiftFS; namespace ShiftOS.WinForms { - [Namespace("skins")] public static class SkinCommands { [Command("reset")] diff --git a/ShiftOS.WinForms/TestCommandsForUpgrades.cs b/ShiftOS.WinForms/TestCommandsForUpgrades.cs index 739a2a2..5f28270 100644 --- a/ShiftOS.WinForms/TestCommandsForUpgrades.cs +++ b/ShiftOS.WinForms/TestCommandsForUpgrades.cs @@ -1,21 +1 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using ShiftOS.Engine; - -namespace ShiftOS.WinForms -{ - [Namespace("test")] - public static class TestCommandsForUpgrades - { - [Command("simpletest")] - public static bool Simple() - { - return true; - } - } - - -} + \ No newline at end of file diff --git a/ShiftOS.WinForms/TrailerCommands.cs b/ShiftOS.WinForms/TrailerCommands.cs index 182d03d..e69de29 100644 --- a/ShiftOS.WinForms/TrailerCommands.cs +++ b/ShiftOS.WinForms/TrailerCommands.cs @@ -1,48 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2017 Michael VanOverbeek and ShiftOS devs - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#define TRAILER -#if TRAILER -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using ShiftOS.Engine; - -namespace ShiftOS.WinForms -{ - [Namespace("trailer")] - public static class TrailerCommands - { - [Command("init")] - public static bool TrailerInit() - { - var oobe = new Oobe(); - oobe.StartTrailer(); - return true; - } - } -} -#endif \ No newline at end of file diff --git a/ShiftOS.WinForms/WinformsDesktop.cs b/ShiftOS.WinForms/WinformsDesktop.cs index f6c4383..82d99f0 100644 --- a/ShiftOS.WinForms/WinformsDesktop.cs +++ b/ShiftOS.WinForms/WinformsDesktop.cs @@ -47,7 +47,6 @@ namespace ShiftOS.WinForms /// /// Winforms desktop. /// - [Namespace("desktop")] public partial class WinformsDesktop : Form, IDesktop { public MainMenu.MainMenu ParentMenu = null; diff --git a/ShiftOS_TheReturn/Command.cs b/ShiftOS_TheReturn/Command.cs index 09cf206..b90f604 100644 --- a/ShiftOS_TheReturn/Command.cs +++ b/ShiftOS_TheReturn/Command.cs @@ -135,42 +135,6 @@ namespace ShiftOS.Engine } } - /// - /// Denotes a Terminal command namespace. - /// - public class Namespace : Attribute - { - /// - /// The namespace's name. - /// - public string name; - /// - /// Whether the namespace should be hidden from the help system. Overrides all child s' hide values. - /// - public bool hide; - - /// - /// Creates a new instance of the . - /// - /// The name of the namespace. - public Namespace(string n) - { - name = n; - } - - - /// - /// Creates a new instance of the . - /// - /// The name of the namespace. - /// Whether this namespace should be hidden from the user. - public Namespace(string n, bool hide) - { - name = n; - this.hide = hide; - } - } - /// /// Marks a Terminal command as obsolete. /// diff --git a/ShiftOS_TheReturn/Commands.cs b/ShiftOS_TheReturn/Commands.cs index 6f3ab15..9221bba 100644 --- a/ShiftOS_TheReturn/Commands.cs +++ b/ShiftOS_TheReturn/Commands.cs @@ -44,7 +44,6 @@ using ShiftOS.Objects.ShiftFS; namespace ShiftOS.Engine { - [Namespace("infobox", hide = true)] [RequiresUpgrade("desktop;wm_free_placement")] public static class InfoboxDebugCommands { @@ -107,7 +106,6 @@ namespace ShiftOS.Engine } - [Namespace("audio")] public static class AudioCommands { [Command("setvol", description = "Set the volume of the system audio to anywhere between 0 and 100.")] @@ -129,79 +127,7 @@ namespace ShiftOS.Engine } } - [RequiresUpgrade("mud_fundamentals")] - [Namespace("mud")] - public static class MUDCommands - { - [MultiplayerOnly] - [Command("status")] - public static bool Status() - { - ServerManager.PrintDiagnostics(); - return true; - } - - [Command("connect")] - public static bool Connect(Dictionary args) - { - try - { - string ip = (args.ContainsKey("addr") == true) ? args["addr"] as string : "michaeltheshifter.me"; - int port = (args.ContainsKey("port") == true) ? Convert.ToInt32(args["port"] as string) : 13370; - try - { - ServerManager.Initiate(ip, port); - } - catch (Exception ex) - { - Console.WriteLine("{ERROR}: " + ex.Message); - } - - TerminalBackend.PrefixEnabled = false; - return true; - } - catch (Exception ex) - { - Console.WriteLine("Error running script:" + ex); - return false; - } - } - - [Command("reconnect")] - [RequiresUpgrade("hacker101_deadaccts")] - public static bool Reconnect() - { - Console.WriteLine("--reconnecting to multi-user domain..."); - KernelWatchdog.MudConnected = true; - Console.WriteLine("--done."); - return true; - } - - [MultiplayerOnly] - [Command("disconnect")] - [RequiresUpgrade("hacker101_deadaccts")] - public static bool Disconnect() - { - Console.WriteLine("--connection to multi-user domain severed..."); - KernelWatchdog.MudConnected = false; - return true; - } - - [MultiplayerOnly] - [Command("sendmsg")] - [KernelMode] - [RequiresUpgrade("hacker101_deadaccts")] - [RequiresArgument("header")] - [RequiresArgument("body")] - public static bool SendMessage(Dictionary args) - { - ServerManager.SendMessage(args["header"].ToString(), args["body"].ToString()); - return true; - } - } - [TutorialLock] - [Namespace("trm")] public static class TerminalCommands { [Command("clear")] @@ -220,167 +146,6 @@ namespace ShiftOS.Engine } } -#if DEVEL - internal class Rock : Exception - { - internal Rock() : base("Someone threw a rock at the window, and the Terminal shattered.") - { - - } - } - - [MultiplayerOnly] - [Namespace("dev")] - public static class ShiftOSDevCommands - { - [Command("buy")] - public static bool UnlockUpgrade(Dictionary args) - { - string upg = args["id"].ToString(); - try - { - SaveSystem.CurrentSave.Upgrades[upg] = true; - Shiftorium.InvokeUpgradeInstalled(); - SaveSystem.SaveGame(); - } - catch - { - Console.WriteLine("Upgrade not found."); - } - return true; - } - - [Command("rock", description = "A little surprise for unstable builds...")] - public static bool ThrowASandwichingRock() - { - Infobox.Show("He who lives in a glass house shouldn't throw stones...", new Rock().Message); - return false; - } - - - [Command("unbuy")] - [RequiresArgument("upgrade")] - public static bool UnbuyUpgrade(Dictionary args) - { - try - { - SaveSystem.CurrentSave.Upgrades[args["upgrade"].ToString()] = false; - SaveSystem.SaveGame(); - Desktop.PopulateAppLauncher(); - Desktop.CurrentDesktop.SetupDesktop(); - } - catch - { - Console.WriteLine("Upgrade not found."); - } - return true; - } - - [Command("getallupgrades")] - public static bool GetAllUpgrades() - { - Console.WriteLine(JsonConvert.SerializeObject(SaveSystem.CurrentSave.Upgrades, Formatting.Indented)); - return true; - } - - [Command("multarg")] - [RequiresArgument("id")] - [RequiresArgument("name")] - [RequiresArgument("type")] - public static bool MultArg(Dictionary args) - { - Console.WriteLine("Success! "+args.ToString()); - return true; - } - - [Command("restart")] - public static bool Restart() - { - SaveSystem.CurrentSave.Upgrades = new Dictionary(); - SaveSystem.CurrentSave.Codepoints = 0; - SaveSystem.CurrentSave.StoriesExperienced.Clear(); - SaveSystem.CurrentSave.StoriesExperienced.Add("mud_fundamentals"); - SaveSystem.SaveGame(); - Shiftorium.InvokeUpgradeInstalled(); - return true; - } - - [Command("freecp")] - public static bool FreeCodepoints(Dictionary args) - { - if (args.ContainsKey("amount")) - try - { - ulong codepointsToAdd = Convert.ToUInt64(args["amount"].ToString()); - SaveSystem.CurrentSave.Codepoints += codepointsToAdd; - return true; - } - catch (Exception ex) - { - Console.WriteLine("{ERROR}: " + ex.Message); - return true; - } - - SaveSystem.CurrentSave.Codepoints += 1000; - return true; - } - - [Command("unlockeverything")] - public static bool UnlockAllUpgrades() - { - foreach (var upg in Shiftorium.GetDefaults()) - { - if (!SaveSystem.CurrentSave.Upgrades.ContainsKey(upg.ID)) - SaveSystem.CurrentSave.Upgrades.Add(upg.ID, true); - else - SaveSystem.CurrentSave.Upgrades[upg.ID] = true; - } - Shiftorium.InvokeUpgradeInstalled(); - SkinEngine.LoadSkin(); - return true; - } - - [Command("info")] - public static bool DevInformation() - { - Console.WriteLine("{SHIFTOS_PLUS_MOTTO}"); - Console.WriteLine("{SHIFTOS_VERSION_INFO}" + Assembly.GetExecutingAssembly().GetName().Version); - return true; - } - [Command("pullfile")] - public static bool PullFile(Dictionary args) - { - if (args.ContainsKey("physical") && args.ContainsKey("virtual")) - { - string file = (string)args["physical"]; - string dest = (string)args["virtual"]; - if (System.IO.File.Exists(file)) - { - Console.WriteLine("Pulling physical file to virtual drive..."); - byte[] filebytes = System.IO.File.ReadAllBytes(file); - ShiftOS.Objects.ShiftFS.Utils.WriteAllBytes(dest, filebytes); - } - else - { - Console.WriteLine("The specified file does not exist on the physical drive."); - } - } - else - { - Console.WriteLine("You must supply a physical path."); - } - return true; - } - [Command("crash")] - public static bool CrashInstantly() - { - CrashHandler.Start(new Exception("ShiftOS was sent a command to forcefully crash.")); - return true; - } - } -#endif - - [Namespace("sos")] public static class ShiftOSCommands { @@ -478,38 +243,17 @@ namespace ShiftOS.Engine } [Command("help", "{COMMAND_HELP_USAGE", "{COMMAND_HELP_DESCRIPTION}")] - public static bool Help(Dictionary args) + public static bool Help() { var sb = new StringBuilder(); sb.AppendLine("Retrieving help data."); - - if (args.ContainsKey("ns")) + //print all unique namespaces. + foreach (var n in TerminalBackend.Commands.Select(x => x.CommandInfo).Distinct().OrderBy(x=>x.name)) { - string ns = args["ns"].ToString(); - //First let's check for a command that has this namespace. - var cmdtest = TerminalBackend.Commands.FirstOrDefault(x => x.NamespaceInfo.name == ns); - if (cmdtest == null) //Namespace not found. - sb.AppendLine("Error retrieving help for namespace \"" + ns + "\". Namespace not found."); - else - { - //Now do the actual scan. - sb.AppendLine("Namespace: " + ns); - foreach(var cmd in TerminalBackend.Commands.Where(x => x.NamespaceInfo.name == ns)) - { - string str = cmd.ToString(); - str = str.Replace(str.Substring(str.LastIndexOf("|")), ""); - sb.AppendLine(str); - } - } - } - else - { - - //print all unique namespaces. - foreach(var n in TerminalBackend.Commands.Select(x => x.NamespaceInfo.name).Distinct()) - { - sb.AppendLine("sos.help{ns:\"" + n + "\"}"); - } + sb.Append(n.name); + if (Shiftorium.UpgradeInstalled("help_descriptions")) + sb.Append(" - " + n.description); + sb.AppendLine(); } Console.WriteLine(sb.ToString()); @@ -565,7 +309,6 @@ Upgrades: {SaveSystem.CurrentSave.CountUpgrades()} installed, } [MultiplayerOnly] - [Namespace("shiftorium")] public static class ShiftoriumCommands { [Command("buy")] @@ -668,7 +411,7 @@ shiftorium.buy{{upgrade:""{upg.ID}""}}"); return true; } - [Command("list")] + [Command("shiftorium", description ="Lists all available Shiftorium upgrades.")] public static bool ListAll(Dictionary args) { try @@ -742,7 +485,6 @@ shiftorium.buy{{upgrade:""{upg.ID}""}}"); } } - [Namespace("win")] public static class WindowCommands { diff --git a/ShiftOS_TheReturn/PythonAPI.cs b/ShiftOS_TheReturn/PythonAPI.cs index cc3798c..7db4c45 100644 --- a/ShiftOS_TheReturn/PythonAPI.cs +++ b/ShiftOS_TheReturn/PythonAPI.cs @@ -291,7 +291,6 @@ namespace ShiftOS.Engine } #if DEBUG - [Namespace("dev")] public static class PythonCmds { [Command("runpystring", description = "Run some Python code. (Only present in DEBUG builds of ShiftOS)")] diff --git a/ShiftOS_TheReturn/ReflectMan.cs b/ShiftOS_TheReturn/ReflectMan.cs index 78f6bf3..d194754 100644 --- a/ShiftOS_TheReturn/ReflectMan.cs +++ b/ShiftOS_TheReturn/ReflectMan.cs @@ -104,7 +104,6 @@ namespace ShiftOS.Engine } #if DEBUG - [Namespace("dev")] public static class ReflectDebug { [Command("listalltypes", description = "List all types that were found by ReflectMan. Only present in DEBUG builds of ShiftOS.")] diff --git a/ShiftOS_TheReturn/TerminalBackend.cs b/ShiftOS_TheReturn/TerminalBackend.cs index 81ea971..4594eb3 100644 --- a/ShiftOS_TheReturn/TerminalBackend.cs +++ b/ShiftOS_TheReturn/TerminalBackend.cs @@ -148,7 +148,6 @@ namespace ShiftOS.Engine return hash; } - public Namespace NamespaceInfo { get; set; } public Command CommandInfo { get; set; } public List RequiredArguments { get; set; } @@ -161,16 +160,14 @@ namespace ShiftOS.Engine public override string ToString() { StringBuilder sb = new StringBuilder(); - sb.Append(this.NamespaceInfo.name); - sb.Append("."); sb.Append(this.CommandInfo.name); if (this.RequiredArguments.Count > 0) { - sb.Append("{"); + sb.Append(" "); foreach (var arg in RequiredArguments) { - sb.Append(arg); - sb.Append(":"); + sb.Append("--" + arg); + sb.Append(" "); if (RequiredArguments.IndexOf(arg) < RequiredArguments.Count - 1) sb.Append(','); } @@ -295,41 +292,42 @@ namespace ShiftOS.Engine public static void PopulateTerminalCommands() { Commands = new List(); - foreach(var type in ReflectMan.Types) + foreach (var type in ReflectMan.Types) { - var ns = type.GetCustomAttributes(false).FirstOrDefault(x => x is Namespace) as Namespace; - if(ns != null) + foreach (var mth in type.GetMethods(BindingFlags.Public | BindingFlags.Static)) { - foreach(var mth in type.GetMethods(BindingFlags.Public | BindingFlags.Static)) + var cmd = mth.GetCustomAttributes(false).FirstOrDefault(x => x is Command); + if (cmd != null) { - var cmd = mth.GetCustomAttributes(false).FirstOrDefault(x => x is Command); - if(cmd != null) - { - var tc = new TerminalCommand(); - tc.RequiresElevation = !(type.GetCustomAttributes(false).FirstOrDefault(x => x is KernelModeAttribute) == null); + var tc = new TerminalCommand(); + tc.RequiresElevation = !(type.GetCustomAttributes(false).FirstOrDefault(x => x is KernelModeAttribute) == null); - tc.NamespaceInfo = ns; - tc.CommandInfo = cmd as Command; - tc.RequiresElevation = tc.RequiresElevation || !(mth.GetCustomAttributes(false).FirstOrDefault(x => x is KernelModeAttribute) == null); - tc.RequiredArguments = new List(); - foreach (var arg in mth.GetCustomAttributes(false).Where(x=>x is RequiresArgument)) - { - var rarg = arg as RequiresArgument; - tc.RequiredArguments.Add(rarg.argument); - } - var rupg = mth.GetCustomAttributes(false).FirstOrDefault(x => x is RequiresUpgradeAttribute) as RequiresUpgradeAttribute; - if (rupg != null) - tc.Dependencies = rupg.Upgrade; - else - tc.Dependencies = ""; - tc.CommandType = type; - tc.CommandHandler = mth; - if (!Commands.Contains(tc)) - Commands.Add(tc); + tc.CommandInfo = cmd as Command; + tc.RequiresElevation = tc.RequiresElevation || !(mth.GetCustomAttributes(false).FirstOrDefault(x => x is KernelModeAttribute) == null); + tc.RequiredArguments = new List(); + foreach (var arg in mth.GetCustomAttributes(false).Where(x => x is RequiresArgument)) + { + var rarg = arg as RequiresArgument; + tc.RequiredArguments.Add(rarg.argument); } + var rupg = mth.GetCustomAttributes(false).FirstOrDefault(x => x is RequiresUpgradeAttribute) as RequiresUpgradeAttribute; + if (rupg != null) + tc.Dependencies = rupg.Upgrade; + else + tc.Dependencies = ""; + tc.CommandType = type; + tc.CommandHandler = mth; + + var ambiguity = Commands.FirstOrDefault(x => x.CommandInfo.name == tc.CommandInfo.name); + if (ambiguity != null) + throw new Exception("Command ambiguity error. You can't have two commands with the same name: " + $"{tc} == {ambiguity}"); + + if (!Commands.Contains(tc)) + Commands.Add(tc); } } + } Console.WriteLine("[termdb] " + Commands.Count + " commands found."); } @@ -465,7 +463,7 @@ namespace ShiftOS.Engine string[] split = text.Split('.'); - var cmd = Commands.FirstOrDefault(x => x.NamespaceInfo.name == split[0] && x.CommandInfo.name == split[1]); + var cmd = Commands.FirstOrDefault(x => x.CommandInfo.name == text); if (cmd == null) return false; if (!Shiftorium.UpgradeInstalled(cmd.Dependencies)) diff --git a/ShiftOS_TheReturn/UserManagementCommands.cs b/ShiftOS_TheReturn/UserManagementCommands.cs index a64c99c..cac535b 100644 --- a/ShiftOS_TheReturn/UserManagementCommands.cs +++ b/ShiftOS_TheReturn/UserManagementCommands.cs @@ -10,7 +10,6 @@ namespace ShiftOS.Engine /// /// Administrative user management terminal commands. /// - [Namespace("admin")] [KernelMode] [RequiresUpgrade("mud_fundamentals")] public static class AdminUserManagementCommands @@ -173,7 +172,6 @@ namespace ShiftOS.Engine /// /// Non-administrative user management terminal commands. /// - [Namespace("user")] [RequiresUpgrade("mud_fundamentals")] public static class UserManagementCommands { -- cgit v1.2.3 From 77cb4a9a14de07023e86a9a5cda7171fcb4ec8ec Mon Sep 17 00:00:00 2001 From: RogueAI42 Date: Sat, 17 Jun 2017 14:23:39 +1000 Subject: Changed how bounces work in Pong + Fixed Shutdown --- ShiftOS.WinForms/Applications/Pong.cs | 36 +++++++++++++++++------------------ ShiftOS.WinForms/WinformsDesktop.cs | 6 +++--- 2 files changed, 20 insertions(+), 22 deletions(-) (limited to 'ShiftOS.WinForms/Applications') diff --git a/ShiftOS.WinForms/Applications/Pong.cs b/ShiftOS.WinForms/Applications/Pong.cs index 3f06676..c260ae3 100644 --- a/ShiftOS.WinForms/Applications/Pong.cs +++ b/ShiftOS.WinForms/Applications/Pong.cs @@ -83,6 +83,15 @@ namespace ShiftOS.WinForms.Applications private string counter = ""; + private void Bounce(Rectangle ball, Rectangle paddle) + { + // reverse x velocity to send the ball the other way + xVel = -xVel; + + // adjust y velocity based on where the ball hit the paddle + yVel += linear((ball.Top + (ball.Height / 2)), paddle.Top, paddle.Bottom, -1, 1); + } + public void UpdateBall() { if (doBallCalc) @@ -141,11 +150,7 @@ namespace ShiftOS.WinForms.Applications //check if the ball x is greater than the player paddle's middle coordinate if (ballRect.Right >= opponentRect.Left) { - //reverse x velocity to send the ball the other way - xVel = -xVel; - - //set y velocity based on where the ball hit the paddle - yVel = linear((ballRect.Top + (ballRect.Height / 2)), opponentRect.Top, opponentRect.Bottom, -1, 1); + Bounce(ballRect, opponentRect); doAi = false; } @@ -169,11 +174,7 @@ namespace ShiftOS.WinForms.Applications { if (ballRect.Left <= playerRect.Right) { - //reverse x velocity to send the ball the other way - xVel = -xVel; - - //set y velocity based on where the ball hit the paddle - yVel = linear((ballRect.Top + (ballRect.Height / 2)), playerRect.Top, playerRect.Bottom, -1, 1); + Bounce(ballRect, playerRect); //reset the ai location aiBallX = ballX; @@ -255,15 +256,12 @@ namespace ShiftOS.WinForms.Applications new System.Threading.Thread(() => { doBallCalc = false; - counter = "3"; - Engine.AudioManager.PlayStream(Properties.Resources.writesound); - System.Threading.Thread.Sleep(1000); - counter = "2"; - Engine.AudioManager.PlayStream(Properties.Resources.writesound); - System.Threading.Thread.Sleep(1000); - counter = "1"; - Engine.AudioManager.PlayStream(Properties.Resources.writesound); - System.Threading.Thread.Sleep(1000); + for (int i = 3; i > 0; i--) + { + counter = i.ToString(); + Engine.AudioManager.PlayStream(Properties.Resources.writesound); + System.Threading.Thread.Sleep(1000); + } doBallCalc = true; header = ""; counter = ""; diff --git a/ShiftOS.WinForms/WinformsDesktop.cs b/ShiftOS.WinForms/WinformsDesktop.cs index 82d99f0..e8ad298 100644 --- a/ShiftOS.WinForms/WinformsDesktop.cs +++ b/ShiftOS.WinForms/WinformsDesktop.cs @@ -824,7 +824,7 @@ namespace ShiftOS.WinForms item.Text = Localization.Parse("{SHUTDOWN}"); item.Click += (o, a) => { - TerminalBackend.InvokeCommand("sos.shutdown"); + TerminalBackend.InvokeCommand("shutdown"); }; apps.DropDownItems.Add(item); if (Shiftorium.UpgradeInstalled("advanced_app_launcher")) @@ -853,7 +853,7 @@ namespace ShiftOS.WinForms catbtn.Height = 24; flcategories.Controls.Add(catbtn); catbtn.Show(); - catbtn.Click += (o, a) => TerminalBackend.InvokeCommand("sos.shutdown"); + catbtn.Click += (o, a) => TerminalBackend.InvokeCommand("shutdown"); } } } @@ -1109,7 +1109,7 @@ namespace ShiftOS.WinForms private void btnshutdown_Click(object sender, EventArgs e) { - TerminalBackend.InvokeCommand("sos.shutdown"); + TerminalBackend.InvokeCommand("shutdown"); } public void HideAppLauncher() -- cgit v1.2.3 From dbf794c9849c0046cf2e93a878c6d8d9101d2fc8 Mon Sep 17 00:00:00 2001 From: RogueAI42 Date: Sat, 17 Jun 2017 19:16:50 +1000 Subject: MindBlow: Brainfuck IDE for ShiftOS For 50,000 Codepoints you can write and run Brainfuck programs in a dedicated IDE. Check out the site on "shiftnet/mindblow". The IDE seems to be working perfectly. The site has some theming issues. --- ShiftOS.WinForms/Applications/MindBlow.Designer.cs | 209 +++++++++++++++++++++ ShiftOS.WinForms/Applications/MindBlow.cs | 183 ++++++++++++++++++ ShiftOS.WinForms/Applications/MindBlow.resx | 120 ++++++++++++ ShiftOS.WinForms/Properties/Resources.Designer.cs | 10 + ShiftOS.WinForms/Properties/Resources.resx | 3 + ShiftOS.WinForms/Resources/mindblow.png | Bin 0 -> 4431 bytes ShiftOS.WinForms/ShiftOS.WinForms.csproj | 19 ++ .../ShiftnetSites/MindBlow.Designer.cs | 192 +++++++++++++++++++ ShiftOS.WinForms/ShiftnetSites/MindBlow.cs | 74 ++++++++ ShiftOS.WinForms/ShiftnetSites/MindBlow.resx | 145 ++++++++++++++ ShiftOS_TheReturn/BFInterpreter.cs | 143 ++++++++++++++ ShiftOS_TheReturn/ShiftOS.Engine.csproj | 1 + 12 files changed, 1099 insertions(+) create mode 100644 ShiftOS.WinForms/Applications/MindBlow.Designer.cs create mode 100644 ShiftOS.WinForms/Applications/MindBlow.cs create mode 100644 ShiftOS.WinForms/Applications/MindBlow.resx create mode 100644 ShiftOS.WinForms/Resources/mindblow.png create mode 100644 ShiftOS.WinForms/ShiftnetSites/MindBlow.Designer.cs create mode 100644 ShiftOS.WinForms/ShiftnetSites/MindBlow.cs create mode 100644 ShiftOS.WinForms/ShiftnetSites/MindBlow.resx create mode 100644 ShiftOS_TheReturn/BFInterpreter.cs (limited to 'ShiftOS.WinForms/Applications') diff --git a/ShiftOS.WinForms/Applications/MindBlow.Designer.cs b/ShiftOS.WinForms/Applications/MindBlow.Designer.cs new file mode 100644 index 0000000..da269f6 --- /dev/null +++ b/ShiftOS.WinForms/Applications/MindBlow.Designer.cs @@ -0,0 +1,209 @@ +namespace ShiftOS.WinForms.Applications +{ + partial class MindBlow + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.tabs = new System.Windows.Forms.TabControl(); + this.console = new System.Windows.Forms.TabPage(); + this.program = new System.Windows.Forms.TabPage(); + this.monitor = new System.Windows.Forms.TabPage(); + this.consoleout = new System.Windows.Forms.TextBox(); + this.programinput = new System.Windows.Forms.TextBox(); + this.load = new System.Windows.Forms.Button(); + this.save = new System.Windows.Forms.Button(); + this.memptr = new System.Windows.Forms.Label(); + this.instptr = new System.Windows.Forms.Label(); + this.memlist = new System.Windows.Forms.ListBox(); + this.run = new System.Windows.Forms.Button(); + this.tabs.SuspendLayout(); + this.console.SuspendLayout(); + this.program.SuspendLayout(); + this.monitor.SuspendLayout(); + this.SuspendLayout(); + // + // tabs + // + this.tabs.Controls.Add(this.console); + this.tabs.Controls.Add(this.program); + this.tabs.Controls.Add(this.monitor); + this.tabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabs.Location = new System.Drawing.Point(0, 0); + this.tabs.Name = "tabs"; + this.tabs.SelectedIndex = 0; + this.tabs.Size = new System.Drawing.Size(392, 269); + this.tabs.TabIndex = 0; + this.tabs.Selected += new System.Windows.Forms.TabControlEventHandler(this.tabs_Selected); + // + // console + // + this.console.Controls.Add(this.consoleout); + this.console.Location = new System.Drawing.Point(4, 22); + this.console.Name = "console"; + this.console.Padding = new System.Windows.Forms.Padding(3); + this.console.Size = new System.Drawing.Size(384, 243); + this.console.TabIndex = 0; + this.console.Text = "Console"; + this.console.UseVisualStyleBackColor = true; + // + // program + // + this.program.Controls.Add(this.run); + this.program.Controls.Add(this.save); + this.program.Controls.Add(this.load); + this.program.Controls.Add(this.programinput); + this.program.Location = new System.Drawing.Point(4, 22); + this.program.Name = "program"; + this.program.Padding = new System.Windows.Forms.Padding(3); + this.program.Size = new System.Drawing.Size(384, 243); + this.program.TabIndex = 1; + this.program.Text = "Program"; + this.program.UseVisualStyleBackColor = true; + // + // monitor + // + this.monitor.Controls.Add(this.memlist); + this.monitor.Controls.Add(this.instptr); + this.monitor.Controls.Add(this.memptr); + this.monitor.Location = new System.Drawing.Point(4, 22); + this.monitor.Name = "monitor"; + this.monitor.Size = new System.Drawing.Size(384, 243); + this.monitor.TabIndex = 2; + this.monitor.Text = "Monitor"; + this.monitor.UseVisualStyleBackColor = true; + // + // consoleout + // + this.consoleout.Dock = System.Windows.Forms.DockStyle.Fill; + this.consoleout.Location = new System.Drawing.Point(3, 3); + this.consoleout.Multiline = true; + this.consoleout.Name = "consoleout"; + this.consoleout.ReadOnly = true; + this.consoleout.Size = new System.Drawing.Size(378, 237); + this.consoleout.TabIndex = 0; + // + // programinput + // + this.programinput.Location = new System.Drawing.Point(3, 0); + this.programinput.Multiline = true; + this.programinput.Name = "programinput"; + this.programinput.Size = new System.Drawing.Size(378, 218); + this.programinput.TabIndex = 0; + // + // load + // + this.load.Location = new System.Drawing.Point(6, 217); + this.load.Name = "load"; + this.load.Size = new System.Drawing.Size(115, 23); + this.load.TabIndex = 1; + this.load.Text = "Load"; + this.load.UseVisualStyleBackColor = true; + this.load.Click += new System.EventHandler(this.load_Click); + // + // save + // + this.save.Location = new System.Drawing.Point(127, 217); + this.save.Name = "save"; + this.save.Size = new System.Drawing.Size(114, 23); + this.save.TabIndex = 2; + this.save.Text = "Save"; + this.save.UseVisualStyleBackColor = true; + this.save.Click += new System.EventHandler(this.save_Click); + // + // memptr + // + this.memptr.AutoSize = true; + this.memptr.Location = new System.Drawing.Point(8, 8); + this.memptr.Name = "memptr"; + this.memptr.Size = new System.Drawing.Size(56, 13); + this.memptr.TabIndex = 0; + this.memptr.Text = "Memory: 0"; + // + // instptr + // + this.instptr.AutoSize = true; + this.instptr.Location = new System.Drawing.Point(8, 21); + this.instptr.Name = "instptr"; + this.instptr.Size = new System.Drawing.Size(68, 13); + this.instptr.TabIndex = 1; + this.instptr.Text = "Instruction: 0"; + // + // memlist + // + this.memlist.FormattingEnabled = true; + this.memlist.Location = new System.Drawing.Point(11, 37); + this.memlist.Name = "memlist"; + this.memlist.ScrollAlwaysVisible = true; + this.memlist.SelectionMode = System.Windows.Forms.SelectionMode.None; + this.memlist.Size = new System.Drawing.Size(370, 199); + this.memlist.TabIndex = 2; + // + // run + // + this.run.Location = new System.Drawing.Point(247, 217); + this.run.Name = "run"; + this.run.Size = new System.Drawing.Size(131, 23); + this.run.TabIndex = 3; + this.run.Text = "Run"; + this.run.UseVisualStyleBackColor = true; + this.run.Click += new System.EventHandler(this.run_Click); + // + // MindBlow + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.tabs); + this.Name = "MindBlow"; + this.Size = new System.Drawing.Size(392, 269); + this.Resize += new System.EventHandler(this.MindBlow_Resize); + this.tabs.ResumeLayout(false); + this.console.ResumeLayout(false); + this.console.PerformLayout(); + this.program.ResumeLayout(false); + this.program.PerformLayout(); + this.monitor.ResumeLayout(false); + this.monitor.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TabControl tabs; + private System.Windows.Forms.TabPage console; + private System.Windows.Forms.TabPage program; + private System.Windows.Forms.TabPage monitor; + private System.Windows.Forms.TextBox consoleout; + private System.Windows.Forms.TextBox programinput; + private System.Windows.Forms.Button load; + private System.Windows.Forms.Button save; + private System.Windows.Forms.Label instptr; + private System.Windows.Forms.Label memptr; + private System.Windows.Forms.ListBox memlist; + private System.Windows.Forms.Button run; + } +} diff --git a/ShiftOS.WinForms/Applications/MindBlow.cs b/ShiftOS.WinForms/Applications/MindBlow.cs new file mode 100644 index 0000000..22f5011 --- /dev/null +++ b/ShiftOS.WinForms/Applications/MindBlow.cs @@ -0,0 +1,183 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using ShiftOS.Engine; +using System.IO; +using System.Threading; + +namespace ShiftOS.WinForms.Applications +{ + [WinOpen("mindblow")] + [Launcher("MindBlow", false, null, "Utilities")] + [RequiresUpgrade("mindblow")] + public partial class MindBlow : UserControl, IShiftOSWindow, IBFListener + { + private class TextBoxStream : Stream + { + private TextBox box; + private KeysConverter kc; + public TextBoxStream(TextBox mybox) + { + kc = new KeysConverter(); + box = mybox; + } + public override bool CanRead => true; + + public override bool CanSeek => false; + + public override bool CanWrite => true; + + public override long Length => box.Text.Length; + + public override long Position { get => Length; set => throw new NotImplementedException(); } + + public override void Flush() + { + } + + public override int Read(byte[] buffer, int offset, int count) + { + object lck = new object(); + int ptr = offset; + KeyPressEventHandler handler = (o, a) => + { + lock (lck) + { + buffer[ptr] = (byte)a.KeyChar; + ptr++; + } + }; + Desktop.InvokeOnWorkerThread(() => box.KeyPress += handler); + while (true) + { + lock (lck) + if (ptr >= offset + count) + break; + } + Desktop.InvokeOnWorkerThread(() => box.KeyPress -= handler); + return count; + } + + public override long Seek(long offset, SeekOrigin origin) + { + throw new NotImplementedException(); + } + + public override void SetLength(long value) + { + throw new NotImplementedException(); + } + + public override void Write(byte[] buffer, int offset, int count) + { + string output = ""; + foreach (byte b in buffer.Skip(offset).Take(count)) + output += Convert.ToChar(b); + Desktop.InvokeOnWorkerThread(() => box.Text += output); + } + } + private static string[] DefaultMem; + private BFInterpreter Interpreter; + + private void DoLayout() + { + memlist.Left = 0; + memlist.Width = monitor.Width; + memlist.Height = monitor.Height - memlist.Top; + program.Top = 0; + program.Left = 0; + programinput.Width = program.Width; + programinput.Height = program.Height - load.Height; + load.Top = save.Top = run.Top = programinput.Height; + load.Width = save.Width = run.Width = save.Left = program.Width / 3; + run.Left = save.Left * 2; + } + + public MindBlow() + { + InitializeComponent(); + DefaultMem = new string[30000]; + for (ushort i = 0; i < 30000; i++) + DefaultMem[i] = "0"; + memlist.Items.AddRange(DefaultMem); + Interpreter = new BFInterpreter(new TextBoxStream(consoleout), this); + } + + public void IPtrMoved(int newval) + { + Desktop.InvokeOnWorkerThread(() => instptr.Text = "Instruction: " + newval.ToString()); + } + + public void MemChanged(ushort pos, byte newval) + { + Desktop.InvokeOnWorkerThread(() => memlist.Items[pos] = newval.ToString()); + } + + public void MemReset() + { + Desktop.InvokeOnWorkerThread(() => + { + memlist.Items.Clear(); + memlist.Items.AddRange(DefaultMem); + }); + } + + public void OnLoad() + { + DoLayout(); + } + + public void OnSkinLoad() + { + } + + public bool OnUnload() + { + return true; + } + + public void OnUpgrade() + { + } + + public void PointerMoved(ushort newval) + { + Desktop.InvokeOnWorkerThread(() => memptr.Text = "Memory: " + newval.ToString()); + } + + private void MindBlow_Resize(object sender, EventArgs e) + { + DoLayout(); + } + + private void run_Click(object sender, EventArgs e) + { + new Thread(() => + { + Interpreter.Reset(); + Interpreter.Execute(programinput.Text); + }).Start(); + } + + private void tabs_Selected(object sender, TabControlEventArgs e) + { + DoLayout(); + } + + private void load_Click(object sender, EventArgs e) + { + AppearanceManager.SetupDialog(new FileDialog(new string[] { ".bf" }, FileOpenerStyle.Open, new Action((file) => programinput.Text = Objects.ShiftFS.Utils.ReadAllText(file)))); + } + + private void save_Click(object sender, EventArgs e) + { + AppearanceManager.SetupDialog(new FileDialog(new string[] { ".bf" }, FileOpenerStyle.Save, new Action((file) => Objects.ShiftFS.Utils.WriteAllText(file, programinput.Text)))); + } + } +} diff --git a/ShiftOS.WinForms/Applications/MindBlow.resx b/ShiftOS.WinForms/Applications/MindBlow.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/ShiftOS.WinForms/Applications/MindBlow.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ShiftOS.WinForms/Properties/Resources.Designer.cs b/ShiftOS.WinForms/Properties/Resources.Designer.cs index 2cba3c9..3289a0a 100644 --- a/ShiftOS.WinForms/Properties/Resources.Designer.cs +++ b/ShiftOS.WinForms/Properties/Resources.Designer.cs @@ -1058,6 +1058,16 @@ namespace ShiftOS.WinForms.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap mindblow { + get { + object obj = ResourceManager.GetObject("mindblow", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/ShiftOS.WinForms/Properties/Resources.resx b/ShiftOS.WinForms/Properties/Resources.resx index 05f03c7..128197b 100644 --- a/ShiftOS.WinForms/Properties/Resources.resx +++ b/ShiftOS.WinForms/Properties/Resources.resx @@ -34609,4 +34609,7 @@ ..\Resources\ShiftOSFull.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\mindblow.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/ShiftOS.WinForms/Resources/mindblow.png b/ShiftOS.WinForms/Resources/mindblow.png new file mode 100644 index 0000000..fcdcadf Binary files /dev/null and b/ShiftOS.WinForms/Resources/mindblow.png differ diff --git a/ShiftOS.WinForms/ShiftOS.WinForms.csproj b/ShiftOS.WinForms/ShiftOS.WinForms.csproj index 00b4d83..fb6e51f 100644 --- a/ShiftOS.WinForms/ShiftOS.WinForms.csproj +++ b/ShiftOS.WinForms/ShiftOS.WinForms.csproj @@ -77,6 +77,12 @@ IconManager.cs + + UserControl + + + MindBlow.cs + UserControl @@ -395,6 +401,12 @@ MainHomepage.cs + + UserControl + + + MindBlow.cs + UserControl @@ -484,6 +496,9 @@ IconManager.cs + + MindBlow.cs + Pong.cs @@ -633,6 +648,9 @@ MainHomepage.cs + + MindBlow.cs + ShiftGames.cs @@ -880,6 +898,7 @@ + diff --git a/ShiftOS.WinForms/ShiftnetSites/MindBlow.Designer.cs b/ShiftOS.WinForms/ShiftnetSites/MindBlow.Designer.cs new file mode 100644 index 0000000..fce1f14 --- /dev/null +++ b/ShiftOS.WinForms/ShiftnetSites/MindBlow.Designer.cs @@ -0,0 +1,192 @@ +namespace ShiftOS.WinForms.ShiftnetSites +{ + partial class MindBlow + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MindBlow)); + this.nav = new System.Windows.Forms.Panel(); + this.title = new System.Windows.Forms.Label(); + this.aboutpnl = new System.Windows.Forms.Panel(); + this.label1 = new System.Windows.Forms.Label(); + this.buybtn = new System.Windows.Forms.Button(); + this.label2 = new System.Windows.Forms.Label(); + this.aboutbtn = new System.Windows.Forms.LinkLabel(); + this.tutorialpnl = new System.Windows.Forms.Panel(); + this.label3 = new System.Windows.Forms.Label(); + this.tutorialbtn = new System.Windows.Forms.LinkLabel(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.nav.SuspendLayout(); + this.aboutpnl.SuspendLayout(); + this.tutorialpnl.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // nav + // + this.nav.Controls.Add(this.tutorialbtn); + this.nav.Controls.Add(this.aboutbtn); + this.nav.Controls.Add(this.title); + this.nav.Dock = System.Windows.Forms.DockStyle.Left; + this.nav.Location = new System.Drawing.Point(0, 0); + this.nav.Name = "nav"; + this.nav.Size = new System.Drawing.Size(200, 470); + this.nav.TabIndex = 0; + // + // title + // + this.title.AutoSize = true; + this.title.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.title.Location = new System.Drawing.Point(3, 0); + this.title.Name = "title"; + this.title.Size = new System.Drawing.Size(101, 24); + this.title.TabIndex = 0; + this.title.Text = "MindBlow"; + // + // aboutpnl + // + this.aboutpnl.Controls.Add(this.pictureBox1); + this.aboutpnl.Controls.Add(this.label2); + this.aboutpnl.Controls.Add(this.buybtn); + this.aboutpnl.Controls.Add(this.label1); + this.aboutpnl.Location = new System.Drawing.Point(206, 0); + this.aboutpnl.Name = "aboutpnl"; + this.aboutpnl.Size = new System.Drawing.Size(512, 470); + this.aboutpnl.TabIndex = 1; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(3, 8); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(313, 65); + this.label1.TabIndex = 0; + this.label1.Text = resources.GetString("label1.Text"); + // + // buybtn + // + this.buybtn.Location = new System.Drawing.Point(6, 76); + this.buybtn.Name = "buybtn"; + this.buybtn.Size = new System.Drawing.Size(75, 23); + this.buybtn.TabIndex = 1; + this.buybtn.Text = "Buy Now"; + this.buybtn.UseVisualStyleBackColor = true; + this.buybtn.Click += new System.EventHandler(this.buybtn_Click); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(87, 81); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(132, 13); + this.label2.TabIndex = 2; + this.label2.Text = "(Price: 50,000 Codepoints)"; + // + // aboutbtn + // + this.aboutbtn.AutoSize = true; + this.aboutbtn.Location = new System.Drawing.Point(4, 24); + this.aboutbtn.Name = "aboutbtn"; + this.aboutbtn.Size = new System.Drawing.Size(85, 13); + this.aboutbtn.TabIndex = 1; + this.aboutbtn.TabStop = true; + this.aboutbtn.Text = "About/Purchase"; + this.aboutbtn.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.aboutbtn_LinkClicked); + // + // tutorialpnl + // + this.tutorialpnl.Controls.Add(this.label3); + this.tutorialpnl.Location = new System.Drawing.Point(209, 0); + this.tutorialpnl.Name = "tutorialpnl"; + this.tutorialpnl.Size = new System.Drawing.Size(506, 467); + this.tutorialpnl.TabIndex = 2; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(3, 8); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(375, 208); + this.label3.TabIndex = 0; + this.label3.Text = resources.GetString("label3.Text"); + // + // tutorialbtn + // + this.tutorialbtn.AutoSize = true; + this.tutorialbtn.Location = new System.Drawing.Point(4, 37); + this.tutorialbtn.Name = "tutorialbtn"; + this.tutorialbtn.Size = new System.Drawing.Size(35, 13); + this.tutorialbtn.TabIndex = 2; + this.tutorialbtn.TabStop = true; + this.tutorialbtn.Text = "Guide"; + this.tutorialbtn.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.tutorialbtn_LinkClicked); + // + // pictureBox1 + // + this.pictureBox1.Image = global::ShiftOS.WinForms.Properties.Resources.mindblow; + this.pictureBox1.Location = new System.Drawing.Point(6, 105); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(390, 295); + this.pictureBox1.TabIndex = 3; + this.pictureBox1.TabStop = false; + // + // MindBlow + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.aboutpnl); + this.Controls.Add(this.tutorialpnl); + this.Controls.Add(this.nav); + this.Name = "MindBlow"; + this.Size = new System.Drawing.Size(718, 470); + this.Resize += new System.EventHandler(this.MindBlow_Resize); + this.nav.ResumeLayout(false); + this.nav.PerformLayout(); + this.aboutpnl.ResumeLayout(false); + this.aboutpnl.PerformLayout(); + this.tutorialpnl.ResumeLayout(false); + this.tutorialpnl.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel nav; + private System.Windows.Forms.Label title; + private System.Windows.Forms.Panel aboutpnl; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button buybtn; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.LinkLabel aboutbtn; + private System.Windows.Forms.Panel tutorialpnl; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.LinkLabel tutorialbtn; + private System.Windows.Forms.PictureBox pictureBox1; + } +} diff --git a/ShiftOS.WinForms/ShiftnetSites/MindBlow.cs b/ShiftOS.WinForms/ShiftnetSites/MindBlow.cs new file mode 100644 index 0000000..e5d035d --- /dev/null +++ b/ShiftOS.WinForms/ShiftnetSites/MindBlow.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using ShiftOS.Engine; + +namespace ShiftOS.WinForms.ShiftnetSites +{ + [ShiftnetSite("shiftnet/mindblow", "MindBlow", "World's First IDE for ShiftOS")] + public partial class MindBlow : UserControl, IShiftnetSite + { + public MindBlow() + { + InitializeComponent(); + } + + public event Action GoToUrl; + public event Action GoBack; + + private void DoLayout() + { + aboutpnl.Left = tutorialpnl.Left = nav.Width; + aboutpnl.Width = tutorialpnl.Width = Width - nav.Width; + tutorialpnl.Height = Height; + } + + private void aboutbtn_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + aboutpnl.BringToFront(); + } + + private void tutorialbtn_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + tutorialpnl.BringToFront(); + } + + private void MindBlow_Resize(object sender, EventArgs e) + { + DoLayout(); + } + + private void buybtn_Click(object sender, EventArgs e) + { + if (Shiftorium.UpgradeInstalled("mindblow")) + Infobox.Show("Already Purchased", "You have already bought MindBlow."); + else if (SaveSystem.CurrentSave.Codepoints < 50000) + Infobox.Show("Not Enough Codepoints", "You do not have enough Codepoints to buy MindBlow."); + else + { + Shiftorium.Buy("mindblow", 50000); + Infobox.Show("Installation Complete", "MindBlow has been successfully installed."); + } + } + + public void Setup() + { + DoLayout(); + aboutpnl.BringToFront(); + } + + public void OnSkinLoad() + { + } + + public void OnUpgrade() + { + } + } +} diff --git a/ShiftOS.WinForms/ShiftnetSites/MindBlow.resx b/ShiftOS.WinForms/ShiftnetSites/MindBlow.resx new file mode 100644 index 0000000..08ff93f --- /dev/null +++ b/ShiftOS.WinForms/ShiftnetSites/MindBlow.resx @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Ever wanted to make your own ShiftOS software? + +MindBlow is the world's first IDE designed specifically for ShiftOS. +It allows you to develop and run your own programs written in the +Brainfuck programming language. + + + The Brainfuck programming language is simple to learn and use. +There are a total of 8 commands in the language: + +> Increment the memory pointer. +< Decrement the memory pointer. ++ Increment the number at the memory pointer. +- Decrement the number at the memory pointer. +. Print the ASCII value at the memory pointer. +, Get a character from the user and put its ASCII value at the memory pointer. +[ Jump to the next ']' if the number at the memory pointer is zero. +] Jump to the last '[' if the number at the memory pointer isn't zero. + +Any characters that aren't valid commands will be ignored. +Here is a simple program to read 10 characters from the user and display them: +++++++++++ +[->,.<] + + \ No newline at end of file diff --git a/ShiftOS_TheReturn/BFInterpreter.cs b/ShiftOS_TheReturn/BFInterpreter.cs new file mode 100644 index 0000000..f2463a4 --- /dev/null +++ b/ShiftOS_TheReturn/BFInterpreter.cs @@ -0,0 +1,143 @@ +/* + * MIT License + * + * Copyright (c) 2017 Michael VanOverbeek and ShiftOS devs + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ShiftOS.Engine +{ + /// + /// Receives events from the interpreter. + /// + public interface IBFListener + { + void PointerMoved(ushort newval); + void IPtrMoved(int newval); + void MemChanged(ushort pos, byte newval); + void MemReset(); + } + /// + /// Interprets Brainfuck code. + /// + public class BFInterpreter + { + private byte[] mem; + private ushort ptr; + private string prg; + private object lck; + private Stream str; + + public IBFListener lst = null; + + public BFInterpreter(Stream io, IBFListener listener = null, string program = "") + { + lck = new object(); + prg = program; + str = io; + Reset(); + lst = listener; + } + public void Execute() + { + lock (lck) + for (int iptr = 0; iptr < prg.Length; iptr++) + { + if (lst != null) + lst.IPtrMoved(iptr); + switch (prg[iptr]) + { + case '>': + ptr++; + if (lst != null) + lst.PointerMoved(ptr); + break; + case '<': + ptr--; + if (lst != null) + lst.PointerMoved(ptr); + break; + case '+': + mem[ptr]++; + if (lst != null) + lst.MemChanged(ptr, mem[ptr]); + break; + case '-': + mem[ptr]--; + if (lst != null) + lst.MemChanged(ptr, mem[ptr]); + break; + case '.': + str.WriteByte(mem[ptr]); + break; + case ',': + mem[ptr] = (byte)str.ReadByte(); + if (lst != null) + lst.MemChanged(ptr, mem[ptr]); + break; + case '[': + if (mem[ptr] == 0) + while (prg[iptr] != ']') + { + iptr++; + if (lst != null) + lst.IPtrMoved(iptr); + } + break; + case ']': + if (mem[ptr] != 0) + while (prg[iptr] != '[') + { + iptr--; + if (lst != null) + lst.IPtrMoved(iptr); + } + break; + } + } + } + public void Execute(string program) + { + lock (lck) + prg = program; + Execute(); + } + public void Reset() + { + lock (lck) + { + mem = new byte[30000]; + ptr = 0; + if (lst != null) + { + lst.MemReset(); + lst.PointerMoved(0); + } + } + } + } +} diff --git a/ShiftOS_TheReturn/ShiftOS.Engine.csproj b/ShiftOS_TheReturn/ShiftOS.Engine.csproj index 9c9ad0f..5d434fc 100644 --- a/ShiftOS_TheReturn/ShiftOS.Engine.csproj +++ b/ShiftOS_TheReturn/ShiftOS.Engine.csproj @@ -122,6 +122,7 @@ + -- cgit v1.2.3 From 0365b33993812361936e81104f793f58794fde8f Mon Sep 17 00:00:00 2001 From: RogueAI42 Date: Sat, 17 Jun 2017 19:45:21 +1000 Subject: Added exception handling to MindBlow --- ShiftOS.WinForms/Applications/MindBlow.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'ShiftOS.WinForms/Applications') diff --git a/ShiftOS.WinForms/Applications/MindBlow.cs b/ShiftOS.WinForms/Applications/MindBlow.cs index 22f5011..0f0df80 100644 --- a/ShiftOS.WinForms/Applications/MindBlow.cs +++ b/ShiftOS.WinForms/Applications/MindBlow.cs @@ -160,8 +160,15 @@ namespace ShiftOS.WinForms.Applications { new Thread(() => { - Interpreter.Reset(); - Interpreter.Execute(programinput.Text); + try + { + Interpreter.Reset(); + Interpreter.Execute(programinput.Text); + } + catch (Exception ex) + { + Desktop.InvokeOnWorkerThread(() => Infobox.Show("Program Error", "An error occurred while executing your program: " + ex.GetType().ToString())); + } }).Start(); } -- cgit v1.2.3 From 8862820bf36719d0e1a1defa19495dc2ccb4cfc1 Mon Sep 17 00:00:00 2001 From: RogueAI42 Date: Sun, 18 Jun 2017 00:46:38 +1000 Subject: AppVeyor --- ShiftOS.WinForms/Applications/MindBlow.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'ShiftOS.WinForms/Applications') diff --git a/ShiftOS.WinForms/Applications/MindBlow.cs b/ShiftOS.WinForms/Applications/MindBlow.cs index 0f0df80..b8e6609 100644 --- a/ShiftOS.WinForms/Applications/MindBlow.cs +++ b/ShiftOS.WinForms/Applications/MindBlow.cs @@ -27,15 +27,15 @@ namespace ShiftOS.WinForms.Applications kc = new KeysConverter(); box = mybox; } - public override bool CanRead => true; + public override bool CanRead { get { return true; } } - public override bool CanSeek => false; + public override bool CanSeek { get { return false; } } - public override bool CanWrite => true; + public override bool CanWrite { get { return true; } } - public override long Length => box.Text.Length; + public override long Length { get { return box.Text.Length; } } - public override long Position { get => Length; set => throw new NotImplementedException(); } + public override long Position { get { return Length; } set { throw new NotImplementedException(); } } public override void Flush() { -- cgit v1.2.3 From e3f9a6028b3774f7376617502e7f6016dc50dd0e Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 17 Jun 2017 14:45:42 -0400 Subject: Localize a LOT of the UI --- ShiftOS.WinForms/Applications/MindBlow.cs | 12 +- ShiftOS.WinForms/Applications/Pong.Designer.cs | 74 +++--- ShiftOS.WinForms/Applications/Pong.cs | 34 ++- ShiftOS.WinForms/Applications/Pong.resx | 7 - ShiftOS.WinForms/MainMenu/Loading.Designer.cs | 2 +- ShiftOS.WinForms/MainMenu/Loading.cs | 1 + ShiftOS.WinForms/MainMenu/MainMenu.Designer.cs | 62 ++--- ShiftOS.WinForms/MainMenu/MainMenu.cs | 47 +--- ShiftOS.WinForms/Resources/strings_en.txt | 354 +++++++++---------------- ShiftOS_TheReturn/Commands.cs | 263 ++++++------------ ShiftOS_TheReturn/SaveSystem.cs | 120 +++------ ShiftOS_TheReturn/UserManagementCommands.cs | 54 ++-- 12 files changed, 377 insertions(+), 653 deletions(-) (limited to 'ShiftOS.WinForms/Applications') diff --git a/ShiftOS.WinForms/Applications/MindBlow.cs b/ShiftOS.WinForms/Applications/MindBlow.cs index 0f0df80..7cd2a8f 100644 --- a/ShiftOS.WinForms/Applications/MindBlow.cs +++ b/ShiftOS.WinForms/Applications/MindBlow.cs @@ -35,7 +35,17 @@ namespace ShiftOS.WinForms.Applications public override long Length => box.Text.Length; - public override long Position { get => Length; set => throw new NotImplementedException(); } + public override long Position + { + get + { + return Length; + } + set + { + //nothing + } + } public override void Flush() { diff --git a/ShiftOS.WinForms/Applications/Pong.Designer.cs b/ShiftOS.WinForms/Applications/Pong.Designer.cs index aee599b..fd82735 100644 --- a/ShiftOS.WinForms/Applications/Pong.Designer.cs +++ b/ShiftOS.WinForms/Applications/Pong.Designer.cs @@ -28,18 +28,17 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Pong)); this.pnlcanvas = new System.Windows.Forms.Panel(); this.pnllevelwon = new System.Windows.Forms.Panel(); - this.lbltitle = new System.Windows.Forms.Label(); this.label1 = new System.Windows.Forms.Label(); this.panel1 = new System.Windows.Forms.Panel(); - this.btncashout = new System.Windows.Forms.Button(); this.button1 = new System.Windows.Forms.Button(); + this.btncashout = new System.Windows.Forms.Button(); + this.lbltitle = new System.Windows.Forms.Label(); this.pnlgamestart = new System.Windows.Forms.Panel(); this.label2 = new System.Windows.Forms.Label(); this.panel3 = new System.Windows.Forms.Panel(); - this.button2 = new System.Windows.Forms.Button(); + this.btnplay = new System.Windows.Forms.Button(); this.label3 = new System.Windows.Forms.Label(); this.pnllevelwon.SuspendLayout(); this.panel1.SuspendLayout(); @@ -68,17 +67,6 @@ this.pnllevelwon.TabIndex = 0; this.pnllevelwon.Visible = false; // - // lbltitle - // - this.lbltitle.Dock = System.Windows.Forms.DockStyle.Top; - this.lbltitle.Location = new System.Drawing.Point(0, 0); - this.lbltitle.Name = "lbltitle"; - this.lbltitle.Size = new System.Drawing.Size(301, 13); - this.lbltitle.TabIndex = 0; - this.lbltitle.Tag = "header2"; - this.lbltitle.Text = "You\'ve reached level 2!"; - this.lbltitle.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // // label1 // this.label1.Dock = System.Windows.Forms.DockStyle.Fill; @@ -86,8 +74,7 @@ this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(301, 139); this.label1.TabIndex = 1; - this.label1.Text = "You have survived this level of Pong. You now have a chance to cash out your Code" + - "points or play on for more."; + this.label1.Text = "{PONG_BEATLEVELDESC}"; this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // panel1 @@ -100,25 +87,36 @@ this.panel1.Size = new System.Drawing.Size(301, 32); this.panel1.TabIndex = 2; // + // button1 + // + this.button1.Location = new System.Drawing.Point(159, 6); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(93, 23); + this.button1.TabIndex = 1; + this.button1.Text = "{PONG_PLAYON}"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // // btncashout // this.btncashout.Location = new System.Drawing.Point(48, 6); this.btncashout.Name = "btncashout"; this.btncashout.Size = new System.Drawing.Size(93, 23); this.btncashout.TabIndex = 0; - this.btncashout.Text = "Cash out"; + this.btncashout.Text = "{PONG_CASHOUT}"; this.btncashout.UseVisualStyleBackColor = true; this.btncashout.Click += new System.EventHandler(this.btncashout_Click); // - // button1 + // lbltitle // - this.button1.Location = new System.Drawing.Point(159, 6); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(93, 23); - this.button1.TabIndex = 1; - this.button1.Text = "Play on"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); + this.lbltitle.Dock = System.Windows.Forms.DockStyle.Top; + this.lbltitle.Location = new System.Drawing.Point(0, 0); + this.lbltitle.Name = "lbltitle"; + this.lbltitle.Size = new System.Drawing.Size(301, 13); + this.lbltitle.TabIndex = 0; + this.lbltitle.Tag = "header2"; + this.lbltitle.Text = "You\'ve reached level 2!"; + this.lbltitle.TextAlign = System.Drawing.ContentAlignment.TopCenter; // // pnlgamestart // @@ -138,27 +136,27 @@ this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(301, 206); this.label2.TabIndex = 1; - this.label2.Text = resources.GetString("label2.Text"); + this.label2.Text = "{PONG_DESC}"; this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // panel3 // - this.panel3.Controls.Add(this.button2); + this.panel3.Controls.Add(this.btnplay); this.panel3.Dock = System.Windows.Forms.DockStyle.Bottom; this.panel3.Location = new System.Drawing.Point(0, 248); this.panel3.Name = "panel3"; this.panel3.Size = new System.Drawing.Size(301, 32); this.panel3.TabIndex = 2; // - // button2 + // btnplay // - this.button2.Location = new System.Drawing.Point(100, 6); - this.button2.Name = "button2"; - this.button2.Size = new System.Drawing.Size(116, 23); - this.button2.TabIndex = 1; - this.button2.Text = "Play some Pong!"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click); + this.btnplay.Location = new System.Drawing.Point(100, 6); + this.btnplay.Name = "btnplay"; + this.btnplay.Size = new System.Drawing.Size(116, 23); + this.btnplay.TabIndex = 1; + this.btnplay.Text = "{PONG_PLAY}"; + this.btnplay.UseVisualStyleBackColor = true; + this.btnplay.Click += new System.EventHandler(this.button2_Click); // // label3 // @@ -168,7 +166,7 @@ this.label3.Size = new System.Drawing.Size(301, 42); this.label3.TabIndex = 0; this.label3.Tag = "header2"; - this.label3.Text = "Welcome to Pong."; + this.label3.Text = "{PONG_WELCOME}"; this.label3.TextAlign = System.Drawing.ContentAlignment.TopCenter; // // Pong @@ -200,7 +198,7 @@ private System.Windows.Forms.Panel pnlgamestart; private System.Windows.Forms.Label label2; private System.Windows.Forms.Panel panel3; - private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button btnplay; private System.Windows.Forms.Label label3; } } diff --git a/ShiftOS.WinForms/Applications/Pong.cs b/ShiftOS.WinForms/Applications/Pong.cs index c260ae3..d8f93f7 100644 --- a/ShiftOS.WinForms/Applications/Pong.cs +++ b/ShiftOS.WinForms/Applications/Pong.cs @@ -223,7 +223,7 @@ namespace ShiftOS.WinForms.Applications pnlgamestart.Show(); pnlgamestart.BringToFront(); pnlgamestart.CenterParent(); - Infobox.Show("You lose.", "You lost the game! Guess you should've cashed out..."); + Infobox.Show("{TITLE_PONG_YOULOSE}", "{PROMPT_PONGLOST}"); doAi = false; doBallCalc = false; } @@ -237,7 +237,10 @@ namespace ShiftOS.WinForms.Applications pnllevelwon.CenterParent(); pnllevelwon.Show(); pnllevelwon.BringToFront(); - lbltitle.Text = "You've reached level " + level + "!"; + lbltitle.Text = Localization.Parse("{PONG_LEVELREACHED}", new Dictionary + { + ["%level"] = level.ToString() + }); lbltitle.Height = (int)CreateGraphics().MeasureString(lbltitle.Text, lbltitle.Font).Height; codepointsToEarn += CalculateAIBeatCP() * 2; speedFactor += speedFactor / level; @@ -251,8 +254,12 @@ namespace ShiftOS.WinForms.Applications public void Win() { - header = "You beat the AI! " + CalculateAIBeatCP() + " Codepoints!."; + header = Localization.Parse("{PONG_BEATAI}", new Dictionary + { + ["%amount"] = CalculateAIBeatCP().ToString() + }); InitializeCoordinates(); + counterTimer.Stop(); new System.Threading.Thread(() => { doBallCalc = false; @@ -265,6 +272,10 @@ namespace ShiftOS.WinForms.Applications doBallCalc = true; header = ""; counter = ""; + Desktop.InvokeOnWorkerThread(() => + { + counterTimer.Start(); + }); }).Start(); } @@ -322,7 +333,10 @@ namespace ShiftOS.WinForms.Applications //draw opponent e.Graphics.FillRectangle(new SolidBrush(pnlcanvas.ForeColor), new RectangleF((float)(pnlcanvas.Width - (paddleWidth*2)), (float)(opponentYLocal - (float)(paddleHeight / 2)), (float)paddleWidth, (float)paddleHeight)); - string cp_text = Localization.Parse("{CODEPOINTS}: " + codepointsToEarn); + string cp_text = Localization.Parse("{PONG_STATUSCP}", new Dictionary + { + ["%cp"] = codepointsToEarn.ToString() + }); var tSize = e.Graphics.MeasureString(cp_text, SkinEngine.LoadedSkin.Header3Font); @@ -346,7 +360,11 @@ namespace ShiftOS.WinForms.Applications ); e.Graphics.DrawString(header, SkinEngine.LoadedSkin.Header2Font, new SolidBrush(pnlcanvas.ForeColor), tLoc); - string l = Localization.Parse("{LEVEL}: " + level + " - " + secondsleft + " {SECONDS_LEFT}"); + string l = Localization.Parse("{PONG_STATUSLEVEL}", new Dictionary + { + ["%level"] = level.ToString(), + ["%time"] = secondsleft.ToString() + }); tSize = e.Graphics.MeasureString(l, SkinEngine.LoadedSkin.Header3Font); tLoc = new PointF((pnlcanvas.Width - (int)tSize.Width) / 2, @@ -412,7 +430,11 @@ namespace ShiftOS.WinForms.Applications SaveSystem.CurrentSave.Codepoints += (ulong)codepointsToEarn; level = 1; speedFactor = 0.0125; - Infobox.Show("Codepoints transferred.", "Pong has transferred " + codepointsToEarn + " Codepoints to your system."); + Infobox.Show("{TITLE_CODEPOINTSTRANSFERRED}", Localization.Parse("{PROMPT_CODEPOINTSTRANSFERRED}", new Dictionary + { + ["%transferrer"] = "Pong", + ["%amount"] = codepointsToEarn.ToString() + })); codepointsToEarn = 0; pnlgamestart.Show(); pnlgamestart.BringToFront(); diff --git a/ShiftOS.WinForms/Applications/Pong.resx b/ShiftOS.WinForms/Applications/Pong.resx index 685deff..1af7de1 100644 --- a/ShiftOS.WinForms/Applications/Pong.resx +++ b/ShiftOS.WinForms/Applications/Pong.resx @@ -117,11 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Pong is the modern-day recreation of the classic 70s game called, you guessed it, Pong. - -In Pong, you must try your best to keep the fast-moving ball from going past your side of the screen using your mouse to move your paddle in the way of the ball, while getting the ball to go past the opponent's paddle. - -Once you start Pong, you have 60 seconds to beat the opponent and survive as much as possible. The game will get faster as you play, and the more 60-second levels you play, the more Codepoints you'll earn. If you lose the level, you will start back at Level 1 with 0 Codepoints. At the end of the level, you may choose to cash out or play on. - \ No newline at end of file diff --git a/ShiftOS.WinForms/MainMenu/Loading.Designer.cs b/ShiftOS.WinForms/MainMenu/Loading.Designer.cs index 95619d9..5cf42d6 100644 --- a/ShiftOS.WinForms/MainMenu/Loading.Designer.cs +++ b/ShiftOS.WinForms/MainMenu/Loading.Designer.cs @@ -40,7 +40,7 @@ this.label.Name = "label"; this.label.Size = new System.Drawing.Size(284, 262); this.label.TabIndex = 0; - this.label.Text = "Loading..."; + this.label.Text = "{GEN_LOADING}"; this.label.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // Loading diff --git a/ShiftOS.WinForms/MainMenu/Loading.cs b/ShiftOS.WinForms/MainMenu/Loading.cs index 555f1d4..c1c0ba0 100644 --- a/ShiftOS.WinForms/MainMenu/Loading.cs +++ b/ShiftOS.WinForms/MainMenu/Loading.cs @@ -16,6 +16,7 @@ namespace ShiftOS.WinForms.MainMenu public Loading() { InitializeComponent(); + label.Text = Localization.Parse(label.Text); } private void Loading_FormShown(object sender, EventArgs e) diff --git a/ShiftOS.WinForms/MainMenu/MainMenu.Designer.cs b/ShiftOS.WinForms/MainMenu/MainMenu.Designer.cs index b716b4e..a9291d3 100644 --- a/ShiftOS.WinForms/MainMenu/MainMenu.Designer.cs +++ b/ShiftOS.WinForms/MainMenu/MainMenu.Designer.cs @@ -36,8 +36,6 @@ this.button5 = new System.Windows.Forms.Button(); this.lbticker = new System.Windows.Forms.Label(); this.pnloptions = new System.Windows.Forms.Panel(); - this.txtubase = new System.Windows.Forms.TextBox(); - this.label3 = new System.Windows.Forms.Label(); this.txtdsport = new System.Windows.Forms.TextBox(); this.label2 = new System.Windows.Forms.Label(); this.txtdsaddress = new System.Windows.Forms.TextBox(); @@ -81,7 +79,7 @@ this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(181, 23); this.button1.TabIndex = 0; - this.button1.Text = "Campaign"; + this.button1.Text = "{MAINMENU_CAMPAIGN}"; this.button1.UseVisualStyleBackColor = true; this.button1.Click += new System.EventHandler(this.button1_Click); // @@ -92,7 +90,7 @@ this.button2.Name = "button2"; this.button2.Size = new System.Drawing.Size(181, 23); this.button2.TabIndex = 1; - this.button2.Text = "Sandbox"; + this.button2.Text = "{MAINMENU_SANDBOX}"; this.button2.UseVisualStyleBackColor = true; this.button2.Click += new System.EventHandler(this.button2_Click); // @@ -103,7 +101,7 @@ this.button3.Name = "button3"; this.button3.Size = new System.Drawing.Size(181, 23); this.button3.TabIndex = 2; - this.button3.Text = "Settings"; + this.button3.Text = "{GEN_SETTINGS}"; this.button3.UseVisualStyleBackColor = true; this.button3.Click += new System.EventHandler(this.button3_Click); // @@ -114,7 +112,7 @@ this.button4.Name = "button4"; this.button4.Size = new System.Drawing.Size(181, 23); this.button4.TabIndex = 3; - this.button4.Text = "About"; + this.button4.Text = "{GEN_ABOUT}"; this.button4.UseVisualStyleBackColor = true; // // button5 @@ -124,7 +122,7 @@ this.button5.Name = "button5"; this.button5.Size = new System.Drawing.Size(181, 23); this.button5.TabIndex = 4; - this.button5.Text = "Exit"; + this.button5.Text = "{GEN_EXIT}"; this.button5.UseVisualStyleBackColor = true; this.button5.Click += new System.EventHandler(this.button5_Click); // @@ -140,8 +138,6 @@ // // pnloptions // - this.pnloptions.Controls.Add(this.txtubase); - this.pnloptions.Controls.Add(this.label3); this.pnloptions.Controls.Add(this.txtdsport); this.pnloptions.Controls.Add(this.label2); this.pnloptions.Controls.Add(this.txtdsaddress); @@ -149,25 +145,9 @@ this.pnloptions.Controls.Add(this.flowLayoutPanel1); this.pnloptions.Location = new System.Drawing.Point(49, 26); this.pnloptions.Name = "pnloptions"; - this.pnloptions.Size = new System.Drawing.Size(432, 290); + this.pnloptions.Size = new System.Drawing.Size(432, 167); this.pnloptions.TabIndex = 2; // - // txtubase - // - this.txtubase.Location = new System.Drawing.Point(146, 133); - this.txtubase.Name = "txtubase"; - this.txtubase.Size = new System.Drawing.Size(225, 20); - this.txtubase.TabIndex = 6; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(22, 136); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(106, 13); - this.label3.TabIndex = 5; - this.label3.Text = "Unite API base URL:"; - // // txtdsport // this.txtdsport.Location = new System.Drawing.Point(146, 85); @@ -180,9 +160,9 @@ this.label2.AutoSize = true; this.label2.Location = new System.Drawing.Point(22, 88); this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(99, 13); + this.label2.Size = new System.Drawing.Size(125, 13); this.label2.TabIndex = 3; - this.label2.Text = "Digital Society Port:"; + this.label2.Text = "{MAINMENU_DSPORT}"; // // txtdsaddress // @@ -196,9 +176,9 @@ this.label1.AutoSize = true; this.label1.Location = new System.Drawing.Point(22, 57); this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(118, 13); + this.label1.Size = new System.Drawing.Size(147, 13); this.label1.TabIndex = 1; - this.label1.Text = "Digital Society Address:"; + this.label1.Text = "{MAINMENU_DSADDRESS}"; // // flowLayoutPanel1 // @@ -208,7 +188,7 @@ this.flowLayoutPanel1.Controls.Add(this.btnsave); this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Bottom; this.flowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.RightToLeft; - this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 259); + this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 136); this.flowLayoutPanel1.Name = "flowLayoutPanel1"; this.flowLayoutPanel1.Size = new System.Drawing.Size(432, 31); this.flowLayoutPanel1.TabIndex = 0; @@ -218,11 +198,11 @@ this.opt_btncancel.AutoSize = true; this.opt_btncancel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.opt_btncancel.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.opt_btncancel.Location = new System.Drawing.Point(377, 3); + this.opt_btncancel.Location = new System.Drawing.Point(331, 3); this.opt_btncancel.Name = "opt_btncancel"; - this.opt_btncancel.Size = new System.Drawing.Size(52, 25); + this.opt_btncancel.Size = new System.Drawing.Size(98, 25); this.opt_btncancel.TabIndex = 0; - this.opt_btncancel.Text = "Cancel"; + this.opt_btncancel.Text = "{GEN_CANCEL}"; this.opt_btncancel.UseVisualStyleBackColor = true; this.opt_btncancel.Click += new System.EventHandler(this.opt_btncancel_Click); // @@ -231,11 +211,11 @@ this.btnsave.AutoSize = true; this.btnsave.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.btnsave.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnsave.Location = new System.Drawing.Point(327, 3); + this.btnsave.Location = new System.Drawing.Point(241, 3); this.btnsave.Name = "btnsave"; - this.btnsave.Size = new System.Drawing.Size(44, 25); + this.btnsave.Size = new System.Drawing.Size(84, 25); this.btnsave.TabIndex = 1; - this.btnsave.Text = "Save"; + this.btnsave.Text = "{GEN_SAVE}"; this.btnsave.UseVisualStyleBackColor = true; this.btnsave.Click += new System.EventHandler(this.btnsave_Click); // @@ -259,7 +239,7 @@ this.btnnewgame.Name = "btnnewgame"; this.btnnewgame.Size = new System.Drawing.Size(181, 23); this.btnnewgame.TabIndex = 0; - this.btnnewgame.Text = "New Game"; + this.btnnewgame.Text = "{MAINMENU_NEWGAME}"; this.btnnewgame.UseVisualStyleBackColor = true; this.btnnewgame.Click += new System.EventHandler(this.btnnewgame_Click); // @@ -270,7 +250,7 @@ this.btncontinue.Name = "btncontinue"; this.btncontinue.Size = new System.Drawing.Size(181, 23); this.btncontinue.TabIndex = 1; - this.btncontinue.Text = "Continue"; + this.btncontinue.Text = "{GEN_CONTINUE}"; this.btncontinue.UseVisualStyleBackColor = true; this.btncontinue.Click += new System.EventHandler(this.btncontinue_Click); // @@ -281,7 +261,7 @@ this.button10.Name = "button10"; this.button10.Size = new System.Drawing.Size(181, 23); this.button10.TabIndex = 4; - this.button10.Text = "Back"; + this.button10.Text = "{GEN_BACK}"; this.button10.UseVisualStyleBackColor = true; this.button10.Click += new System.EventHandler(this.button10_Click); // @@ -357,8 +337,6 @@ private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; private System.Windows.Forms.Button opt_btncancel; private System.Windows.Forms.Button btnsave; - private System.Windows.Forms.TextBox txtubase; - private System.Windows.Forms.Label label3; private System.Windows.Forms.TextBox txtdsport; private System.Windows.Forms.Label label2; private System.Windows.Forms.TextBox txtdsaddress; diff --git a/ShiftOS.WinForms/MainMenu/MainMenu.cs b/ShiftOS.WinForms/MainMenu/MainMenu.cs index 1936fec..7ace42a 100644 --- a/ShiftOS.WinForms/MainMenu/MainMenu.cs +++ b/ShiftOS.WinForms/MainMenu/MainMenu.cs @@ -116,29 +116,7 @@ namespace ShiftOS.WinForms.MainMenu private string GetTickerMessage() { - switch (rnd.Next(0, 10)) - { - case 0: - return "Did you know that you can skin this very menu? Just goes to show how much you can shift it your way."; - case 1: - return "Want to pick up a few skins or mods from the community? Head on over to http://getshiftos.ml/Skins!"; - case 2: - return "Sandbox mode is a special version of ShiftOS that allows you to use the operating system without having to deal with Codepoints, the Shiftorium or having to play through the storyline. Handy..."; - case 3: - return "ArtPad not good enough? You can use an external image editor to create ShiftOS skin textures. Just save your files to the Shared Directory and they'll be imported into ShiftOS on the 1:/ drive."; - case 4: - return "Terminal too weird for ya? You can use the Format Editor to generate your own Terminal command parser. No coding knowledge needed!"; - case 5: - return "Contests are a good way to earn heaps of Codepoints. Head on over to http://getshiftos.ml/Contests for info on current community contests."; - case 6: - return "There's no bugs in this game... But if you find some, please submit them to http://getshiftos.ml/Bugs."; - case 7: - return "SHIFTOS - PROPERTY OF MICHAEL VANOVERBEEK. FOR INTERNAL USE ONLY. Build number = sos_tr_133764 [Just kidding. ShiftOS is open-source. Find the code at http://github.com/shiftos-game/ShiftOS!]"; - case 8: - return "Hold your Codepoints against the wall... when they take everything away. Hold your Codepoints against the wall..."; - default: - return "Good God. We don't know what to put here."; - } + return Localization.Parse("{MAINMENU_TIPTEXT_" + rnd.Next(10) + "}"); } private void button1_Click(object sender, EventArgs e) @@ -175,7 +153,6 @@ namespace ShiftOS.WinForms.MainMenu { var conf = ShiftOS.Objects.UserConfig.Get(); - txtubase.Text = conf.UniteUrl; txtdsaddress.Text = conf.DigitalSocietyAddress; txtdsport.Text = conf.DigitalSocietyPort.ToString(); @@ -201,32 +178,14 @@ namespace ShiftOS.WinForms.MainMenu int p = 0; - if(int.TryParse(txtdsport.Text, out p) == false) + if(int.TryParse(txtdsport.Text, out p) == false || p < 0 || p > 65535) { - Infobox.Show("Invalid port number", "The Digital Society Port must be a valid whole number between 0 and 65535."); + Infobox.Show("{TITLE_INVALIDPORT}", "{PROMPT_INVALIDPORT}"); return; } - else - { - if(p < 0 || p > 65535) - { - Infobox.Show("Invalid port number", "The Digital Society Port must be a valid whole number between 0 and 65535."); - return; - } - } conf.DigitalSocietyPort = p; - string unite = txtubase.Text; - if (unite.EndsWith("/")) - { - int len = unite.Length; - int index = len - 1; - int end = 1; - unite = unite.Remove(index, end); - } - conf.UniteUrl = unite; - System.IO.File.WriteAllText("servers.json", Newtonsoft.Json.JsonConvert.SerializeObject(conf, Newtonsoft.Json.Formatting.Indented)); HideOptions(); diff --git a/ShiftOS.WinForms/Resources/strings_en.txt b/ShiftOS.WinForms/Resources/strings_en.txt index f63f0e0..a3b407b 100644 --- a/ShiftOS.WinForms/Resources/strings_en.txt +++ b/ShiftOS.WinForms/Resources/strings_en.txt @@ -1,244 +1,134 @@ +/* + * ShiftOS English Language Pack + * + * This is the default language pack distributed within the game. + */ + { - "{SUBMIT}":"Submit", + //General strings + //These strings can be used anywhere in the UI where language context isn't necessary. + "{GEN_PROGRAMS}": "Programs", + "{GEN_COMMANDS}": "Commands", + "{GEN_OBJECTIVES}": "Objectives", + "{GEN_CURRENTPROCESSES}": "Current processes", + "{GEN_WELCOME}": "Welcome to ShiftOS.", + "{GEN_SYSTEMNAME}": "System name", + "{GEN_PASSWORD}": "Password", + "{GEN_LPROMPT}": "%sysname login: ", + "{GEN_SYSTEMSTATUS}": "System status", + "{GEN_USERS}": "Users", + "{GEN_CODEPOINTS}": "Codepoints", + "{GEN_LOADING}": "Loading...", + "{GEN_SAVE}": "Save", + "{GEN_CANCEL}": "Cancel", + "{GEN_CONTINUE}": "Continue", + "{GEN_BACK}": "Back", + "{GEN_YES}": "Yes", + "{GEN_NO}": "No", + "{GEN_OK}": "OK", + "{GEN_SETTINGS}": "Settings", + "{GEN_ABOUT}": "About", + "{GEN_EXIT}": "Exit", -"{TERMINAL_TUTORIAL_1}":"Welcome to the ShiftOS terminal. This is where you will spend the bulk of your time within ShiftOS. - -A brief rundown of how to use the terminal is as follows. You can use the 'sos.help' command to show a list of all commands. Simply type it in and strike to view all commands. - -Commands can be sent arguments by specifying a key-value pair inside a {} block at the end of the command. For example: - -some.command{print:\"hello\"} -math.add{op1:1,op2:2} -set.value{key:\"somekey\", value:true} - -You have been given 50 Codepoints - use your knowledge to use them to buy the MUD Fundamentals Shiftorium Upgrade using the terminal. -To buy MUD Fundamentals, type shiftorium.buy{upgrade:\"mud_fundamentals\"} This is also true for any other thing you want to buy from the shiftorium, just replace mud_fundementals with any other upgrade id. -", + //General errors + //Syntax errors, command errors, you name it.. + "{ERR_BADBOOL}": "The value you entered must be either true or false.", + "{ERR_BADPERCENT}": "The value you entered must be a value from 0 to 100.", + "{ERR_NOLANG}": "The language you entered does not exist!", + "{ERR_NOTENOUGHCODEPOINTS}": "You don't have enough Codepoints to do that.", + "{ERR_NOUPGRADE}": "We couldn't find that upgrade.", + "{ERR_GENERAL}": "An error has occurred performing this operation.", + "{ERR_EMPTYCATEGORY}": "The category you specified either has no items in it, or was not found.", + "{ERR_NOMOREUPGRADES}": "There are no more Shiftorium Upgrades to show!", + "{ERR_BADWINID}": "You must specify a value between 0 and %max.", + "{ERR_USERFOUND}": "That user already exists.", + "{ERR_NOUSER}": "That user was not found.", + "{ERR_REMOVEYOU}": "You can't remove your own user account.", + "{ERR_BADACL}": "You must specify a value between 0 (guest) and 3 (root) for a user permission.", + "{ERR_ACLHIGHERVALUE}": "You can't set a user's permissions to a value higher than your own.", + "{ERR_HIGHERPERMS}": "That user has more rights than you!", + "{ERR_PASSWD_MISMATCH}": "Passwords don't match!", + //Command results + "{RES_ACLUPDATED}": "User permissions updated.", + "{RES_LANGUAGE_CHANGED}": "System language changed successfully.", + "{RES_NOOBJECTIVES}": "No objectives to display! Check back for more.", + "{RES_UPGRADEINSTALLED}": "Upgrade installed!", + "{RES_WINDOWCLOSED}": "The window was closed.", + "{RES_CREATINGUSER}": "Creating new user with username %name.", + "{RES_REMOVINGUSER}": "Removing user with username %name from your system.", + "{RES_DENIED}": "Access denied.", + "{RES_GRANTED}": "Access granted.", + "{RES_PASSWD_SET}": "Password set successfully.", - "{TERMINAL_TUTORIAL_2}":"You successfully passed the test. ShiftOS will now start installing it's base functionality.", - "{ABOUT}":"About", - "{HIGH_SCORES}":"High scores", - "{PONG_VIEW_HIGHSCORES}":"See the high scores", - "{PONG_HIGHSCORE_EXP}":"Want to see what other users have gotten?", - "{START_SYSTEM_SCAN}":"Start system-wide scan", - "{SCAN_HOME}":"Scan 0:/home", - "{SCAN_SYSTEM}":"Scan 0:/system", - "{RESULTS}":"Results", - "{VIRUSSCANNER_ABOUT}":"Welcome to the ShiftOS virus scanner. - -The ShiftOS virus scanner is a utility that allows you to scan any file on your system and see if it is a virus. If a virus is detected, you have the option to delete it after the scan by clicking 'Remove'. + //Shiftorium messages. + "{SHFM_UPGRADE}": "%id - %cost Codepoints", + "{SHFM_CATEGORY}": " - %name: %available upgrades left.", + "{SHFM_QUERYERROR}": "Shiftorium Query Error", + "{SHFM_NOUPGRADES}": "No upgrades!", -If a system file is deleted by the virus scanner, it will be replaced.", - "{PLAY}":"Play", - "{APPLICATIONS}":"Applications", - "{TERMINAL}":"Terminal", - "{PONG}":"Pong", - "{CODEPOINTS}":"Codepoints", - "{SHIFTORIUM}":"Shiftorium", - "{HACK}":"Hack", - "{SHIFTER}":"Shifter", - "{MUD_SHORT}":"MUD", - "{MUD}":"Multi-user domain", - "{DESKTOP}":"Desktop", - "{WINDOW}":"Window", - "{WINDOW_MANAGER}":"Window manager", - "{UPGRADE}":"Upgrade", - "{UPGRADES}":"Upgrades", - "{APPLICATION}":"Application", - "{SCRIPT}":"Script", - "{ERROR}":"Error", - "{SCRIPTS}":"Scripts", - "{NULL}":"null", - "{ID}":"ID Num", - "{SYSTEM_INITIATED}":"System initiated", - "{PASSWORD}":"Password", - "{CRACK}":"Crack", - "{ARTPAD_UNDO_ERROR}":"Artpad - Undo error", - "{ARTPAD_NEXT_STEP_WILL_KILL_CANVAS_JUST_FLIPPING_CLICK_NEW}":"You cannot undo the previous action as it would delete the canvas. If you'd like to clear the canvas, click New.", - "{ARTPAD_REDO_ERROR}":"Artpad - Redo error", - "{ARTPAD_NOTHING_TO_REDO}": "Artpad has nothing to redo! Remember that when you undo and then draw on the canvas, all redo history is wiped.", - "{ARTPAD_MAGNIFIER_ERROR}": "Artpad - Magnifier error", - "{ARTPAD_MAGNIFICATION_ERROR_EXP_2}": "Artpad cannot zoom out any further as the canvas would disappear!", - "{ARTPAD_MAGNIFICATION_ERROR_EXP}": "Artpad cannot zoom any further into the canvas. Well, it can, it just doesn't want to.", - "{SHUTDOWN}":"Shutdown", - "{CONNECTING_TO_MUD}":"Connecting to the multi-user domain...", - "{READING_FS}":"Reading filesystem...", - "{INIT_KERNEL}":"Initiating kernel...", - "{START_DESKTOP}":"Starting desktop session...", - "{DONE}": "done", - "{READING_CONFIG}":"Reading configuration...", - "{ID_TAKEN}":"ID has been taken! Use chat.join to join this chat.", - "{CHAT_NOT_FOUND_OR_TOO_MANY_MEMBERS}":"This chat either doesn't exist or has too many users in it.", - "{CHAT_NOT_FOUND_OR_NOT_IN_CHAT}":"You are not currently in this chat.", - "{CHAT_PLEASE_PROVIDE_VALID_CHANNEL_DATA}":"You did not specify valid chat metadata! Please do chat.create{id:\"your_id\", name:\"Your chat\", topic:\"Your chat's topic\"}.", - "{UPGRADE_PROGRESS}":"Upgrade progress", - "{WIN_PROVIDEID}":"Please provide a valid Window ID from win.list.", - "{WIN_CANTCLOSETERMINAL}":"You cannot close this terminal.", - "{WELCOME_TO_SHIFTORIUM}":"Welcome to the Shiftorium", - "{SUCCESSFULLY_CREATED_CHAT}":"Successfully created chat. Use chat.join{id:\"chat_id_here\"} to join it.", - "{CHAT_HAS_JOINED}":"has joined the chat.", - "{HAS_LEFT_CHAT}":"has left the chat.", - "{SHIFTORIUM_EXP}":"The Shiftorium is your one-stop-shop for ShiftOS system enhancements, upgrades and applications. - - You can buy upgrades in the Shiftorium using a currency called Codepoints, which you can earn by doing various tasks within ShiftOS, such as playing Pong, stealing them from other users, and finding ways to make your own. It's up to you how you get your Codepoints. - - You can then use them to buy new applications, features, enhancements and upgrades for ShiftOS that make the user experience a lot better. Be careful though, buying too many system enhancements without buying new ways of earning Codepoints first can leave you in the dust and unable to upgrade the system. - - Anyways, feel free to browse from our wonderful selection! You can see a list of available upgrades on the left, as well as a progress bar showing how much you've upgraded the system compared to how much you still can.", - "{PONG_WELCOME}":"Welcome to Pong.", - "{PONG_DESC}":"Pong is an arcade game where your goal is to get the ball past the opponent paddle while keeping it from getting past yours. - - In ShiftOS, Pong is modified - you only have one chance, the game is divided into 60 second levels, and you can earn Codepoints by surviving a level, and beating the opponent.", - "{NO_APP_TO_OPEN}":"No app found for this file!", - "{NO_APP_TO_OPEN_EXP}":"File Skimmer could not find an application that can open this file.", - "{CLIENT_DIAGNOSTICS}":"Client diagnostics", - "{GUID}":"GUID", - "{CLIENT_DATA}":"Client data", - "{CLOSE}":"Close", - "{LOAD_DEFAULT}":"Load default", - "{IMPORT}":"Import", - "{EXPORT}":"Export", - "{APPLY}":"Apply", - "{TEMPLATE}":"Template", - "{H_VEL}":"Horizontal velocity", - "{V_VEL}":"Vertical velocity", - "{LEVEL}":"Level", - "{UPGRADE_DEVELOPMENT}":"Development Upgrade", - "{UPGRADE_DEVELOPMENT_DESCRIPTION}":"Development Upgrade Don't Buy", - "{SECONDS_LEFT}":"seconds left", - "{CASH_OUT_WITH_CODEPOINTS}":"Cash out with your codepoints", - "{PONG_PLAY_ON_FOR_MORE}":"Play on for more!", - "{YOU_REACHED_LEVEL}":"You've reached level", - "{PONG_BEAT_AI_REWARD}":"Reward for beating AI (CP)", - "{PONG_BEAT_AI_REWARD_SECONDARY}":"Codepoints for beating AI:", - "{CODEPOINTS_FOR_BEATING_LEVEL}":"Codepoints for beating level", - "{YOU_WON}":"You won", - "{YOU_LOSE}":"You lose", - "{TRY_AGAIN}":"Try again", - "{CODEPOINTS_SHORT}":"CP", - "{TERMINAL_FORMATTING_DRIVE}":"Formatting drive... %percent %", - "{INSTALLING_SHIFTOS}":"Installing ShiftOS on %domain.", - "{YOU_MISSED_OUT_ON}":"You missed out on", - "{BUT_YOU_GAINED}":"But you gained", - "{PONG_PLAYON_DESC}":"Or do you want to try your luck on the next level to increase your reward?", - "{PONG_CASHOUT_DESC}":"Would you like the end the game now and cash out with your reward?", - "{INITIAL_H_VEL}":"Initial H Vel", - "{INITIAL_V_VEL}":"Initial V Vel", - "{INC_H_VEL}":"Increment H Vel", - "{INC_V_VEL}":"Increment V Vel", - "{MULTIPLAYER_ONLY}":"Program not compatible with single-user domain.", - "{MULTIPLAYER_ONLY_EXP}":"This program cannot run within a single-user domain. You must be within a multi-user domain to use this program.", - "{SHIFTER_SKIN_APPLIED}":"Shifter - Settings applied!", - "{YOU_HAVE_EARNED}":"You have earned", - "{CREATING_PATH}":"Creating directory: %path", - "{CREATING_FILE}":"Creating file: %path", - "{SHIFTORIUM_HELP_DESCRIPTION}": "Help Descriptions", - "{CREATING_USER}":"Creating user %username", - "{SEPERATOR}":" - ", - "{NAMESPACE}":"Namespace ", - "{COMMAND}": "| Command ", - "{SHIFTOS_HAS_BEEN_INSTALLED}":"ShiftOS has been installed on %domain.", - "{WARN}": "WARN: ", - "{ERROR}": "!ERROR! ", - "{OBSOLETE_CHEATS_FREECP}": "The %ns.%cmd command is obsolete and has been replaced with %newcommand", - "{REBOOTING_SYSTEM}":"Rebooting system in %i seconds...", - "{ERROR_ARGUMENT_REQUIRED}": "You must supply an %argument value", - "{ERROR_ARGUMENT_REQUIRED_NO_USAGE}": "You are missing some arguments.", - "{GENERATING_PATHS}":"Generating paths...", - "{ERROR_COMMAND_WRONG}": "Check your syntax and try again", - "{LOGIN_EXP}": "Login as the admin of the multi user domain.", - - "{USAGE}": "Usage: ", - - "{NAMESPACE_SOS_DESCRIPTION}":"The ShiftOS Namespace", - "{COMMAND_HELP_USAGE}":"%ns.%cmd{[topic:]}", - "{COMMAND_HELP_DESCRIPTION}":"Lists all commands", - "{COMMAND_SOS_SHUTDOWN_USAGE}":"%ns.%cmd", - "{COMMAND_SOS_SHUTDOWN_DESCRIPTION}":"Saves and shuts down ShiftOS", - "{COMMAND_SOS_STATUS_USAGE}":"%ns.%cmd", - "{COMMAND_SOS_STATUS_DESCRIPTION}":"Displays how many codepoints you have", - "{COMMAND_SOS_LANG_USAGE}":"%ns.%cmd{language:\"deutsch\"}", - "{COMMAND_SOS_LANG_DESCRIPTION}":"Change the language.", - "{COMMAND_DEV_CRASH_USAGE}":"%ns.%cmd", - "{COMMAND_DEV_CRASH_DESCRIPTION}":"Shuts down ShiftOS forcefully", - "{COMMAND_DEV_UNLOCKEVERYTHING_USAGE}":"%ns.%cmd", - "{COMMAND_DEV_UNLOCKEVERYTHING_DESCRIPTION}":"Unlocks all shiftorium upgrades", - "{COMMAND_DEV_FREECP_USAGE}":"%ns.%cmd{amount:1000}", - "{COMMAND_DEV_FREECP_DESCRIPTION}":"Gives [amount] codepoints", - "{COMMAND_TRM_CLEAR_USAGE}":"%ns.%cmd", - "{COMMAND_TRM_CLEAR_DESCRIPTION}":"Clears the terminal", - "{COMMAND_SHIFTORIUM_BUY_USAGE}":"%ns.%cmd{upgrade:}", - "{COMMAND_SHIFTORIUM_BUY_DESCRIPTION}":"Buys [upgrade]", - "{COMMAND_SHIFTORIUM_LIST_USAGE}":"%ns.%cmd", - "{COMMAND_SHIFTORIUM_LIST_DESCRIPTION}":"Lists the upgrades that you can get", - "{COMMAND_SHIFTORIUM_INFO_USAGE}":"%ns.%cmd{upgrade:}", - "{COMMAND_SHIFTORIUM_INFO_DESCRIPTION}":"Gives a description about an upgrade", - "{COMMAND_DEV_MULTARG_USAGE}":"%ns.%cmd{id:,name:,type:}", - "{COMMAND_DEV_MULTARG_DESCRIPTION}":"A command which requiers multiple arguments", + //Command data strings + "{COM_STATUS}": "ShiftOS build %version\r\n\r\nCodepoints: %cp \r\n Upgrades: %installed installed, %available available\r\n\r\n", + "{COM_UPGRADEINFO}": "%category: %name - %cost Codepoints.\r\n\r\n%description\r\n\r\nUpgrade ID: %id", - "{ERR_COMMAND_NOT_FOUND}":"Command not found.", - "{ERROR_EXCEPTION_THROWN_IN_METHOD}":"An error occurred within the command. Error details:", - "{MUD_ERROR}":"MUD error", - - "{PROLOGUE_NO_USER_DETECTED}":"No user detected. Please enter a username.", - "{PROLOGUE_BADUSER}":"Invalid username detected.", - "{PROLOGUE_NOSPACES}":"Usernames must not contain spaces.", - "{PROLOGUE_PLEASE_ENTER_USERNAME}":"Please enter a valid username. Blank usernames are not permitted.", + //Terminal Command Descriptions + //These strings show up when running the "commands" command in your Terminal. + "{DESC_CLEAR}": "Clears the screen of the current Terminal.", + "{DESC_SETSFXENABLED}": "Sets whether or not system sounds are enabled.", + "{DESC_SETMUSICENABLED}": "Sets whether or not music is enabled in ShiftOS.", + "{DESC_SETVOLUME}": "Sets the volume of sounds and music if they're enabled.", + "{DESC_SHUTDOWN}": "Safely shuts down your computer.", + "{DESC_LANG}": "Change the system language of ShiftOS.", + "{DESC_COMMANDS}": "Shows a list of Terminal commands inside ShiftOS.", + "{DESC_HELP}": "Type this command to get general help with using ShiftOS.", + "{DESC_SAVE}": "Saves the in-memory configuration of ShiftOS.", + "{DESC_STATUS}": "Shows basic status information such as how many Codepoints you have and your current objective.", + "{DESC_BUY}": "Buys the specified Shiftorium upgrade.", + "{DESC_BULKBUY}": "Buys the specified Shiftorium upgrades in bulk.", + "{DESC_UPGRADEINFO}": "Shows information about the specified Shiftorium upgrade.", + "{DESC_UPGRADECATEGORIES}": "Shows all the available Shiftorium categories and how many upgrades are available in them.", + "{DESC_UPGRADES}": "Shows a list of available Shiftorium upgrades.", + "{DESC_PROCESSES}": "Shows a list of currently running app processes.", + "{DESC_PROGRAMS}": "Shows a list of programs you can run.", + "{DESC_CLOSE}": "Closes the specified application window.", + "{DESC_ADDUSER}": "Add a user to your system.", + "{DESC_REMOVEUSER}": "Remove a user from your computer.", + "{DESC_SETUSERPERMISSIONS}": "Set the permissions of a user.", + "{DESC_USERS}": "Lists all users on your computer.", + "{DESC_SU}": "Change your identity to another user's.", + "{DESC_PASSWD}": "Change your user account password.", - "{SHIFTORIUM_NOTENOUGHCP}":"Not enough codepoints: ", - "{SHIFTORIUM_TRANSFERRED_FROM}":"Received Codepoints from", - "{SHIFTORIUM_TRANSFERRED_TO}":"Transferred Codepoints to", + //Window titles. + "{TITLE_PONG_YOULOSE}": "You lose", + "{TITLE_CODEPOINTSTRANSFERRED}": "Codepoints transferred.", + "{TITLE_INVALIDPORT}": "Invalid port number.", - "{SE_SAVING}":"Saving game to disk", - "{SE_TIPOFADVICE}":"Tip of advice: ShiftOS will always save your game after big events or when you shut down the operating system. You can also invoke a save yourself using 'sos.save'.", + //Infobox prompt messages + "{PROMPT_PONGLOST}": "You lost this game of Pong. Guess you should've cashed out...", + "{PROMPT_CODEPOINTSTRANSFERRED}": "%transferrer has transferred %amount Codepoints to your system.", + "{PROMPT_INVALIDPORT}": "The Digital Society Port must be a valid whole number between 0 and 65535.", - "{STORY_WELCOME}":"Welcome to ShiftOS", - "{STORY_SENTIENCEUNKNOWN}":"Your sentience is currently unknown. Please strike the Enter key to prove you are alive.", + //Pong + "{PONG_LEVELREACHED}": "You've reached level %level!", + "{PONG_BEATAI}": "You've beaten the opponent! %amount Codepoints!", + "{PONG_STATUSCP}": "Codepoints: %cp", + "{PONG_STATUSLEVEL}": "Level %level. %time seconds to go!", + "{PONG_PLAY}": "Play some Pong!", + "{PONG_DESC}": "Pong is the modern-day recreation of the classic 70s game called, you guessed it, Pong.\r\n\r\nIn Pong, you must try your best to keep the fast-moving ball from going past your side of the screen using your mouse to move your paddle in the way of the ball, while getting the ball to go past the opponent's paddle.\r\n\r\nOnce you start Pong, you have 60 seconds to beat the opponent and survive as much as possible. The game will get faster as you play, and the more 60-second levels you play, the more Codepoints you'll earn. If you lose the level, you will start back at Level 1 with 0 Codepoints. At the end of the level, you may choose to cash out or play on.", + "{PONG_WELCOME}": "Welcome to Pong.", + "{PONG_BEATLEVELDESC}": "You have survived this level of Pong. You now have a chance to cash out your Codepoints or play on for more.", + "{PONG_PLAYON}": "Play on", + "{PONG_CASHOUT}": "Cash out", - "{SENTIENCE_BASIC}":"Sentience: Basic - User can respond to basic instructions.", - "{SENTIENCE_BASICPLUS}":"Sentience: Basic+ - User can invoke commands within the ecosystem.", - "{SENTIENCE_POSSIBLEHUMAN}":"Sentience: Possible human - user can perform actions based on a choice.", - "{SENTIENCE_POSSIBLEHUMANPLUS}":"Sentience: Possible human+ - user can infer, and can pass arguments.", - "{SENTIENCE_HUMAN}":"Sentience: Human. Thanks for your patience.", - "{SENTIENCE_INVALIDPASSWORD}":"The password you entered is invalid.", - - "{ARGS_PASSWORD}":"password", + //Main menu tip messages - "{SHIFTOS_PLUS_MOTTO}":"ShiftOS, Shift it YOUR way.", - "{SHIFTOS_VERSION_INFO}":"ShiftOS Version: ", - "{USER_NAME}":"Username", - "{DISCOURSE_INTEGRATION}":"Discourse Integration", - "{SYSTEM_NAME}":"System Name", - "{USER_INFO}":"User Information", - "{SELECT_LANG}":"Select language", - "{WELCOME_TO_SHIFTOS}":"Welcome to ShiftOS Alpha!", - "{CREATE}":"Create", - "{INSTALL}":"Install", - "{ALIAS}":"Alias:", - "{OBSOLETE_SYS_SHUTDOWN}":"sys.shutdown is obsolete", - "{PY_EXCEPTION}":"There was an error running python code.", - "{LUA_ERROR}":"There was an error running lua code.", - "{LANGUAGE_CHANGED}":"The language has been changed. Please restart ShiftOS for changes to take full effect.", + //Main menu - Settings + "{MAINMENU_DSADDRESS}": "Digital Society address: ", + "{MAINMENU_DSPORT": "Digital Society port: ", - "{TERMINAL_NAME}":"Terminal", - "{ARTPAD_NAME}":"Artpad", - "{PONG_NAME}":"Pong", - "{WAV_PLAYER_NAME}":"WAV Player", - "{SHIFTORIUM_NAME}":"Shiftorium", - "{TEXTPAD_NAME}":"TextPad", - "{VIRUS_SCANNER_NAME}":"Virus Scanner", - "{SKIN_LOADER_NAME}":"Skin Loader", - "{SHIFTER_NAME}":"Shifter", - "{NAME_CHANGER_NAME}":"Name Changer", - "{MUD_PASSWORD_CRACKER_NAME}":"Multi-User Domain Password Cracker v1.0", - "{MUD_CONTROL_CENTRE_NAME}":"MUD Control Centre", - "{MUD_AUTHENTICATOR_NAME}":"Multi-User Domain Admin Panel", - "{GRAPHIC_PICKER_NAME}":"Graphic Picker", - "{FILE_SKIMMER_NAME}":"File Skimmer", - "{FILE_DIALOG_NAME}":"File Dialog", - "{DIALOG_NAME}":"Dialog", - "{COLOR_PICKER_NAME}":"Color Picker", - "{CHAT_NAME}":"Chat", - "{NOTIFICATIONS}":"Notifications", -} + //Main Menu - General text + "{MAINMENU_TITLE}": "Main menu", + "{MAINMENU_CAMPAIGN}": "Campaign", + "{MAINMENU_SANDBOX}": "Sandbox", + "{MAINMENU_NEWGAME}": "New game", +} \ No newline at end of file diff --git a/ShiftOS_TheReturn/Commands.cs b/ShiftOS_TheReturn/Commands.cs index c2e414d..3a2b79a 100644 --- a/ShiftOS_TheReturn/Commands.cs +++ b/ShiftOS_TheReturn/Commands.cs @@ -38,118 +38,26 @@ using Newtonsoft.Json; using System.IO.Compression; using ShiftOS.Objects; -using Discoursistency.Base.Models.Authentication; using ShiftOS.Engine.Scripting; using ShiftOS.Objects.ShiftFS; namespace ShiftOS.Engine { - [RequiresUpgrade("desktop;wm_free_placement")] - public static class InfoboxDebugCommands - { - - [RequiresArgument("title")] - [RequiresArgument("msg")] - [Command("show")] - public static bool ShowInfo(Dictionary args) - { - Desktop.InvokeOnWorkerThread(new Action(() => - { - Infobox.Show(args["title"].ToString(), args["msg"].ToString()); - })); - return true; - } - - [RequiresArgument("title")] - [RequiresArgument("msg")] - [Command("yesno")] - public static bool ShowYesNo(Dictionary args) - { - bool forwarding = TerminalBackend.IsForwardingConsoleWrites; - var fGuid = TerminalBackend.ForwardGUID; - Action callback = (result) => - { - TerminalBackend.IsForwardingConsoleWrites = forwarding; - TerminalBackend.ForwardGUID = (forwarding == true) ? fGuid : null; - string resultFriendly = (result == true) ? "yes" : "no"; - Console.WriteLine($"{SaveSystem.CurrentUser.Username} says {resultFriendly}."); - TerminalBackend.IsForwardingConsoleWrites = false; - }; - Desktop.InvokeOnWorkerThread(new Action(() => - { - Infobox.PromptYesNo(args["title"].ToString(), args["msg"].ToString(), callback); - - })); - return true; - } - - [RequiresArgument("title")] - [RequiresArgument("msg")] - [Command("text")] - public static bool ShowText(Dictionary args) - { - bool forwarding = TerminalBackend.IsForwardingConsoleWrites; - var fGuid = TerminalBackend.ForwardGUID; - Action callback = (result) => - { - TerminalBackend.IsForwardingConsoleWrites = forwarding; - TerminalBackend.ForwardGUID = (forwarding == true) ? fGuid : null; - Console.WriteLine($"{SaveSystem.CurrentUser.Username} says \"{result}\"."); - TerminalBackend.IsForwardingConsoleWrites = false; - }; - Desktop.InvokeOnWorkerThread(new Action(() => - { - Infobox.PromptText(args["title"].ToString(), args["msg"].ToString(), callback); - })); - return true; - } - - } - - public static class AudioCommands - { - [Command("setvol", description = "Set the volume of the system audio to anywhere between 0 and 100.")] - [RequiresArgument("value")] - [RequiresUpgrade("audio_volume")] - public static bool SetVolume(Dictionary args) - { - int val = Convert.ToInt32(args["value"].ToString()); - float volume = (val / 100F); - AudioManager.SetVolume(volume); - return true; - } - [RequiresUpgrade("audio_volume")] - [Command("mute", description = "Sets the volume of the system audio to 0")] - public static bool MuteAudio() - { - AudioManager.SetVolume(0); - return true; - } - } - [TutorialLock] public static class TerminalCommands { - [Command("clear")] + [Command("clear", description = "{DESC_CLEAR}")] public static bool Clear() { AppearanceManager.ConsoleOut.Clear(); return true; } - - [Command("echo")] - [RequiresArgument("text")] - public static bool Echo(Dictionary args) - { - Console.WriteLine(args["text"]); - return true; - } } public static class ShiftOSCommands { - [Command("setsfxenabled", description = "Set whether or not sound effects are enabled in the system.")] + [Command("setsfxenabled", description = "{DESC_SETSFXENABLED}")] [RequiresArgument("value")] public static bool SetSfxEnabled(Dictionary args) { @@ -161,14 +69,14 @@ namespace ShiftOS.Engine } catch { - Console.WriteLine("Error: Value must be either true or false."); + Console.WriteLine("{ERR_BADBOOL}"); } return true; } - [Command("setmusicenabled", description = "Set whether or not music is enabled in the system.")] + [Command("setmusicenabled", description = "{DESC_SETMUSICENABLED}")] [RequiresArgument("value")] public static bool SetMusicEnabled(Dictionary args) { @@ -180,14 +88,14 @@ namespace ShiftOS.Engine } catch { - Console.WriteLine("Error: Value must be either true or false."); + Console.WriteLine("{ERR_BADBOOL}"); } return true; } - [Command("setsfxvolume", description ="Set the system sound volume to a value between 1 and 100.")] + [Command("setvolume", description ="{DESC_SETVOLUME}")] [RequiresArgument("value")] public static bool SetSfxVolume(Dictionary args) { @@ -199,13 +107,13 @@ namespace ShiftOS.Engine } else { - Console.WriteLine("Volume must be between 0 and 100!"); + Console.WriteLine("{ERR_BADPERCENT}"); } return true; } [RemoteLock] - [Command("shutdown")] + [Command("shutdown", description = "{DESC_SHUTDOWN}")] public static bool Shutdown() { TerminalBackend.InvokeCommand("sos.save"); @@ -213,7 +121,7 @@ namespace ShiftOS.Engine return true; } - [Command("lang", "{COMMAND_SOS_LANG_USAGE}", "{COMMAND_SOS_LANG_DESCRIPTION}")] + [Command("lang", description = "{DESC_LANG}")] [RequiresArgument("language")] public static bool SetLanguage(Dictionary userArgs) { @@ -221,20 +129,17 @@ namespace ShiftOS.Engine { string lang = ""; - if (userArgs.ContainsKey("language")) - lang = (string)userArgs["language"]; - else - throw new Exception("You must specify a valid 'language' value."); - + lang = (string)userArgs["language"]; + if (Localization.GetAllLanguages().Contains(lang)) { SaveSystem.CurrentSave.Language = lang; SaveSystem.SaveGame(); - Console.WriteLine("{LANGUAGE_CHANGED}"); + Console.WriteLine("{RES_LANGUAGE_CHANGED}"); return true; } - throw new Exception($"Couldn't find language with ID: {lang}"); + throw new Exception("{ERR_NOLANG}"); } catch { @@ -242,11 +147,11 @@ namespace ShiftOS.Engine } } - [Command("commands", "", "{COMMAND_COMMANDS_DESCRIPTION}")] + [Command("commands", "", "{DESC_COMMANDS}")] public static bool Commands() { var sb = new StringBuilder(); - sb.AppendLine("Commands"); + sb.AppendLine("{GEN_COMMANDS}"); sb.AppendLine("================="); sb.AppendLine(); //print all unique namespaces. @@ -254,7 +159,7 @@ namespace ShiftOS.Engine { sb.Append(n.CommandInfo.name); if (!string.IsNullOrWhiteSpace(n.CommandInfo.description)) - if (Shiftorium.UpgradeInstalled("help_descriptions")) + if (Shiftorium.UpgradeInstalled("help_description")) sb.Append(" - " + n.CommandInfo.description); sb.AppendLine(); } @@ -264,7 +169,7 @@ namespace ShiftOS.Engine return true; } - [Command("help", description = "Type this command to list all the things you can do in ShiftOS.")] + [Command("help", description = "{DESC_HELP}")] public static bool Help() { Commands(); @@ -274,7 +179,7 @@ namespace ShiftOS.Engine [MultiplayerOnly] - [Command("save")] + [Command("save", description = "{DESC_SAVE}")] public static bool Save() { SaveSystem.SaveGame(); @@ -282,19 +187,23 @@ namespace ShiftOS.Engine } [MultiplayerOnly] - [Command("status")] + [Command("status", description = "{DESC_STATUS}")] public static bool Status() { - string status = $@"ShiftOS version {Assembly.GetExecutingAssembly().GetName().Version.ToString()} + string version = Assembly.GetExecutingAssembly().GetName().Version.ToString(); -Codepoints: {SaveSystem.CurrentSave.Codepoints} -Upgrades: {SaveSystem.CurrentSave.CountUpgrades()} installed, - {Shiftorium.GetAvailable().Length} available + string cp = SaveSystem.CurrentSave.Codepoints.ToString(); + string installed = SaveSystem.CurrentSave.CountUpgrades().ToString(); + string available = Shiftorium.GetAvailable().Length.ToString(); -"; - - Console.WriteLine(status); - Console.WriteLine("Objectives:"); + Console.WriteLine(Localization.Parse("{COM_STATUS}", new Dictionary + { + ["%cp"] = cp, + ["%version"] = version, + ["%installed"] = installed, + ["%available"] = available + })); + Console.WriteLine("{GEN_OBJECTIVES}"); try { if (Story.CurrentObjectives.Count > 0) @@ -309,12 +218,12 @@ Upgrades: {SaveSystem.CurrentSave.CountUpgrades()} installed, } else { - Console.WriteLine(" - No objectives are running. Check back later!"); + Console.WriteLine("{RES_NOOBJECTIVES}"); } } catch { - Console.WriteLine(" - No objectives are running. Check back later!"); + Console.WriteLine("{RES_NOOBJECTIVES}"); } return true; } @@ -323,7 +232,7 @@ Upgrades: {SaveSystem.CurrentSave.CountUpgrades()} installed, [MultiplayerOnly] public static class ShiftoriumCommands { - [Command("buy")] + [Command("buy", description = "{DESC_BUY}")] [RequiresArgument("upgrade")] public static bool BuyUpgrade(Dictionary userArgs) { @@ -331,30 +240,31 @@ Upgrades: {SaveSystem.CurrentSave.CountUpgrades()} installed, { string upgrade = ""; - if (userArgs.ContainsKey("upgrade")) - upgrade = (string)userArgs["upgrade"]; - else - throw new Exception("You must specify a valid 'upgrade' value."); + upgrade = (string)userArgs["upgrade"]; - foreach (var upg in Shiftorium.GetAvailable()) + var upg = Shiftorium.GetAvailable().FirstOrDefault(x => x.ID == upgrade); + if(upg != null) { - if (upg.ID == upgrade) - { - Shiftorium.Buy(upgrade, upg.Cost); - return true; - } + if (Shiftorium.Buy(upg.ID, upg.Cost) == true) + Console.WriteLine("{RES_UPGRADEINSTALLED}"); + else + Console.WriteLine("{ERR_NOTENOUGHCODEPOINTS}"); + } + else + { + Console.WriteLine("{ERR_NOUPGRADE}"); } - throw new Exception($"Couldn't find upgrade with ID: {upgrade}"); } catch { - return false; + Console.WriteLine("{ERR_GENERAL}"); } + return true; } [RequiresUpgrade("shiftorium_bulk_buy")] - [Command("bulkbuy")] + [Command("bulkbuy", description = "{DESC_BULKBUY}")] [RequiresArgument("upgrades")] public static bool BuyBulk(Dictionary args) { @@ -368,15 +278,11 @@ Upgrades: {SaveSystem.CurrentSave.CountUpgrades()} installed, BuyUpgrade(dict); } } - else - { - throw new Exception("Please specify a list of upgrades in the 'upgrades' argument. Each upgrade is separated by a comma."); - } return true; } - [Command("upgradeinfo", description ="Shows information about a specific upgrade.")] + [Command("upgradeinfo", description ="{DESC_UPGRADEINFO}")] [RequiresArgument("upgrade")] public static bool ViewInfo(Dictionary userArgs) { @@ -384,29 +290,26 @@ Upgrades: {SaveSystem.CurrentSave.CountUpgrades()} installed, { string upgrade = ""; - if (userArgs.ContainsKey("upgrade")) - upgrade = (string)userArgs["upgrade"]; - else - throw new Exception("You must specify a valid 'upgrade' value."); + upgrade = (string)userArgs["upgrade"]; foreach (var upg in Shiftorium.GetDefaults()) { if (upg.ID == upgrade) { - Console.WriteLine($@"Information for {upgrade}: - -{upg.Category}: {upg.Name} - {upg.Cost} Codepoints ------------------------------------------------------- + Console.WriteLine(Localization.Parse("{COM_UPGRADEINFO}", new Dictionary + { + ["%id"] = upg.ID, + ["%category"] = upg.Category, + ["%name"] = upg.Name, + ["%cost"] = upg.Cost.ToString(), + ["%description"] = upg.Description + })); -{upg.Description} - -To buy this upgrade, run: -shiftorium.buy{{upgrade:""{upg.ID}""}}"); return true; } } - throw new Exception($"Couldn't find upgrade with ID: {upgrade}"); + throw new Exception("{ERR_NOUPGRADE}"); } catch { @@ -414,17 +317,21 @@ shiftorium.buy{{upgrade:""{upg.ID}""}}"); } } - [Command("upgradecategories", description = "Shows all available Shiftorium upgrade categories, and how many upgrades are available in them.")] + [Command("upgradecategories", description = "{DESC_UPGRADECATEGORIES}")] public static bool ListCategories() { foreach(var cat in Shiftorium.GetCategories()) { - Console.WriteLine($"{cat} - {Shiftorium.GetAvailable().Where(x=>x.Category==cat).Count()} upgrades"); + Console.WriteLine(Localization.Parse("{SHFM_CATEGORY}", new Dictionary + { + ["%name"] = cat, + ["%available"] = Shiftorium.GetAvailable().Where(x=>x.Category==cat).Count().ToString() + })); } return true; } - [Command("upgrades", description ="Lists all available Shiftorium upgrades.")] + [Command("upgrades", description ="{DESC_UPGRADES}")] public static bool ListAll(Dictionary args) { try @@ -449,11 +356,11 @@ shiftorium.buy{{upgrade:""{upg.ID}""}}"); { ConsoleEx.Bold = true; ConsoleEx.ForegroundColor = ConsoleColor.Red; - Console.WriteLine("Shiftorium Query Error"); + Console.WriteLine("{SHFM_QUERYERROR}"); Console.WriteLine(); ConsoleEx.Bold = false; ConsoleEx.ForegroundColor = ConsoleColor.Gray; - Console.WriteLine("Either there are no upgrades in the category \"" + cat + "\" or the category was not found."); + Console.WriteLine("{ERR_EMPTYCATEGORY}"); return true; } upglist = Shiftorium.GetAvailable().Where(x => x.Category == cat); @@ -464,11 +371,11 @@ shiftorium.buy{{upgrade:""{upg.ID}""}}"); { ConsoleEx.Bold = true; ConsoleEx.ForegroundColor = ConsoleColor.Red; - Console.WriteLine("No upgrades available!"); + Console.WriteLine("{SHFM_NOUPGRADES}"); Console.WriteLine(); ConsoleEx.Bold = false; ConsoleEx.ForegroundColor = ConsoleColor.Gray; - Console.WriteLine("You have installed all available upgrades for your system. Please check back later for more."); + Console.WriteLine("{ERR_NOMOREUPGRADES}"); return true; } @@ -482,11 +389,13 @@ shiftorium.buy{{upgrade:""{upg.ID}""}}"); upgrades.Add(upg.ID, upg.Cost); } - Console.WriteLine("ID".PadRight((maxLength + 5) - 2) + "Cost (Codepoints)"); - foreach (var upg in upgrades) { - Console.WriteLine(upg.Key.PadRight((maxLength + 5) - upg.Key.Length) + " " + upg.Value.ToString()); + Console.WriteLine(Localization.Parse("{SHFM_UPGRADE}", new Dictionary + { + ["%id"] = upg.Key, + ["%cost"] = upg.Value.ToString() + })); } return true; } @@ -500,14 +409,11 @@ shiftorium.buy{{upgrade:""{upg.ID}""}}"); public static class WindowCommands { - - - [RemoteLock] - [Command("processes", description = "Shows all running applications.")] + [Command("processes", description = "{DESC_PROCESSES}")] public static bool List() { - Console.WriteLine("Window ID\tName"); + Console.WriteLine("{GEN_CURRENTPROCESSES}"); foreach (var app in AppearanceManager.OpenForms) { //Windows are displayed the order in which they were opened. @@ -516,17 +422,17 @@ shiftorium.buy{{upgrade:""{upg.ID}""}}"); return true; } - [Command("programs", description = "Lists all the programs installed in ShiftOS.")] + [Command("programs", description = "{DESC_PROGRAMS}")] public static bool Programs() { - Console.WriteLine("Programs:"); + Console.WriteLine("{GEN_PROGRAMS}"); Console.WriteLine("==============="); Console.WriteLine(); foreach(var cmd in TerminalBackend.Commands.Where(x=>x is TerminalBackend.WinOpenCommand && Shiftorium.UpgradeInstalled(x.Dependencies)).OrderBy(x => x.CommandInfo.name)) { Console.Write(" - " + cmd.CommandInfo.name); if (!string.IsNullOrWhiteSpace(cmd.CommandInfo.description)) - if (Shiftorium.UpgradeInstalled("help_descriptions")) + if (Shiftorium.UpgradeInstalled("help_description")) Console.Write(": " + cmd.CommandInfo.description); Console.WriteLine(); } @@ -534,7 +440,7 @@ shiftorium.buy{{upgrade:""{upg.ID}""}}"); } [RemoteLock] - [Command("close", usage = "{win:integer32}", description ="Closes the specified window.")] + [Command("close", usage = "{win:integer32}", description ="{DESC_CLOSE}")] [RequiresArgument("win")] [RequiresUpgrade("close_command")] public static bool CloseWindow(Dictionary args) @@ -545,11 +451,14 @@ shiftorium.buy{{upgrade:""{upg.ID}""}}"); string err = null; if (winNum < 0 || winNum >= AppearanceManager.OpenForms.Count) - err = "The window number must be between 0 and " + (AppearanceManager.OpenForms.Count - 1).ToString() + "."; + err = Localization.Parse("{ERR_BADWINID}", new Dictionary + { + ["%max"] = (AppearanceManager.OpenForms.Count - 1).ToString() + }); if (string.IsNullOrEmpty(err)) { - Console.WriteLine($"Closing {AppearanceManager.OpenForms[winNum].Text}..."); + Console.WriteLine("{RES_WINDOWCLOSED}"); AppearanceManager.Close(AppearanceManager.OpenForms[winNum].ParentWindow); } else diff --git a/ShiftOS_TheReturn/SaveSystem.cs b/ShiftOS_TheReturn/SaveSystem.cs index 97cc26e..306a49b 100644 --- a/ShiftOS_TheReturn/SaveSystem.cs +++ b/ShiftOS_TheReturn/SaveSystem.cs @@ -126,9 +126,9 @@ namespace ShiftOS.Engine } Thread.Sleep(350); - Console.WriteLine("ShiftKernel v0.4.2"); + Console.WriteLine("{MISC_KERNELVERSION}"); Thread.Sleep(50); - Console.WriteLine("(MIT) DevX 2017, Very Little Rights Reserved"); + Console.WriteLine("Copyright (c) 2018 DevX. Licensed under MIT."); Console.WriteLine(""); Console.WriteLine("THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR"); Console.WriteLine("IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,"); @@ -139,39 +139,20 @@ namespace ShiftOS.Engine Console.WriteLine("SOFTWARE."); Console.WriteLine(""); Thread.Sleep(250); - Console.WriteLine("[init] Kernel boot complete."); - Console.WriteLine("[sfs] Loading SFS driver v3"); + Console.WriteLine("{MISC_KERNELBOOTED}"); + Console.WriteLine("{MISC_SHIFTFSDRV}"); Thread.Sleep(350); - Console.WriteLine("[sfs] 4096 blocks read."); - if (loadingJoke1 == 0) - Console.WriteLine("[sos] Getting good and ready..."); - if (loadingJoke1 == 1) - Console.WriteLine("[sos] Shifting the OS..."); - if (loadingJoke1 == 2) - Console.WriteLine("[sos] Placing things everywhere..."); - if (loadingJoke1 == 3) - Console.WriteLine("[sos] Making an an errors..."); - if (loadingJoke1 == 4) - Console.WriteLine("[sos] Testing to see if this OS is indeed on..."); - if (loadingJoke1 == 5) - Console.WriteLine("[sos] Calming user..."); - if (loadingJoke1 == 6) - Console.WriteLine("[sos] Cleaning room..."); - if (loadingJoke1 == 7) - Console.WriteLine("[sos] Checking for piracy..."); - if (loadingJoke1 == 8) - Console.WriteLine("[sos] Getting Jim that important office memo..."); - if (loadingJoke1 == 9) - Console.WriteLine("[sos] Using imagination..."); + Console.WriteLine("{MISC_SHIFTFSBLOCKSREAD}"); + Console.WriteLine("{MISC_LOADINGMSG1_" + loadingJoke1 + "}"); Thread.Sleep(500); - Console.WriteLine("[simpl-conf] Reading configuration files (global-3.conf)"); + Console.WriteLine("{MISC_LOADINGCONFIG}"); Thread.Sleep(30); - Console.WriteLine("[termdb] Building command database from filesystem..."); + Console.WriteLine("{MISC_BUILDINGCMDS}"); TerminalBackend.PopulateTerminalCommands(); if (IsSandbox == false) { - Console.WriteLine("[inetd] Connecting to network..."); + Console.WriteLine("{MISC_CONNECTINGTONETWORK}"); Ready = false; @@ -192,28 +173,9 @@ namespace ShiftOS.Engine { //Connection successful! Stop waiting! guidReceived = true; - Console.WriteLine("[inetd] Connection successful."); + Console.WriteLine("{INIT_CONNECTIONSUCCESSFUL}"); Thread.Sleep(100); - if (loadingJoke2 == 0) - Console.WriteLine("[sos] Running final checks (gotta be sure!)..."); - if (loadingJoke2 == 1) - Console.WriteLine("[sos] Fixing the time because we think we got it wrong..."); - if (loadingJoke2 == 2) - Console.WriteLine("[sos] Fun Fact: there is a 12% chance you will read this..."); - if (loadingJoke2 == 3) - Console.WriteLine("[sos] Fixing sloppy code..."); - if (loadingJoke2 == 4) - Console.WriteLine("[sos] Welcoming new users..."); - if (loadingJoke2 == 5) - Console.WriteLine("[sos] Taking inspiration from GMod..."); - if (loadingJoke2 == 6) - Console.WriteLine("[sos] Getting help..."); - if (loadingJoke2 == 7) - Console.WriteLine("[sos] I'm very clevery guy..."); - if (loadingJoke2 == 8) - Console.WriteLine("[sos] Waiting a bit..."); - if (loadingJoke2 == 9) - Console.WriteLine("[sos] Do a digital dancing..."); + Console.WriteLine("{MISC_LOADINGMSG2_" + loadingJoke2 + "}"); Thread.Sleep(500); }; @@ -227,12 +189,12 @@ namespace ShiftOS.Engine { Thread.Sleep(10); } - Console.WriteLine("[inetd] DHCP GUID recieved, finished setup"); + Console.WriteLine("{MISC_DHCPHANDSHAKEFINISHED}"); FinishBootstrap(); } else { - Console.WriteLine("[inetd] No suitable network interface card found, skipping network connection."); + Console.WriteLine("{MISC_NONETWORK}"); FinishBootstrap(); } } @@ -259,7 +221,7 @@ namespace ShiftOS.Engine } else { - Console.WriteLine("[inetd] Sandbox mode initiating..."); + Console.WriteLine("{MISC_SANDBOXMODE}"); CurrentSave = new Save { IsSandbox = true, @@ -328,8 +290,6 @@ namespace ShiftOS.Engine /// private static void FinishBootstrap() { - KernelWatchdog.Log("mud_handshake", "handshake successful: kernel watchdog access code is \"" + ServerManager.thisGuid.ToString() + "\""); - ServerMessageReceived savehandshake = null; savehandshake = (msg) => @@ -343,7 +303,7 @@ namespace ShiftOS.Engine } catch { - Console.WriteLine("[system] [SEVERE] Cannot parse configuration file."); + Console.WriteLine("{ENGINE_CANNOTLOADSAVE}"); oobe.PromptForLogin(); } } @@ -373,7 +333,7 @@ namespace ShiftOS.Engine Thread.Sleep(75); Thread.Sleep(50); - Console.WriteLine("[usr-man] Accepting logins on local tty 1."); + Console.WriteLine("{MISC_ACCEPTINGLOGINS}"); Sysname: bool waitingForNewSysName = false; @@ -381,16 +341,16 @@ namespace ShiftOS.Engine if (string.IsNullOrWhiteSpace(CurrentSave.SystemName)) { - Infobox.PromptText("Enter a system name", "Your system does not have a name. All systems within the digital society must have a name. Please enter one.", (name) => + Infobox.PromptText("{TITLE_ENTERSYSNAME}", "{PROMPT_ENTERSYSNAME}", (name) => { if (string.IsNullOrWhiteSpace(name)) - Infobox.Show("Invalid name", "Please enter a valid name.", () => + Infobox.Show("{TITLE_INVALIDNAME}", "{PROMPT_INVALIDNAME}.", () => { gobacktosysname = true; waitingForNewSysName = false; }); else if (name.Length < 5) - Infobox.Show("Value too small.", "Your system name must have at least 5 characters in it.", () => + Infobox.Show("{TITLE_VALUESMALL}", "{PROMPT_SMALLSYSNAME}", () => { gobacktosysname = true; waitingForNewSysName = false; @@ -398,11 +358,6 @@ namespace ShiftOS.Engine else { CurrentSave.SystemName = name; - if (!string.IsNullOrWhiteSpace(CurrentSave.UniteAuthToken)) - { - var unite = new Unite.UniteClient("http://getshiftos.ml", CurrentSave.UniteAuthToken); - unite.SetSysName(name); - } SaveSystem.SaveGame(); gobacktosysname = false; waitingForNewSysName = false; @@ -429,18 +384,18 @@ namespace ShiftOS.Engine `-:/++++::.` .+ydNMMMMMNNMMMMMNhs/. /yNMMmy+:-` `````.-/ohNMMms- - `oNMMh/.`:oydmNMMMMNmhs+- .+dMMm+` Welcome to ShiftOS. + `oNMMh/.`:oydmNMMMMNmhs+- .+dMMm+` {{GEN_WELCOME}} `oMMmo``+dMMMMMMMMMMMMMMMMMNh/`.sNMN+ - :NMN+ -yMMMMMMMNdhyssyyhdmNMMMMNs``sMMd. SYSTEM STATUS: + :NMN+ -yMMMMMMMNdhyssyyhdmNMMMMNs``sMMd. {{GEN_SYSTEMSTATUS}} oMMd.`sMMMMMMd+. `/MMMMN+ -mMN: ---------------------- oMMh .mMMMMMM/ `-::::-.` :MMMMMMh`.mMM: - :MMd .NMMMMMMs .dMMMMMMMMMNddMMMMMMMd`.NMN. Codepoints: {SaveSystem.CurrentSave.Codepoints} - mMM. dMMMMMMMo -mMMMMMMMMMMMMMMMMMMMMs /MMy Upgrades: {SaveSystem.CurrentSave.CountUpgrades()} installed - :MMh :MMMMMMMMm` .+shmMMMMMMMMMMMMMMMN` NMN` {Shiftorium.GetAvailable().Count()} available - oMM+ sMMMMMMMMMN+` `-/smMMMMMMMMMMM: hMM: Filesystems: {Utils.Mounts.Count} filesystems mounted in memory. + :MMd .NMMMMMMs .dMMMMMMMMMNddMMMMMMMd`.NMN. {{GEN_CODEPOINTS}}: {SaveSystem.CurrentSave.Codepoints} + mMM. dMMMMMMMo -mMMMMMMMMMMMMMMMMMMMMs /MMy + :MMh :MMMMMMMMm` .+shmMMMMMMMMMMMMMMMN` NMN` + oMM+ sMMMMMMMMMN+` `-/smMMMMMMMMMMM: hMM: sMM+ sMMMMMMMMMMMMds/-` .sMMMMMMMMM/ yMM/ - +MMs +MMMMMMMMMMMMMMMMMmhs:` +MMMMMMMM- dMM- System name: {CurrentSave.SystemName.ToUpper()} - .MMm `NMMMMMMMMMMMMMMMMMMMMMo `NMMMMMMd .MMN Users: {Users.Count()} found. + +MMs +MMMMMMMMMMMMMMMMMmhs:` +MMMMMMMM- dMM- {{GEN_SYSTEMNAME}}: {CurrentSave.SystemName.ToUpper()} + .MMm `NMMMMMMMMMMMMMMMMMMMMMo `NMMMMMMd .MMN {{GEN_USERS}}: {Users.Count()}. hMM+ +MMMMMMmsdNMMMMMMMMMMN/ -MMMMMMN- yMM+ `NMN- oMMMMMd `-/+osso+- .mMMMMMN: +MMd -NMN: /NMMMm` :yMMMMMMm- oMMd` @@ -460,7 +415,7 @@ namespace ShiftOS.Engine Password = "", Permissions = UserPermissions.Root }); - Console.WriteLine("[usr-man] WARN: No users found. Creating new user with username \"root\", with no password."); + Console.WriteLine("{MISC_NOUSERS}"); } TerminalBackend.InStory = false; @@ -492,18 +447,21 @@ namespace ShiftOS.Engine int progress = 0; bool goback = false; TextSentEventHandler ev = null; + string loginstr = Localization.Parse("{GEN_LPROMPT}", new Dictionary + { + ["%sysname"] = CurrentSave.SystemName + }); ev = (text) => { if (progress == 0) { - string loginstr = CurrentSave.SystemName + " login: "; string getuser = text.Remove(0, loginstr.Length); if (!string.IsNullOrWhiteSpace(getuser)) { if (CurrentSave.Users.FirstOrDefault(x => x.Username == getuser) == null) { Console.WriteLine(); - Console.WriteLine("User not found."); + Console.WriteLine("{ERR_NOUSER}"); goback = true; progress++; TerminalBackend.TextSent -= ev; @@ -515,7 +473,7 @@ namespace ShiftOS.Engine else { Console.WriteLine(); - Console.WriteLine("Username not provided."); + Console.WriteLine("{ERR_NOUSER}"); TerminalBackend.TextSent -= ev; goback = true; progress++; @@ -523,20 +481,20 @@ namespace ShiftOS.Engine } else if (progress == 1) { - string passwordstr = "password: "; + string passwordstr = Localization.Parse("{GEN_PASSWORD}: "); string getpass = text.Remove(0, passwordstr.Length); var user = CurrentSave.Users.FirstOrDefault(x => x.Username == username); if (user.Password == getpass) { Console.WriteLine(); - Console.WriteLine("Welcome to ShiftOS."); + Console.WriteLine("{GEN_WELCOME}"); CurrentUser = user; progress++; } else { Console.WriteLine(); - Console.WriteLine("Access denied."); + Console.WriteLine("{RES_DENIED}"); goback = true; progress++; } @@ -545,7 +503,7 @@ namespace ShiftOS.Engine }; TerminalBackend.TextSent += ev; Console.WriteLine(); - Console.Write(CurrentSave.SystemName + " login: "); + Console.Write(loginstr); ConsoleEx.Flush(); while (progress == 0) { @@ -554,7 +512,7 @@ namespace ShiftOS.Engine if (goback) goto Login; Console.WriteLine(); - Console.Write("password: "); + Console.Write("{GEN_PASSWORD}: "); ConsoleEx.Flush(); while (progress == 1) Thread.Sleep(10); diff --git a/ShiftOS_TheReturn/UserManagementCommands.cs b/ShiftOS_TheReturn/UserManagementCommands.cs index cac535b..7936820 100644 --- a/ShiftOS_TheReturn/UserManagementCommands.cs +++ b/ShiftOS_TheReturn/UserManagementCommands.cs @@ -19,14 +19,14 @@ namespace ShiftOS.Engine /// /// Command arguments. /// Command result. - [Command("add", description = "Add a user to the system.", usage ="name:")] + [Command("adduser", description = "{DESC_ADDUSER}")] [RequiresArgument("name")] public static bool AddUser(Dictionary args) { string name = args["name"].ToString(); - if(SaveSystem.CurrentSave.Users.FirstOrDefault(x=>x.Username==name) != null) + if (SaveSystem.CurrentSave.Users.FirstOrDefault(x => x.Username == name) != null) { - Console.WriteLine("Error: User already exists."); + Console.WriteLine("{ERR_USERFOUND}"); return true; } @@ -37,7 +37,10 @@ namespace ShiftOS.Engine Permissions = UserPermissions.User }; SaveSystem.CurrentSave.Users.Add(user); - Console.WriteLine($"Creating new user \"{name}\" with no password and User permissions."); + Console.WriteLine(Localization.Parse("{RES_CREATINGUSER}", new Dictionary + { + { "%name", name } + })); SaveSystem.SaveGame(); return true; } @@ -48,25 +51,28 @@ namespace ShiftOS.Engine /// Command arguments. /// Command result. - [Command("remove", description = "Remove a user from the system.", usage = "name:")] + [Command("removeuser", description = "{DESC_REMOVEUSER}")] [RequiresArgument("name")] public static bool RemoveUser(Dictionary args) { string name = args["name"].ToString(); if (SaveSystem.CurrentSave.Users.FirstOrDefault(x => x.Username == name) == null) { - Console.WriteLine("Error: User doesn't exist."); + Console.WriteLine("{ERR_NOUSER}"); return true; } var user = SaveSystem.CurrentSave.Users.FirstOrDefault(x => x.Username == name); - if(user.Username != SaveSystem.CurrentUser.Username) + if (user.Username != SaveSystem.CurrentUser.Username) { - Console.WriteLine("Error: Cannot remove yourself."); + Console.WriteLine("{ERR_REMOVEYOU}"); return true; } SaveSystem.CurrentSave.Users.Remove(user); - Console.WriteLine($"Removing user \"{name}\" from system..."); + Console.WriteLine(Localization.Parse("{RES_REMOVINGUSER}", new Dictionary + { + ["%name"] = name + })); SaveSystem.SaveGame(); return true; } @@ -79,7 +85,7 @@ namespace ShiftOS.Engine /// Command arguments. /// Command result. - [Command("set_acl")] + [Command("setuserpermissions", description = "{DESC_SETUSERPERMISSIONS}")] [RequiresArgument("user")] [RequiresArgument("val")] public static bool SetUserPermission(Dictionary args) @@ -92,13 +98,13 @@ namespace ShiftOS.Engine } catch { - Console.WriteLine("Error: Permission value must be an integer."); + Console.WriteLine("{ERR_BADACL}"); return true; } if(SaveSystem.CurrentSave.Users.FirstOrDefault(x=>x.Username==username) == null) { - Console.WriteLine("Error: User not found."); + Console.WriteLine("{ERR_NOUSER}"); return true; } @@ -119,26 +125,26 @@ namespace ShiftOS.Engine uperm = UserPermissions.Root; break; default: - Console.WriteLine("Permission value must be between 0 and 4."); + Console.WriteLine("{ERR_BADACL}"); return true; } //Permissions are backwards... oops... if(uperm < SaveSystem.CurrentUser.Permissions) { - Console.WriteLine("Error: Cannot set user permissions to values greater than your own!"); + Console.WriteLine("{ERR_ACLHIGHERVALUE}"); return true; } var oldperm = SaveSystem.Users.FirstOrDefault(x => x.Username == username).Permissions; if (SaveSystem.CurrentUser.Permissions > oldperm) { - Console.WriteLine("Error: Can't set the permission of this user. They have more rights than you."); + Console.WriteLine("{ERR_HIGHERPERMS}"); return true; } SaveSystem.CurrentSave.Users.FirstOrDefault(x => x.Username == username).Permissions = uperm; - Console.WriteLine("User permissions updated."); + Console.WriteLine("{RES_ACLUPDATED}"); return true; } @@ -148,7 +154,7 @@ namespace ShiftOS.Engine /// Command arguments. /// Command result. - [Command("users", description = "Get a list of all users on the system.")] + [Command("users", description = "{DESC_USERS}")] public static bool GetUsers() { foreach (var u in SaveSystem.CurrentSave.Users) @@ -180,7 +186,7 @@ namespace ShiftOS.Engine /// /// Command arguments. /// Command result. - [Command("login", description = "Log in as another user.")] + [Command("su", description = "{DESC_SU}")] [RequiresArgument("user")] [RequiresArgument("pass")] public static bool Login(Dictionary args) @@ -191,18 +197,18 @@ namespace ShiftOS.Engine var usr = SaveSystem.CurrentSave.Users.FirstOrDefault(x => x.Username == user); if(usr==null) { - Console.WriteLine("Error: No such user."); + Console.WriteLine("{ERR_NOUSER}"); return true; } if (usr.Password != pass) { - Console.WriteLine("Access denied."); + Console.WriteLine("{RES_DENIED}"); return true; } SaveSystem.CurrentUser = usr; - Console.WriteLine("Access granted."); + Console.WriteLine("{RES_GRANTED}"); return true; } @@ -211,7 +217,7 @@ namespace ShiftOS.Engine /// /// Command arguments. /// Command result. - [Command("setpass", description ="Allows you to set your password to a new value.", usage ="old:,new:")] + [Command("passwd", description ="{DESC_PASSWD}", usage ="old:,new:")] [RequiresArgument("old")] [RequiresArgument("new")] public static bool SetPassword(Dictionary args) @@ -223,12 +229,12 @@ namespace ShiftOS.Engine { SaveSystem.CurrentUser.Password = newpass; SaveSystem.CurrentSave.Users.FirstOrDefault(x => x.Username == SaveSystem.CurrentUser.Username).Password = newpass; - Console.WriteLine("Password set successfully."); + Console.WriteLine("{RES_PASSWD_SET}"); SaveSystem.SaveGame(); } else { - Console.WriteLine("Passwords do not match."); + Console.WriteLine("{ERR_PASSWD_MISMATCH}"); } return true; } -- cgit v1.2.3 From 44d80428b88db2d39d7e7e219d78da81cb8a68fd Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 17 Jun 2017 17:08:21 -0400 Subject: fix some pong issues --- ShiftOS.WinForms/Applications/Pong.cs | 26 ++++++++++++++++++++------ ShiftOS.WinForms/MainMenu/MainMenu.cs | 10 +++++----- 2 files changed, 25 insertions(+), 11 deletions(-) (limited to 'ShiftOS.WinForms/Applications') diff --git a/ShiftOS.WinForms/Applications/Pong.cs b/ShiftOS.WinForms/Applications/Pong.cs index d8f93f7..53d410e 100644 --- a/ShiftOS.WinForms/Applications/Pong.cs +++ b/ShiftOS.WinForms/Applications/Pong.cs @@ -65,6 +65,10 @@ namespace ShiftOS.WinForms.Applications private double xVel = 1; private double yVel = 1; + private double aiXVel = 1; + private double aiYVel = 1; + + private int paddleWidth; Timer counterTimer = null; @@ -89,7 +93,7 @@ namespace ShiftOS.WinForms.Applications xVel = -xVel; // adjust y velocity based on where the ball hit the paddle - yVel += linear((ball.Top + (ball.Height / 2)), paddle.Top, paddle.Bottom, -1, 1); + yVel = linear((ball.Top + (ball.Height / 2)), paddle.Top, paddle.Bottom, -1, 1); } public void UpdateBall() @@ -127,6 +131,10 @@ namespace ShiftOS.WinForms.Applications if (ballRect.Top <= 0 || ballRect.Bottom >= pnlcanvas.Height) yVel = -yVel; //reverse the Y velocity + //top and bottom walls - ai + if (aiBallRect.Top <= 0 || aiBallRect.Bottom >= pnlcanvas.Height) + aiYVel = -aiYVel; //reverse the Y velocity + //Left wall if (ballRect.Left <= 0) @@ -151,6 +159,8 @@ namespace ShiftOS.WinForms.Applications if (ballRect.Right >= opponentRect.Left) { Bounce(ballRect, opponentRect); + aiXVel = xVel; + aiYVel = yVel; doAi = false; } @@ -175,6 +185,8 @@ namespace ShiftOS.WinForms.Applications if (ballRect.Left <= playerRect.Right) { Bounce(ballRect, playerRect); + aiXVel = xVel; + aiYVel = yVel; //reset the ai location aiBallX = ballX; @@ -191,8 +203,8 @@ namespace ShiftOS.WinForms.Applications ballX += xVel * speedFactor; ballY += yVel * speedFactor; - aiBallX += xVel * (speedFactor * 2); - aiBallY += yVel * (speedFactor * 2); + aiBallX += aiXVel * (speedFactor * 1.5); + aiBallY += aiYVel * (speedFactor * 1.5); if (doAi == true) { @@ -201,12 +213,12 @@ namespace ShiftOS.WinForms.Applications if (opponentY < aiBallY) { if (opponentY < 0.9) - opponentY += speedFactor; + opponentY += speedFactor * level; } else { if (opponentY > -0.9) - opponentY -= speedFactor; + opponentY -= speedFactor * level; } } } @@ -287,10 +299,12 @@ namespace ShiftOS.WinForms.Applications xVel = 1; aiBallX = 0; aiBallY = 0; + aiXVel = xVel; + aiYVel = yVel; doAi = true; } - private bool drawAiBall = false; + private bool drawAiBall = true; private void pnlcanvas_Paint(object sender, PaintEventArgs e) { diff --git a/ShiftOS.WinForms/MainMenu/MainMenu.cs b/ShiftOS.WinForms/MainMenu/MainMenu.cs index 7ace42a..f6bc833 100644 --- a/ShiftOS.WinForms/MainMenu/MainMenu.cs +++ b/ShiftOS.WinForms/MainMenu/MainMenu.cs @@ -47,7 +47,7 @@ namespace ShiftOS.WinForms.MainMenu flmenu.BringToFront(); flmenu.CenterParent(); currentMenu = flmenu; - CategoryText = "Main menu"; + CategoryText = Localization.Parse("{MAINMENU_TITLE}"); } public string CategoryText @@ -108,7 +108,7 @@ namespace ShiftOS.WinForms.MainMenu tickerreset.Start(); currentMenu = flmenu; - CategoryText = "Main menu"; + CategoryText = Localization.Parse("{MAINMENU_TITLE}"); } @@ -134,7 +134,7 @@ namespace ShiftOS.WinForms.MainMenu flcampaign.BringToFront(); flcampaign.CenterParent(); currentMenu = flcampaign; - CategoryText = "Campaign"; + CategoryText = Localization.Parse("{MAINMENU_CAMPAIGN}"); } @@ -161,7 +161,7 @@ namespace ShiftOS.WinForms.MainMenu pnloptions.BringToFront(); pnloptions.CenterParent(); currentMenu = pnloptions; - CategoryText = "Settings"; + CategoryText = Localization.Parse("{GEN_SETTINGS}"); } @@ -198,7 +198,7 @@ namespace ShiftOS.WinForms.MainMenu flmenu.BringToFront(); flmenu.CenterParent(); currentMenu = flmenu; - CategoryText = "Main menu"; + CategoryText = Localization.Parse("{MAINMENU_TITLE}"); } private void btncontinue_Click(object sender, EventArgs e) -- cgit v1.2.3 From a3cd6c0e6045d12f0cb8c9355bcd50f12e367f3b Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 17 Jun 2017 21:03:27 -0400 Subject: Commands are parsed with a bash-style syntax by default --- ShiftOS.WinForms/Applications/Terminal.cs | 18 ++++++------------ ShiftOS_TheReturn/CommandParser.cs | 29 +++++++++++++++++++---------- ShiftOS_TheReturn/Skinning.cs | 3 +++ ShiftOS_TheReturn/TerminalBackend.cs | 17 ++++++----------- 4 files changed, 34 insertions(+), 33 deletions(-) (limited to 'ShiftOS.WinForms/Applications') diff --git a/ShiftOS.WinForms/Applications/Terminal.cs b/ShiftOS.WinForms/Applications/Terminal.cs index 0470d68..54329df 100644 --- a/ShiftOS.WinForms/Applications/Terminal.cs +++ b/ShiftOS.WinForms/Applications/Terminal.cs @@ -260,23 +260,17 @@ namespace ShiftOS.WinForms.Applications } else { - if (CurrentCommandParser.parser == null) + var result = SkinEngine.LoadedSkin.CurrentParser.ParseCommand(text3); + + if (result.Equals(default(KeyValuePair>))) { - TerminalBackend.InvokeCommand(text3); + Console.WriteLine("{ERR_SYNTAXERROR}"); } else { - var result = CurrentCommandParser.parser.ParseCommand(text3); - - if (result.Equals(default(KeyValuePair, Dictionary>))) - { - Console.WriteLine("Syntax Error: Syntax Error"); - } - else - { - TerminalBackend.InvokeCommand(result.Key.Key, result.Key.Value, result.Value); - } + TerminalBackend.InvokeCommand(result.Key, result.Value); } + } } if (TerminalBackend.PrefixEnabled) diff --git a/ShiftOS_TheReturn/CommandParser.cs b/ShiftOS_TheReturn/CommandParser.cs index 868d27a..da1073f 100644 --- a/ShiftOS_TheReturn/CommandParser.cs +++ b/ShiftOS_TheReturn/CommandParser.cs @@ -85,10 +85,9 @@ namespace ShiftOS.Engine /// /// The command string to parse. /// The parsed command, ready to be invoked. - public KeyValuePair, Dictionary> ParseCommand(string cdd) + public KeyValuePair> ParseCommand(string cdd) { string command = ""; - string ns = ""; Dictionary arguments = new Dictionary(); string text = cdd; @@ -142,12 +141,7 @@ namespace ShiftOS.Engine if (part is CommandFormatMarker) { - if (part is CommandFormatNamespace) - { - ns = res; - help = -1; - } - else if (part is CommandFormatCommand) + if (part is CommandFormatCommand) { command = res; help = -1; @@ -197,7 +191,7 @@ namespace ShiftOS.Engine if (command == "+FALSE+") { //lblExampleCommand.Text = "Syntax Error"; - return new KeyValuePair, Dictionary>(); + return new KeyValuePair>(); } else { @@ -210,9 +204,24 @@ namespace ShiftOS.Engine argvs += "}"; lblExampleCommand.Text = command + argvs;*/ - return new KeyValuePair, Dictionary>(new KeyValuePair(ns, command), arguments); + return new KeyValuePair>(command, arguments); } } + + internal static CommandParser GenerateSample() + { + var parser = new CommandParser(); + parser.AddPart(new CommandFormatCommand()); + parser.AddPart(new CommandFormatText(" --")); + parser.AddPart(new CommandFormatArgument()); + parser.AddPart(new CommandFormatText(" ")); + parser.AddPart(new CommandFormatValue()); + parser.AddPart(new CommandFormatText(" --")); + parser.AddPart(new CommandFormatArgument()); + parser.AddPart(new CommandFormatText(" ")); + parser.AddPart(new CommandFormatValue()); + return parser; + } } public class CFValue diff --git a/ShiftOS_TheReturn/Skinning.cs b/ShiftOS_TheReturn/Skinning.cs index ab2d6b1..e00a2ef 100644 --- a/ShiftOS_TheReturn/Skinning.cs +++ b/ShiftOS_TheReturn/Skinning.cs @@ -637,6 +637,9 @@ namespace ShiftOS.Engine [ShifterDescription("The maximize button color")] public Color MaximizeButtonColor = Accent1; + [ShifterHidden] + public CommandParser CurrentParser = CommandParser.GenerateSample(); + [ShifterMeta("Windows")] [ShifterCategory("Title Buttons")] [ShifterName("Minimize Button Color")] diff --git a/ShiftOS_TheReturn/TerminalBackend.cs b/ShiftOS_TheReturn/TerminalBackend.cs index 1ca31e0..d60b675 100644 --- a/ShiftOS_TheReturn/TerminalBackend.cs +++ b/ShiftOS_TheReturn/TerminalBackend.cs @@ -92,30 +92,25 @@ namespace ShiftOS.Engine /// /// Invokes a ShiftOS terminal command. /// - /// The command's namespace. /// The command name. /// The command arguments. /// Whether the command should be sent through Remote Terminal Session (RTS). - public static void InvokeCommand(string ns, string command, Dictionary arguments, bool isRemote = false) + public static void InvokeCommand(string command, Dictionary arguments, bool isRemote = false) { try { - if (string.IsNullOrWhiteSpace(ns)) - return; - + bool commandWasClient = RunClient(command, arguments, isRemote); - bool commandWasClient = RunClient(ns, command, arguments, isRemote); - - if (!commandWasClient && !string.IsNullOrWhiteSpace(ns)) + if (!commandWasClient) { - Console.WriteLine("Error: Command not found."); + Console.WriteLine("{ERR_COMMANDNOTFOUND}"); } - CommandProcessed?.Invoke(ns + "." + command, JsonConvert.SerializeObject(arguments)); + CommandProcessed?.Invoke(command, JsonConvert.SerializeObject(arguments)); } catch (Exception ex) { - Console.WriteLine($"Command parse error: {ex.Message}"); // This shouldn't ever be called now + Console.WriteLine("{ERR_SYNTAXERROR}"); PrefixEnabled = true; } -- cgit v1.2.3