From ba157cdeddef2a856600bb6e12aef9496974a213 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 23 Apr 2017 18:22:16 -0400 Subject: [PATCH] Finish Appscape. --- ShiftOS.WinForms/Applications/FormatEditor.cs | 2 +- .../ShiftnetSites/AppscapeMain.cs | 172 +++++++++++++++++- 2 files changed, 170 insertions(+), 4 deletions(-) diff --git a/ShiftOS.WinForms/Applications/FormatEditor.cs b/ShiftOS.WinForms/Applications/FormatEditor.cs index db52d85..6c84661 100644 --- a/ShiftOS.WinForms/Applications/FormatEditor.cs +++ b/ShiftOS.WinForms/Applications/FormatEditor.cs @@ -36,7 +36,7 @@ using ShiftOS.Engine; namespace ShiftOS.WinForms.Applications { [MultiplayerOnly] [Launcher("Format Editor", true, "al_format_editor", "Customization")] - [AppscapeEntry("Format Editor", "Edit the syntax of your Terminal to be however you like.", 750, "file_skimmer", "Customization")] + [AppscapeEntry("Format Editor", "Edit the syntax of your Terminal to be however you like.", 740, 750, "file_skimmer", "Customization")] [WinOpen("formateditor")] [DefaultTitle("Format Editor")] [DefaultIcon("iconFormatEditor")] diff --git a/ShiftOS.WinForms/ShiftnetSites/AppscapeMain.cs b/ShiftOS.WinForms/ShiftnetSites/AppscapeMain.cs index 53bd6d1..fc10a17 100644 --- a/ShiftOS.WinForms/ShiftnetSites/AppscapeMain.cs +++ b/ShiftOS.WinForms/ShiftnetSites/AppscapeMain.cs @@ -9,6 +9,9 @@ using System.Threading.Tasks; using System.Windows.Forms; using ShiftOS.Engine; using ShiftOS.WinForms.Tools; +using System.IO; +using System.Reflection; +using System.Threading; namespace ShiftOS.WinForms.ShiftnetSites { @@ -102,7 +105,7 @@ namespace ShiftOS.WinForms.ShiftnetSites var cp_value = new Label(); if (Shiftorium.UpgradeInstalled(upg.ID)) { - cp_value.Text = "Out of stock."; + cp_value.Text = "Already Purchased."; } else { @@ -115,7 +118,7 @@ namespace ShiftOS.WinForms.ShiftnetSites cp_value.Show(); - if(cp_value.Text != "Out of stock.") + if(cp_value.Text != "Already Purchased.") { var more_info = new Button(); more_info.Text = "More info"; @@ -147,6 +150,121 @@ namespace ShiftOS.WinForms.ShiftnetSites public void ViewMoreInfo(ShiftoriumUpgrade upg) { + lbtitle.Text = upg.Name; + pnlappslist.Controls.Clear(); + + var cp_display = new Panel(); + cp_display.Height = 30; + cp_display.Dock = DockStyle.Bottom; + pnlappslist.Controls.Add(cp_display); + cp_display.Show(); + + var cp_value = new Label(); + if (Shiftorium.UpgradeInstalled(upg.ID)) + { + cp_value.Text = "Already Purchased."; + } + else + { + cp_value.Text = $"{upg.Cost} CP"; + } + cp_value.AutoSize = true; + cp_value.Top = (cp_display.Height - cp_value.Height) / 2; + cp_value.Left = 5; + cp_display.Controls.Add(cp_value); + cp_value.Show(); + + + if (cp_value.Text != "Already Purchased.") + { + var more_info = new Button(); + more_info.Text = "More info"; + more_info.Click += (o, a) => + { + //Detect if dependencies are installed. + if (Shiftorium.DependenciesInstalled(upg)) + { + //Detect sufficient codepoints + if (SaveSystem.CurrentSave.Codepoints >= upg.Cost) + { + Infobox.PromptYesNo("Confirm Purchase", "Do you want to purchase " + upg.Name + " from Appscape for " + upg.Cost.ToString() + " Codepoints?", (result) => + { + if (result == true) + { + SaveSystem.CurrentSave.Codepoints -= upg.Cost; + foreach (var exe in Directory.GetFiles(Environment.CurrentDirectory)) + { + if (exe.EndsWith(".exe") || exe.EndsWith(".dll")) + { + try + { + 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); + } + } + } + } + catch { } + } + } + + } + }); + } + else + { + Infobox.Show("Not enough Codepoints", "You do not have enough Codepoints to buy this package."); + } + } + else + { + Infobox.Show("Missing dependencies", "You are missing some Shiftorium upgrades that this package requires. Please upgrade your system and try again!"); + } + }; + more_info.AutoSize = false; + more_info.AutoSizeMode = AutoSizeMode.GrowAndShrink; + more_info.Top = (cp_display.Height - more_info.Height) / 2; + more_info.Left = cp_display.Width - more_info.Width - 5; + cp_display.Controls.Add(more_info); + more_info.Show(); + } + + var desc = new Label(); + desc.Text = upg.Description; + desc.AutoSize = false; + desc.Dock = DockStyle.Fill; + pnlappslist.Controls.Add(desc); + desc.Show(); + desc.BringToFront(); + + desc.Text += Environment.NewLine + Environment.NewLine + "Dependencies:" + Environment.NewLine; + string[] deplist = upg.Dependencies.Split(';'); + if(deplist.Length > 1) + { + for(int i = 1; i < deplist.Length; i++) + { + ShiftoriumUpgrade dep = Shiftorium.GetDefaults().FirstOrDefault(x => x.ID == deplist[i]); + if(dep != null) + { + desc.Text += $" - {dep.Name}{Environment.NewLine}"; + } + } + } + else + { + desc.Text += " - No dependencies."; + } + } @@ -181,6 +299,52 @@ namespace ShiftOS.WinForms.ShiftnetSites SetupCategory("All"); } } + + public class AppscapeInstallation : Applications.Installation + { + public AppscapeInstallation(string name, int size, string s_id) + { + Name = name; + ShiftoriumId = s_id; + Size = size; + } + + public string ShiftoriumId { get; private set; } + public int Size { get; private set; } + public string Name { get; private set; } + + protected override void Run() + { + this.SetStatus("Downloading..."); + SetProgress(0); + new Thread(() => + { + int i = 0; + while (i <= Size) + { + SetProgress((i / Size) * 100); + i++; + Thread.Sleep(100); + } + SetProgress(0); + SetStatus("Installing..."); + i = 0; + while (i <= Size) + { + SetProgress((i / Size) * 100); + i++; + Thread.Sleep(50); + } + Shiftorium.Buy(ShiftoriumId, 0); + Desktop.InvokeOnWorkerThread(() => + { + Infobox.Show("Install complete!", "The installation of " + Name + " has completed."); + SaveSystem.SaveGame(); + }); + }) + { IsBackground = true }.Start(); + } + } } namespace ShiftOS.WinForms @@ -190,13 +354,14 @@ namespace ShiftOS.WinForms /// public class AppscapeEntryAttribute : RequiresUpgradeAttribute { - public AppscapeEntryAttribute(string name, string description, long cost, string dependencies = "", string category = "Misc") : base((string.IsNullOrWhiteSpace(dependencies)) ? name.ToLower().Replace(" ","_") : name.ToLower().Replace(" ", "_") + dependencies) + public AppscapeEntryAttribute(string name, string description, int downloadSize, long cost, string dependencies = "", string category = "Misc") : base((string.IsNullOrWhiteSpace(dependencies)) ? name.ToLower().Replace(" ", "_") : name.ToLower().Replace(" ", "_") + dependencies) { Name = name; Description = description; Category = category; Cost = cost; DependencyString = dependencies; + DownloadSize = downloadSize; } public string Name { get; private set; } @@ -204,5 +369,6 @@ namespace ShiftOS.WinForms public string Category { get; private set; } public long Cost { get; private set; } public string DependencyString { get; private set; } + public int DownloadSize { get; private set; } } } \ No newline at end of file