mirror of
https://git.alee14.me/shiftos-archive/ShiftOS_TheReturn.git
synced 2025-04-19 18:20:24 +00:00
Merge
This commit is contained in:
parent
9aa1becb30
commit
edf4aef6ad
19 changed files with 0 additions and 6738 deletions
|
@ -1,234 +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.Objects;
|
||||
using NetSockets;
|
||||
using Newtonsoft.Json;
|
||||
using System.IO;
|
||||
using static ShiftOS.Server.Program;
|
||||
|
||||
|
||||
namespace ShiftOS.Server
|
||||
{
|
||||
public static class Core
|
||||
{
|
||||
[MudRequest("getguid_reply", typeof(string))]
|
||||
public static void GuidBounce(string guid, object contents)
|
||||
{
|
||||
//The message's GUID was manipulated by the client to send to another client.
|
||||
//So we can just bounce back the message to the other client.
|
||||
server.DispatchTo(new Guid(guid), new NetObject("bounce", new ServerMessage
|
||||
{
|
||||
Name = "getguid_reply",
|
||||
GUID = guid,
|
||||
Contents = contents as string
|
||||
}));
|
||||
|
||||
}
|
||||
|
||||
[MudRequest("getguid_send", typeof(string))]
|
||||
public static void GuidReceiver(string guid, object contents)
|
||||
{
|
||||
string usrname = contents as string;
|
||||
server.DispatchAll(new NetObject("are_you_this_guy", new ServerMessage
|
||||
{
|
||||
Name = "getguid_fromserver",
|
||||
GUID = guid,
|
||||
Contents = usrname,
|
||||
}));
|
||||
|
||||
}
|
||||
|
||||
[MudRequest("script", typeof(Dictionary<string, object>))]
|
||||
public static void RunScript(string guid, object contents)
|
||||
{
|
||||
try
|
||||
{
|
||||
var args = contents as Dictionary<string, object>;
|
||||
|
||||
string user = "";
|
||||
string script = "";
|
||||
string sArgs = "";
|
||||
|
||||
if (!args.ContainsKey("user"))
|
||||
throw new MudException("No 'user' arg specified in message to server");
|
||||
|
||||
if (!args.ContainsKey("script"))
|
||||
throw new MudException("No 'script' arg specified in message to server");
|
||||
|
||||
if (!args.ContainsKey("args"))
|
||||
throw new MudException("No 'args' arg specified in message to server");
|
||||
|
||||
user = args["user"] as string;
|
||||
script = args["script"] as string;
|
||||
sArgs = args["args"] as string;
|
||||
|
||||
if (File.Exists($"scripts/{user}/{script}.lua"))
|
||||
{
|
||||
var script_arguments = JsonConvert.DeserializeObject<Dictionary<string, object>>(sArgs);
|
||||
server.DispatchTo(new Guid(guid), new NetObject("runme", new ServerMessage
|
||||
{
|
||||
Name = "run",
|
||||
GUID = "Server",
|
||||
Contents = JsonConvert.SerializeObject(new
|
||||
{
|
||||
script = File.ReadAllText($"scripts/{user}/{script}.lua"),
|
||||
args = sArgs
|
||||
})
|
||||
}));
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new MudException($"{user}.{script}: Script not found.");
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
try
|
||||
{
|
||||
Program.server.DispatchTo(new Guid(guid), new NetObject("error", new ServerMessage
|
||||
{
|
||||
Name = "Error",
|
||||
GUID = "Server",
|
||||
Contents = JsonConvert.SerializeObject(new MudException("<script_runner> Script not found or script error detected."))
|
||||
}));
|
||||
}
|
||||
catch
|
||||
{
|
||||
//fuck.
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[MudRequest("delete_dead_save", typeof(Save))]
|
||||
public static void DeleteSave(string guid, Save save)
|
||||
{
|
||||
if (File.Exists("deadsaves/" + save.Username + ".save"))
|
||||
File.Delete("deadsaves/" + save.Username + ".save");
|
||||
}
|
||||
|
||||
[MudRequest("diag_log", typeof(string))]
|
||||
public static void Diagnostic(string guid, string line)
|
||||
{
|
||||
List<string> lines = new List<string>();
|
||||
if (File.Exists("diagnostics.log"))
|
||||
lines = new List<string>(File.ReadAllLines("diagnostics.log"));
|
||||
|
||||
lines.Add(line);
|
||||
File.WriteAllLines("diagnostics.log", lines.ToArray());
|
||||
}
|
||||
|
||||
[MudRequest("getusers", typeof(string))]
|
||||
public static void GetAllUsers(string guid, string contents)
|
||||
{
|
||||
List<string> accs = new List<string>();
|
||||
if(contents == "dead")
|
||||
{
|
||||
foreach(var sve in Directory.GetFiles("deadsaves"))
|
||||
{
|
||||
if (sve.EndsWith(".save"))
|
||||
{
|
||||
var save = JsonConvert.DeserializeObject<Save>(File.ReadAllText(sve));
|
||||
accs.Add($"{save.Username}@{save.SystemName}");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
server.DispatchTo(new Guid(guid), new NetObject("h4xx0r", new ServerMessage
|
||||
{
|
||||
Name = "allusers",
|
||||
GUID = "server",
|
||||
Contents = JsonConvert.SerializeObject(accs)
|
||||
}));
|
||||
}
|
||||
|
||||
[MudRequest("mud_save_allow_dead", typeof(Save))]
|
||||
public static void SaveDead(string guid, Save sve)
|
||||
{
|
||||
if(File.Exists("saves/" + sve.Username + ".save"))
|
||||
{
|
||||
WriteEncFile("saves/" + sve.Username + ".save", JsonConvert.SerializeObject(sve));
|
||||
}
|
||||
else if(File.Exists("deadsaves/" + sve.Username + ".save"))
|
||||
{
|
||||
File.WriteAllText("deadsaves/" + sve.Username + ".save", JsonConvert.SerializeObject(sve));
|
||||
}
|
||||
}
|
||||
|
||||
[MudRequest("get_user_data", typeof(Dictionary<string, string>))]
|
||||
public static void GetUserData(string guid, Dictionary<string, string> contents)
|
||||
{
|
||||
string usr = contents["user"];
|
||||
string sys = contents["sysname"];
|
||||
|
||||
foreach(var sve in Directory.GetFiles("deadsaves"))
|
||||
{
|
||||
if (sve.EndsWith(".save"))
|
||||
{
|
||||
var saveFile = JsonConvert.DeserializeObject<Save>(File.ReadAllText(sve));
|
||||
if(saveFile.Username == usr && saveFile.SystemName == sys)
|
||||
{
|
||||
server.DispatchTo(new Guid(guid), new NetObject("1337", new ServerMessage
|
||||
{
|
||||
Name = "user_data",
|
||||
GUID = "server",
|
||||
Contents = JsonConvert.SerializeObject(saveFile)
|
||||
}));
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
foreach (var sve in Directory.GetFiles("saves"))
|
||||
{
|
||||
if (sve.EndsWith(".save"))
|
||||
{
|
||||
var saveFile = JsonConvert.DeserializeObject<Save>(ReadEncFile(sve));
|
||||
if (saveFile.Username == usr && saveFile.SystemName == sys)
|
||||
{
|
||||
server.DispatchTo(new Guid(guid), new NetObject("1337", new ServerMessage
|
||||
{
|
||||
Name = "user_data",
|
||||
GUID = "server",
|
||||
Contents = JsonConvert.SerializeObject(saveFile)
|
||||
}));
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
server.DispatchTo(new Guid(guid), new NetObject("n07_50_1337", new ServerMessage
|
||||
{
|
||||
Name = "user_data_not_found",
|
||||
GUID = "server"
|
||||
}));
|
||||
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,186 +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;
|
||||
|
||||
namespace ShiftOS.WinForms.Applications {
|
||||
[MultiplayerOnly]
|
||||
[Launcher("FormatEditor", true, "al_format_editor", "Games")]
|
||||
[RequiresUpgrade("format_editor")]
|
||||
[WinOpen("formateditor")]
|
||||
[DefaultIcon("iconFormatEditor")]
|
||||
|
||||
public partial class FormatEditor : UserControl, IShiftOSWindow {
|
||||
|
||||
IList<CommandFormat> parts = new List<CommandFormat>();
|
||||
CommandParser parser = new CommandParser();
|
||||
IList<Panel> editorBoxes = new List<Panel>();
|
||||
|
||||
string commandMode = "namespace";
|
||||
int avcount = 0;
|
||||
|
||||
public FormatEditor() {
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public void OnLoad() {
|
||||
OnUpgrade();
|
||||
}
|
||||
|
||||
public void OnSkinLoad() { }
|
||||
|
||||
public bool OnUnload() { return true; }
|
||||
|
||||
public void OnUpgrade() {
|
||||
btnAddOptionalText.Visible = ShiftoriumFrontend.UpgradeInstalled("format_editor_optional_text");
|
||||
btnAddRegexText.Visible = ShiftoriumFrontend.UpgradeInstalled("format_editor_regex");
|
||||
btnAddColor.Visible = ShiftoriumFrontend.UpgradeInstalled("format_editor_syntax_highlighting");
|
||||
}
|
||||
|
||||
private void addPart(CommandFormat part) {
|
||||
parser.AddPart(part);
|
||||
|
||||
addPart(part.Draw());
|
||||
}
|
||||
|
||||
private void addPart(Control part) {
|
||||
Panel container = new Panel();
|
||||
|
||||
Control drawnPart = part;
|
||||
container.Size = drawnPart.Size;
|
||||
container.Controls.Add(drawnPart);
|
||||
|
||||
int woffset = 0;
|
||||
if (editorBoxes.Count > 0) {
|
||||
woffset = editorBoxes.Last().Width + editorBoxes.Last().Location.X;
|
||||
} else {
|
||||
woffset = 0;
|
||||
}
|
||||
|
||||
container.Location = new Point(woffset, 0);
|
||||
editorBoxes.Add(container);
|
||||
panelEditor.Controls.Add(container);
|
||||
}
|
||||
|
||||
private void btnAddText_Click(object sender, EventArgs e) {
|
||||
addPart(new CommandFormatText());
|
||||
}
|
||||
|
||||
private void btnAddOptionalText_Click(object sender, EventArgs e) {
|
||||
addPart(new CommandFormatOptionalText());
|
||||
}
|
||||
|
||||
private void btnAddRegexText_Click(object sender, EventArgs e) {
|
||||
|
||||
}
|
||||
|
||||
private void btnAddColor_Click(object sender, EventArgs e) {
|
||||
|
||||
}
|
||||
|
||||
private void btnAddCommand_Click(object sender, EventArgs e) {
|
||||
switch (commandMode) {
|
||||
case "namespace":
|
||||
addPart(new CommandFormatNamespace());
|
||||
commandMode = "command";
|
||||
btnAddCommand.Text = "+ Command";
|
||||
break;
|
||||
case "command":
|
||||
addPart(new CommandFormatCommand());
|
||||
commandMode = "argument";
|
||||
btnAddCommand.Text = "+ Argument";
|
||||
break;
|
||||
case "argument":
|
||||
addPart(new CommandFormatArgument());
|
||||
commandMode = "value";
|
||||
btnAddCommand.Text = "+ \"Value\"";
|
||||
break;
|
||||
case "value":
|
||||
addPart(new CommandFormatValue());
|
||||
avcount++;
|
||||
if (avcount >= 2) {
|
||||
commandMode = "";
|
||||
btnAddCommand.Text = "";
|
||||
btnAddCommand.Enabled = false;
|
||||
}else {
|
||||
commandMode = "argument";
|
||||
btnAddCommand.Text = "+ Argument";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void richTextBox1_TextChanged(object sender, EventArgs e) {
|
||||
var result = parser.ParseCommand(richTextBox1.Text);
|
||||
|
||||
if (result.Equals(default(KeyValuePair<KeyValuePair<string, string>, Dictionary<string, string>>))) {
|
||||
lblExampleCommand.Text = "Syntax Error";
|
||||
} else {
|
||||
string argvs = "{";
|
||||
|
||||
foreach (KeyValuePair<string, string> entry in result.Value) {
|
||||
argvs += entry.Key + "=\"" + entry.Value + "\", ";
|
||||
}
|
||||
|
||||
argvs += "}";
|
||||
|
||||
lblExampleCommand.Text = result.Key + argvs;
|
||||
}
|
||||
}
|
||||
|
||||
private void btnTest_Click(object sender, EventArgs e) {
|
||||
|
||||
}
|
||||
|
||||
private void btnSave_Click(object sender, EventArgs e) {
|
||||
CurrentCommandParser.parser = parser;
|
||||
|
||||
FileSkimmerBackend.GetFile(new string[] { ".cf" }, FileOpenerStyle.Save, new Action<string>((result) => {
|
||||
Objects.ShiftFS.Utils.WriteAllText(result, parser.Save());
|
||||
}));
|
||||
}
|
||||
|
||||
private void btnLoad_Click(object sender, EventArgs e) {
|
||||
FileSkimmerBackend.GetFile(new string[] { ".cf" }, FileOpenerStyle.Open, new Action<string>((result) => {
|
||||
parser = CommandParser.Load(Objects.ShiftFS.Utils.ReadAllText(result));
|
||||
foreach(CommandFormat part in parser.parts) {
|
||||
addPart(part.Draw());
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
private void btnApply_Click(object sender, EventArgs e) {
|
||||
CurrentCommandParser.parser = parser;
|
||||
}
|
||||
}
|
||||
}
|
744
ShiftOS.WinForms/Applications/Pong.Designer.cs
generated
744
ShiftOS.WinForms/Applications/Pong.Designer.cs
generated
|
@ -1,744 +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.
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* 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
|
||||
{
|
||||
partial class Pong
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
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.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.pnlhighscore = new System.Windows.Forms.Panel();
|
||||
this.lbhighscore = new System.Windows.Forms.ListBox();
|
||||
this.label10 = 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.pnlintro = new System.Windows.Forms.Panel();
|
||||
this.Label6 = new System.Windows.Forms.Label();
|
||||
this.btnstartgame = new System.Windows.Forms.Button();
|
||||
this.Label8 = 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.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
|
||||
this.button2 = new System.Windows.Forms.Button();
|
||||
this.pgcontents.SuspendLayout();
|
||||
this.pnlgamestats.SuspendLayout();
|
||||
this.pnlhighscore.SuspendLayout();
|
||||
this.pnlfinalstats.SuspendLayout();
|
||||
this.pnllose.SuspendLayout();
|
||||
this.pnlintro.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.paddleHuman)).BeginInit();
|
||||
this.flowLayoutPanel1.SuspendLayout();
|
||||
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.pnlhighscore);
|
||||
this.pgcontents.Controls.Add(this.pnlgamestats);
|
||||
this.pgcontents.Controls.Add(this.pnlfinalstats);
|
||||
this.pgcontents.Controls.Add(this.pnllose);
|
||||
this.pgcontents.Controls.Add(this.pnlintro);
|
||||
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(700, 400);
|
||||
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);
|
||||
//
|
||||
// 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(56, 76);
|
||||
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);
|
||||
//
|
||||
// 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!";
|
||||
//
|
||||
// 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(67, 29);
|
||||
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.FormattingEnabled = true;
|
||||
this.lbhighscore.Location = new System.Drawing.Point(0, 36);
|
||||
this.lbhighscore.MultiColumn = true;
|
||||
this.lbhighscore.Name = "lbhighscore";
|
||||
this.lbhighscore.SelectionMode = System.Windows.Forms.SelectionMode.None;
|
||||
this.lbhighscore.Size = new System.Drawing.Size(539, 246);
|
||||
this.lbhighscore.TabIndex = 1;
|
||||
//
|
||||
// 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;
|
||||
//
|
||||
// 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.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.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.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.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.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;
|
||||
//
|
||||
// pnlintro
|
||||
//
|
||||
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(52, 29);
|
||||
this.pnlintro.Name = "pnlintro";
|
||||
this.pnlintro.Size = new System.Drawing.Size(595, 303);
|
||||
this.pnlintro.TabIndex = 13;
|
||||
//
|
||||
// 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, 227);
|
||||
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
|
||||
//
|
||||
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(186, 273);
|
||||
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}";
|
||||
this.Label8.Click += new System.EventHandler(this.Label8_Click);
|
||||
//
|
||||
// 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.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.paddleComputer.MaximumSize = new System.Drawing.Size(20, 150);
|
||||
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(666, 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(700, 22);
|
||||
this.lbllevelandtime.TabIndex = 4;
|
||||
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.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, 356);
|
||||
this.lblstatscodepoints.Name = "lblstatscodepoints";
|
||||
this.lblstatscodepoints.Size = new System.Drawing.Size(219, 35);
|
||||
this.lblstatscodepoints.TabIndex = 12;
|
||||
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.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(542, 356);
|
||||
this.lblstatsY.Name = "lblstatsY";
|
||||
this.lblstatsY.Size = new System.Drawing.Size(144, 35);
|
||||
this.lblstatsY.TabIndex = 11;
|
||||
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.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, 356);
|
||||
this.lblstatsX.Name = "lblstatsX";
|
||||
this.lblstatsX.Size = new System.Drawing.Size(144, 35);
|
||||
this.lblstatsX.TabIndex = 5;
|
||||
this.lblstatsX.Text = "Xspeed: ";
|
||||
this.lblstatsX.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// 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);
|
||||
//
|
||||
// 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.Name = "Pong";
|
||||
this.Text = "{PONG_NAME}";
|
||||
this.Size = new System.Drawing.Size(820, 500);
|
||||
this.Load += new System.EventHandler(this.Pong_Load);
|
||||
this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pongMain_MouseMove);
|
||||
this.pgcontents.ResumeLayout(false);
|
||||
this.pnlgamestats.ResumeLayout(false);
|
||||
this.pnlgamestats.PerformLayout();
|
||||
this.pnlhighscore.ResumeLayout(false);
|
||||
this.pnlhighscore.PerformLayout();
|
||||
this.pnlfinalstats.ResumeLayout(false);
|
||||
this.pnlfinalstats.PerformLayout();
|
||||
this.pnllose.ResumeLayout(false);
|
||||
this.pnlintro.ResumeLayout(false);
|
||||
this.pnlintro.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.paddleHuman)).EndInit();
|
||||
this.flowLayoutPanel1.ResumeLayout(false);
|
||||
this.flowLayoutPanel1.PerformLayout();
|
||||
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.ListBox 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;
|
||||
}
|
||||
}
|
|
@ -1,675 +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.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using Newtonsoft.Json;
|
||||
using ShiftOS.Engine;
|
||||
using ShiftOS.Objects;
|
||||
|
||||
namespace ShiftOS.WinForms.Applications
|
||||
{
|
||||
[MultiplayerOnly]
|
||||
[Launcher("Pong", true, "al_pong", "Games")]
|
||||
[WinOpen("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;
|
||||
int beatairewardtotal;
|
||||
int beataireward = 1;
|
||||
int[] levelrewards = new int[50];
|
||||
int totalreward;
|
||||
int countdown = 3;
|
||||
|
||||
bool aiShouldIsbeEnabled = true;
|
||||
|
||||
public Pong()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void Pong_Load(object sender, EventArgs e)
|
||||
{
|
||||
setuplevelrewards();
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Move the paddle according to the mouse position.
|
||||
private void pongMain_MouseMove(object sender, MouseEventArgs e)
|
||||
{
|
||||
var loc = this.PointToClient(MousePosition);
|
||||
paddleHuman.Location = new Point(paddleHuman.Location.X, (loc.Y) - (paddleHuman.Height / 2));
|
||||
}
|
||||
|
||||
|
||||
// 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 = SkinEngine.LoadedSkin.ControlTextColor;
|
||||
paddleComputer.BackColor = SkinEngine.LoadedSkin.ControlTextColor;
|
||||
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;
|
||||
}
|
||||
|
||||
//Set the computer player to move according to the ball's position.
|
||||
if (aiShouldIsbeEnabled)
|
||||
if (ball.Location.X > 500 - 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);
|
||||
}
|
||||
casualposition = rand.Next(-150, 201);
|
||||
}
|
||||
else
|
||||
{
|
||||
//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);
|
||||
}
|
||||
//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);
|
||||
}
|
||||
}
|
||||
|
||||
//Set Xvel and Yvel speeds from decimal
|
||||
if (xVel > 0)
|
||||
xVel = (int)Math.Round(xveldec);
|
||||
if (xVel < 0)
|
||||
xVel = (int)-Math.Round(xveldec);
|
||||
if (yVel > 0)
|
||||
yVel = (int)Math.Round(yveldec);
|
||||
if (yVel < 0)
|
||||
yVel = (int)-Math.Round(yveldec);
|
||||
|
||||
// Move the game ball.
|
||||
ball.Location = new Point(ball.Location.X + xVel, ball.Location.Y + yVel);
|
||||
|
||||
// Check for top wall.
|
||||
if (ball.Location.Y < 0)
|
||||
{
|
||||
ball.Location = new Point(ball.Location.X, 0);
|
||||
yVel = -yVel;
|
||||
}
|
||||
|
||||
// Check for bottom wall.
|
||||
if (ball.Location.Y > pgcontents.Height - ball.Height)
|
||||
{
|
||||
ball.Location = new Point(ball.Location.X, pgcontents.Height - ball.Size.Height);
|
||||
yVel = -yVel;
|
||||
}
|
||||
|
||||
// Check for player paddle.
|
||||
if (ball.Bounds.IntersectsWith(paddleHuman.Bounds))
|
||||
{
|
||||
ball.Location = new Point(paddleHuman.Location.X + ball.Size.Width, ball.Location.Y);
|
||||
//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;
|
||||
if (yveldec < 0)
|
||||
yveldec = yveldec - incrementy;
|
||||
break;
|
||||
}
|
||||
xVel = -xVel;
|
||||
}
|
||||
|
||||
// Check for computer paddle.
|
||||
if (ball.Bounds.IntersectsWith(paddleComputer.Bounds))
|
||||
{
|
||||
ball.Location = new Point(paddleComputer.Location.X - paddleComputer.Size.Width + 1, ball.Location.Y);
|
||||
xveldec = xveldec + incrementx;
|
||||
xVel = -xVel;
|
||||
}
|
||||
|
||||
// Check for left wall.
|
||||
if (ball.Location.X < -100)
|
||||
{
|
||||
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] + 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));
|
||||
}
|
||||
else
|
||||
{
|
||||
lblbutyougained.Hide();
|
||||
}
|
||||
}
|
||||
|
||||
// Check for right wall.
|
||||
if (ball.Location.X > this.Width - ball.Size.Width - paddleComputer.Width + 100)
|
||||
{
|
||||
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();
|
||||
}
|
||||
|
||||
//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 = Localization.Parse("{H_VEL}: ") + xveldec;
|
||||
lblstatsY.Text = Localization.Parse("{V_VEL}: ") + yveldec;
|
||||
lblstatscodepoints.Text = Localization.Parse("{CODEPOINTS}: ") + (levelrewards[level - 1] + beatairewardtotal).ToString();
|
||||
lbllevelandtime.Text = Localization.Parse("{LEVEL}: " + level + " - " + secondsleft + " {SECONDS_LEFT}");
|
||||
|
||||
if (xVel > 20 || xVel < -20)
|
||||
{
|
||||
paddleHuman.Width = Math.Abs(xVel);
|
||||
paddleComputer.Width = Math.Abs(xVel);
|
||||
}
|
||||
else
|
||||
{
|
||||
paddleHuman.Width = 20;
|
||||
paddleComputer.Width = 20;
|
||||
}
|
||||
|
||||
computerspeed = Math.Abs(yVel);
|
||||
|
||||
// pgcontents.Refresh()
|
||||
// pgcontents.CreateGraphics.FillRectangle(Brushes.Black, ball.Location.X, ball.Location.Y, ball.Width, ball.Height)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// ERROR: Handles clauses are not supported in C#
|
||||
private void counter_Tick(object sender, EventArgs e)
|
||||
{
|
||||
if (this.Left < Screen.PrimaryScreen.Bounds.Width)
|
||||
{
|
||||
secondsleft = secondsleft - 1;
|
||||
if (secondsleft == 1)
|
||||
{
|
||||
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();
|
||||
SendHighscores();
|
||||
}
|
||||
lblstatscodepoints.Text = Localization.Parse("{CODEPOINTS}: ") + (levelrewards[level - 1] + beatairewardtotal).ToString();
|
||||
}
|
||||
}
|
||||
|
||||
public void SendHighscores()
|
||||
{
|
||||
var highscore = new PongHighscore
|
||||
{
|
||||
UserName = $"{SaveSystem.CurrentSave.Username}@{SaveSystem.CurrentSave.SystemName}",
|
||||
HighestLevel = level,
|
||||
HighestCodepoints = totalreward
|
||||
};
|
||||
ServerManager.SendMessage("pong_sethighscore", JsonConvert.SerializeObject(highscore));
|
||||
}
|
||||
|
||||
// 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);
|
||||
|
||||
switch (rand.Next(1, 3))
|
||||
{
|
||||
case 1:
|
||||
levelxspeed = levelxspeed + 1;
|
||||
break;
|
||||
case 2:
|
||||
levelxspeed = levelxspeed + 2;
|
||||
break;
|
||||
}
|
||||
|
||||
switch (rand.Next(1, 3))
|
||||
{
|
||||
case 1:
|
||||
levelyspeed = levelyspeed + 1;
|
||||
break;
|
||||
case 2:
|
||||
levelyspeed = levelyspeed + 2;
|
||||
break;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
if (ShiftoriumFrontend.UpgradeInstalled("pong_upgrade"))
|
||||
{
|
||||
beataireward = level * 10;
|
||||
} else
|
||||
{
|
||||
beataireward = level * 5;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ShiftoriumFrontend.UpgradeInstalled("pong_upgrade"))
|
||||
{
|
||||
double br = levelrewards[level - 1] / 10;
|
||||
beataireward = (int)Math.Round(br) * 10;
|
||||
} else
|
||||
{
|
||||
double br = levelrewards[level - 1] / 10;
|
||||
beataireward = (int)Math.Round(br) * 5;
|
||||
}
|
||||
}
|
||||
|
||||
totalreward = levelrewards[level - 1] + 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)
|
||||
{
|
||||
case 0:
|
||||
countdown = 3;
|
||||
lblcountdown.Hide();
|
||||
lblbeatai.Hide();
|
||||
gameTimer.Start();
|
||||
counter.Start();
|
||||
tmrcountdown.Stop();
|
||||
break;
|
||||
case 1:
|
||||
lblcountdown.Text = "1";
|
||||
countdown = countdown - 1;
|
||||
break;
|
||||
case 2:
|
||||
lblcountdown.Text = "2";
|
||||
countdown = countdown - 1;
|
||||
break;
|
||||
case 3:
|
||||
lblcountdown.Text = "3";
|
||||
countdown = countdown - 1;
|
||||
lblcountdown.Show();
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// 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].ToString();
|
||||
lblfinalcomputerreward.Text = beatairewardtotal.ToString();
|
||||
lblfinalcodepoints.Text = totalreward + Localization.Parse(" {CODEPOINTS_SHORT}");
|
||||
SaveSystem.TransferCodepointsFrom("pong", totalreward);
|
||||
}
|
||||
|
||||
private void newgame()
|
||||
{
|
||||
pnlfinalstats.Hide();
|
||||
pnllose.Hide();
|
||||
pnlintro.Hide();
|
||||
|
||||
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)
|
||||
{
|
||||
pnlhighscore.BringToFront();
|
||||
SetupHighScores();
|
||||
}
|
||||
|
||||
public void SetupHighScores()
|
||||
{
|
||||
lbhighscore.Items.Clear();
|
||||
ServerManager.MessageReceived += (msg) =>
|
||||
{
|
||||
if(msg.Name == "pong_highscores")
|
||||
{
|
||||
var hs = JsonConvert.DeserializeObject<List<PongHighscore>>(msg.Contents);
|
||||
|
||||
var orderedhs = hs.OrderByDescending(i => i.HighestLevel);
|
||||
|
||||
foreach(var score in orderedhs)
|
||||
{
|
||||
this.Invoke(new Action(() =>
|
||||
{
|
||||
lbhighscore.Items.Add($"{score.UserName}\t\t\t{score.HighestLevel}\t\t{score.HighestCodepoints} CP");
|
||||
}));
|
||||
}
|
||||
}
|
||||
};
|
||||
ServerManager.SendMessage("pong_gethighscores", null);
|
||||
pnlhighscore.Show();
|
||||
}
|
||||
|
||||
// ERROR: Handles clauses are not supported in C#
|
||||
private void btnplayagain_Click(object sender, EventArgs e)
|
||||
{
|
||||
newgame();
|
||||
}
|
||||
|
||||
// ERROR: Handles clauses are not supported in C#
|
||||
private void btnlosetryagain_Click(object sender, EventArgs e)
|
||||
{
|
||||
newgame();
|
||||
}
|
||||
|
||||
// ERROR: Handles clauses are not supported in C#
|
||||
private void btnstartgame_Click(object sender, EventArgs e)
|
||||
{
|
||||
newgame();
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
if (i >= 25 && i <= 50)
|
||||
{
|
||||
tmrstoryline.Stop();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// ERROR: Handles clauses are not supported in C#
|
||||
private void me_closing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
tmrstoryline.Stop();
|
||||
}
|
||||
|
||||
private void Label6_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void Label8_Click(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) {
|
||||
aiShouldIsbeEnabled = true;
|
||||
}
|
||||
|
||||
public void OnLoad()
|
||||
{
|
||||
pnlintro.BringToFront();
|
||||
pnlintro.Show();
|
||||
pnlhighscore.Hide();
|
||||
pnlgamestats.Hide();
|
||||
pnlfinalstats.Hide();
|
||||
}
|
||||
|
||||
public void OnSkinLoad()
|
||||
{
|
||||
}
|
||||
|
||||
public bool OnUnload()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public void OnUpgrade()
|
||||
{
|
||||
}
|
||||
|
||||
private void button2_Click(object sender, EventArgs e)
|
||||
{
|
||||
pnlhighscore.Hide();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,261 +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 ShiftOS.WinForms.Controls;
|
||||
|
||||
namespace ShiftOS.WinForms.Applications
|
||||
{
|
||||
partial class ShiftoriumFrontend
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.panel1 = new System.Windows.Forms.Panel();
|
||||
this.panel2 = new System.Windows.Forms.Panel();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.lbupgradedesc = new System.Windows.Forms.Label();
|
||||
this.pnlupgradeactions = new System.Windows.Forms.Panel();
|
||||
this.btnbuy = new System.Windows.Forms.Button();
|
||||
this.lbupgradetitle = new System.Windows.Forms.Label();
|
||||
this.pnllist = new System.Windows.Forms.Panel();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.pgupgradeprogress = new ShiftOS.WinForms.Controls.ShiftedProgressBar();
|
||||
this.lbupgrades = new System.Windows.Forms.ListBox();
|
||||
this.panel1.SuspendLayout();
|
||||
this.panel2.SuspendLayout();
|
||||
this.pnlupgradeactions.SuspendLayout();
|
||||
this.pnllist.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
this.panel1.Controls.Add(this.panel2);
|
||||
this.panel1.Controls.Add(this.pnllist);
|
||||
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.panel1.Location = new System.Drawing.Point(0, 0);
|
||||
this.panel1.Name = "panel1";
|
||||
this.panel1.Size = new System.Drawing.Size(782, 427);
|
||||
this.panel1.TabIndex = 0;
|
||||
//
|
||||
// panel2
|
||||
//
|
||||
this.panel2.Controls.Add(this.lbupgradedesc);
|
||||
this.panel2.Controls.Add(this.pnlupgradeactions);
|
||||
this.panel2.Controls.Add(this.lbupgradetitle);
|
||||
this.panel2.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.panel2.Location = new System.Drawing.Point(406, 0);
|
||||
this.panel2.Name = "panel2";
|
||||
this.panel2.Size = new System.Drawing.Size(376, 427);
|
||||
this.panel2.TabIndex = 1;
|
||||
//
|
||||
// label2
|
||||
//
|
||||
if (ShiftoriumFrontend.UpgradeInstalled("shiftorium_gui_codepoints_display"))
|
||||
{
|
||||
this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.label2.AutoSize = true;
|
||||
this.label2.Location = new System.Drawing.Point(128, 357);
|
||||
this.label2.Name = "label2";
|
||||
this.label2.Size = new System.Drawing.Size(135, 13);
|
||||
this.label2.TabIndex = 3;
|
||||
this.label2.Text = "You have: %cp Codepoints";
|
||||
this.label2.Click += new System.EventHandler(this.label2_Click);
|
||||
} else
|
||||
{
|
||||
this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.label2.AutoSize = true;
|
||||
this.label2.Location = new System.Drawing.Point(128, 357);
|
||||
this.label2.Name = "label2";
|
||||
this.label2.Size = new System.Drawing.Size(1, 1);
|
||||
this.label2.TabIndex = 3;
|
||||
this.label2.Text = "";
|
||||
this.label2.Click += new System.EventHandler(this.label2_Click);
|
||||
}
|
||||
//
|
||||
// lbupgradedesc
|
||||
//
|
||||
this.lbupgradedesc.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.lbupgradedesc.Location = new System.Drawing.Point(0, 42);
|
||||
this.lbupgradedesc.Name = "lbupgradedesc";
|
||||
this.lbupgradedesc.Size = new System.Drawing.Size(376, 348);
|
||||
this.lbupgradedesc.TabIndex = 2;
|
||||
this.lbupgradedesc.Text = "{SHIFTORIUM_EXP}";
|
||||
this.lbupgradedesc.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||
this.lbupgradedesc.UseCompatibleTextRendering = true;
|
||||
//
|
||||
// pnlupgradeactions
|
||||
//
|
||||
this.pnlupgradeactions.Controls.Add(this.btnbuy);
|
||||
this.pnlupgradeactions.Dock = System.Windows.Forms.DockStyle.Bottom;
|
||||
this.pnlupgradeactions.Location = new System.Drawing.Point(0, 390);
|
||||
this.pnlupgradeactions.Name = "pnlupgradeactions";
|
||||
this.pnlupgradeactions.Size = new System.Drawing.Size(376, 37);
|
||||
this.pnlupgradeactions.TabIndex = 1;
|
||||
//
|
||||
// btnbuy
|
||||
//
|
||||
this.btnbuy.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.btnbuy.AutoSize = true;
|
||||
this.btnbuy.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
||||
this.btnbuy.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.btnbuy.Location = new System.Drawing.Point(327, 9);
|
||||
this.btnbuy.Name = "btnbuy";
|
||||
this.btnbuy.Size = new System.Drawing.Size(37, 25);
|
||||
this.btnbuy.TabIndex = 0;
|
||||
this.btnbuy.Text = "Buy";
|
||||
this.btnbuy.UseVisualStyleBackColor = true;
|
||||
this.btnbuy.Visible = false;
|
||||
this.btnbuy.Click += new System.EventHandler(this.btnbuy_Click);
|
||||
//
|
||||
// lbupgradetitle
|
||||
//
|
||||
this.lbupgradetitle.Dock = System.Windows.Forms.DockStyle.Top;
|
||||
this.lbupgradetitle.Location = new System.Drawing.Point(0, 0);
|
||||
this.lbupgradetitle.Name = "lbupgradetitle";
|
||||
this.lbupgradetitle.Size = new System.Drawing.Size(376, 42);
|
||||
this.lbupgradetitle.TabIndex = 0;
|
||||
this.lbupgradetitle.Text = "{WELCOME_TO_SHIFTORIUM}";
|
||||
this.lbupgradetitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||
this.lbupgradetitle.UseCompatibleTextRendering = true;
|
||||
//
|
||||
// pnllist
|
||||
//
|
||||
this.pnllist.Controls.Add(this.label2);
|
||||
this.pnllist.Controls.Add(this.label1);
|
||||
this.pnllist.Controls.Add(this.pgupgradeprogress);
|
||||
this.pnllist.Controls.Add(this.lbupgrades);
|
||||
this.pnllist.Dock = System.Windows.Forms.DockStyle.Left;
|
||||
this.pnllist.Location = new System.Drawing.Point(0, 0);
|
||||
this.pnllist.Name = "pnllist";
|
||||
this.pnllist.Size = new System.Drawing.Size(406, 427);
|
||||
this.pnllist.TabIndex = 0;
|
||||
//
|
||||
// label1
|
||||
//
|
||||
this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.Location = new System.Drawing.Point(3, 399);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(137, 13);
|
||||
this.label1.TabIndex = 2;
|
||||
this.label1.Text = "{UPGRADE_PROGRESS}:";
|
||||
//
|
||||
// label3
|
||||
//
|
||||
this.label3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.label3.AutoSize = true;
|
||||
this.label3.Location = new System.Drawing.Point(3, 399);
|
||||
this.label3.Name = "label3";
|
||||
this.label3.Size = new System.Drawing.Size(137, 13);
|
||||
this.label3.TabIndex = 2;
|
||||
int upgradepercent = (pgupgradeprogress.Value / 100) * 100;
|
||||
this.label3.Text = upgradepercent.ToString();
|
||||
//
|
||||
// pgupgradeprogress
|
||||
//
|
||||
this.pgupgradeprogress.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.pgupgradeprogress.BlockSize = 5;
|
||||
this.pgupgradeprogress.Location = new System.Drawing.Point(146, 390);
|
||||
this.pgupgradeprogress.Maximum = 100;
|
||||
this.pgupgradeprogress.Name = "pgupgradeprogress";
|
||||
this.pgupgradeprogress.Size = new System.Drawing.Size(254, 23);
|
||||
this.pgupgradeprogress.Style = System.Windows.Forms.ProgressBarStyle.Continuous;
|
||||
this.pgupgradeprogress.TabIndex = 1;
|
||||
this.pgupgradeprogress.Value = 25;
|
||||
//
|
||||
// lbupgrades
|
||||
//
|
||||
this.lbupgrades.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.lbupgrades.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
|
||||
this.lbupgrades.FormattingEnabled = true;
|
||||
this.lbupgrades.Location = new System.Drawing.Point(3, 66);
|
||||
this.lbupgrades.Name = "lbupgrades";
|
||||
this.lbupgrades.Size = new System.Drawing.Size(397, 277);
|
||||
this.lbupgrades.TabIndex = 0;
|
||||
this.lbupgrades.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.lbupgrades_DrawItem);
|
||||
//
|
||||
// ShiftoriumFrontend
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.BackColor = System.Drawing.Color.Black;
|
||||
this.Controls.Add(this.panel1);
|
||||
this.ForeColor = System.Drawing.Color.LightGreen;
|
||||
this.Name = "ShiftoriumFrontend";
|
||||
this.Text = "{SHIFTORIUM_NAME}";
|
||||
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);
|
||||
this.pnlupgradeactions.PerformLayout();
|
||||
this.pnllist.ResumeLayout(false);
|
||||
this.pnllist.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.Panel panel1;
|
||||
private System.Windows.Forms.Panel panel2;
|
||||
private System.Windows.Forms.Panel pnllist;
|
||||
private System.Windows.Forms.ListBox lbupgrades;
|
||||
private System.Windows.Forms.Label lbupgradedesc;
|
||||
private System.Windows.Forms.Panel pnlupgradeactions;
|
||||
private System.Windows.Forms.Label lbupgradetitle;
|
||||
private System.Windows.Forms.Button btnbuy;
|
||||
private ShiftedProgressBar pgupgradeprogress;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.Label label3;
|
||||
}
|
||||
}
|
|
@ -1,196 +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.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using ShiftOS.Engine;
|
||||
using static ShiftOS.Engine.SkinEngine;
|
||||
using backend = ShiftOS.Engine.Shiftorium;
|
||||
namespace ShiftOS.WinForms.Applications
|
||||
{
|
||||
[Launcher("Shiftorium", true, "al_shiftorium", "Utilities")]
|
||||
[RequiresUpgrade("shiftorium_gui")]
|
||||
[MultiplayerOnly]
|
||||
[WinOpen("shiftorium")]
|
||||
[DefaultTitle("Shiftorium")]
|
||||
[DefaultIcon("iconShiftorium")]
|
||||
public partial class ShiftoriumFrontend : UserControl, IShiftOSWindow
|
||||
{
|
||||
|
||||
public static System.Timers.Timer timer100;
|
||||
|
||||
|
||||
public ShiftoriumFrontend()
|
||||
{
|
||||
|
||||
InitializeComponent();
|
||||
PopulateShiftorium();
|
||||
lbupgrades.SelectedIndexChanged += (o, a) =>
|
||||
{
|
||||
try
|
||||
{
|
||||
lbupgrades.Refresh();
|
||||
SelectUpgrade(lbupgrades.SelectedItem.ToString());
|
||||
}
|
||||
catch { }
|
||||
};
|
||||
this.pgupgradeprogress.Maximum = backend.GetDefaults().Count;
|
||||
this.pgupgradeprogress.Value = SaveSystem.CurrentSave.CountUpgrades();
|
||||
backend.Installed += () =>
|
||||
{
|
||||
this.pgupgradeprogress.Maximum = backend.GetDefaults().Count;
|
||||
this.pgupgradeprogress.Value = SaveSystem.CurrentSave.CountUpgrades();
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
public void SelectUpgrade(string name)
|
||||
{
|
||||
btnbuy.Show();
|
||||
var upg = upgrades[name];
|
||||
lbupgradetitle.Text = Localization.Parse(upg.Name);
|
||||
lbupgradedesc.Text = Localization.Parse(upg.Description);
|
||||
}
|
||||
|
||||
Dictionary<string, ShiftoriumUpgrade> upgrades = new Dictionary<string, ShiftoriumUpgrade>();
|
||||
|
||||
public void PopulateShiftorium()
|
||||
{
|
||||
lbupgrades.Items.Clear();
|
||||
upgrades.Clear();
|
||||
Timer();
|
||||
label2.Text = "You have: " + SaveSystem.CurrentSave.Codepoints.ToString() + " Codepoints";
|
||||
|
||||
foreach (var upg in backend.GetAvailable())
|
||||
{
|
||||
String name = Localization.Parse(upg.Name) + " - " + upg.Cost.ToString() + "CP";
|
||||
upgrades.Add(name, upg);
|
||||
lbupgrades.Items.Add(name);
|
||||
}
|
||||
}
|
||||
|
||||
public static bool UpgradeInstalled(string upg)
|
||||
{
|
||||
return backend.UpgradeInstalled(upg);
|
||||
}
|
||||
|
||||
public static bool UpgradeAttributesUnlocked(FieldInfo finf)
|
||||
{
|
||||
return backend.UpgradeAttributesUnlocked(finf);
|
||||
}
|
||||
|
||||
public static bool UpgradeAttributesUnlocked(MethodInfo finf)
|
||||
{
|
||||
return backend.UpgradeAttributesUnlocked(finf);
|
||||
}
|
||||
|
||||
public static bool UpgradeAttributesUnlocked(Type finf)
|
||||
{
|
||||
return backend.UpgradeAttributesUnlocked(finf);
|
||||
}
|
||||
|
||||
public static bool UpgradeAttributesUnlocked(PropertyInfo finf)
|
||||
{
|
||||
return backend.UpgradeAttributesUnlocked(finf);
|
||||
}
|
||||
|
||||
private void lbupgrades_DrawItem(object sender, DrawItemEventArgs e)
|
||||
{
|
||||
var foreground = new SolidBrush(LoadedSkin.ControlTextColor);
|
||||
var background = new SolidBrush(LoadedSkin.ControlColor);
|
||||
|
||||
e.Graphics.FillRectangle(background, e.Bounds);
|
||||
try
|
||||
{
|
||||
if (lbupgrades.GetSelected(e.Index) == true)
|
||||
{
|
||||
e.Graphics.FillRectangle(foreground, e.Bounds);
|
||||
e.Graphics.DrawString(lbupgrades.Items[e.Index].ToString(), e.Font, background, e.Bounds.Location);
|
||||
}
|
||||
else
|
||||
{
|
||||
e.Graphics.FillRectangle(background, e.Bounds);
|
||||
e.Graphics.DrawString(lbupgrades.Items[e.Index].ToString(), e.Font, foreground, e.Bounds.Location);
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
private void btnbuy_Click(object sender, EventArgs e)
|
||||
{
|
||||
backend.Silent = true;
|
||||
backend.Buy(upgrades[lbupgrades.SelectedItem.ToString()].ID, upgrades[lbupgrades.SelectedItem.ToString()].Cost);
|
||||
backend.Silent = false;
|
||||
PopulateShiftorium();
|
||||
btnbuy.Hide();
|
||||
}
|
||||
|
||||
private void Shiftorium_Load(object sender, EventArgs e) {
|
||||
|
||||
}
|
||||
|
||||
public void OnLoad()
|
||||
{
|
||||
}
|
||||
|
||||
public void OnSkinLoad()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public bool OnUnload()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public void OnUpgrade()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void label2_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void Timer()
|
||||
{
|
||||
timer100 = new System.Timers.Timer();
|
||||
timer100.Interval = 2000;
|
||||
//timer100.Elapsed += ???;
|
||||
timer100.AutoReset = true;
|
||||
timer100.Enabled = true;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,115 +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.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using ShiftOS.Engine;
|
||||
using ShiftOS.WinForms.Tools;
|
||||
|
||||
namespace ShiftOS.WinForms.Controls
|
||||
{
|
||||
public class TerminalBox : RichTextBox, ITerminalWidget
|
||||
{
|
||||
public void SelectBottom()
|
||||
{
|
||||
try
|
||||
{
|
||||
this.Select(this.Text.Length, 0);
|
||||
this.ScrollToCaret();
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
protected override void OnClick(EventArgs e)
|
||||
{
|
||||
base.OnClick(e);
|
||||
this.Select(this.TextLength, 0);
|
||||
}
|
||||
|
||||
public void Write(string text)
|
||||
{
|
||||
this.HideSelection = true;
|
||||
this.Select(this.TextLength, 0);
|
||||
this.SelectionFont = ConstructFont();
|
||||
this.SelectionColor = ControlManager.ConvertColor(ConsoleEx.ForegroundColor);
|
||||
this.SelectionBackColor = ControlManager.ConvertColor(ConsoleEx.BackgroundColor);
|
||||
this.AppendText(Localization.Parse(text));
|
||||
this.HideSelection = false;
|
||||
}
|
||||
|
||||
private Font ConstructFont()
|
||||
{
|
||||
FontStyle fs = FontStyle.Regular;
|
||||
if (ConsoleEx.Bold)
|
||||
fs = fs | FontStyle.Bold;
|
||||
if (ConsoleEx.Italic)
|
||||
fs = fs | FontStyle.Italic;
|
||||
if (ConsoleEx.Underline)
|
||||
fs = fs | FontStyle.Underline;
|
||||
|
||||
return new Font(this.Font, fs);
|
||||
}
|
||||
|
||||
public void WriteLine(string text)
|
||||
{
|
||||
this.HideSelection = true;
|
||||
this.Select(this.TextLength, 0);
|
||||
this.SelectionFont = ConstructFont();
|
||||
this.SelectionColor = ControlManager.ConvertColor(ConsoleEx.ForegroundColor);
|
||||
this.SelectionBackColor = ControlManager.ConvertColor(ConsoleEx.BackgroundColor);
|
||||
this.AppendText(Localization.Parse(text) + Environment.NewLine);
|
||||
this.HideSelection = false;
|
||||
}
|
||||
|
||||
bool quickCopying = false;
|
||||
|
||||
protected override void OnMouseDown(MouseEventArgs e)
|
||||
{
|
||||
//if right-clicking, then we initiate a quick-copy.
|
||||
if (e.Button == MouseButtons.Right)
|
||||
quickCopying = true;
|
||||
|
||||
//Override the mouse event so that it's a left-click at all times.
|
||||
base.OnMouseDown(new MouseEventArgs(MouseButtons.Left, e.Clicks, e.X, e.Y, e.Delta));
|
||||
}
|
||||
|
||||
protected override void OnMouseUp(MouseEventArgs mevent)
|
||||
{
|
||||
if(quickCopying == true)
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(this.SelectedText))
|
||||
{
|
||||
this.Copy();
|
||||
}
|
||||
}
|
||||
base.OnMouseUp(mevent);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,540 +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.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using Newtonsoft.Json;
|
||||
using ShiftOS.Engine;
|
||||
using ShiftOS.Objects;
|
||||
using ShiftOS.Objects.ShiftFS;
|
||||
|
||||
namespace ShiftOS.WinForms
|
||||
{
|
||||
public partial class Oobe : Form, IOobe, ITutorial
|
||||
{
|
||||
public Oobe()
|
||||
{
|
||||
InitializeComponent();
|
||||
this.FormBorderStyle = FormBorderStyle.None;
|
||||
this.WindowState = FormWindowState.Maximized;
|
||||
this.BackColor = Color.Black;
|
||||
|
||||
}
|
||||
|
||||
|
||||
string rtext;
|
||||
string gtexttotype;
|
||||
int charcount;
|
||||
int slashcount;
|
||||
Label textgeninput;
|
||||
public bool upgraded = false;
|
||||
|
||||
private bool typing = false;
|
||||
|
||||
public void TextType(string texttotype)
|
||||
{
|
||||
while(typing == true)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
charcount = texttotype.Length;
|
||||
gtexttotype = texttotype;
|
||||
slashcount = 1;
|
||||
foreach (var c in gtexttotype)
|
||||
{
|
||||
typing = true;
|
||||
rtext += c;
|
||||
|
||||
this.Invoke(new Action(() =>
|
||||
{
|
||||
textgeninput.Text = rtext + "|";
|
||||
}));
|
||||
slashcount++;
|
||||
if (slashcount == 5)
|
||||
slashcount = 1;
|
||||
Thread.Sleep(50);
|
||||
}
|
||||
rtext += Environment.NewLine;
|
||||
typing = false;
|
||||
}
|
||||
|
||||
public Save MySave = null;
|
||||
|
||||
public event EventHandler OnComplete;
|
||||
|
||||
private int tutPrg = 0;
|
||||
|
||||
public int TutorialProgress
|
||||
{
|
||||
get
|
||||
{
|
||||
return tutPrg;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
tutPrg = value;
|
||||
}
|
||||
}
|
||||
|
||||
public void StartShowing(Save save)
|
||||
{
|
||||
var t = new Thread(new ThreadStart(() =>
|
||||
{
|
||||
try
|
||||
{
|
||||
textgeninput = this.lblHijack;
|
||||
TextType("Your system is now being hijacked.");
|
||||
rtext = "";
|
||||
Thread.Sleep(1000);
|
||||
textgeninput = this.lblhackwords;
|
||||
this.Invoke(new Action(() =>
|
||||
{
|
||||
lblHijack.Hide();
|
||||
}));
|
||||
TextType("Hello, and welcome to ShiftOS.");
|
||||
Thread.Sleep(500);
|
||||
TextType("You have been cordially and involuntarily selected to participate in the development and testing of this operating system.");
|
||||
Thread.Sleep(500);
|
||||
TextType("My identity shall remain secret, but if you've been through this before, you'll know exactly who I am.");
|
||||
Thread.Sleep(500);
|
||||
TextType("But that doesn't matter.");
|
||||
Thread.Sleep(500);
|
||||
TextType("I will now begin to prepare your system for the installation of ShiftOS.");
|
||||
Thread.Sleep(1000);
|
||||
FakeSetupScreen fakeForm = null;
|
||||
this.Invoke(new Action(() =>
|
||||
{
|
||||
fakeForm = new FakeSetupScreen(this);
|
||||
fakeForm.Show();
|
||||
MySave = save;
|
||||
lblhackwords.GotFocus += (o, a) =>
|
||||
{
|
||||
try
|
||||
{
|
||||
fakeForm.Invoke(new Action(() =>
|
||||
{
|
||||
fakeForm.Focus();
|
||||
fakeForm.BringToFront();
|
||||
}));
|
||||
}
|
||||
catch { }
|
||||
};
|
||||
fakeForm.TextSent += (txt) =>
|
||||
{
|
||||
TextType(txt);
|
||||
};
|
||||
}));
|
||||
while (fakeForm?.Visible == true)
|
||||
{
|
||||
Thread.Sleep(10);
|
||||
}
|
||||
if (fakeForm.CreateNewSave == true)
|
||||
{
|
||||
TextType("That's all the information I need for now.");
|
||||
Thread.Sleep(2000);
|
||||
TextType("Beginning installation of ShiftOS on " + MySave.SystemName + ".");
|
||||
Thread.Sleep(500);
|
||||
TextType("Creating new user: " + MySave.Username);
|
||||
TextType("...with 0 Codepoints, 0 installed upgrades, no legion, and no user shops...");
|
||||
MySave.Codepoints = 0;
|
||||
MySave.CurrentLegions = new List<string>();
|
||||
MySave.MyShop = "";
|
||||
TextType("User created successfully.");
|
||||
Thread.Sleep(450);
|
||||
TextType("You may be wondering what all that meant... You see, in ShiftOS, your user account holds everything I need to know about you.");
|
||||
Thread.Sleep(640);
|
||||
TextType("It holds the amount of Codepoints you have - Codepoints are a special currency you can get by doing various tasks in ShiftOS.");
|
||||
Thread.Sleep(500);
|
||||
TextType("It also holds all the upgrades you've installed onto ShiftOS - features, applications, enhancements, patches, all that stuff.");
|
||||
Thread.Sleep(500);
|
||||
TextType("As for the legions and the shop thing, I'll reveal that to you when it becomes necessary.");
|
||||
Thread.Sleep(500);
|
||||
TextType("Your user account is stored on a server of mine called the multi-user domain. It holds every single user account, every script, every application, every thing within ShiftOS.");
|
||||
Thread.Sleep(600);
|
||||
TextType("Every time you boot ShiftOS, if you are connected to the Internet, you will immediately connect to the multi-user domain and ShiftOS will attempt to authenticate using the last ");
|
||||
TextType("successful username and password pair.");
|
||||
Thread.Sleep(500);
|
||||
TextType("When you are in the MUD, you are in the middle of a free-for-all. I don't want it to be this way, it just is. I've employed you to help me develop and test the MUD and ShiftOS, ");
|
||||
TextType("but you have a secondary task if you choose to accept it.");
|
||||
Thread.Sleep(500);
|
||||
TextType("There have been a few rebelious groups in the MUD - who have cracked ShiftOS's security barriers - and they're using these exploits to steal others' Codepoints, upgrades, ");
|
||||
TextType("and even spread damaging viruses.");
|
||||
Thread.Sleep(500);
|
||||
TextType("I want you to stop them.");
|
||||
Thread.Sleep(500);
|
||||
TextType("Whoever can stop these hackers will gain eternal control over the multi-user domain. They will be given the ability to do as they please, so long as it doesn't interfere with my experiments.");
|
||||
Thread.Sleep(500);
|
||||
TextType("I have been installing ShiftOS on your system in the background as I was talking with you. Before I can set you free, I need to give you a tutorial on how to use the system.");
|
||||
Thread.Sleep(500);
|
||||
TextType("I will reboot your system in Tutorial Mode now. Complete the tutorial, and you shall be on your way.");
|
||||
|
||||
Thread.Sleep(3000);
|
||||
SaveSystem.CurrentSave = MySave;
|
||||
SaveSystem.CurrentSave.StoryPosition = 1;
|
||||
Utils.WriteAllText(Paths.GetPath("user.dat"), JsonConvert.SerializeObject(new
|
||||
{
|
||||
username = MySave.Username,
|
||||
password = MySave.Password
|
||||
}));
|
||||
Shiftorium.Silent = true;
|
||||
SaveSystem.SaveGame(); //Yknow, just incase it crashes.
|
||||
}
|
||||
else
|
||||
{
|
||||
TextType("Your login attempt was successful, " + SaveSystem.CurrentSave.Username + ".");
|
||||
Thread.Sleep(500);
|
||||
TextType($"According to my data on you, you have earned {SaveSystem.CurrentSave.Codepoints} Codepoints so far.");
|
||||
Thread.Sleep(500);
|
||||
TextType($"You have also acquired {SaveSystem.CurrentSave.CountUpgrades()} Shiftorium upgrades out of the {SaveSystem.CurrentSave.Upgrades.Count} available.");
|
||||
Thread.Sleep(500);
|
||||
TextType("I will now let you proceed to your system.");
|
||||
Thread.Sleep(1000);
|
||||
}
|
||||
this.Invoke(new Action(this.Close));
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
TextType("I have experienced an error.");
|
||||
TextType(e.ToString());
|
||||
}
|
||||
}));
|
||||
this.Show();
|
||||
this.BringToFront();
|
||||
this.TopMost = true;
|
||||
t.IsBackground = true;
|
||||
t.Start();
|
||||
}
|
||||
|
||||
public void Clear()
|
||||
{
|
||||
this.Invoke(new Action(() =>
|
||||
{
|
||||
rtext = "";
|
||||
textgeninput.Text = "";
|
||||
}));
|
||||
}
|
||||
|
||||
public void ShowSaveTransfer(Save save)
|
||||
{
|
||||
this.Show();
|
||||
var fSetup = new FakeSetupScreen(this, 7);
|
||||
|
||||
var t = new Thread(() =>
|
||||
{
|
||||
textgeninput = lblhackwords;
|
||||
Clear();
|
||||
TextType("Welcome back to ShiftOS.");
|
||||
Thread.Sleep(500);
|
||||
TextType("Since your last time inside ShiftOS, the operating system has changed. Your user account is no longer stored on your local system.");
|
||||
Thread.Sleep(500);
|
||||
this.Invoke(new Action(() =>
|
||||
{
|
||||
//UPS is drunky heaven over here... it's a liquor store, I think... - Drunk Michael
|
||||
fSetup.UserReregistered += (u, p, s) =>
|
||||
{
|
||||
save.Username = u;
|
||||
save.Password = p;
|
||||
save.SystemName = s;
|
||||
SaveSystem.CurrentSave = save;
|
||||
SaveSystem.CurrentSave.Upgrades = new Dictionary<string, bool>();
|
||||
Shiftorium.Init();
|
||||
|
||||
SaveSystem.SaveGame();
|
||||
if(Utils.FileExists(Paths.SaveFileInner))
|
||||
Utils.Delete(Paths.SaveFileInner);
|
||||
this.Close();
|
||||
};
|
||||
fSetup.Show();
|
||||
}));
|
||||
});
|
||||
t.IsBackground = true;
|
||||
t.Start();
|
||||
}
|
||||
|
||||
public void PromptForLogin()
|
||||
{
|
||||
this.Show();
|
||||
this.TopMost = true;
|
||||
lblHijack.Text = "";
|
||||
textgeninput = lblhackwords;
|
||||
|
||||
var fsw = new FakeSetupScreen(this, 10);
|
||||
fsw.Show();
|
||||
fsw.TopMost = true;
|
||||
fsw.DoneLoggingIn += () =>
|
||||
{
|
||||
this.Close();
|
||||
};
|
||||
}
|
||||
|
||||
public void StartTrailer()
|
||||
{
|
||||
while(AppearanceManager.OpenForms.Count > 0)
|
||||
{
|
||||
AppearanceManager.OpenForms[0].Close();
|
||||
}
|
||||
|
||||
this.Show();
|
||||
this.TopMost = true;
|
||||
this.TransparencyKey = Color.Magenta;
|
||||
this.BackColor = this.TransparencyKey;
|
||||
textgeninput = lblHijack;
|
||||
textgeninput.BackColor = Color.Black;
|
||||
textgeninput.Font = new Font("Lucida Console", 13F, FontStyle.Bold);
|
||||
textgeninput.AutoSize = true;
|
||||
textgeninput.TextAlign = ContentAlignment.MiddleCenter;
|
||||
textgeninput.TextChanged += (o, a) =>
|
||||
{
|
||||
textgeninput.Location = new Point(
|
||||
(this.Width - textgeninput.Width) / 2,
|
||||
(this.Height - textgeninput.Height) / 2
|
||||
);
|
||||
};
|
||||
var t = new Thread(() =>
|
||||
{
|
||||
Clear();
|
||||
Thread.Sleep(5000);
|
||||
TextType("Michael VanOverbeek");
|
||||
TextType("presents...");
|
||||
Thread.Sleep(2000);
|
||||
Clear();
|
||||
Thread.Sleep(1000);
|
||||
TextType("A community-developed game");
|
||||
Thread.Sleep(3000);
|
||||
Clear();
|
||||
Thread.Sleep(1000);
|
||||
this.Invoke(new Action(() =>
|
||||
{
|
||||
textgeninput.Font = new Font("Lucida Console", 14F, FontStyle.Bold);
|
||||
this.BackColor = Color.Black;
|
||||
}));
|
||||
TextType("Welcome to ShiftOS.");
|
||||
Thread.Sleep(4000);
|
||||
Clear();
|
||||
textgeninput = lblhackwords;
|
||||
TextType("Hello.");
|
||||
Thread.Sleep(500);
|
||||
TextType("You have been cordially and involuntarily selected to participate in the development and testing of an experimental operating system called ShiftOS.");
|
||||
Thread.Sleep(500);
|
||||
TextType("I want ShiftOS to be the most advanced operating system in the world.");
|
||||
Thread.Sleep(500);
|
||||
TextType("In ShiftOS, you start out with nothing.");
|
||||
Thread.Sleep(500);
|
||||
TextType("And your goal is to upgrade the operating system from a barebones command line to a fully graphical operating system.");
|
||||
Thread.Sleep(500);
|
||||
TextType("Along the way, you'll meet many people - hackers, rebels, programmers, administrators and many more.");
|
||||
Thread.Sleep(500);
|
||||
TextType("You'll meet new friends and foes.");
|
||||
Thread.Sleep(500);
|
||||
TextType("Your goal: Take it over. Upgrade the operating system, and take over its multi-user domain.");
|
||||
Thread.Sleep(500);
|
||||
TextType("I won't reveal quite what you have to do, but if you can handle it, head over to http://getshiftos.ml/ and download the operating system now.");
|
||||
Thread.Sleep(5000);
|
||||
Clear();
|
||||
textgeninput = lblHijack;
|
||||
TextType("Think you can handle it?");
|
||||
});
|
||||
t.IsBackground = false;
|
||||
t.Start();
|
||||
}
|
||||
|
||||
public void Start()
|
||||
{
|
||||
Shiftorium.Silent = false;
|
||||
foreach(var frm in AppearanceManager.OpenForms)
|
||||
{
|
||||
(frm as Form).Invoke(new Action(() => {
|
||||
frm.Close();
|
||||
}));
|
||||
}
|
||||
|
||||
TerminalBackend.CommandProcessed += (cmd, args) =>
|
||||
{
|
||||
if(cmd == "sos.help")
|
||||
{
|
||||
if (TutorialProgress == 0)
|
||||
TutorialProgress = 1;
|
||||
}
|
||||
else if(cmd == "sos.status")
|
||||
{
|
||||
if (TutorialProgress == 1)
|
||||
TutorialProgress = 2;
|
||||
|
||||
}
|
||||
else if(cmd == "shiftorium.list")
|
||||
{
|
||||
if (TutorialProgress == 2)
|
||||
{
|
||||
TutorialProgress = 3;
|
||||
SaveSystem.TransferCodepointsFrom("sys", 50);
|
||||
}
|
||||
}
|
||||
else if(cmd == "shiftorium.info" && args == "{\"upgrade\":\"mud_fundamentals\"}")
|
||||
{
|
||||
if (TutorialProgress == 3)
|
||||
TutorialProgress = 4;
|
||||
}
|
||||
else if(cmd == "win.open")
|
||||
{
|
||||
if (TutorialProgress == 4)
|
||||
TutorialProgress = 5;
|
||||
}
|
||||
};
|
||||
if(this.Visible == false)
|
||||
this.Show();
|
||||
var t = new Thread(() =>
|
||||
{
|
||||
textgeninput = lblHijack;
|
||||
Clear();
|
||||
textgeninput = lblhackwords;
|
||||
Clear();
|
||||
|
||||
this.Invoke(new Action(() =>
|
||||
{
|
||||
textgeninput.Font = SkinEngine.LoadedSkin.TerminalFont;
|
||||
}));
|
||||
TextType("ShiftOS has been installed successfully.");
|
||||
Thread.Sleep(500);
|
||||
TextType("Before you can continue to the operating system, here's a little tutorial on how to use it.");
|
||||
Thread.Sleep(500);
|
||||
TextType("Starting a Terminal...");
|
||||
Applications.Terminal term = null;
|
||||
this.Invoke(new Action(() =>
|
||||
{
|
||||
term = new Applications.Terminal();
|
||||
this.Controls.Add(term);
|
||||
term.Location = new Point(
|
||||
(this.Width - term.Width) / 2,
|
||||
(this.Height - term.Height) / 2
|
||||
);
|
||||
term.Show();
|
||||
term.OnLoad();
|
||||
term.OnSkinLoad();
|
||||
term.OnUpgrade();
|
||||
}));
|
||||
TextType("This little text box is called a Terminal.");
|
||||
Thread.Sleep(500);
|
||||
TextType("Normally, it would appear in full-screen, but this window is hosting it as a control so you can see this text as well.");
|
||||
Thread.Sleep(500);
|
||||
TextType("In ShiftOS, the Terminal is your main control centre for the operating system. You can see system status, check Codepoints, open other programs, buy upgrades, and more.");
|
||||
Thread.Sleep(500);
|
||||
TextType("Go ahead and type 'sos.help' to see a list of commands.");
|
||||
while(TutorialProgress == 0)
|
||||
{
|
||||
|
||||
}
|
||||
TextType("As you can see, sos.help gives you a list of all commands in the system.");
|
||||
Thread.Sleep(500);
|
||||
TextType("You can run any command, by typing in their Namespace, followed by a period (.), followed by their Command Name.");
|
||||
Thread.Sleep(500);
|
||||
TextType("Go ahead and run the 'status' command within the 'sos' namespace to see what the command does.");
|
||||
while(TutorialProgress == 1)
|
||||
{
|
||||
|
||||
}
|
||||
TextType("Brilliant. The sos.status command will tell you how many Codepoints you have, as well as how many upgrades you have installed and how many are available.");
|
||||
Thread.Sleep(500);
|
||||
TextType("Codepoints, as you know, are a special currency within ShiftOS. They are used to buy things within the multi-user domain, such as upgrades, scripts, and applications.");
|
||||
Thread.Sleep(500);
|
||||
TextType("You can earn Codepoints by doing things in ShiftOS - such as completing jobs for other users, making things like skins, scripts, documents, etc, and playing games like Pong.");
|
||||
Thread.Sleep(500);
|
||||
TextType("At times, you'll be given Codepoints to help complete a task. You will receive Codepoints from 'sys' - the multi-user domain itself.");
|
||||
//SaveSystem.TransferCodepointsFrom("sys", 50);
|
||||
TextType("Right now, you don't have any upgrades. Upgrades can give ShiftOS additional features and capabilities - like new core applications, supported file types, and new Terminal commands.");
|
||||
Thread.Sleep(500);
|
||||
TextType("You can easily get upgrades using the Shiftorium - a repository of approved ShiftOS upgrades.");
|
||||
Thread.Sleep(500);
|
||||
TextType("To start using the Shiftorium, simply type 'shiftorium.list' to see available upgrades.");
|
||||
while(TutorialProgress == 2)
|
||||
{
|
||||
|
||||
}
|
||||
Clear();
|
||||
TextType("Right now, you have enough Codepoints to buy the 'mud_fundamentals' upgrade. You can use shiftorium.info to see information about this upgrade.");
|
||||
Thread.Sleep(500);
|
||||
TextType("Some commands, like shiftorium.info, require you to pass information to them in the form of arguments.");
|
||||
Thread.Sleep(500);
|
||||
TextType("Argument pairs sit at the end of the command, and are enclosed in curly braces.");
|
||||
Thread.Sleep(500);
|
||||
TextType("Inside these curly braces, you can input an argument key, followed by a colon, followed by the value. Then, if you need multiple arguments, you can put a comma after the value, and then insert another argument pair.");
|
||||
Thread.Sleep(500);
|
||||
TextType("There are different value types - numeric values, which can be any positive or negative 32-bit integer");
|
||||
Thread.Sleep(500);
|
||||
TextType("Then there are boolean values which can be either 'true' or 'false'");
|
||||
Thread.Sleep(500);
|
||||
TextType("Then there are string values, which are enclosed in double-quotes.");
|
||||
Thread.Sleep(500);
|
||||
TextType(" If for some reason you need to use a double-quote inside a string, you must escape it using a single backslash followed by the quote, like this: key:\"My \\\"awesome\\\" value.\"");
|
||||
Thread.Sleep(500);
|
||||
TextType("If you want to escape a backslash inside a string, simply type two backslashes instead of one - for example key:\"Back\\\\slash.\"");
|
||||
Thread.Sleep(500);
|
||||
TextType("shiftorium.info requires an upgrade argument, which is a string type. Go ahead and give shiftorium.info's upgrade argument the 'mud_fundamentals' upgrade's ID.");
|
||||
while(TutorialProgress == 3)
|
||||
{
|
||||
|
||||
}
|
||||
TextType("As you can see, mud_fundamentals is very useful. In fact, a lot of useful upgrades depend on it. You should buy it!");
|
||||
Thread.Sleep(500);
|
||||
TextType("shiftorium.info already gave you a command that will let you buy the upgrade - go ahead and run that command!");
|
||||
while (!Shiftorium.UpgradeInstalled("mud_fundamentals"))
|
||||
{
|
||||
|
||||
}
|
||||
TextType("Hooray! You now have the MUD Fundamentals upgrade.");
|
||||
Thread.Sleep(500);
|
||||
TextType("You can also earn more Codepoints by playing Pong. To open Pong, you can use the win.open command.");
|
||||
Thread.Sleep(500);
|
||||
TextType("If you run win.open without arguments, you can see a list of applications that you can open.");
|
||||
Thread.Sleep(500);
|
||||
TextType("Just run win.open without arguments, and this tutorial will be completed!");
|
||||
while(TutorialProgress == 4)
|
||||
{
|
||||
|
||||
}
|
||||
TextType("This concludes the ShiftOS beginners' guide brought to you by the multi-user domain. Stay safe in a connected world.");
|
||||
Thread.Sleep(2000);
|
||||
this.Invoke(new Action(() =>
|
||||
{
|
||||
OnComplete?.Invoke(this, EventArgs.Empty);
|
||||
this.Close();
|
||||
SaveSystem.CurrentSave.StoryPosition = 2;
|
||||
SaveSystem.SaveGame();
|
||||
AppearanceManager.SetupWindow(new Applications.Terminal());
|
||||
}));
|
||||
});
|
||||
t.IsBackground = true;
|
||||
t.Start();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,325 +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.Drawing;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using ShiftOS.Engine;
|
||||
using static ShiftOS.Engine.AppearanceManager;
|
||||
|
||||
|
||||
namespace ShiftOS.WinForms.Tools
|
||||
{
|
||||
public static class ControlManager
|
||||
{
|
||||
[DllImport("user32.dll")]
|
||||
public static extern int SendMessage(IntPtr hWnd, Int32 wMsg, bool wParam, Int32 lParam);
|
||||
|
||||
private const int WM_SETREDRAW = 11;
|
||||
|
||||
public static void SuspendDrawing(Control parent)
|
||||
{
|
||||
SendMessage(parent.Handle, WM_SETREDRAW, false, 0);
|
||||
}
|
||||
|
||||
public static void ResumeDrawing(Control parent)
|
||||
{
|
||||
SendMessage(parent.Handle, WM_SETREDRAW, true, 0);
|
||||
parent.Refresh();
|
||||
}
|
||||
|
||||
public static void Close(this UserControl ctrl)
|
||||
{
|
||||
for (int i = 0; i < AppearanceManager.OpenForms.Count; i++)
|
||||
{
|
||||
if (OpenForms[i].ParentWindow == ctrl)
|
||||
{
|
||||
(OpenForms[i] as Form).Close();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static void SetupWindows()
|
||||
{
|
||||
if (SaveSystem.CurrentSave != null)
|
||||
{
|
||||
int screen_height_start = 0;
|
||||
if (Shiftorium.UpgradeInstalled("wm_free_placement"))
|
||||
{
|
||||
}
|
||||
else if (Shiftorium.UpgradeInstalled("wm_4_windows"))
|
||||
{
|
||||
int screen_width_half = Screen.PrimaryScreen.Bounds.Width / 2;
|
||||
int screen_height_half = (Screen.PrimaryScreen.Bounds.Height - screen_height_start) / 2;
|
||||
|
||||
for (int i = 0; i < OpenForms.Count; i++)
|
||||
{
|
||||
var frm = OpenForms[i] as WindowBorder;
|
||||
|
||||
switch (i)
|
||||
{
|
||||
case 0:
|
||||
frm.Location = new System.Drawing.Point(0, screen_height_start);
|
||||
frm.Size = new System.Drawing.Size((OpenForms.Count > 1) ? screen_width_half : screen_width_half * 2, (OpenForms.Count > 2) ? screen_height_half : screen_height_half * 2);
|
||||
|
||||
break;
|
||||
case 1:
|
||||
frm.Location = new System.Drawing.Point(screen_width_half, screen_height_start);
|
||||
frm.Size = new System.Drawing.Size(screen_width_half, (OpenForms.Count > 2) ? screen_height_half : screen_height_half * 2);
|
||||
break;
|
||||
case 2:
|
||||
frm.Location = new System.Drawing.Point(0, screen_height_half + screen_height_start);
|
||||
frm.Size = new System.Drawing.Size((OpenForms.Count > 3) ? screen_width_half : screen_width_half * 2, screen_height_half);
|
||||
break;
|
||||
case 3:
|
||||
frm.Location = new System.Drawing.Point(screen_width_half, screen_height_half + screen_height_start);
|
||||
frm.Size = new System.Drawing.Size(screen_width_half, (OpenForms.Count > 2) ? screen_height_half : screen_height_half * 2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else if (Shiftorium.UpgradeInstalled("window_manager"))
|
||||
{
|
||||
int screen_width_half = Screen.PrimaryScreen.Bounds.Width / 2;
|
||||
int screen_height = (Screen.PrimaryScreen.Bounds.Height) - screen_height_start;
|
||||
|
||||
|
||||
|
||||
for (int i = 0; i < OpenForms.Count; i++)
|
||||
{
|
||||
|
||||
|
||||
var frm = OpenForms[i] as WindowBorder;
|
||||
switch (i)
|
||||
{
|
||||
case 0:
|
||||
frm.Location = new System.Drawing.Point(0, screen_height_start);
|
||||
frm.Size = new System.Drawing.Size((OpenForms.Count > 1) ? screen_width_half : screen_width_half * 2, screen_height);
|
||||
break;
|
||||
case 1:
|
||||
frm.Location = new System.Drawing.Point(screen_width_half, screen_height_start);
|
||||
frm.Size = new System.Drawing.Size(screen_width_half, screen_height);
|
||||
break;
|
||||
}
|
||||
OpenForms[i] = frm;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var frm = OpenForms[0] as WindowBorder;
|
||||
frm.Location = new Point(0, 0);
|
||||
frm.Size = Desktop.Size;
|
||||
OpenForms[0] = frm;
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var frm = OpenForms[0] as WindowBorder;
|
||||
frm.Location = new Point(0, 0);
|
||||
frm.Size = Desktop.Size;
|
||||
OpenForms[0] = frm;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
internal static Color ConvertColor(ConsoleColor cCol)
|
||||
{
|
||||
switch (cCol)
|
||||
{
|
||||
case ConsoleColor.Black:
|
||||
return Color.Black;
|
||||
case ConsoleColor.Gray:
|
||||
return Color.Gray;
|
||||
case ConsoleColor.DarkGray:
|
||||
return Color.DarkGray;
|
||||
case ConsoleColor.Blue:
|
||||
return Color.Blue;
|
||||
case ConsoleColor.Cyan:
|
||||
return Color.Cyan;
|
||||
case ConsoleColor.DarkBlue:
|
||||
return Color.DarkBlue;
|
||||
case ConsoleColor.DarkCyan:
|
||||
return Color.DarkCyan;
|
||||
case ConsoleColor.DarkGreen:
|
||||
return Color.DarkGreen;
|
||||
case ConsoleColor.DarkMagenta:
|
||||
return Color.DarkMagenta;
|
||||
case ConsoleColor.DarkRed:
|
||||
return Color.DarkRed;
|
||||
case ConsoleColor.DarkYellow:
|
||||
return Color.YellowGreen;
|
||||
case ConsoleColor.Yellow:
|
||||
return Color.Yellow;
|
||||
case ConsoleColor.Green:
|
||||
return Color.Green;
|
||||
case ConsoleColor.Magenta:
|
||||
return Color.Magenta;
|
||||
case ConsoleColor.Red:
|
||||
return Color.Red;
|
||||
case ConsoleColor.White:
|
||||
return Color.White;
|
||||
default:
|
||||
return Color.Black;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static void SetCursor(Control ctrl)
|
||||
{
|
||||
#if STUPID
|
||||
if (!(ctrl is WebBrowser))
|
||||
{
|
||||
var mouse = SkinEngine.GetImage("mouse");
|
||||
if (mouse == null)
|
||||
mouse = Properties.Resources.DefaultMouse;
|
||||
|
||||
var mBmp = new Bitmap(mouse);
|
||||
mBmp.MakeTransparent(Color.FromArgb(1, 0, 1));
|
||||
var gfx = Graphics.FromImage(mBmp);
|
||||
var handle = mBmp.GetHicon();
|
||||
|
||||
var cursor = new Cursor(handle);
|
||||
ctrl.Cursor = cursor;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
public static void SetupControl(Control ctrl)
|
||||
{
|
||||
SuspendDrawing(ctrl);
|
||||
SetCursor(ctrl);
|
||||
if (!(ctrl is MenuStrip) && !(ctrl is ToolStrip) && !(ctrl is StatusStrip) && !(ctrl is ContextMenuStrip))
|
||||
{
|
||||
string tag = "";
|
||||
|
||||
try
|
||||
{
|
||||
tag = ctrl.Tag.ToString();
|
||||
}
|
||||
catch { }
|
||||
|
||||
if (!tag.Contains("keepbg"))
|
||||
{
|
||||
if (ctrl.BackColor != Control.DefaultBackColor)
|
||||
{
|
||||
ctrl.BackColor = SkinEngine.LoadedSkin.ControlColor;
|
||||
}
|
||||
}
|
||||
|
||||
ctrl.ForeColor = SkinEngine.LoadedSkin.ControlTextColor;
|
||||
|
||||
ctrl.Font = SkinEngine.LoadedSkin.MainFont;
|
||||
|
||||
if (tag.Contains("header1"))
|
||||
{
|
||||
ctrl.Font = SkinEngine.LoadedSkin.HeaderFont;
|
||||
}
|
||||
|
||||
if (tag.Contains("header2"))
|
||||
{
|
||||
ctrl.Font = SkinEngine.LoadedSkin.Header2Font;
|
||||
}
|
||||
|
||||
if (tag.Contains("header3"))
|
||||
{
|
||||
ctrl.Font = SkinEngine.LoadedSkin.Header3Font;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
ctrl.Text = Localization.Parse(ctrl.Text);
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
}
|
||||
ctrl.KeyDown += (o, a) =>
|
||||
{
|
||||
if (a.Control && a.KeyCode == Keys.T)
|
||||
{
|
||||
a.SuppressKeyPress = true;
|
||||
|
||||
|
||||
if (SaveSystem.CurrentSave != null)
|
||||
{
|
||||
if (Shiftorium.UpgradeInstalled("window_manager"))
|
||||
{
|
||||
Engine.AppearanceManager.SetupWindow(new Applications.Terminal());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ShiftOS.Engine.Scripting.LuaInterpreter.RaiseEvent("on_key_down", a);
|
||||
//a.Handled = true;
|
||||
};
|
||||
if (ctrl is Button)
|
||||
{
|
||||
(ctrl as Button).FlatStyle = FlatStyle.Flat;
|
||||
}
|
||||
else if (ctrl is WindowBorder)
|
||||
{
|
||||
(ctrl as WindowBorder).Setup();
|
||||
}
|
||||
}
|
||||
|
||||
MakeDoubleBuffered(ctrl);
|
||||
ResumeDrawing(ctrl);
|
||||
}
|
||||
|
||||
public static void MakeDoubleBuffered(Control c)
|
||||
{
|
||||
if (System.Windows.Forms.SystemInformation.TerminalServerSession)
|
||||
return;
|
||||
|
||||
System.Reflection.PropertyInfo aProp =
|
||||
typeof(System.Windows.Forms.Control).GetProperty(
|
||||
"DoubleBuffered",
|
||||
System.Reflection.BindingFlags.NonPublic |
|
||||
System.Reflection.BindingFlags.Instance);
|
||||
|
||||
aProp.SetValue(c, true, null);
|
||||
|
||||
}
|
||||
|
||||
public static void SetupControls(Control frm)
|
||||
{
|
||||
SetupControl(frm);
|
||||
|
||||
for (int i = 0; i < frm.Controls.Count; i++)
|
||||
{
|
||||
SetupControls(frm.Controls[i]);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -1,490 +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 static ShiftOS.Engine.SkinEngine;
|
||||
using System.Runtime.InteropServices;
|
||||
using ShiftOS.Engine;
|
||||
using ShiftOS.WinForms.Tools;
|
||||
using ShiftOS.WinForms.Applications;
|
||||
|
||||
/// <summary>
|
||||
/// Window border.
|
||||
/// </summary>
|
||||
namespace ShiftOS.WinForms
|
||||
{
|
||||
/// <summary>
|
||||
/// Window border.
|
||||
/// </summary>
|
||||
public partial class WindowBorder : Form, IWindowBorder
|
||||
{
|
||||
/// <summary>
|
||||
/// Raises the closing event.
|
||||
/// </summary>
|
||||
/// <param name="e">E.</param>
|
||||
protected override void OnClosing(CancelEventArgs e)
|
||||
{
|
||||
if ((ParentWindow as IShiftOSWindow).OnUnload())
|
||||
{
|
||||
if (!SaveSystem.ShuttingDown)
|
||||
{
|
||||
if(Engine.AppearanceManager.OpenForms.Contains(this))
|
||||
Engine.AppearanceManager.OpenForms.Remove(this);
|
||||
Desktop.ResetPanelButtons();
|
||||
}
|
||||
}
|
||||
base.OnClosing(e);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The parent window.
|
||||
/// </summary>
|
||||
private UserControl _parentWindow = null;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the parent window.
|
||||
/// </summary>
|
||||
/// <value>The parent window.</value>
|
||||
public IShiftOSWindow ParentWindow
|
||||
{
|
||||
get
|
||||
{
|
||||
return (IShiftOSWindow)_parentWindow;
|
||||
}
|
||||
set
|
||||
{
|
||||
_parentWindow = (UserControl)value;
|
||||
}
|
||||
}
|
||||
|
||||
internal void SetTitle(string title)
|
||||
{
|
||||
lbtitletext.Text = title;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="ShiftOS.WinForms.WindowBorder"/> class.
|
||||
/// </summary>
|
||||
/// <param name="win">Window.</param>
|
||||
public WindowBorder(UserControl win)
|
||||
{
|
||||
InitializeComponent();
|
||||
this._parentWindow = win;
|
||||
Shiftorium.Installed += () =>
|
||||
{
|
||||
try
|
||||
{
|
||||
this.ParentForm.Invoke(new Action(() =>
|
||||
{
|
||||
Setup();
|
||||
}));
|
||||
}
|
||||
catch { }
|
||||
};
|
||||
SkinEngine.SkinLoaded += () =>
|
||||
{
|
||||
try
|
||||
{
|
||||
Setup();
|
||||
(ParentWindow as IShiftOSWindow).OnSkinLoad();
|
||||
ControlManager.SetupControls(this.pnlcontents);
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
this.Width = LoadedSkin.LeftBorderWidth + _parentWindow.Width + LoadedSkin.RightBorderWidth;
|
||||
this.Height = LoadedSkin.TitlebarHeight + _parentWindow.Height + LoadedSkin.BottomBorderWidth;
|
||||
|
||||
this.pnlcontents.Controls.Add(this._parentWindow);
|
||||
this._parentWindow.Dock = DockStyle.Fill;
|
||||
this._parentWindow.Show();
|
||||
ControlManager.SetupControls(this._parentWindow);
|
||||
|
||||
|
||||
Desktop.ShowWindow(this);
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Universals the key down.
|
||||
/// </summary>
|
||||
/// <returns>The key down.</returns>
|
||||
/// <param name="o">O.</param>
|
||||
/// <param name="a">The alpha component.</param>
|
||||
public static void Universal_KeyDown(object o, KeyEventArgs a)
|
||||
{
|
||||
if (a.Control && a.KeyCode == Keys.T)
|
||||
{
|
||||
a.SuppressKeyPress = true;
|
||||
|
||||
|
||||
if (SaveSystem.CurrentSave != null)
|
||||
{
|
||||
if (Shiftorium.UpgradeInstalled("window_manager"))
|
||||
{
|
||||
Engine.AppearanceManager.SetupWindow(new Applications.Terminal());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ShiftOS.Engine.Scripting.LuaInterpreter.RaiseEvent("on_key_down", a);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Windows the border load.
|
||||
/// </summary>
|
||||
/// <returns>The border load.</returns>
|
||||
/// <param name="sender">Sender.</param>
|
||||
/// <param name="e">E.</param>
|
||||
public void WindowBorder_Load(object sender, EventArgs e)
|
||||
{
|
||||
this.DoubleBuffered = true;
|
||||
|
||||
this._parentWindow.TextChanged += (o, a) =>
|
||||
{
|
||||
Setup();
|
||||
Desktop.ResetPanelButtons();
|
||||
|
||||
};
|
||||
|
||||
this.Left = (Screen.PrimaryScreen.Bounds.Width - this.Width) / 2;
|
||||
this.Top = (Screen.PrimaryScreen.Bounds.Height - this.Height) / 2;
|
||||
|
||||
if (!this.IsDialog)
|
||||
{
|
||||
Engine.AppearanceManager.OpenForms.Add(this);
|
||||
}
|
||||
|
||||
SaveSystem.GameReady += () =>
|
||||
{
|
||||
if (Shiftorium.UpgradeInstalled("wm_free_placement"))
|
||||
{
|
||||
AppearanceManager.Invoke(new Action(() =>
|
||||
{
|
||||
this.Left = (Screen.PrimaryScreen.Bounds.Width - this.Width) / 2;
|
||||
this.Top = (Screen.PrimaryScreen.Bounds.Height - this.Height) / 2;
|
||||
|
||||
}));
|
||||
}
|
||||
AppearanceManager.Invoke(new Action(() =>
|
||||
{
|
||||
Setup();
|
||||
}));
|
||||
};
|
||||
|
||||
ControlManager.SetupControls(this);
|
||||
|
||||
Setup();
|
||||
|
||||
var sWin = (IShiftOSWindow)ParentWindow;
|
||||
|
||||
sWin.OnLoad();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Setup this instance.
|
||||
/// </summary>
|
||||
public void Setup()
|
||||
{
|
||||
this.lbtitletext.Text = NameChangerBackend.GetName(ParentWindow);
|
||||
|
||||
if (SaveSystem.CurrentSave != null)
|
||||
{
|
||||
this.pnltitle.Visible = Shiftorium.UpgradeInstalled("wm_titlebar");
|
||||
this.pnlclose.Visible = Shiftorium.UpgradeInstalled("close_button");
|
||||
this.pnlminimize.Visible = (IsDialog == false) && Shiftorium.UpgradeInstalled("minimize_button");
|
||||
this.pnlmaximize.Visible = (IsDialog == false) && Shiftorium.UpgradeInstalled("maximize_button");
|
||||
SetupSkin();
|
||||
}
|
||||
else
|
||||
{
|
||||
this.pnltitle.Visible = false;
|
||||
this.pnlclose.Visible = false;
|
||||
this.pnlminimize.Visible = false;
|
||||
this.pnlmaximize.Visible = false;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Setups the skin.
|
||||
/// </summary>
|
||||
/// <returns>The skin.</returns>
|
||||
public void SetupSkin()
|
||||
{
|
||||
this.DoubleBuffered = true;
|
||||
this.TransparencyKey = LoadedSkin.SystemKey;
|
||||
pnltitle.Height = LoadedSkin.TitlebarHeight;
|
||||
pnltitle.BackColor = LoadedSkin.TitleBackgroundColor;
|
||||
pnltitle.BackgroundImage = GetImage("titlebar");
|
||||
pnltitleleft.Visible = LoadedSkin.ShowTitleCorners;
|
||||
pnltitleright.Visible = LoadedSkin.ShowTitleCorners;
|
||||
pnltitleleft.BackColor = LoadedSkin.TitleLeftCornerBackground;
|
||||
pnltitleright.BackColor = LoadedSkin.TitleRightCornerBackground;
|
||||
pnltitleleft.Width = LoadedSkin.TitleLeftCornerWidth;
|
||||
pnltitleright.Width = LoadedSkin.TitleRightCornerWidth;
|
||||
pnltitleleft.BackgroundImage = GetImage("titleleft");
|
||||
pnltitleleft.BackgroundImageLayout = GetImageLayout("titleleft");
|
||||
pnltitleright.BackgroundImage = GetImage("titleright");
|
||||
pnltitleright.BackgroundImageLayout = GetImageLayout("titleright");
|
||||
pnltitle.BackgroundImageLayout = GetImageLayout("titlebar"); //RETARD ALERT. WHY WASN'T THIS THERE WHEN IMAGELAYOUTS WERE FIRST IMPLEMENTED?
|
||||
|
||||
lbtitletext.BackColor = (pnltitle.BackgroundImage != null) ? Color.Transparent : LoadedSkin.TitleBackgroundColor;
|
||||
lbtitletext.ForeColor = LoadedSkin.TitleTextColor;
|
||||
lbtitletext.Font = LoadedSkin.TitleFont;
|
||||
|
||||
pnlleft.BackColor = LoadedSkin.BorderLeftBackground;
|
||||
pnlleft.BackgroundImage = GetImage("leftborder");
|
||||
pnlleft.BackgroundImageLayout = GetImageLayout("leftborder");
|
||||
pnlleft.Width = LoadedSkin.LeftBorderWidth;
|
||||
pnlright.BackColor = LoadedSkin.BorderRightBackground;
|
||||
pnlright.BackgroundImage = GetImage("rightborder");
|
||||
pnlright.BackgroundImageLayout = GetImageLayout("rightborder");
|
||||
pnlright.Width = LoadedSkin.RightBorderWidth;
|
||||
|
||||
pnlbottom.BackColor = LoadedSkin.BorderBottomBackground;
|
||||
pnlbottom.BackgroundImage = GetImage("bottomborder");
|
||||
pnlbottom.BackgroundImageLayout = GetImageLayout("bottomborder");
|
||||
pnlbottom.Height = LoadedSkin.BottomBorderWidth;
|
||||
|
||||
pnlbottomr.BackColor = LoadedSkin.BorderBottomRightBackground;
|
||||
pnlbottomr.BackgroundImage = GetImage("bottomrborder");
|
||||
pnlbottomr.BackgroundImageLayout = GetImageLayout("bottomrborder");
|
||||
pnlbottoml.BackColor = LoadedSkin.BorderBottomLeftBackground;
|
||||
pnlbottoml.BackgroundImage = GetImage("bottomlborder");
|
||||
pnlbottoml.BackgroundImageLayout = GetImageLayout("bottomlborder");
|
||||
|
||||
lbtitletext.ForeColor = LoadedSkin.TitleTextColor;
|
||||
lbtitletext.Font = LoadedSkin.TitleFont;
|
||||
pnlclose.BackColor = LoadedSkin.CloseButtonColor;
|
||||
pnlclose.BackgroundImage = GetImage("closebutton");
|
||||
pnlclose.BackgroundImageLayout = GetImageLayout("closebutton");
|
||||
pnlminimize.BackColor = LoadedSkin.MinimizeButtonColor;
|
||||
pnlminimize.BackgroundImage = GetImage("minimizebutton");
|
||||
pnlminimize.BackgroundImageLayout = GetImageLayout("minimizebutton");
|
||||
pnlmaximize.BackColor = LoadedSkin.MaximizeButtonColor;
|
||||
pnlmaximize.BackgroundImage = GetImage("maximizebutton");
|
||||
pnlmaximize.BackgroundImageLayout = GetImageLayout("maximizebutton");
|
||||
|
||||
pnlclose.Size = LoadedSkin.CloseButtonSize;
|
||||
pnlminimize.Size = LoadedSkin.MinimizeButtonSize;
|
||||
pnlmaximize.Size = LoadedSkin.MaximizeButtonSize;
|
||||
pnlclose.Location = FromRight(LoadedSkin.CloseButtonFromSide);
|
||||
pnlminimize.Location = FromRight(LoadedSkin.MinimizeButtonFromSide);
|
||||
pnlmaximize.Location = FromRight(LoadedSkin.MaximizeButtonFromSide);
|
||||
pnlclose.Left -= pnlclose.Width;
|
||||
pnlmaximize.Left -= pnlmaximize.Width;
|
||||
pnlminimize.Left -= pnlminimize.Width;
|
||||
|
||||
switch (LoadedSkin.TitleTextCentered)
|
||||
{
|
||||
case false:
|
||||
lbtitletext.Location = new Point(16 + LoadedSkin.TitlebarIconFromSide.X + LoadedSkin.TitleTextLeft.X,
|
||||
LoadedSkin.TitleTextLeft.Y);
|
||||
break;
|
||||
default:
|
||||
lbtitletext.Left = (pnltitle.Width - lbtitletext.Width) / 2;
|
||||
lbtitletext.Top = LoadedSkin.TitleTextLeft.Y;
|
||||
break;
|
||||
}
|
||||
|
||||
if (Shiftorium.UpgradeInstalled("app_icons"))
|
||||
{
|
||||
pnlicon.Show();
|
||||
pnlicon.Size = new Size(16, 16);
|
||||
pnlicon.BackColor = Color.Transparent;
|
||||
pnlicon.BackgroundImage = GetIcon(this.ParentWindow.GetType().Name);
|
||||
pnlicon.BackgroundImageLayout = ImageLayout.Stretch;
|
||||
pnlicon.Location = LoadedSkin.TitlebarIconFromSide;
|
||||
}
|
||||
else
|
||||
{
|
||||
pnlicon.Hide();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Froms the right.
|
||||
/// </summary>
|
||||
/// <returns>The right.</returns>
|
||||
/// <param name="input">Input.</param>
|
||||
public Point FromRight(Point input)
|
||||
{
|
||||
return new Point(pnltitle.Width - input.X, input.Y);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Lbtitletexts the click.
|
||||
/// </summary>
|
||||
/// <returns>The click.</returns>
|
||||
/// <param name="sender">Sender.</param>
|
||||
/// <param name="e">E.</param>
|
||||
private void lbtitletext_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Pnlcloses the click.
|
||||
/// </summary>
|
||||
/// <returns>The click.</returns>
|
||||
/// <param name="sender">Sender.</param>
|
||||
/// <param name="e">E.</param>
|
||||
private void pnlclose_Click(object sender, EventArgs e)
|
||||
{
|
||||
this.Close();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Pnlmaximizes the click.
|
||||
/// </summary>
|
||||
/// <returns>The click.</returns>
|
||||
/// <param name="sender">Sender.</param>
|
||||
/// <param name="e">E.</param>
|
||||
private void pnlmaximize_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (maximized == false)
|
||||
Desktop.MaximizeWindow(this);
|
||||
else
|
||||
Desktop.RestoreWindow(this);
|
||||
maximized = !maximized;
|
||||
SetupSkin();
|
||||
}
|
||||
|
||||
bool minimized = false;
|
||||
bool maximized = false;
|
||||
|
||||
public bool IsMinimized
|
||||
{
|
||||
get
|
||||
{
|
||||
return minimized;
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsMaximized
|
||||
{
|
||||
get
|
||||
{
|
||||
return maximized;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Pnlminimizes the click.
|
||||
/// </summary>
|
||||
/// <returns>The click.</returns>
|
||||
/// <param name="sender">Sender.</param>
|
||||
/// <param name="e">E.</param>
|
||||
private void pnlminimize_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (minimized == false)
|
||||
Desktop.MinimizeWindow(this);
|
||||
else
|
||||
Desktop.RestoreWindow(this);
|
||||
minimized = !minimized;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// The W m NCLBUTTONDOW.
|
||||
/// </summary>
|
||||
public const int WM_NCLBUTTONDOWN = 0xA1;
|
||||
/// <summary>
|
||||
/// The H t CAPTIO.
|
||||
/// </summary>
|
||||
public const int HT_CAPTION = 0x2;
|
||||
|
||||
/// <summary>
|
||||
/// The is dialog.
|
||||
/// </summary>
|
||||
public bool IsDialog = false;
|
||||
|
||||
|
||||
[DllImportAttribute("user32.dll")]
|
||||
/// <summary>
|
||||
/// Sends the message.
|
||||
/// </summary>
|
||||
/// <returns>The message.</returns>
|
||||
/// <param name="hWnd">H window.</param>
|
||||
/// <param name="Msg">Message.</param>
|
||||
/// <param name="wParam">W parameter.</param>
|
||||
/// <param name="lParam">L parameter.</param>
|
||||
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
|
||||
[DllImportAttribute("user32.dll")]
|
||||
/// <summary>
|
||||
/// Releases the capture.
|
||||
/// </summary>
|
||||
/// <returns>The capture.</returns>
|
||||
public static extern bool ReleaseCapture();
|
||||
|
||||
/// <summary>
|
||||
/// Pnltitles the mouse move.
|
||||
/// </summary>
|
||||
/// <returns>The mouse move.</returns>
|
||||
/// <param name="sender">Sender.</param>
|
||||
/// <param name="e">E.</param>
|
||||
private void pnltitle_MouseMove(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (e.Button == MouseButtons.Left && Shiftorium.UpgradeInstalled("draggable_windows"))
|
||||
{
|
||||
ReleaseCapture();
|
||||
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Pnltitles the paint.
|
||||
/// </summary>
|
||||
/// <returns>The paint.</returns>
|
||||
/// <param name="sender">Sender.</param>
|
||||
/// <param name="e">E.</param>
|
||||
private void pnltitle_Paint(object sender, PaintEventArgs e) {
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Lbtitletexts the mouse move.
|
||||
/// </summary>
|
||||
/// <returns>The mouse move.</returns>
|
||||
/// <param name="sender">Sender.</param>
|
||||
/// <param name="e">E.</param>
|
||||
private void lbtitletext_MouseMove(object sender, MouseEventArgs e) {
|
||||
pnltitle_MouseMove(sender, e);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,746 +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.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using ShiftOS.Engine;
|
||||
using static ShiftOS.Engine.SkinEngine;
|
||||
using ShiftOS.WinForms.Tools;
|
||||
using ShiftOS.WinForms.Applications;
|
||||
using Newtonsoft.Json;
|
||||
using ShiftOS.Engine.Scripting;
|
||||
using System.Threading;
|
||||
|
||||
/// <summary>
|
||||
/// Winforms desktop.
|
||||
/// </summary>
|
||||
namespace ShiftOS.WinForms
|
||||
{
|
||||
/// <summary>
|
||||
/// Winforms desktop.
|
||||
/// </summary>
|
||||
public partial class WinformsDesktop : Form, IDesktop
|
||||
{
|
||||
private bool InScreensaver = false;
|
||||
private int millisecondsUntilScreensaver = 300000;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="ShiftOS.WinForms.WinformsDesktop"/> class.
|
||||
/// </summary>
|
||||
public WinformsDesktop()
|
||||
{
|
||||
InitializeComponent();
|
||||
this.TopMost = false;
|
||||
|
||||
NotificationDaemon.NotificationMade += (note) =>
|
||||
{
|
||||
//Soon this will pop a balloon note.
|
||||
this.Invoke(new Action(() =>
|
||||
{
|
||||
btnnotifications.Text = "Notifications (" + NotificationDaemon.GetUnreadCount().ToString() + ")";
|
||||
}));
|
||||
};
|
||||
|
||||
NotificationDaemon.NotificationRead += () =>
|
||||
{
|
||||
//Soon this will pop a balloon note.
|
||||
this.Invoke(new Action(() =>
|
||||
{
|
||||
btnnotifications.Text = "Notifications (" + NotificationDaemon.GetUnreadCount().ToString() + ")";
|
||||
}));
|
||||
};
|
||||
|
||||
this.LocationChanged += (o, a) =>
|
||||
{
|
||||
if (this.Left != 0)
|
||||
this.Left = 0;
|
||||
if (this.Top != 0)
|
||||
this.Top = 0;
|
||||
};
|
||||
|
||||
this.SizeChanged += (o, a) =>
|
||||
{
|
||||
if (this.ClientRectangle != Screen.PrimaryScreen.Bounds)
|
||||
{
|
||||
this.WindowState = FormWindowState.Maximized;
|
||||
}
|
||||
};
|
||||
|
||||
SaveSystem.GameReady += () =>
|
||||
{
|
||||
if (this.Visible == true)
|
||||
this.Invoke(new Action(() => SetupDesktop()));
|
||||
this.Invoke(new Action(() =>
|
||||
{
|
||||
btnnotifications.Text = "Notifications (" + NotificationDaemon.GetUnreadCount().ToString() + ")";
|
||||
}));
|
||||
};
|
||||
Shiftorium.Installed += () =>
|
||||
{
|
||||
if (this.Visible == true)
|
||||
this.Invoke(new Action(() => SetupDesktop()));
|
||||
};
|
||||
var time = new System.Windows.Forms.Timer();
|
||||
time.Interval = 100;
|
||||
this.KeyDown += (o, a) =>
|
||||
{
|
||||
if (a.Control && a.KeyCode == Keys.T)
|
||||
{
|
||||
Engine.AppearanceManager.SetupWindow(new Applications.Terminal());
|
||||
}
|
||||
/*if (a.Control && a.KeyCode == Keys.Tab)
|
||||
{
|
||||
// CtrlTabMenu
|
||||
CtrlTabMenu.Show();
|
||||
if (a.Shift) CtrlTabMenu.CycleBack();
|
||||
else CtrlTabMenu.CycleForwards();
|
||||
}*/ //nyi
|
||||
|
||||
ShiftOS.Engine.Scripting.LuaInterpreter.RaiseEvent("on_key_down", a);
|
||||
};
|
||||
SkinEngine.SkinLoaded += () =>
|
||||
{
|
||||
SetupDesktop();
|
||||
};
|
||||
time.Tick += (o, a) =>
|
||||
{
|
||||
if (Shiftorium.IsInitiated == true)
|
||||
{
|
||||
if (SaveSystem.CurrentSave != null && TutorialManager.IsInTutorial == false)
|
||||
{
|
||||
lbtime.Text = Applications.Terminal.GetTime();
|
||||
lbtime.Left = desktoppanel.Width - lbtime.Width - LoadedSkin.DesktopPanelClockFromRight.X;
|
||||
lbtime.Top = LoadedSkin.DesktopPanelClockFromRight.Y;
|
||||
}
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if (SaveSystem.CurrentSave != null)
|
||||
{
|
||||
if (SaveSystem.CurrentSave.LastMonthPaid != DateTime.Now.Month)
|
||||
{
|
||||
if (SaveSystem.CurrentSave.Codepoints >= DownloadManager.GetAllSubscriptions()[SaveSystem.CurrentSave.ShiftnetSubscription].CostPerMonth)
|
||||
{
|
||||
SaveSystem.CurrentSave.Codepoints -= DownloadManager.GetAllSubscriptions()[SaveSystem.CurrentSave.ShiftnetSubscription].CostPerMonth;
|
||||
SaveSystem.CurrentSave.LastMonthPaid = DateTime.Now.Month;
|
||||
}
|
||||
else
|
||||
{
|
||||
SaveSystem.CurrentSave.ShiftnetSubscription = 0;
|
||||
SaveSystem.CurrentSave.LastMonthPaid = DateTime.Now.Month;
|
||||
Infobox.Show("Shiftnet", "You do not have enough Codepoints to pay for your Shiftnet subscription this month. You have been downgraded to the free plan.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
|
||||
|
||||
btnnotifications.Left = lbtime.Left - btnnotifications.Width - 2;
|
||||
btnnotifications.Top = (desktoppanel.Height - btnnotifications.Height) / 2;
|
||||
};
|
||||
time.Start();
|
||||
|
||||
var ssThread = new Thread(() =>
|
||||
{
|
||||
while(this.Visible == true)
|
||||
{
|
||||
var mousePos = Cursor.Position;
|
||||
while(Cursor.Position == mousePos)
|
||||
{
|
||||
if(millisecondsUntilScreensaver <= 0)
|
||||
{
|
||||
ShowScreensaver();
|
||||
InScreensaver = true;
|
||||
}
|
||||
millisecondsUntilScreensaver--;
|
||||
Thread.Sleep(1);
|
||||
}
|
||||
millisecondsUntilScreensaver = 300000;
|
||||
InScreensaver = false;
|
||||
HideScreensaver();
|
||||
}
|
||||
});
|
||||
ssThread.IsBackground = true;
|
||||
ssThread.Start();
|
||||
|
||||
this.DoubleBuffered = true;
|
||||
}
|
||||
|
||||
public void HideScreensaver()
|
||||
{
|
||||
if (ResetDesktop == true)
|
||||
{
|
||||
this.Invoke(new Action(() =>
|
||||
{
|
||||
this.TopMost = false;
|
||||
pnlscreensaver.Hide();
|
||||
Cursor.Show();
|
||||
SetupDesktop();
|
||||
ResetDesktop = false;
|
||||
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
private bool ResetDesktop = false;
|
||||
|
||||
private void ShowScreensaver()
|
||||
{
|
||||
if (Shiftorium.UpgradeInstalled("screensavers"))
|
||||
{
|
||||
this.Invoke(new Action(() =>
|
||||
{
|
||||
pnlscreensaver.Show();
|
||||
this.TopMost = true;
|
||||
pnlssicon.Show();
|
||||
pnlssicon.BackColor = Color.Green;
|
||||
pnlssicon.BackgroundImage = GetImage("screensaver");
|
||||
pnlssicon.BackgroundImageLayout = GetImageLayout("screensaver");
|
||||
|
||||
if (pnlssicon.BackgroundImage != null)
|
||||
{
|
||||
pnlssicon.Size = pnlssicon.BackgroundImage.Size;
|
||||
}
|
||||
|
||||
Cursor.Hide();
|
||||
|
||||
var t = new Thread(() =>
|
||||
{
|
||||
var rnd = new Random();
|
||||
while (InScreensaver == true)
|
||||
{
|
||||
int x = rnd.Next(0, this.Width);
|
||||
int y = rnd.Next(0, this.Height);
|
||||
|
||||
this.Invoke(new Action(() =>
|
||||
{
|
||||
pnlssicon.Location = new Point(x, y);
|
||||
}));
|
||||
|
||||
Thread.Sleep(5000);
|
||||
}
|
||||
ResetDesktop = true;
|
||||
});
|
||||
t.IsBackground = true;
|
||||
t.Start();
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Populates the panel buttons.
|
||||
/// </summary>
|
||||
/// <returns>The panel buttons.</returns>
|
||||
public void PopulatePanelButtons()
|
||||
{
|
||||
if (DesktopFunctions.ShowDefaultElements == true)
|
||||
{
|
||||
panelbuttonholder.Controls.Clear();
|
||||
if (Shiftorium.IsInitiated == true)
|
||||
{
|
||||
if (Shiftorium.UpgradeInstalled("wm_panel_buttons"))
|
||||
{
|
||||
foreach (WindowBorder form in Engine.AppearanceManager.OpenForms)
|
||||
{
|
||||
if (form != null)
|
||||
{
|
||||
if (form.Visible == true)
|
||||
{
|
||||
EventHandler onClick = (o, a) =>
|
||||
{
|
||||
if (form == focused)
|
||||
{
|
||||
if (form.IsMinimized)
|
||||
{
|
||||
RestoreWindow(form);
|
||||
}
|
||||
else
|
||||
{
|
||||
MinimizeWindow(form);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
form.BringToFront();
|
||||
focused = form;
|
||||
}
|
||||
};
|
||||
|
||||
var pnlbtn = new Panel();
|
||||
pnlbtn.Margin = new Padding(2, LoadedSkin.PanelButtonFromTop, 0, 0);
|
||||
pnlbtn.BackColor = LoadedSkin.PanelButtonColor;
|
||||
pnlbtn.BackgroundImage = GetImage("panelbutton");
|
||||
pnlbtn.BackgroundImageLayout = GetImageLayout("panelbutton");
|
||||
|
||||
var pnlbtntext = new Label();
|
||||
pnlbtntext.Text = NameChangerBackend.GetName(form.ParentWindow);
|
||||
pnlbtntext.AutoSize = true;
|
||||
pnlbtntext.Location = LoadedSkin.PanelButtonFromLeft;
|
||||
pnlbtntext.ForeColor = LoadedSkin.PanelButtonTextColor;
|
||||
pnlbtntext.BackColor = Color.Transparent;
|
||||
|
||||
pnlbtn.BackColor = LoadedSkin.PanelButtonColor;
|
||||
if (pnlbtn.BackgroundImage != null)
|
||||
{
|
||||
pnlbtntext.BackColor = Color.Transparent;
|
||||
}
|
||||
pnlbtn.Size = LoadedSkin.PanelButtonSize;
|
||||
pnlbtn.Tag = "keepbg";
|
||||
pnlbtntext.Tag = "keepbg";
|
||||
pnlbtn.Controls.Add(pnlbtntext);
|
||||
this.panelbuttonholder.Controls.Add(pnlbtn);
|
||||
pnlbtn.Show();
|
||||
pnlbtntext.Show();
|
||||
|
||||
if (Shiftorium.UpgradeInstalled("useful_panel_buttons"))
|
||||
{
|
||||
pnlbtn.Click += onClick;
|
||||
pnlbtntext.Click += onClick;
|
||||
}
|
||||
pnlbtntext.Font = LoadedSkin.PanelButtonFont;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LuaInterpreter.RaiseEvent("on_panelbutton_populate", this);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Setups the desktop.
|
||||
/// </summary>
|
||||
/// <returns>The desktop.</returns>
|
||||
public void SetupDesktop()
|
||||
{
|
||||
if (DesktopFunctions.ShowDefaultElements == true)
|
||||
{
|
||||
ToolStripManager.Renderer = new ShiftOSMenuRenderer();
|
||||
|
||||
this.DoubleBuffered = true;
|
||||
this.FormBorderStyle = FormBorderStyle.None;
|
||||
this.WindowState = FormWindowState.Maximized;
|
||||
desktoppanel.BackColor = Color.Green;
|
||||
|
||||
//upgrades
|
||||
|
||||
if (Shiftorium.IsInitiated == true)
|
||||
{
|
||||
desktoppanel.Visible = Shiftorium.UpgradeInstalled("desktop");
|
||||
lbtime.Visible = Shiftorium.UpgradeInstalled("desktop_clock_widget");
|
||||
|
||||
btnnotifications.Visible = Shiftorium.UpgradeInstalled("panel_notifications");
|
||||
|
||||
//skinning
|
||||
lbtime.ForeColor = LoadedSkin.DesktopPanelClockColor;
|
||||
|
||||
panelbuttonholder.Top = 0;
|
||||
panelbuttonholder.Left = LoadedSkin.PanelButtonHolderFromLeft;
|
||||
panelbuttonholder.Height = desktoppanel.Height;
|
||||
panelbuttonholder.BackColor = Color.Transparent;
|
||||
panelbuttonholder.Margin = new Padding(0, 0, 0, 0);
|
||||
|
||||
sysmenuholder.Visible = Shiftorium.UpgradeInstalled("app_launcher");
|
||||
|
||||
//The Color Picker can give us transparent colors - which Windows Forms fucking despises when dealing with form backgrounds.
|
||||
//To compensate, we must recreate the desktop color and make the alpha channel '255'.
|
||||
this.BackColor = Color.FromArgb(LoadedSkin.DesktopColor.R, LoadedSkin.DesktopColor.G, LoadedSkin.DesktopColor.B);
|
||||
//Not doing this will cause an ArgumentException.
|
||||
|
||||
DitheringEngine.DitherImage(SkinEngine.GetImage("desktopbackground"), new Action<Image>((img) =>
|
||||
{
|
||||
this.BackgroundImage = img;
|
||||
}));
|
||||
this.BackgroundImageLayout = GetImageLayout("desktopbackground");
|
||||
desktoppanel.BackColor = LoadedSkin.DesktopPanelColor;
|
||||
|
||||
var pnlimg = GetImage("desktoppanel");
|
||||
if (pnlimg != null)
|
||||
{
|
||||
var bmp = new Bitmap(pnlimg);
|
||||
bmp.MakeTransparent(Color.FromArgb(1, 0, 1));
|
||||
pnlimg = bmp;
|
||||
}
|
||||
|
||||
desktoppanel.BackgroundImage = pnlimg;
|
||||
if (desktoppanel.BackgroundImage != null)
|
||||
{
|
||||
desktoppanel.BackColor = Color.Transparent;
|
||||
}
|
||||
var appimg = GetImage("applauncher");
|
||||
if (appimg != null)
|
||||
{
|
||||
var bmp = new Bitmap(appimg);
|
||||
bmp.MakeTransparent(Color.FromArgb(1, 0, 1));
|
||||
appimg = bmp;
|
||||
}
|
||||
menuStrip1.BackgroundImage = appimg;
|
||||
lbtime.ForeColor = LoadedSkin.DesktopPanelClockColor;
|
||||
lbtime.Font = LoadedSkin.DesktopPanelClockFont;
|
||||
if (desktoppanel.BackgroundImage == null)
|
||||
{
|
||||
lbtime.BackColor = LoadedSkin.DesktopPanelClockBackgroundColor;
|
||||
}
|
||||
else
|
||||
{
|
||||
lbtime.BackColor = Color.Transparent;
|
||||
}
|
||||
apps.Text = LoadedSkin.AppLauncherText;
|
||||
sysmenuholder.Location = LoadedSkin.AppLauncherFromLeft;
|
||||
sysmenuholder.Size = LoadedSkin.AppLauncherHolderSize;
|
||||
apps.Size = sysmenuholder.Size;
|
||||
menuStrip1.Renderer = new ShiftOSMenuRenderer(new AppLauncherColorTable());
|
||||
desktoppanel.BackgroundImageLayout = GetImageLayout("desktoppanel");
|
||||
desktoppanel.Height = LoadedSkin.DesktopPanelHeight;
|
||||
if (LoadedSkin.DesktopPanelPosition == 1)
|
||||
{
|
||||
desktoppanel.Dock = DockStyle.Bottom;
|
||||
}
|
||||
else
|
||||
{
|
||||
desktoppanel.Dock = DockStyle.Top;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
desktoppanel.Hide();
|
||||
}
|
||||
|
||||
LuaInterpreter.RaiseEvent("on_desktop_skin", this);
|
||||
|
||||
PopulatePanelButtons();
|
||||
}
|
||||
|
||||
public ToolStripMenuItem GetALCategoryWithName(string text)
|
||||
{
|
||||
foreach (ToolStripMenuItem menuitem in apps.DropDownItems)
|
||||
{
|
||||
if (menuitem.Text == text)
|
||||
return menuitem;
|
||||
}
|
||||
|
||||
var itm = new ToolStripMenuItem();
|
||||
itm.Text = text;
|
||||
apps.DropDownItems.Add(itm);
|
||||
return itm;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Populates the app launcher.
|
||||
/// </summary>
|
||||
/// <returns>The app launcher.</returns>
|
||||
/// <param name="items">Items.</param>
|
||||
public void PopulateAppLauncher(LauncherItem[] items)
|
||||
{
|
||||
if (DesktopFunctions.ShowDefaultElements == true)
|
||||
{
|
||||
apps.DropDownItems.Clear();
|
||||
|
||||
Dictionary<string, List<ToolStripMenuItem>> sortedItems = new Dictionary<string, List<ToolStripMenuItem>>();
|
||||
|
||||
|
||||
|
||||
foreach (var kv in items)
|
||||
{
|
||||
var item = new ToolStripMenuItem();
|
||||
item.Text = (kv.LaunchType == null) ? kv.DisplayData.Name : Applications.NameChangerBackend.GetNameRaw(kv.LaunchType);
|
||||
item.Image = (kv.LaunchType == null) ? null : SkinEngine.GetIcon(kv.LaunchType.Name);
|
||||
item.Click += (o, a) =>
|
||||
{
|
||||
if (kv is LuaLauncherItem)
|
||||
{
|
||||
var interpreter = new Engine.Scripting.LuaInterpreter();
|
||||
interpreter.ExecuteFile((kv as LuaLauncherItem).LaunchPath);
|
||||
}
|
||||
else
|
||||
{
|
||||
Engine.AppearanceManager.SetupWindow(Activator.CreateInstance(kv.LaunchType) as IShiftOSWindow);
|
||||
}
|
||||
|
||||
};
|
||||
if (sortedItems.ContainsKey(kv.DisplayData.Category))
|
||||
{
|
||||
sortedItems[kv.DisplayData.Category].Add(item);
|
||||
}
|
||||
else
|
||||
{
|
||||
sortedItems.Add(kv.DisplayData.Category, new List<ToolStripMenuItem>());
|
||||
sortedItems[kv.DisplayData.Category].Add(item);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var kv in sortedItems)
|
||||
{
|
||||
if (Shiftorium.IsInitiated == true)
|
||||
{
|
||||
if (Shiftorium.UpgradeInstalled("app_launcher_categories"))
|
||||
{
|
||||
var cat = GetALCategoryWithName(kv.Key);
|
||||
foreach (var subItem in kv.Value)
|
||||
{
|
||||
cat.DropDownItems.Add(subItem);
|
||||
}
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
foreach (var subItem in kv.Value)
|
||||
{
|
||||
apps.DropDownItems.Add(subItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (Shiftorium.IsInitiated == true)
|
||||
{
|
||||
if (Shiftorium.UpgradeInstalled("al_shutdown"))
|
||||
{
|
||||
apps.DropDownItems.Add(new ToolStripSeparator());
|
||||
var item = new ToolStripMenuItem();
|
||||
item.Text = Localization.Parse("{SHUTDOWN}");
|
||||
item.Click += (o, a) =>
|
||||
{
|
||||
TerminalBackend.InvokeCommand("sos.shutdown");
|
||||
};
|
||||
apps.DropDownItems.Add(item);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
LuaInterpreter.RaiseEvent("on_al_populate", items);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Desktops the load.
|
||||
/// </summary>
|
||||
/// <returns>The load.</returns>
|
||||
/// <param name="sender">Sender.</param>
|
||||
/// <param name="e">E.</param>
|
||||
private void Desktop_Load(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
SaveSystem.Begin();
|
||||
|
||||
SetupDesktop();
|
||||
|
||||
SaveSystem.GameReady += () =>
|
||||
{
|
||||
this.Invoke(new Action(() =>
|
||||
{
|
||||
LuaInterpreter.RaiseEvent("on_desktop_load", this);
|
||||
}));
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Shows the window.
|
||||
/// </summary>
|
||||
/// <returns>The window.</returns>
|
||||
/// <param name="border">Border.</param>
|
||||
public void ShowWindow(IWindowBorder border)
|
||||
{
|
||||
var brdr = border as Form;
|
||||
focused = border;
|
||||
brdr.GotFocus += (o, a) =>
|
||||
{
|
||||
focused = border;
|
||||
};
|
||||
brdr.FormBorderStyle = FormBorderStyle.None;
|
||||
brdr.Show();
|
||||
brdr.TopMost = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Kills the window.
|
||||
/// </summary>
|
||||
/// <returns>The window.</returns>
|
||||
/// <param name="border">Border.</param>
|
||||
public void KillWindow(IWindowBorder border)
|
||||
{
|
||||
border.Close();
|
||||
}
|
||||
|
||||
private IWindowBorder focused = null;
|
||||
|
||||
public string DesktopName
|
||||
{
|
||||
get
|
||||
{
|
||||
return "ShiftOS Desktop";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Minimizes the window.
|
||||
/// </summary>
|
||||
/// <param name="brdr">Brdr.</param>
|
||||
public void MinimizeWindow(IWindowBorder brdr)
|
||||
{
|
||||
var loc = (brdr as WindowBorder).Location;
|
||||
var sz = (brdr as WindowBorder).Size;
|
||||
(brdr as WindowBorder).Tag = JsonConvert.SerializeObject(new
|
||||
{
|
||||
Size = sz,
|
||||
Location = loc
|
||||
});
|
||||
(brdr as WindowBorder).Location = new Point(this.GetSize().Width * 2, this.GetSize().Height * 2);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Maximizes the window.
|
||||
/// </summary>
|
||||
/// <returns>The window.</returns>
|
||||
/// <param name="brdr">Brdr.</param>
|
||||
public void MaximizeWindow(IWindowBorder brdr)
|
||||
{
|
||||
int startY = (LoadedSkin.DesktopPanelPosition == 1) ? 0 : LoadedSkin.DesktopPanelHeight;
|
||||
int h = this.GetSize().Height - LoadedSkin.DesktopPanelHeight;
|
||||
var loc = (brdr as WindowBorder).Location;
|
||||
var sz = (brdr as WindowBorder).Size;
|
||||
(brdr as WindowBorder).Tag = JsonConvert.SerializeObject(new
|
||||
{
|
||||
Size = sz,
|
||||
Location = loc
|
||||
});
|
||||
(brdr as WindowBorder).Location = new Point(0, startY);
|
||||
(brdr as WindowBorder).Size = new Size(this.GetSize().Width, h);
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Restores the window.
|
||||
/// </summary>
|
||||
/// <returns>The window.</returns>
|
||||
/// <param name="brdr">Brdr.</param>
|
||||
public void RestoreWindow(IWindowBorder brdr)
|
||||
{
|
||||
dynamic tag = JsonConvert.DeserializeObject<dynamic>((brdr as WindowBorder).Tag.ToString());
|
||||
(brdr as WindowBorder).Location = tag.Location;
|
||||
(brdr as WindowBorder).Size = tag.Size;
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Invokes the on worker thread.
|
||||
/// </summary>
|
||||
/// <returns>The on worker thread.</returns>
|
||||
/// <param name="act">Act.</param>
|
||||
public void InvokeOnWorkerThread(Action act)
|
||||
{
|
||||
this.Invoke(act);
|
||||
}
|
||||
|
||||
public void OpenAppLauncher(Point loc)
|
||||
{
|
||||
apps.DropDown.Left = loc.X;
|
||||
apps.DropDown.Top = loc.Y;
|
||||
apps.ShowDropDown();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the size.
|
||||
/// </summary>
|
||||
/// <returns>The size.</returns>
|
||||
public Size GetSize()
|
||||
{
|
||||
return this.Size;
|
||||
}
|
||||
|
||||
private void btnnotifications_Click(object sender, EventArgs e)
|
||||
{
|
||||
AppearanceManager.SetupWindow(new Applications.Notifications());
|
||||
}
|
||||
|
||||
private void desktoppanel_Paint(object sender, PaintEventArgs e)
|
||||
{
|
||||
e.Graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
|
||||
}
|
||||
}
|
||||
|
||||
[ShiftOS.Engine.Scripting.Exposed("desktop")]
|
||||
public class DesktopFunctions
|
||||
{
|
||||
public static bool ShowDefaultElements = true;
|
||||
|
||||
public dynamic getWindow()
|
||||
{
|
||||
return Desktop.CurrentDesktop;
|
||||
}
|
||||
|
||||
public void showDefaultElements(bool val)
|
||||
{
|
||||
ShowDefaultElements = val;
|
||||
SkinEngine.LoadSkin();
|
||||
}
|
||||
|
||||
public dynamic getOpenWindows()
|
||||
{
|
||||
return AppearanceManager.OpenForms;
|
||||
}
|
||||
|
||||
public string getALItemName(LauncherItem kv)
|
||||
{
|
||||
return (kv.LaunchType == null) ? kv.DisplayData.Name : Applications.NameChangerBackend.GetNameRaw(kv.LaunchType);
|
||||
}
|
||||
|
||||
public void openAppLauncher(Point loc)
|
||||
{
|
||||
Desktop.OpenAppLauncher(loc);
|
||||
}
|
||||
|
||||
public string getWindowTitle(IWindowBorder form)
|
||||
{
|
||||
return NameChangerBackend.GetName(form.ParentWindow);
|
||||
}
|
||||
|
||||
public void openApp(LauncherItem kv)
|
||||
{
|
||||
if (kv is LuaLauncherItem)
|
||||
{
|
||||
var interpreter = new Engine.Scripting.LuaInterpreter();
|
||||
interpreter.ExecuteFile((kv as LuaLauncherItem).LaunchPath);
|
||||
}
|
||||
else
|
||||
{
|
||||
Engine.AppearanceManager.SetupWindow(Activator.CreateInstance(kv.LaunchType) as IShiftOSWindow);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,183 +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.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using ShiftOS.Engine;
|
||||
using ShiftOS.WinForms.Tools;
|
||||
|
||||
namespace ShiftOS.WinForms
|
||||
{
|
||||
internal class WinformsWindowManager : WindowManager
|
||||
{
|
||||
public override void Close(IShiftOSWindow win)
|
||||
{
|
||||
(win as UserControl).Close();
|
||||
}
|
||||
|
||||
public override void InvokeAction(Action act)
|
||||
{
|
||||
Desktop.InvokeOnWorkerThread(act);
|
||||
}
|
||||
|
||||
public override void Maximize(IWindowBorder form)
|
||||
{
|
||||
try
|
||||
{
|
||||
var deskSize = new Size(0, 0);
|
||||
deskSize.Width = Screen.PrimaryScreen.Bounds.Width;
|
||||
deskSize.Height = Screen.PrimaryScreen.Bounds.Height;
|
||||
|
||||
deskSize.Height -= SkinEngine.LoadedSkin.DesktopPanelHeight;
|
||||
|
||||
var deskStart = new Point((SkinEngine.LoadedSkin.DesktopPanelPosition == 0) ? SkinEngine.LoadedSkin.DesktopPanelHeight : 0, 0);
|
||||
|
||||
(form as WindowBorder).Location = deskStart;
|
||||
(form as WindowBorder).Size = deskSize;
|
||||
|
||||
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public override void Minimize(IWindowBorder border)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
public override void SetTitle(IShiftOSWindow win, string title)
|
||||
{
|
||||
var wb = (win as UserControl).ParentForm as WindowBorder;
|
||||
wb.SetTitle(title);
|
||||
}
|
||||
|
||||
public override void SetupDialog(IShiftOSWindow form)
|
||||
{
|
||||
if (!Shiftorium.UpgradeAttributesUnlocked(form.GetType()))
|
||||
{
|
||||
Console.WriteLine("{APP_NOT_FOUND}");
|
||||
return;
|
||||
}
|
||||
|
||||
var wb = new WindowBorder(form as UserControl);
|
||||
wb.IsDialog = true;
|
||||
|
||||
|
||||
wb.Show();
|
||||
}
|
||||
|
||||
public override void SetupWindow(IShiftOSWindow form)
|
||||
{
|
||||
if (!AppearanceManager.CanOpenWindow(form))
|
||||
{
|
||||
Infobox.Show("{MULTIPLAYER_ONLY}", "{MULTIPLAYER_ONLY_EXP}");
|
||||
return;
|
||||
}
|
||||
|
||||
foreach(var attr in form.GetType().GetCustomAttributes(true))
|
||||
{
|
||||
if(attr is MultiplayerOnlyAttribute)
|
||||
{
|
||||
if(KernelWatchdog.MudConnected == false)
|
||||
{
|
||||
Infobox.PromptYesNo("Disconnected from MUD", "This application requires a connection to the MUD. Would you like to reconnect?", new Action<bool>((answer) =>
|
||||
{
|
||||
if(answer == true)
|
||||
{
|
||||
KernelWatchdog.MudConnected = true;
|
||||
SetupWindow(form);
|
||||
}
|
||||
}));
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!Shiftorium.UpgradeAttributesUnlocked(form.GetType()))
|
||||
{
|
||||
Console.WriteLine("{APP_NOT_FOUND}");
|
||||
return;
|
||||
}
|
||||
|
||||
if (SaveSystem.CurrentSave != null)
|
||||
{
|
||||
if (!form.GetType().Name.Contains(typeof(Applications.Dialog).Name))
|
||||
{
|
||||
int maxWindows = 0;
|
||||
|
||||
//Window manager will step in here.
|
||||
if (Shiftorium.UpgradeInstalled("wm_unlimited_windows"))
|
||||
{
|
||||
maxWindows = 0;
|
||||
}
|
||||
else if (Shiftorium.UpgradeInstalled("wm_4_windows"))
|
||||
{
|
||||
maxWindows = 4;
|
||||
}
|
||||
else if (Shiftorium.UpgradeInstalled("window_manager"))
|
||||
{
|
||||
maxWindows = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
maxWindows = 1;
|
||||
}
|
||||
|
||||
|
||||
if (maxWindows > 0)
|
||||
{
|
||||
List<WindowBorder> formstoclose = new List<WindowBorder>();
|
||||
|
||||
foreach (WindowBorder frm in AppearanceManager.OpenForms)
|
||||
{
|
||||
formstoclose.Add(frm);
|
||||
|
||||
}
|
||||
|
||||
while (formstoclose.Count > maxWindows - 1)
|
||||
{
|
||||
formstoclose[0].Close();
|
||||
formstoclose.RemoveAt(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var wb = new WindowBorder(form as UserControl);
|
||||
|
||||
ControlManager.SetupWindows();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,126 +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 NOSOUND
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using NAudio;
|
||||
using NAudio.Wave;
|
||||
|
||||
namespace ShiftOS.Engine
|
||||
{
|
||||
public static class AudioManager
|
||||
{
|
||||
private static WaveOut _out = null;
|
||||
private static AudioFileReader _reader = null;
|
||||
private static IAudioProvider _provider = null;
|
||||
private static bool _running = true;
|
||||
|
||||
public static void Init(IAudioProvider _p)
|
||||
{
|
||||
#if !NOSOUND
|
||||
_provider = _p;
|
||||
AppearanceManager.OnExit += () =>
|
||||
{
|
||||
_running = false;
|
||||
_out?.Stop();
|
||||
_reader?.Dispose();
|
||||
_out?.Dispose();
|
||||
System.IO.File.Delete("temp.mp3");
|
||||
};
|
||||
var t = new Thread(() =>
|
||||
{
|
||||
SaveSystem.GameReady += () =>
|
||||
{
|
||||
while(_out == null)
|
||||
{
|
||||
|
||||
}
|
||||
_out.Volume = _provider.Volume;
|
||||
};
|
||||
Random rnd = new Random();
|
||||
while(_running == true)
|
||||
{
|
||||
int track = rnd.Next(0, _provider.Count);
|
||||
byte[] mp3 = _provider.GetTrack(track);
|
||||
System.IO.File.WriteAllBytes("temp.mp3", mp3);
|
||||
_reader = new AudioFileReader("temp.mp3");
|
||||
_out = new WaveOut();
|
||||
_out.Init(_reader);
|
||||
_out.Volume = _provider.Volume;
|
||||
|
||||
_out.Play();
|
||||
while(_out.PlaybackState == PlaybackState.Playing)
|
||||
{
|
||||
Thread.Sleep(5000); //even when the player isn't playing, this will give a good delay between songs.
|
||||
}
|
||||
_reader.Dispose();
|
||||
_out.Dispose();
|
||||
}
|
||||
});
|
||||
t.IsBackground = true;
|
||||
t.Start();
|
||||
#endif
|
||||
}
|
||||
|
||||
public static void SetVolume(float volume)
|
||||
{
|
||||
_provider.Volume = volume; //persist between songs
|
||||
_out.Volume = volume;
|
||||
}
|
||||
|
||||
internal static void Kill()
|
||||
{
|
||||
_running = false;
|
||||
_out.Stop();
|
||||
_out.Dispose();
|
||||
_reader.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
public interface IAudioProvider
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets a byte[] array corresponding to an MP3 track given an index.
|
||||
/// </summary>
|
||||
/// <param name="index">A track index to use when finding the right track.</param>
|
||||
/// <returns>The MP3 byte[] array.</returns>
|
||||
byte[] GetTrack(int index);
|
||||
|
||||
/// <summary>
|
||||
/// Gets the 1-based count of all available tracks.
|
||||
/// </summary>
|
||||
int Count { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the track player's volume.
|
||||
/// </summary>
|
||||
float Volume { get; set; }
|
||||
}
|
||||
}
|
|
@ -1,739 +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 DEVEL
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using ShiftOS.Engine.Properties;
|
||||
using System.IO;
|
||||
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
|
||||
{
|
||||
[Namespace("infobox", hide = true)]
|
||||
[RequiresUpgrade("desktop;wm_free_placement")]
|
||||
public static class InfoboxDebugCommands
|
||||
{
|
||||
|
||||
[RequiresArgument("title")]
|
||||
[RequiresArgument("msg")]
|
||||
[Command("show")]
|
||||
public static bool ShowInfo(Dictionary<string, object> 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<string, object> args)
|
||||
{
|
||||
bool forwarding = TerminalBackend.IsForwardingConsoleWrites;
|
||||
var fGuid = TerminalBackend.ForwardGUID;
|
||||
Action<bool> callback = (result) =>
|
||||
{
|
||||
TerminalBackend.IsForwardingConsoleWrites = forwarding;
|
||||
TerminalBackend.ForwardGUID = (forwarding == true) ? fGuid : null;
|
||||
string resultFriendly = (result == true) ? "yes" : "no";
|
||||
Console.WriteLine($"{SaveSystem.CurrentSave.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<string, object> args)
|
||||
{
|
||||
bool forwarding = TerminalBackend.IsForwardingConsoleWrites;
|
||||
var fGuid = TerminalBackend.ForwardGUID;
|
||||
Action<string> callback = (result) =>
|
||||
{
|
||||
TerminalBackend.IsForwardingConsoleWrites = forwarding;
|
||||
TerminalBackend.ForwardGUID = (forwarding == true) ? fGuid : null;
|
||||
Console.WriteLine($"{SaveSystem.CurrentSave.Username} says \"{result}\".");
|
||||
TerminalBackend.IsForwardingConsoleWrites = false;
|
||||
};
|
||||
Desktop.InvokeOnWorkerThread(new Action(() =>
|
||||
{
|
||||
Infobox.PromptText(args["title"].ToString(), args["msg"].ToString(), callback);
|
||||
}));
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[Namespace("audio")]
|
||||
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<string,object> 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;
|
||||
}
|
||||
}
|
||||
|
||||
[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<string, object> 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<string, object> args)
|
||||
{
|
||||
ServerManager.SendMessage(args["header"].ToString(), args["body"].ToString());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
[TutorialLock]
|
||||
[Namespace("trm")]
|
||||
public static class TerminalCommands
|
||||
{
|
||||
[Command("clear")]
|
||||
public static bool Clear()
|
||||
{
|
||||
AppearanceManager.ConsoleOut.Clear();
|
||||
return true;
|
||||
}
|
||||
|
||||
[Command("echo")]
|
||||
[RequiresArgument("text")]
|
||||
public static bool Echo(Dictionary<string, object> args)
|
||||
{
|
||||
Console.WriteLine(args["text"]);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
#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("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<string, object> args)
|
||||
{
|
||||
try
|
||||
{
|
||||
SaveSystem.CurrentSave.Upgrades[args["upgrade"] as string] = false;
|
||||
}
|
||||
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<string, object> args)
|
||||
{
|
||||
Console.WriteLine("Success! "+args.ToString());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
[Command("freecp")]
|
||||
public static bool FreeCodepoints(Dictionary<string, object> args)
|
||||
{
|
||||
if (args.ContainsKey("amount"))
|
||||
try
|
||||
{
|
||||
int codepointsToAdd = Convert.ToInt32(args["amount"].ToString());
|
||||
SaveSystem.TransferCodepointsFrom("dev", codepointsToAdd);
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine("{ERROR}: " + ex.Message);
|
||||
return true;
|
||||
}
|
||||
|
||||
SaveSystem.TransferCodepointsFrom("dev", 1000);
|
||||
return true;
|
||||
}
|
||||
|
||||
[Command("unlockeverything")]
|
||||
public static bool UnlockAllUpgrades()
|
||||
{
|
||||
foreach (var upg in Shiftorium.GetDefaults())
|
||||
{
|
||||
Shiftorium.Buy(upg.ID, 0);
|
||||
}
|
||||
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<string, object> 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
|
||||
{
|
||||
[RemoteLock]
|
||||
[Command("shutdown")]
|
||||
public static bool Shutdown()
|
||||
{
|
||||
TerminalBackend.InvokeCommand("sos.save");
|
||||
SaveSystem.ShuttingDown = true;
|
||||
AppearanceManager.Exit();
|
||||
return true;
|
||||
}
|
||||
|
||||
[Command("help", "{COMMAND_HELP_USAGE}", "{COMMAND_HELP_DESCRIPTION}")]
|
||||
public static bool Help()
|
||||
{
|
||||
foreach (var exec in System.IO.Directory.GetFiles(Environment.CurrentDirectory))
|
||||
{
|
||||
if (exec.EndsWith(".exe") || exec.EndsWith(".dll"))
|
||||
{
|
||||
try
|
||||
{
|
||||
var asm = Assembly.LoadFile(exec);
|
||||
|
||||
var types = asm.GetTypes();
|
||||
|
||||
foreach (var type in types)
|
||||
{
|
||||
if (Shiftorium.UpgradeAttributesUnlocked(type))
|
||||
{
|
||||
foreach (var a in type.GetCustomAttributes(false))
|
||||
{
|
||||
if (a is Namespace)
|
||||
{
|
||||
var ns = a as Namespace;
|
||||
|
||||
if (!ns.hide)
|
||||
{
|
||||
string descp = "{NAMESPACE_" + ns.name.ToUpper() + "_DESCRIPTION}";
|
||||
if (descp == Localization.Parse(descp))
|
||||
descp = "";
|
||||
else
|
||||
descp = Shiftorium.UpgradeInstalled("help_description") ? Localization.Parse("{SEPERATOR}" + descp) : "";
|
||||
|
||||
Console.WriteLine($"{{NAMESPACE}}{ns.name}" + descp);
|
||||
|
||||
foreach (var method in type.GetMethods(BindingFlags.Public | BindingFlags.Static))
|
||||
{
|
||||
if (Shiftorium.UpgradeAttributesUnlocked(method))
|
||||
{
|
||||
foreach (var ma in method.GetCustomAttributes(false))
|
||||
{
|
||||
if (ma is Command)
|
||||
{
|
||||
var cmd = ma as Command;
|
||||
|
||||
if (!cmd.hide)
|
||||
{
|
||||
string descriptionparse = "{COMMAND_" + ns.name.ToUpper() + "_" + cmd.name.ToUpper() + "_DESCRIPTION}";
|
||||
string usageparse = "{COMMAND_" + ns.name.ToUpper() + "_" + cmd.name.ToUpper() + "_USAGE}";
|
||||
if (descriptionparse == Localization.Parse(descriptionparse))
|
||||
descriptionparse = "";
|
||||
else
|
||||
descriptionparse = Shiftorium.UpgradeInstalled("help_description") ? Localization.Parse("{SEPERATOR}" + descriptionparse) : "";
|
||||
|
||||
if (usageparse == Localization.Parse(usageparse))
|
||||
usageparse = "";
|
||||
else
|
||||
usageparse = Shiftorium.UpgradeInstalled("help_usage") ? Localization.Parse("{SEPERATOR}" + usageparse, new Dictionary<string, string>() {
|
||||
{"%ns", ns.name},
|
||||
{"%cmd", cmd.name}
|
||||
}) : "";
|
||||
|
||||
Console.WriteLine($"{{COMMAND}}{ns.name}.{cmd.name}" + usageparse + descriptionparse);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
[MultiplayerOnly]
|
||||
[Command("save")]
|
||||
public static bool Save()
|
||||
{
|
||||
SaveSystem.SaveGame();
|
||||
return true;
|
||||
}
|
||||
|
||||
[MultiplayerOnly]
|
||||
[Command("status")]
|
||||
public static bool Status()
|
||||
{
|
||||
Console.WriteLine($@"ShiftOS version {Assembly.GetExecutingAssembly().GetName().Version.ToString()}
|
||||
|
||||
Codepoints: {SaveSystem.CurrentSave.Codepoints}
|
||||
Upgrades: {SaveSystem.CurrentSave.CountUpgrades()} installed,
|
||||
{Shiftorium.GetAvailable().Length} available");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
[MultiplayerOnly]
|
||||
[Namespace("shiftorium")]
|
||||
public static class ShiftoriumCommands
|
||||
{
|
||||
[Command("buy")]
|
||||
[RequiresArgument("upgrade")]
|
||||
public static bool BuyUpgrade(Dictionary<string, object> userArgs)
|
||||
{
|
||||
try
|
||||
{
|
||||
string upgrade = "";
|
||||
|
||||
if (userArgs.ContainsKey("upgrade"))
|
||||
upgrade = (string)userArgs["upgrade"];
|
||||
else
|
||||
throw new Exception("You must specify a valid 'upgrade' value.");
|
||||
|
||||
foreach (var upg in Shiftorium.GetAvailable())
|
||||
{
|
||||
if (upg.ID == upgrade)
|
||||
{
|
||||
Shiftorium.Buy(upgrade, upg.Cost);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
throw new Exception($"Couldn't find upgrade with ID: {upgrade}");
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
[RequiresUpgrade("shiftorium_bulk_buy")]
|
||||
[Command("bulkbuy")]
|
||||
[RequiresArgument("upgrades")]
|
||||
public static bool BuyBulk(Dictionary<string, object> args)
|
||||
{
|
||||
if (args.ContainsKey("upgrades"))
|
||||
{
|
||||
string[] upgrade_list = (args["upgrades"] as string).Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries);
|
||||
foreach (var upg in upgrade_list)
|
||||
{
|
||||
var dict = new Dictionary<string, object>();
|
||||
dict.Add("upgrade", upg);
|
||||
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("info")]
|
||||
public static bool ViewInfo(Dictionary<string, object> userArgs)
|
||||
{
|
||||
try
|
||||
{
|
||||
string upgrade = "";
|
||||
|
||||
if (userArgs.ContainsKey("upgrade"))
|
||||
upgrade = (string)userArgs["upgrade"];
|
||||
else
|
||||
throw new Exception("You must specify a valid 'upgrade' value.");
|
||||
|
||||
foreach (var upg in Shiftorium.GetDefaults())
|
||||
{
|
||||
if (upg.ID == upgrade)
|
||||
{
|
||||
Console.WriteLine($@"Information for {upgrade}:
|
||||
|
||||
{upg.Name} - {upg.Cost} Codepoints
|
||||
------------------------------------------------------
|
||||
|
||||
{upg.Description}
|
||||
|
||||
To buy this upgrade, run:
|
||||
shiftorium.buy{{upgrade:""{upg.ID}""}}");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
throw new Exception($"Couldn't find upgrade with ID: {upgrade}");
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
[Command("list")]
|
||||
public static bool ListAll()
|
||||
{
|
||||
try
|
||||
{
|
||||
Dictionary<string, int> upgrades = new Dictionary<string, int>();
|
||||
int maxLength = 5;
|
||||
|
||||
foreach (var upg in Shiftorium.GetAvailable())
|
||||
{
|
||||
if (upg.ID.Length > maxLength)
|
||||
{
|
||||
maxLength = upg.ID.Length;
|
||||
}
|
||||
|
||||
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());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
CrashHandler.Start(e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Namespace("win")]
|
||||
public static class WindowCommands
|
||||
{
|
||||
|
||||
|
||||
|
||||
[RemoteLock]
|
||||
[Command("list")]
|
||||
public static bool List()
|
||||
{
|
||||
Console.WriteLine("Window ID\tName");
|
||||
foreach (var app in AppearanceManager.OpenForms)
|
||||
{
|
||||
//Windows are displayed the order in which they were opened.
|
||||
Console.WriteLine($"{AppearanceManager.OpenForms.IndexOf(app)}\t{app.Text}");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
[RemoteLock]
|
||||
[Command("open")]
|
||||
public static bool Open(Dictionary<string, object> args)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (args.ContainsKey("app"))
|
||||
{
|
||||
var app = args["app"] as string;
|
||||
//ANNND now we start reflecting...
|
||||
foreach (var asmExec in System.IO.Directory.GetFiles(Environment.CurrentDirectory))
|
||||
{
|
||||
if (asmExec.EndsWith(".exe") || asmExec.EndsWith(".dll"))
|
||||
{
|
||||
var asm = Assembly.LoadFile(asmExec);
|
||||
try
|
||||
{
|
||||
foreach (var type in asm.GetTypes())
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
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 { }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
Console.WriteLine("Couldn't find the specified app on your system.");
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine("Error running script:" + ex);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
[RemoteLock]
|
||||
[Command("close", usage = "{win:integer32}", description ="Closes the specified window.")]
|
||||
[RequiresArgument("win")]
|
||||
[RequiresUpgrade("close_command")]
|
||||
public static bool CloseWindow(Dictionary<string, object> args)
|
||||
{
|
||||
int winNum = -1;
|
||||
if (args.ContainsKey("win"))
|
||||
winNum = Convert.ToInt32(args["win"].ToString());
|
||||
string err = null;
|
||||
|
||||
if (winNum < 0 || winNum >= AppearanceManager.OpenForms.Count)
|
||||
err = "The window number must be between 0 and " + (AppearanceManager.OpenForms.Count - 1).ToString() + ".";
|
||||
|
||||
if (string.IsNullOrEmpty(err))
|
||||
{
|
||||
Console.WriteLine($"Closing {AppearanceManager.OpenForms[winNum].Text}...");
|
||||
AppearanceManager.Close(AppearanceManager.OpenForms[winNum].ParentWindow);
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine(err);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -1,201 +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 Newtonsoft.Json;
|
||||
using ShiftOS.Objects.ShiftFS;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace ShiftOS.Engine
|
||||
{
|
||||
public interface ILanguageProvider
|
||||
{
|
||||
List<string> GetJSONTranscripts();
|
||||
void WriteDefaultTranscript();
|
||||
string GetCurrentTranscript();
|
||||
string[] GetAllLanguages();
|
||||
}
|
||||
|
||||
public static class Localization
|
||||
{
|
||||
private static ILanguageProvider _provider = null;
|
||||
|
||||
public static string[] GetAllLanguages()
|
||||
{
|
||||
if(_provider == null)
|
||||
{
|
||||
return JsonConvert.DeserializeObject<string[]>(Properties.Resources.languages);
|
||||
}
|
||||
else
|
||||
{
|
||||
return _provider.GetAllLanguages();
|
||||
}
|
||||
}
|
||||
|
||||
public static void SetupTHETRUEDefaultLocals()
|
||||
{
|
||||
if (_provider == null)
|
||||
{
|
||||
var lines = Properties.Resources.strings_en;
|
||||
var path = "english.local";
|
||||
Utils.WriteAllText(Paths.GetPath(path), lines);
|
||||
}
|
||||
else
|
||||
{
|
||||
_provider.WriteDefaultTranscript();
|
||||
}
|
||||
}
|
||||
|
||||
public static void SetupDefaultLocals(string lines, string path)
|
||||
{
|
||||
Utils.WriteAllText(Paths.GetPath(path), lines);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Takes in a string and parses localization blocks into text blocks in the current language.
|
||||
/// </summary>
|
||||
/// <example>"{CODEPOINTS}: 0" will come out as "Codepoints: 0" if the current language is english.</example>
|
||||
/// <param name="original">The string to parse</param>
|
||||
/// <returns>The parsed string.</returns>
|
||||
///
|
||||
public static string Parse(string original)
|
||||
{
|
||||
return Parse(original, new Dictionary<string, string>());
|
||||
}
|
||||
|
||||
|
||||
public static string Parse(string original, Dictionary<string, string> replace)
|
||||
{
|
||||
Dictionary<string, string> localizationStrings = new Dictionary<string, string>();
|
||||
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
localizationStrings = JsonConvert.DeserializeObject<Dictionary<string, string>>(_provider.GetCurrentTranscript());
|
||||
}
|
||||
catch
|
||||
{
|
||||
localizationStrings = JsonConvert.DeserializeObject<Dictionary<string, string>>(Utils.ReadAllText(Paths.GetPath("english.local")));
|
||||
}
|
||||
|
||||
foreach (var kv in localizationStrings)
|
||||
{
|
||||
original = original.Replace(kv.Key, kv.Value);
|
||||
}
|
||||
|
||||
List<string> orphaned = new List<string>();
|
||||
if (Utils.FileExists("0:/dev_orphaned_lang.txt"))
|
||||
{
|
||||
orphaned = JsonConvert.DeserializeObject<List<string>>(Utils.ReadAllText("0:/dev_orphaned_lang.txt"));
|
||||
}
|
||||
|
||||
|
||||
int start_index = 0;
|
||||
int length = 0;
|
||||
bool indexing = false;
|
||||
|
||||
foreach (var c in original)
|
||||
{
|
||||
if (c == '{')
|
||||
{
|
||||
start_index = original.IndexOf(c);
|
||||
indexing = true;
|
||||
}
|
||||
|
||||
if (indexing == true)
|
||||
{
|
||||
length++;
|
||||
if (c == '}')
|
||||
{
|
||||
indexing = false;
|
||||
string o = original.Substring(start_index, length);
|
||||
if (!orphaned.Contains(o))
|
||||
{
|
||||
orphaned.Add(o);
|
||||
}
|
||||
start_index = 0;
|
||||
length = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (orphaned.Count > 0)
|
||||
{
|
||||
Utils.WriteAllText("0:/dev_orphaned_lang.txt", JsonConvert.SerializeObject(orphaned, Formatting.Indented));
|
||||
}
|
||||
|
||||
//string original2 = Parse(original);
|
||||
|
||||
string usernameReplace = "";
|
||||
string domainReplace = "";
|
||||
|
||||
if (SaveSystem.CurrentSave != null)
|
||||
{
|
||||
usernameReplace = SaveSystem.CurrentSave.Username;
|
||||
domainReplace = SaveSystem.CurrentSave.SystemName;
|
||||
}
|
||||
|
||||
string namespaceReplace = "";
|
||||
string commandReplace = "";
|
||||
|
||||
if (TerminalBackend.latestCommmand != "" && TerminalBackend.latestCommmand.IndexOf('.') > -1)
|
||||
{
|
||||
namespaceReplace = TerminalBackend.latestCommmand.Split('.')[0];
|
||||
commandReplace = TerminalBackend.latestCommmand.Split('.')[1];
|
||||
}
|
||||
|
||||
Dictionary<string, string> defaultReplace = new Dictionary<string, string>() {
|
||||
{"%username", usernameReplace},
|
||||
{"%domain", domainReplace},
|
||||
{"%ns", namespaceReplace},
|
||||
{"%cmd", commandReplace},
|
||||
{"%cp", SaveSystem.CurrentSave?.Codepoints.ToString() },
|
||||
};
|
||||
|
||||
foreach (KeyValuePair<string, string> replacement in replace)
|
||||
{
|
||||
original = original.Replace(replacement.Key, Parse(replacement.Value));
|
||||
}
|
||||
|
||||
foreach (KeyValuePair<string, string> replacement in defaultReplace)
|
||||
{
|
||||
original = original.Replace(replacement.Key, replacement.Value);
|
||||
}
|
||||
|
||||
return original;
|
||||
}
|
||||
|
||||
public static void RegisterProvider(ILanguageProvider p)
|
||||
{
|
||||
_provider = p;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,331 +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 ONLINEMODE
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.IO;
|
||||
using Newtonsoft.Json;
|
||||
using ShiftOS.Objects;
|
||||
using ShiftOS.Objects.ShiftFS;
|
||||
using oobe = ShiftOS.Engine.OutOfBoxExperience;
|
||||
using static System.Net.Mime.MediaTypeNames;
|
||||
|
||||
namespace ShiftOS.Engine
|
||||
{
|
||||
public class EngineConfig
|
||||
{
|
||||
public bool ConnectToMud = true;
|
||||
public string MudDefaultIP = "dome.rol.im";
|
||||
public int MudDefaultPort = 13370;
|
||||
}
|
||||
|
||||
public static class SaveSystem
|
||||
{
|
||||
public static bool ShuttingDown = false;
|
||||
|
||||
public static Save CurrentSave { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Start the entire ShiftOS engine.
|
||||
/// </summary>
|
||||
/// <param name="useDefaultUI">Whether ShiftOS should initiate it's Windows Forms front-end.</param>
|
||||
public static void Begin(bool useDefaultUI = true)
|
||||
{
|
||||
AppDomain.CurrentDomain.UnhandledException += (o, a) =>
|
||||
{
|
||||
CrashHandler.Start((Exception)a.ExceptionObject);
|
||||
};
|
||||
|
||||
if (!System.IO.File.Exists(Paths.SaveFile))
|
||||
{
|
||||
var root = new ShiftOS.Objects.ShiftFS.Directory();
|
||||
root.Name = "System";
|
||||
root.permissions = Permissions.All;
|
||||
System.IO.File.WriteAllText(Paths.SaveFile, JsonConvert.SerializeObject(root));
|
||||
}
|
||||
|
||||
|
||||
if (Utils.Mounts.Count == 0)
|
||||
Utils.Mount(System.IO.File.ReadAllText(Paths.SaveFile));
|
||||
Paths.Init();
|
||||
|
||||
Localization.SetupTHETRUEDefaultLocals();
|
||||
SkinEngine.Init();
|
||||
|
||||
TerminalBackend.OpenTerminal();
|
||||
|
||||
TerminalBackend.InStory = true;
|
||||
var thread = new Thread(new ThreadStart(() =>
|
||||
{
|
||||
//Do not uncomment until I sort out the copyright stuff... - Michael
|
||||
//AudioManager.Init();
|
||||
|
||||
var defaultConf = new EngineConfig();
|
||||
if (System.IO.File.Exists("engineconfig.json"))
|
||||
defaultConf = JsonConvert.DeserializeObject<EngineConfig>(System.IO.File.ReadAllText("engineconfig.json"));
|
||||
else
|
||||
{
|
||||
System.IO.File.WriteAllText("engineconfig.json", JsonConvert.SerializeObject(defaultConf, Formatting.Indented));
|
||||
}
|
||||
|
||||
Thread.Sleep(350);
|
||||
Console.WriteLine("Initiating kernel...");
|
||||
Thread.Sleep(250);
|
||||
Console.WriteLine("Reading filesystem...");
|
||||
Thread.Sleep(100);
|
||||
Console.WriteLine("Reading configuration...");
|
||||
|
||||
Console.WriteLine("{CONNECTING_TO_MUD}");
|
||||
|
||||
if (defaultConf.ConnectToMud == true)
|
||||
{
|
||||
bool guidReceived = false;
|
||||
ServerManager.GUIDReceived += (str) =>
|
||||
{
|
||||
//Connection successful! Stop waiting!
|
||||
guidReceived = true;
|
||||
Console.WriteLine("Connection successful.");
|
||||
};
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
ServerManager.Initiate("secondary4162.cloudapp.net", 13370);
|
||||
//This haults the client until the connection is successful.
|
||||
while (ServerManager.thisGuid == new Guid())
|
||||
{
|
||||
|
||||
}
|
||||
Console.WriteLine("GUID received - bootstrapping complete.");
|
||||
FinishBootstrap();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
//No errors, this never gets called.
|
||||
Console.WriteLine("{ERROR}: " + ex.Message);
|
||||
Thread.Sleep(3000);
|
||||
ServerManager.StartLANServer();
|
||||
while (ServerManager.thisGuid == new Guid())
|
||||
{
|
||||
|
||||
}
|
||||
Console.WriteLine("GUID received - bootstrapping complete.");
|
||||
FinishBootstrap();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ServerManager.StartLANServer();
|
||||
}
|
||||
|
||||
//Nothing happens past this point - but the client IS connected! It shouldn't be stuck in that while loop above.
|
||||
|
||||
|
||||
}));
|
||||
thread.IsBackground = true;
|
||||
thread.Start();
|
||||
}
|
||||
|
||||
public static void FinishBootstrap()
|
||||
{
|
||||
KernelWatchdog.Log("mud_handshake", "handshake successful: kernel watchdog access code is \"" + ServerManager.thisGuid.ToString() + "\"");
|
||||
|
||||
ServerManager.MessageReceived += (msg) =>
|
||||
{
|
||||
if (msg.Name == "mud_savefile")
|
||||
{
|
||||
CurrentSave = JsonConvert.DeserializeObject<Save>(msg.Contents);
|
||||
}
|
||||
else if (msg.Name == "mud_login_denied")
|
||||
{
|
||||
oobe.PromptForLogin();
|
||||
}
|
||||
};
|
||||
|
||||
ReadSave();
|
||||
|
||||
while (CurrentSave == null)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
Shiftorium.Init();
|
||||
|
||||
while (CurrentSave.StoryPosition < 1)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
Thread.Sleep(75);
|
||||
|
||||
Thread.Sleep(50);
|
||||
Console.WriteLine("{SYSTEM_INITIATED}");
|
||||
|
||||
TerminalBackend.InStory = false;
|
||||
TerminalBackend.PrefixEnabled = true;
|
||||
Shiftorium.LogOrphanedUpgrades = true;
|
||||
Desktop.InvokeOnWorkerThread(new Action(() =>
|
||||
{
|
||||
ShiftOS.Engine.Scripting.LuaInterpreter.RunSft(Paths.GetPath("kernel.sft"));
|
||||
}));
|
||||
Desktop.InvokeOnWorkerThread(new Action(() => Desktop.PopulateAppLauncher()));
|
||||
if (CurrentSave.StoryPosition == 1)
|
||||
{
|
||||
Desktop.InvokeOnWorkerThread(new Action(() =>
|
||||
{
|
||||
TutorialManager.StartTutorial();
|
||||
|
||||
}));
|
||||
while (TutorialManager.IsInTutorial == true) { }
|
||||
GameReady?.Invoke();
|
||||
}
|
||||
else
|
||||
{
|
||||
GameReady?.Invoke();
|
||||
}
|
||||
}
|
||||
|
||||
public delegate void EmptyEventHandler();
|
||||
|
||||
public static List<ClientSave> Users
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
public static event EmptyEventHandler GameReady;
|
||||
|
||||
public static void TransferCodepointsToVoid(int amount)
|
||||
{
|
||||
CurrentSave.Codepoints -= amount;
|
||||
NotificationDaemon.AddNotification(NotificationType.CodepointsSent, amount);
|
||||
}
|
||||
|
||||
public static void Restart()
|
||||
{
|
||||
TerminalBackend.InvokeCommand("sos.shutdown");
|
||||
System.Windows.Forms.Application.Restart();
|
||||
}
|
||||
|
||||
public static void ReadSave()
|
||||
{
|
||||
//Migrate old saves.
|
||||
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("\\", "/"));
|
||||
}
|
||||
foreach (string file in System.IO.Directory.EnumerateFiles("C:\\ShiftOS2"))
|
||||
{
|
||||
|
||||
string rfile = Path.GetFileName(file);
|
||||
Utils.WriteAllBytes(file.Replace("C:\\ShiftOS2\\", "0:/").Replace("\\", "/"), System.IO.File.ReadAllBytes(file));
|
||||
Console.WriteLine("Exported file " + file);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
if (Utils.FileExists(Paths.SaveFileInner))
|
||||
{
|
||||
oobe.ShowSaveTransfer(JsonConvert.DeserializeObject<Save>(Utils.ReadAllText(Paths.SaveFileInner)));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Utils.FileExists(Paths.GetPath("user.dat")))
|
||||
{
|
||||
var userdat = JsonConvert.DeserializeObject<ClientSave>(Utils.ReadAllText(Paths.GetPath("user.dat")));
|
||||
|
||||
ServerManager.SendMessage("mud_login", $@"{{
|
||||
username: ""{userdat.Username}"",
|
||||
password: ""{userdat.Password}""
|
||||
}}");
|
||||
}
|
||||
else
|
||||
{
|
||||
NewSave();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static void NewSave()
|
||||
{
|
||||
AppearanceManager.Invoke(new Action(() =>
|
||||
{
|
||||
CurrentSave = new Save();
|
||||
CurrentSave.Codepoints = 0;
|
||||
CurrentSave.Upgrades = new Dictionary<string, bool>();
|
||||
Shiftorium.Init();
|
||||
oobe.Start(CurrentSave);
|
||||
}));
|
||||
}
|
||||
|
||||
public static void SaveGame()
|
||||
{
|
||||
if(!Shiftorium.Silent)
|
||||
Console.WriteLine("");
|
||||
if(!Shiftorium.Silent)
|
||||
Console.Write("{SE_SAVING}... ");
|
||||
if (SaveSystem.CurrentSave != null)
|
||||
{
|
||||
string username = CurrentSave.Username;
|
||||
string password = CurrentSave.Password;
|
||||
|
||||
Utils.WriteAllText(Paths.GetPath("user.dat"), $@"{{
|
||||
username: ""{username}"",
|
||||
password: ""{password}""
|
||||
}}");
|
||||
|
||||
ServerManager.SendMessage("mud_save", JsonConvert.SerializeObject(CurrentSave, Formatting.Indented));
|
||||
}
|
||||
if (!Shiftorium.Silent)
|
||||
Console.WriteLine(" ...{DONE}.");
|
||||
System.IO.File.WriteAllText(Paths.SaveFile, Utils.ExportMount(0));
|
||||
}
|
||||
|
||||
public static void TransferCodepointsFrom(string who, long amount)
|
||||
{
|
||||
NotificationDaemon.AddNotification(NotificationType.CodepointsReceived, amount);
|
||||
CurrentSave.Codepoints += amount;
|
||||
}
|
||||
}
|
||||
|
||||
public delegate void TextSentEventHandler(string text);
|
||||
|
||||
public class DeveloperAttribute : Attribute
|
||||
{
|
||||
|
||||
}
|
||||
}
|
|
@ -1,230 +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.Objects;
|
||||
using NetSockets;
|
||||
using System.Windows.Forms;
|
||||
using System.Threading;
|
||||
using ShiftOS;
|
||||
using static ShiftOS.Engine.SaveSystem;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace ShiftOS.Engine
|
||||
{
|
||||
public static class ServerManager
|
||||
{
|
||||
public static void PrintDiagnostics()
|
||||
{
|
||||
Console.WriteLine($@"{{CLIENT_DIAGNOSTICS}}
|
||||
|
||||
{{GUID}}: {thisGuid}
|
||||
{{CLIENT_DATA}}:
|
||||
|
||||
{JsonConvert.SerializeObject(client, Formatting.Indented)}");
|
||||
}
|
||||
|
||||
public static Guid thisGuid { get; private set; }
|
||||
private static NetObjectClient client { get; set; }
|
||||
|
||||
public static void Disconnect()
|
||||
{
|
||||
if (client != null)
|
||||
{
|
||||
client.Disconnect();
|
||||
}
|
||||
Disconnected?.Invoke();
|
||||
|
||||
}
|
||||
|
||||
public static event EmptyEventHandler Disconnected;
|
||||
|
||||
public static void InitiateMUDHack()
|
||||
{
|
||||
MessageReceived += ServerManager_MessageReceived;
|
||||
SendMessage("mudhack_init", "");
|
||||
}
|
||||
|
||||
public static event Action<string> ServerPasswordGenerated;
|
||||
public static event EmptyEventHandler ServerAccessGranted;
|
||||
public static event EmptyEventHandler ServerAccessDenied;
|
||||
public static event Action<string> GUIDReceived;
|
||||
public static event Action<List<OnlineUser>> UsersReceived;
|
||||
|
||||
private static void ServerManager_MessageReceived(ServerMessage msg)
|
||||
{
|
||||
switch(msg.Name)
|
||||
{
|
||||
case "mudhack_users":
|
||||
UsersReceived?.Invoke(JsonConvert.DeserializeObject<List<OnlineUser>>(msg.Contents));
|
||||
break;
|
||||
case "mudhack_init":
|
||||
ServerPasswordGenerated?.Invoke(msg.Contents);
|
||||
break;
|
||||
case "mudhack_denied":
|
||||
ServerAccessDenied?.Invoke();
|
||||
break;
|
||||
case "mudhack_granted":
|
||||
ServerAccessGranted?.Invoke();
|
||||
break;
|
||||
case "getguid_fromserver":
|
||||
if(SaveSystem.CurrentSave.Username == msg.Contents)
|
||||
{
|
||||
client.Send(new NetObject("yes_i_am", new ServerMessage
|
||||
{
|
||||
Name = "getguid_reply",
|
||||
GUID = msg.GUID,
|
||||
Contents = thisGuid.ToString(),
|
||||
}));
|
||||
}
|
||||
break;
|
||||
case "getguid_reply":
|
||||
GUIDReceived?.Invoke(msg.Contents);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public static void Detach_ServerManager_MessageReceived()
|
||||
{
|
||||
MessageReceived -= new ServerMessageReceived(ServerManager_MessageReceived);
|
||||
}
|
||||
|
||||
public static void Initiate(string mud_address, int port)
|
||||
{
|
||||
client = new NetObjectClient();
|
||||
|
||||
client.OnReceived += (o, a) =>
|
||||
{
|
||||
var msg = a.Data.Object as ServerMessage;
|
||||
if (msg.Name == "Welcome")
|
||||
{
|
||||
thisGuid = new Guid(msg.Contents);
|
||||
GUIDReceived?.Invoke(msg.Contents);
|
||||
TerminalBackend.PrefixEnabled = true;
|
||||
TerminalBackend.PrintPrompt();
|
||||
}
|
||||
else if(msg.Name == "allusers")
|
||||
{
|
||||
foreach(var acc in JsonConvert.DeserializeObject<string[]>(msg.Contents))
|
||||
{
|
||||
Console.WriteLine(acc);
|
||||
}
|
||||
TerminalBackend.PrintPrompt();
|
||||
}
|
||||
else if(msg.Name == "update_your_cp")
|
||||
{
|
||||
var args = JsonConvert.DeserializeObject<Dictionary<string, object>>(msg.Contents);
|
||||
if(args["username"] as string == SaveSystem.CurrentSave.Username)
|
||||
{
|
||||
SaveSystem.CurrentSave.Codepoints += (long)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.");
|
||||
}));
|
||||
SaveSystem.SaveGame();
|
||||
}
|
||||
}
|
||||
else if(msg.Name =="broadcast")
|
||||
{
|
||||
Console.WriteLine(msg.Contents);
|
||||
}
|
||||
else if (msg.Name == "Error")
|
||||
{
|
||||
var ex = JsonConvert.DeserializeObject<Exception>(msg.Contents);
|
||||
TerminalBackend.PrefixEnabled = true;
|
||||
ConsoleEx.ForegroundColor = ConsoleColor.Red;
|
||||
ConsoleEx.Bold = true;
|
||||
Console.Write($@"{{MUD_ERROR}}: ");
|
||||
ConsoleEx.Bold = false;
|
||||
ConsoleEx.Italic = true;
|
||||
ConsoleEx.ForegroundColor = ConsoleColor.DarkYellow;
|
||||
Console.WriteLine(ex.Message);
|
||||
TerminalBackend.PrefixEnabled = true;
|
||||
TerminalBackend.PrintPrompt();
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageReceived?.Invoke(msg);
|
||||
}
|
||||
};
|
||||
|
||||
client.Connect(mud_address, port);
|
||||
|
||||
}
|
||||
|
||||
public static void SendMessage(string name, string contents)
|
||||
{
|
||||
var sMsg = new ServerMessage
|
||||
{
|
||||
Name = name,
|
||||
Contents = contents,
|
||||
GUID = thisGuid.ToString(),
|
||||
};
|
||||
|
||||
client.Send(new NetObject("msg", sMsg));
|
||||
|
||||
}
|
||||
|
||||
private static bool singleplayer = false;
|
||||
public static bool IsSingleplayer { get { return singleplayer; } }
|
||||
|
||||
public static void StartLANServer()
|
||||
{
|
||||
singleplayer = true;
|
||||
ShiftOS.Server.Program.ServerStarted += (address) =>
|
||||
{
|
||||
Console.WriteLine($"Connecting to {address}...");
|
||||
Initiate(address, 13370);
|
||||
};
|
||||
Disconnected += () =>
|
||||
{
|
||||
ShiftOS.Server.Program.Stop();
|
||||
};
|
||||
ShiftOS.Server.Program.Main(new[] { "" });
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
public static event ServerMessageReceived MessageReceived;
|
||||
|
||||
}
|
||||
|
||||
public delegate void ServerMessageReceived(ServerMessage msg);
|
||||
|
||||
public class MultiplayerOnlyAttribute : Attribute
|
||||
{
|
||||
/// <summary>
|
||||
/// Marks this application as a multiplayer-only application.
|
||||
/// </summary>
|
||||
public MultiplayerOnlyAttribute()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,285 +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 Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using static ShiftOS.Engine.SaveSystem;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace ShiftOS.Engine
|
||||
{
|
||||
public static class Shiftorium
|
||||
{
|
||||
/// <summary>
|
||||
/// Whether or not shiftorium output should be written to the console.
|
||||
/// </summary>
|
||||
public static bool Silent = false;
|
||||
|
||||
public static void InvokeUpgradeInstalled()
|
||||
{
|
||||
Installed?.Invoke();
|
||||
}
|
||||
|
||||
|
||||
public static bool Buy(string id, int cost)
|
||||
{
|
||||
if(SaveSystem.CurrentSave.Codepoints >= cost)
|
||||
{
|
||||
SaveSystem.CurrentSave.Upgrades[id] = true;
|
||||
TerminalBackend.InvokeCommand("sos.save");
|
||||
SaveSystem.TransferCodepointsToVoid(cost);
|
||||
Installed?.Invoke();
|
||||
Desktop.ResetPanelButtons();
|
||||
Desktop.PopulateAppLauncher();
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!Silent)
|
||||
Console.WriteLine($"{{SHIFTORIUM_NOTENOUGHCP}}: {cost} > {SaveSystem.CurrentSave.Codepoints}");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static bool UpgradeAttributesUnlocked(Type type)
|
||||
{
|
||||
foreach(var attr in type.GetCustomAttributes(true))
|
||||
{
|
||||
if(attr is RequiresUpgradeAttribute)
|
||||
{
|
||||
var rAttr = attr as RequiresUpgradeAttribute;
|
||||
return rAttr.Installed;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static bool UpgradeAttributesUnlocked(MethodInfo type)
|
||||
{
|
||||
foreach (var attr in type.GetCustomAttributes(true))
|
||||
{
|
||||
if (attr is RequiresUpgradeAttribute)
|
||||
{
|
||||
var rAttr = attr as RequiresUpgradeAttribute;
|
||||
return rAttr.Installed;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static bool UpgradeAttributesUnlocked(PropertyInfo type)
|
||||
{
|
||||
foreach (var attr in type.GetCustomAttributes(true))
|
||||
{
|
||||
if (attr is RequiresUpgradeAttribute)
|
||||
{
|
||||
var rAttr = attr as RequiresUpgradeAttribute;
|
||||
return rAttr.Installed;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static bool UpgradeAttributesUnlocked(FieldInfo type)
|
||||
{
|
||||
foreach (var attr in type.GetCustomAttributes(true))
|
||||
{
|
||||
if (attr is RequiresUpgradeAttribute)
|
||||
{
|
||||
var rAttr = attr as RequiresUpgradeAttribute;
|
||||
return rAttr.Installed;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static bool IsInitiated { get; private set; }
|
||||
|
||||
public static void Init()
|
||||
{
|
||||
if (IsInitiated == false)
|
||||
{
|
||||
IsInitiated = true;
|
||||
//Let the crash handler deal with this one...
|
||||
var dict = GetDefaults();
|
||||
foreach (var itm in dict)
|
||||
{
|
||||
if (!SaveSystem.CurrentSave.Upgrades.ContainsKey(itm.ID))
|
||||
{
|
||||
try
|
||||
{
|
||||
SaveSystem.CurrentSave.Upgrades.Add(itm.ID, false);
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static int GetCPValue(string id)
|
||||
{
|
||||
foreach(var upg in GetDefaults())
|
||||
{
|
||||
if (upg.ID == id)
|
||||
return upg.Cost;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static ShiftoriumUpgrade[] GetAvailable()
|
||||
{
|
||||
List<ShiftoriumUpgrade> available = new List<ShiftoriumUpgrade>();
|
||||
foreach(var defaultupg in GetDefaults())
|
||||
{
|
||||
if (!UpgradeInstalled(defaultupg.ID) && DependenciesInstalled(defaultupg))
|
||||
available.Add(defaultupg);
|
||||
}
|
||||
return available.ToArray();
|
||||
}
|
||||
|
||||
public static bool DependenciesInstalled(ShiftoriumUpgrade upg)
|
||||
{
|
||||
if (string.IsNullOrEmpty(upg.Dependencies))
|
||||
{
|
||||
return true;//root upgrade, no parents
|
||||
}
|
||||
else if (upg.Dependencies.Contains(";"))
|
||||
{
|
||||
string[] dependencies = upg.Dependencies.Split(';');
|
||||
foreach(var dependency in dependencies)
|
||||
{
|
||||
if (!UpgradeInstalled(dependency))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return UpgradeInstalled(upg.Dependencies);
|
||||
}
|
||||
}
|
||||
|
||||
public static event EmptyEventHandler Installed;
|
||||
|
||||
public static bool UpgradeInstalled(string id)
|
||||
{
|
||||
if (SaveSystem.CurrentSave != null)
|
||||
{
|
||||
if (!IsInitiated)
|
||||
Init();
|
||||
}
|
||||
try
|
||||
{
|
||||
if (SaveSystem.CurrentSave == null)
|
||||
return false;
|
||||
|
||||
if (SaveSystem.CurrentSave.StoriesExperienced == null)
|
||||
SaveSystem.CurrentSave.StoriesExperienced = new List<string>();
|
||||
|
||||
bool upgInstalled = false;
|
||||
if(SaveSystem.CurrentSave.Upgrades.ContainsKey(id))
|
||||
upgInstalled = SaveSystem.CurrentSave.Upgrades[id];
|
||||
|
||||
if(upgInstalled == false)
|
||||
return SaveSystem.CurrentSave.StoriesExperienced.Contains(id);
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
Console.WriteLine("Upgrade " + id + "DNE.");
|
||||
Console.WriteLine();
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//LEAVE THIS AS FALSE. The game will set it when the save is loaded.
|
||||
public static bool LogOrphanedUpgrades = false;
|
||||
|
||||
private static IShiftoriumProvider _provider = null;
|
||||
|
||||
public static void RegisterProvider(IShiftoriumProvider p)
|
||||
{
|
||||
_provider = p;
|
||||
}
|
||||
|
||||
//Bless the newer NEWER engine.
|
||||
public static List<ShiftoriumUpgrade> GetDefaults()
|
||||
{
|
||||
try
|
||||
{
|
||||
return _provider.GetDefaults();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine("Couldn't get the upgrade definition list from the provider.");
|
||||
Console.WriteLine("This might be able to help:");
|
||||
Console.WriteLine(ex);
|
||||
return JsonConvert.DeserializeObject<List<ShiftoriumUpgrade>>(Properties.Resources.Shiftorium);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public interface IShiftoriumProvider
|
||||
{
|
||||
List<ShiftoriumUpgrade> GetDefaults();
|
||||
}
|
||||
|
||||
public class ShiftoriumUpgradeLookupException : Exception
|
||||
{
|
||||
public ShiftoriumUpgradeLookupException(string id) : base("A shiftorium upgrade of ID \"" + id + "\" was not found in the system.")
|
||||
{
|
||||
ID = id;
|
||||
|
||||
Debug.WriteLine("UpgradeNotFound: " + id);
|
||||
|
||||
}
|
||||
|
||||
public string ID { get; private set; }
|
||||
}
|
||||
|
||||
public class ShiftoriumUpgrade
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public string Description { get; set; }
|
||||
public int Cost { get; set; }
|
||||
public string ID { get { return (this.Id != null ? this.Id : (Name.ToLower().Replace(" ", "_"))); } }
|
||||
public string Id { get; }
|
||||
|
||||
public string Dependencies { get; set; }
|
||||
}
|
||||
}
|
|
@ -1,131 +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 System.IO;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace ShiftOS.Engine
|
||||
{
|
||||
public class TerminalTextWriter : TextWriter
|
||||
{
|
||||
[System.Runtime.InteropServices.DllImport("user32.dll")]
|
||||
public static extern bool LockWindowUpdate(IntPtr hWndLock);
|
||||
|
||||
|
||||
public override Encoding Encoding
|
||||
{
|
||||
get
|
||||
{
|
||||
return Encoding.Unicode;
|
||||
}
|
||||
}
|
||||
|
||||
public ITerminalWidget UnderlyingControl
|
||||
{
|
||||
get
|
||||
{
|
||||
return AppearanceManager.ConsoleOut;
|
||||
}
|
||||
}
|
||||
|
||||
public void select()
|
||||
{
|
||||
Desktop.InvokeOnWorkerThread(new Action(() =>
|
||||
{
|
||||
UnderlyingControl.SelectBottom();
|
||||
|
||||
}));
|
||||
}
|
||||
|
||||
public override void Write(char value)
|
||||
{
|
||||
if (TerminalBackend.IsForwardingConsoleWrites)
|
||||
{
|
||||
ServerManager.SendMessage("write", $@"{{
|
||||
guid: ""{TerminalBackend.ForwardGUID}"",
|
||||
text: ""{value}""
|
||||
}}");
|
||||
}
|
||||
else
|
||||
{
|
||||
Desktop.InvokeOnWorkerThread(new Action(() =>
|
||||
{
|
||||
UnderlyingControl.Write(value.ToString());
|
||||
select();
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
public override void WriteLine(string value)
|
||||
{
|
||||
if (TerminalBackend.IsForwardingConsoleWrites)
|
||||
{
|
||||
ServerManager.SendMessage("write", $@"{{
|
||||
guid: ""{TerminalBackend.ForwardGUID}"",
|
||||
text: ""{value + Environment.NewLine}""
|
||||
}}");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Desktop.InvokeOnWorkerThread(new Action(() =>
|
||||
{
|
||||
UnderlyingControl.WriteLine(value);
|
||||
select();
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
public void SetLastText()
|
||||
{
|
||||
}
|
||||
|
||||
public override void Write(string value)
|
||||
{
|
||||
if (TerminalBackend.IsForwardingConsoleWrites)
|
||||
{
|
||||
ServerManager.SendMessage("write", $@"{{
|
||||
guid: ""{TerminalBackend.ForwardGUID}"",
|
||||
text: ""{value}""
|
||||
}}");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Desktop.InvokeOnWorkerThread(new Action(() =>
|
||||
{
|
||||
UnderlyingControl.Write(value.ToString());
|
||||
select();
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue