From f43f6fe17d054f83c686b552201d6b4bfc83524d Mon Sep 17 00:00:00 2001 From: Michael Date: Mon, 3 Apr 2017 18:36:13 -0400 Subject: LOADS of optimizations and Pong fixes. --- ShiftOS.WinForms/Applications/Pong.Designer.cs | 177 +++++++++++++------------ 1 file changed, 95 insertions(+), 82 deletions(-) (limited to 'ShiftOS.WinForms/Applications/Pong.Designer.cs') diff --git a/ShiftOS.WinForms/Applications/Pong.Designer.cs b/ShiftOS.WinForms/Applications/Pong.Designer.cs index faaf0f5..e619eaa 100644 --- a/ShiftOS.WinForms/Applications/Pong.Designer.cs +++ b/ShiftOS.WinForms/Applications/Pong.Designer.cs @@ -79,6 +79,11 @@ namespace ShiftOS.WinForms.Applications 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.pnlhighscore = new System.Windows.Forms.Panel(); + this.lbhighscore = new System.Windows.Forms.ListBox(); + this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); + this.button2 = new System.Windows.Forms.Button(); + this.label10 = new System.Windows.Forms.Label(); this.pnlgamestats = new System.Windows.Forms.Panel(); this.button1 = new System.Windows.Forms.Button(); this.label12 = new System.Windows.Forms.Label(); @@ -91,9 +96,6 @@ namespace ShiftOS.WinForms.Applications 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(); @@ -122,16 +124,14 @@ namespace ShiftOS.WinForms.Applications 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.flowLayoutPanel1.SuspendLayout(); + this.pnlgamestats.SuspendLayout(); this.pnlfinalstats.SuspendLayout(); this.pnllose.SuspendLayout(); this.pnlintro.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.paddleHuman)).BeginInit(); - this.flowLayoutPanel1.SuspendLayout(); this.SuspendLayout(); // // gameTimer @@ -174,11 +174,67 @@ namespace ShiftOS.WinForms.Applications this.pgcontents.Dock = System.Windows.Forms.DockStyle.Fill; this.pgcontents.Location = new System.Drawing.Point(0, 0); this.pgcontents.Name = "pgcontents"; - this.pgcontents.Size = new System.Drawing.Size(700, 400); + this.pgcontents.Size = new System.Drawing.Size(1867, 819); 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); // + // pnlhighscore + // + this.pnlhighscore.Controls.Add(this.lbhighscore); + this.pnlhighscore.Controls.Add(this.flowLayoutPanel1); + this.pnlhighscore.Controls.Add(this.label10); + this.pnlhighscore.Location = new System.Drawing.Point(688, 302); + this.pnlhighscore.Name = "pnlhighscore"; + this.pnlhighscore.Size = new System.Drawing.Size(539, 311); + this.pnlhighscore.TabIndex = 14; + this.pnlhighscore.Visible = false; + // + // lbhighscore + // + this.lbhighscore.Dock = System.Windows.Forms.DockStyle.Fill; + this.lbhighscore.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; + // + // flowLayoutPanel1 + // + this.flowLayoutPanel1.AutoSize = true; + this.flowLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.flowLayoutPanel1.Controls.Add(this.button2); + this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.flowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.RightToLeft; + this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 282); + this.flowLayoutPanel1.Name = "flowLayoutPanel1"; + this.flowLayoutPanel1.Size = new System.Drawing.Size(539, 29); + this.flowLayoutPanel1.TabIndex = 2; + // + // button2 + // + this.button2.AutoSize = true; + this.button2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.button2.Location = new System.Drawing.Point(476, 3); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(60, 23); + this.button2.TabIndex = 0; + this.button2.Text = "{CLOSE}"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // label10 + // + this.label10.Dock = System.Windows.Forms.DockStyle.Top; + this.label10.Location = new System.Drawing.Point(0, 0); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(539, 36); + this.label10.TabIndex = 0; + this.label10.Text = "{HIGH_SCORES}"; + this.label10.TextAlign = System.Drawing.ContentAlignment.TopCenter; + // // pnlgamestats // this.pnlgamestats.Controls.Add(this.button1); @@ -192,7 +248,7 @@ namespace ShiftOS.WinForms.Applications 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.Location = new System.Drawing.Point(104, 375); this.pnlgamestats.Name = "pnlgamestats"; this.pnlgamestats.Size = new System.Drawing.Size(466, 284); this.pnlgamestats.TabIndex = 6; @@ -307,38 +363,6 @@ namespace ShiftOS.WinForms.Applications 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); @@ -373,6 +397,7 @@ namespace ShiftOS.WinForms.Applications this.lblfinalcodepoints.Name = "lblfinalcodepoints"; this.lblfinalcodepoints.Size = new System.Drawing.Size(356, 73); this.lblfinalcodepoints.TabIndex = 15; + this.lblfinalcodepoints.Tag = "header1"; this.lblfinalcodepoints.Text = "134 CP"; this.lblfinalcodepoints.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // @@ -384,6 +409,7 @@ namespace ShiftOS.WinForms.Applications this.Label11.Name = "Label11"; this.Label11.Size = new System.Drawing.Size(33, 33); this.Label11.TabIndex = 14; + this.Label11.Tag = "header2"; this.Label11.Text = "+"; this.Label11.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // @@ -394,6 +420,7 @@ namespace ShiftOS.WinForms.Applications this.lblfinalcomputerreward.Name = "lblfinalcomputerreward"; this.lblfinalcomputerreward.Size = new System.Drawing.Size(151, 52); this.lblfinalcomputerreward.TabIndex = 12; + this.lblfinalcomputerreward.Tag = "header2"; this.lblfinalcomputerreward.Text = "34"; this.lblfinalcomputerreward.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // @@ -413,6 +440,7 @@ namespace ShiftOS.WinForms.Applications this.lblfinallevelreward.Name = "lblfinallevelreward"; this.lblfinallevelreward.Size = new System.Drawing.Size(151, 52); this.lblfinallevelreward.TabIndex = 10; + this.lblfinallevelreward.Tag = "header2"; this.lblfinallevelreward.Text = "100"; this.lblfinallevelreward.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // @@ -432,6 +460,7 @@ namespace ShiftOS.WinForms.Applications this.lblfinalcodepointswithtext.Name = "lblfinalcodepointswithtext"; this.lblfinalcodepointswithtext.Size = new System.Drawing.Size(356, 26); this.lblfinalcodepointswithtext.TabIndex = 1; + this.lblfinalcodepointswithtext.Tag = "header2"; this.lblfinalcodepointswithtext.Text = "You cashed out with 134 codepoints!"; this.lblfinalcodepointswithtext.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // @@ -502,10 +531,11 @@ namespace ShiftOS.WinForms.Applications 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.Location = new System.Drawing.Point(1139, 41); this.pnlintro.Name = "pnlintro"; this.pnlintro.Size = new System.Drawing.Size(595, 303); this.pnlintro.TabIndex = 13; + this.pnlintro.Tag = "header2"; // // Label6 // @@ -548,6 +578,7 @@ namespace ShiftOS.WinForms.Applications this.lblbeatai.Name = "lblbeatai"; this.lblbeatai.Size = new System.Drawing.Size(600, 30); this.lblbeatai.TabIndex = 8; + this.lblbeatai.Tag = "header2"; this.lblbeatai.Text = "You got 2 codepoints for beating the Computer!"; this.lblbeatai.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; this.lblbeatai.Visible = false; @@ -577,7 +608,6 @@ namespace ShiftOS.WinForms.Applications // 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; @@ -587,7 +617,7 @@ namespace ShiftOS.WinForms.Applications // 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.Location = new System.Drawing.Point(1833, 134); this.paddleComputer.MaximumSize = new System.Drawing.Size(20, 150); this.paddleComputer.Name = "paddleComputer"; this.paddleComputer.Size = new System.Drawing.Size(20, 100); @@ -599,69 +629,52 @@ namespace ShiftOS.WinForms.Applications 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.Size = new System.Drawing.Size(1867, 22); this.lbllevelandtime.TabIndex = 4; + this.lbllevelandtime.Tag = "header1"; this.lbllevelandtime.Text = "Level: 1 - 58 Seconds Left"; this.lbllevelandtime.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // lblstatscodepoints // - this.lblstatscodepoints.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + this.lblstatscodepoints.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); + this.lblstatscodepoints.AutoSize = true; this.lblstatscodepoints.Font = new System.Drawing.Font("Georgia", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblstatscodepoints.Location = new System.Drawing.Point(239, 356); + this.lblstatscodepoints.Location = new System.Drawing.Point(239, 775); this.lblstatscodepoints.Name = "lblstatscodepoints"; - this.lblstatscodepoints.Size = new System.Drawing.Size(219, 35); + this.lblstatscodepoints.Size = new System.Drawing.Size(116, 23); this.lblstatscodepoints.TabIndex = 12; + this.lblstatscodepoints.Tag = "header2"; this.lblstatscodepoints.Text = "Codepoints: "; this.lblstatscodepoints.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // lblstatsY // this.lblstatsY.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.lblstatsY.AutoSize = true; this.lblstatsY.Font = new System.Drawing.Font("Georgia", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblstatsY.Location = new System.Drawing.Point(542, 356); + this.lblstatsY.Location = new System.Drawing.Point(1395, 775); this.lblstatsY.Name = "lblstatsY"; - this.lblstatsY.Size = new System.Drawing.Size(144, 35); + this.lblstatsY.Size = new System.Drawing.Size(76, 23); this.lblstatsY.TabIndex = 11; + this.lblstatsY.Tag = "header2"; this.lblstatsY.Text = "Yspeed:"; this.lblstatsY.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // lblstatsX // this.lblstatsX.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.lblstatsX.AutoSize = true; this.lblstatsX.Font = new System.Drawing.Font("Georgia", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblstatsX.Location = new System.Drawing.Point(3, 356); + this.lblstatsX.Location = new System.Drawing.Point(3, 775); this.lblstatsX.Name = "lblstatsX"; - this.lblstatsX.Size = new System.Drawing.Size(144, 35); + this.lblstatsX.Size = new System.Drawing.Size(83, 23); this.lblstatsX.TabIndex = 5; + this.lblstatsX.Tag = "header2"; this.lblstatsX.Text = "Xspeed: "; this.lblstatsX.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // - // 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); @@ -670,23 +683,23 @@ namespace ShiftOS.WinForms.Applications this.Controls.Add(this.pgcontents); this.DoubleBuffered = true; this.Name = "Pong"; - this.Text = "{PONG_NAME}"; - this.Size = new System.Drawing.Size(820, 500); + this.Size = new System.Drawing.Size(1867, 819); 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.pgcontents.PerformLayout(); this.pnlhighscore.ResumeLayout(false); this.pnlhighscore.PerformLayout(); + this.flowLayoutPanel1.ResumeLayout(false); + this.flowLayoutPanel1.PerformLayout(); + this.pnlgamestats.ResumeLayout(false); + this.pnlgamestats.PerformLayout(); this.pnlfinalstats.ResumeLayout(false); this.pnlfinalstats.PerformLayout(); this.pnllose.ResumeLayout(false); this.pnlintro.ResumeLayout(false); this.pnlintro.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.paddleHuman)).EndInit(); - this.flowLayoutPanel1.ResumeLayout(false); - this.flowLayoutPanel1.PerformLayout(); this.ResumeLayout(false); } -- cgit v1.2.3 From 0807e04881336ef51b1c473d2e61d344c8bef113 Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 15 Apr 2017 15:08:21 -0400 Subject: Add sounds to pong and fix audio bugs --- ShiftOS.WinForms/Applications/Dialog.cs | 10 +------- ShiftOS.WinForms/Applications/Pong.Designer.cs | 14 +++++------ ShiftOS.WinForms/Applications/Pong.cs | 13 +++++++++-- ShiftOS_TheReturn/AudioManager.cs | 32 +++++++++++++++++--------- 4 files changed, 40 insertions(+), 29 deletions(-) (limited to 'ShiftOS.WinForms/Applications/Pong.Designer.cs') diff --git a/ShiftOS.WinForms/Applications/Dialog.cs b/ShiftOS.WinForms/Applications/Dialog.cs index 171bdc4..593d64b 100644 --- a/ShiftOS.WinForms/Applications/Dialog.cs +++ b/ShiftOS.WinForms/Applications/Dialog.cs @@ -52,15 +52,7 @@ namespace ShiftOS.WinForms.Applications public void OnLoad() { AppearanceManager.SetWindowTitle(this, this.Title); - var str = Properties.Resources.infobox; - var bytes = new byte[str.Length]; - str.Read(bytes, 0, bytes.Length); - ShiftOS.Engine.AudioManager.Stop(); - if (File.Exists("snd.wav")) - File.Delete("snd.wav"); - File.WriteAllBytes("snd.wav", bytes); - - ShiftOS.Engine.AudioManager.Play("snd.wav"); + ShiftOS.Engine.AudioManager.PlayStream(Properties.Resources.infobox); } public void OnSkinLoad() diff --git a/ShiftOS.WinForms/Applications/Pong.Designer.cs b/ShiftOS.WinForms/Applications/Pong.Designer.cs index e619eaa..f28868a 100644 --- a/ShiftOS.WinForms/Applications/Pong.Designer.cs +++ b/ShiftOS.WinForms/Applications/Pong.Designer.cs @@ -174,7 +174,7 @@ namespace ShiftOS.WinForms.Applications this.pgcontents.Dock = System.Windows.Forms.DockStyle.Fill; this.pgcontents.Location = new System.Drawing.Point(0, 0); this.pgcontents.Name = "pgcontents"; - this.pgcontents.Size = new System.Drawing.Size(1867, 819); + this.pgcontents.Size = new System.Drawing.Size(912, 504); this.pgcontents.TabIndex = 20; this.pgcontents.Paint += new System.Windows.Forms.PaintEventHandler(this.pgcontents_Paint); this.pgcontents.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pongMain_MouseMove); @@ -617,7 +617,7 @@ namespace ShiftOS.WinForms.Applications // 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(1833, 134); + this.paddleComputer.Location = new System.Drawing.Point(878, 134); this.paddleComputer.MaximumSize = new System.Drawing.Size(20, 150); this.paddleComputer.Name = "paddleComputer"; this.paddleComputer.Size = new System.Drawing.Size(20, 100); @@ -629,7 +629,7 @@ namespace ShiftOS.WinForms.Applications 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(1867, 22); + this.lbllevelandtime.Size = new System.Drawing.Size(912, 22); this.lbllevelandtime.TabIndex = 4; this.lbllevelandtime.Tag = "header1"; this.lbllevelandtime.Text = "Level: 1 - 58 Seconds Left"; @@ -641,7 +641,7 @@ namespace ShiftOS.WinForms.Applications | System.Windows.Forms.AnchorStyles.Right))); this.lblstatscodepoints.AutoSize = true; this.lblstatscodepoints.Font = new System.Drawing.Font("Georgia", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblstatscodepoints.Location = new System.Drawing.Point(239, 775); + this.lblstatscodepoints.Location = new System.Drawing.Point(239, 460); this.lblstatscodepoints.Name = "lblstatscodepoints"; this.lblstatscodepoints.Size = new System.Drawing.Size(116, 23); this.lblstatscodepoints.TabIndex = 12; @@ -654,7 +654,7 @@ namespace ShiftOS.WinForms.Applications this.lblstatsY.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.lblstatsY.AutoSize = true; this.lblstatsY.Font = new System.Drawing.Font("Georgia", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblstatsY.Location = new System.Drawing.Point(1395, 775); + this.lblstatsY.Location = new System.Drawing.Point(440, 460); this.lblstatsY.Name = "lblstatsY"; this.lblstatsY.Size = new System.Drawing.Size(76, 23); this.lblstatsY.TabIndex = 11; @@ -667,7 +667,7 @@ namespace ShiftOS.WinForms.Applications this.lblstatsX.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.lblstatsX.AutoSize = true; this.lblstatsX.Font = new System.Drawing.Font("Georgia", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblstatsX.Location = new System.Drawing.Point(3, 775); + this.lblstatsX.Location = new System.Drawing.Point(3, 460); this.lblstatsX.Name = "lblstatsX"; this.lblstatsX.Size = new System.Drawing.Size(83, 23); this.lblstatsX.TabIndex = 5; @@ -683,7 +683,7 @@ namespace ShiftOS.WinForms.Applications this.Controls.Add(this.pgcontents); this.DoubleBuffered = true; this.Name = "Pong"; - this.Size = new System.Drawing.Size(1867, 819); + this.Size = new System.Drawing.Size(912, 504); this.Load += new System.EventHandler(this.Pong_Load); this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pongMain_MouseMove); this.pgcontents.ResumeLayout(false); diff --git a/ShiftOS.WinForms/Applications/Pong.cs b/ShiftOS.WinForms/Applications/Pong.cs index a7b1aeb..5d09ca0 100644 --- a/ShiftOS.WinForms/Applications/Pong.cs +++ b/ShiftOS.WinForms/Applications/Pong.cs @@ -167,6 +167,7 @@ namespace ShiftOS.WinForms.Applications { ball.Location = new Point(ball.Location.X, 0); yVel = -yVel; + ShiftOS.Engine.AudioManager.PlayStream(Properties.Resources.typesound); } // Check for bottom wall. @@ -174,12 +175,13 @@ namespace ShiftOS.WinForms.Applications { ball.Location = new Point(ball.Location.X, pgcontents.Height - ball.Size.Height); yVel = -yVel; + ShiftOS.Engine.AudioManager.PlayStream(Properties.Resources.typesound); } // Check for player paddle. if (ball.Bounds.IntersectsWith(paddleHuman.Bounds)) { - ball.Location = new Point(paddleHuman.Location.X + ball.Size.Width, ball.Location.Y); + ball.Location = new Point(paddleHuman.Location.X + ball.Size.Width + 1, ball.Location.Y); //randomly increase x or y speed of ball switch (rand.Next(1, 3)) { @@ -194,14 +196,17 @@ namespace ShiftOS.WinForms.Applications break; } xVel = -xVel; + ShiftOS.Engine.AudioManager.PlayStream(Properties.Resources.writesound); + } // Check for computer paddle. if (ball.Bounds.IntersectsWith(paddleComputer.Bounds)) { - ball.Location = new Point(paddleComputer.Location.X - paddleComputer.Size.Width + 1, ball.Location.Y); + ball.Location = new Point(paddleComputer.Location.X - paddleComputer.Size.Width - 1, ball.Location.Y); xveldec = xveldec + incrementx; xVel = -xVel; + ShiftOS.Engine.AudioManager.PlayStream(Properties.Resources.writesound); } // Check for left wall. @@ -288,6 +293,7 @@ namespace ShiftOS.WinForms.Applications gameTimer.Stop(); SendHighscores(); } + lblstatscodepoints.Text = Localization.Parse("{CODEPOINTS}: ") + (levelrewards[level - 1] + beatairewardtotal).ToString(); } SetupStats(); @@ -508,15 +514,18 @@ namespace ShiftOS.WinForms.Applications case 1: lblcountdown.Text = "1"; countdown = countdown - 1; + ShiftOS.Engine.AudioManager.PlayStream(Properties.Resources.typesound); break; case 2: lblcountdown.Text = "2"; countdown = countdown - 1; + ShiftOS.Engine.AudioManager.PlayStream(Properties.Resources.typesound); break; case 3: lblcountdown.Text = "3"; countdown = countdown - 1; lblcountdown.Show(); + ShiftOS.Engine.AudioManager.PlayStream(Properties.Resources.typesound); break; } diff --git a/ShiftOS_TheReturn/AudioManager.cs b/ShiftOS_TheReturn/AudioManager.cs index 54ee1f1..1dd2a8b 100644 --- a/ShiftOS_TheReturn/AudioManager.cs +++ b/ShiftOS_TheReturn/AudioManager.cs @@ -26,6 +26,7 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text; using System.Threading; @@ -62,20 +63,29 @@ namespace ShiftOS.Engine public static void Play(string file) { - new Thread(() => + try { - try - { - _reader = new AudioFileReader(file); - _out = new WaveOut(); - _out.Init(_reader); - _out.Volume = _provider.Volume; - _out.Play(); - } - catch { } - }).Start(); + _reader = new AudioFileReader(file); + _out = new WaveOut(); + _out.Init(_reader); + _out.Volume = _provider.Volume; + _out.Play(); + } + catch { } } + public static void PlayStream(Stream str) + { + var bytes = new byte[str.Length]; + str.Read(bytes, 0, bytes.Length); + ShiftOS.Engine.AudioManager.Stop(); + if (File.Exists("snd.wav")) + File.Delete("snd.wav"); + File.WriteAllBytes("snd.wav", bytes); + + ShiftOS.Engine.AudioManager.Play("snd.wav"); + + } internal static void Kill() { -- cgit v1.2.3 From 53631ad42df86be557746064a1e3161d32e3228d Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 3 May 2017 09:44:29 -0400 Subject: Fix highscore list --- ShiftOS.WinForms/Applications/Pong.Designer.cs | 7 +--- ShiftOS.WinForms/Applications/Pong.cs | 53 ++++++++++++++++++-------- ShiftOS_TheReturn/UniteClient.cs | 24 ++++++++++++ 3 files changed, 63 insertions(+), 21 deletions(-) (limited to 'ShiftOS.WinForms/Applications/Pong.Designer.cs') diff --git a/ShiftOS.WinForms/Applications/Pong.Designer.cs b/ShiftOS.WinForms/Applications/Pong.Designer.cs index f28868a..aef8911 100644 --- a/ShiftOS.WinForms/Applications/Pong.Designer.cs +++ b/ShiftOS.WinForms/Applications/Pong.Designer.cs @@ -80,7 +80,7 @@ namespace ShiftOS.WinForms.Applications this.tmrstoryline = new System.Windows.Forms.Timer(this.components); this.pgcontents = new ShiftOS.WinForms.Controls.Canvas(); this.pnlhighscore = new System.Windows.Forms.Panel(); - this.lbhighscore = new System.Windows.Forms.ListBox(); + this.lbhighscore = new System.Windows.Forms.ListView(); this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); this.button2 = new System.Windows.Forms.Button(); this.label10 = new System.Windows.Forms.Label(); @@ -193,11 +193,8 @@ namespace ShiftOS.WinForms.Applications // 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; // @@ -745,7 +742,7 @@ namespace ShiftOS.WinForms.Applications 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.ListView lbhighscore; private System.Windows.Forms.Label label10; internal Canvas pgcontents; internal Canvas ball; diff --git a/ShiftOS.WinForms/Applications/Pong.cs b/ShiftOS.WinForms/Applications/Pong.cs index 6198cad..e0fe793 100644 --- a/ShiftOS.WinForms/Applications/Pong.cs +++ b/ShiftOS.WinForms/Applications/Pong.cs @@ -29,6 +29,7 @@ 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; @@ -310,15 +311,9 @@ namespace ShiftOS.WinForms.Applications SetupStats(); } + [Obsolete("This method does nothing. Use UniteClient for highscore queries.")] 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# @@ -614,24 +609,50 @@ namespace ShiftOS.WinForms.Applications public void SetupHighScores() { lbhighscore.Items.Clear(); - ServerManager.MessageReceived += (msg) => + lbhighscore.View = View.Details; + lbhighscore.FullRowSelect = true; + lbhighscore.Columns.Clear(); + var n = new ColumnHeader(); + n.Text = "Player"; + n.Width = lbhighscore.Width / 3; + var l = new ColumnHeader(); + l.Text = "Level"; + l.Width = n.Width; + var c = new ColumnHeader(); + c.Text = "Codepoints"; + c.Width = n.Width; + lbhighscore.Columns.Add(n); + lbhighscore.Columns.Add(l); + lbhighscore.Columns.Add(c); + + var t = new Thread(() => { - if(msg.Name == "pong_highscores") + try { - var hs = JsonConvert.DeserializeObject>(msg.Contents); - - var orderedhs = hs.OrderByDescending(i => i.HighestLevel); - foreach(var score in orderedhs) + var unite = new ShiftOS.Unite.UniteClient("http://getshiftos.ml", SaveSystem.CurrentSave.UniteAuthToken); + var hs = unite.GetPongHighscores(); + foreach (var score in hs.Highscores) { + string username = unite.GetDisplayNameId(score.UserId); this.Invoke(new Action(() => { - lbhighscore.Items.Add($"{score.UserName}\t\t\t{score.HighestLevel}\t\t{score.HighestCodepoints} CP"); + var name_item = new ListViewItem(); + name_item.Text = username; + lbhighscore.Items.Add(name_item); + name_item.SubItems.Add(score.Level.ToString()); + name_item.SubItems.Add(score.CodepointsCashout.ToString()); })); } } - }; - ServerManager.SendMessage("pong_gethighscores", null); + catch + { + Infobox.Show("Service unavailable.", "The Pong Highscore service is unavailable at this time."); + this.Invoke(new Action(pnlgamestats.BringToFront)); + return; + } + }); + t.Start(); pnlhighscore.Show(); } diff --git a/ShiftOS_TheReturn/UniteClient.cs b/ShiftOS_TheReturn/UniteClient.cs index cb08382..1136b5c 100644 --- a/ShiftOS_TheReturn/UniteClient.cs +++ b/ShiftOS_TheReturn/UniteClient.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; +using Newtonsoft.Json; namespace ShiftOS.Unite { @@ -12,6 +13,16 @@ namespace ShiftOS.Unite public string Token { get; private set; } public string BaseURL { get; private set; } + public string GetDisplayNameId(string id) + { + return MakeCall("/API/GetDisplayName/" + id); + } + + public PongHighscoreModel GetPongHighscores() + { + return JsonConvert.DeserializeObject(MakeCall("/API/GetPongHighscores")); + } + public UniteClient(string baseurl, string usertoken) { BaseURL = baseurl; @@ -100,4 +111,17 @@ namespace ShiftOS.Unite MakeCall("/API/SetCodepoints/" + value.ToString()); } } + + public class PongHighscoreModel + { + public int Pages { get; set; } + public PongHighscore[] Highscores { get; set; } + } + + public class PongHighscore + { + public string UserId { get; set; } + public int Level { get; set; } + public long CodepointsCashout { get; set; } + } } -- cgit v1.2.3 From 24f04e3e12ae3958e4f17d41e11faf4d72cdbb15 Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 3 May 2017 11:51:56 -0400 Subject: Basic multiplayer pong. --- ShiftOS.WinForms/Applications/Pong.Designer.cs | 23 +- ShiftOS.WinForms/Applications/Pong.cs | 433 +++++++++++++++++++------ ShiftOS_TheReturn/ServerManager.cs | 14 + 3 files changed, 361 insertions(+), 109 deletions(-) (limited to 'ShiftOS.WinForms/Applications/Pong.Designer.cs') diff --git a/ShiftOS.WinForms/Applications/Pong.Designer.cs b/ShiftOS.WinForms/Applications/Pong.Designer.cs index aef8911..b1186c6 100644 --- a/ShiftOS.WinForms/Applications/Pong.Designer.cs +++ b/ShiftOS.WinForms/Applications/Pong.Designer.cs @@ -124,6 +124,7 @@ namespace ShiftOS.WinForms.Applications this.lblstatscodepoints = new System.Windows.Forms.Label(); this.lblstatsY = new System.Windows.Forms.Label(); this.lblstatsX = new System.Windows.Forms.Label(); + this.btnmatchmake = new System.Windows.Forms.Button(); this.pgcontents.SuspendLayout(); this.pnlhighscore.SuspendLayout(); this.flowLayoutPanel1.SuspendLayout(); @@ -157,11 +158,11 @@ namespace ShiftOS.WinForms.Applications // pgcontents // this.pgcontents.BackColor = System.Drawing.Color.White; + this.pgcontents.Controls.Add(this.pnlintro); this.pgcontents.Controls.Add(this.pnlhighscore); this.pgcontents.Controls.Add(this.pnlgamestats); this.pgcontents.Controls.Add(this.pnlfinalstats); this.pgcontents.Controls.Add(this.pnllose); - this.pgcontents.Controls.Add(this.pnlintro); this.pgcontents.Controls.Add(this.lblbeatai); this.pgcontents.Controls.Add(this.lblcountdown); this.pgcontents.Controls.Add(this.ball); @@ -197,6 +198,7 @@ namespace ShiftOS.WinForms.Applications this.lbhighscore.Name = "lbhighscore"; this.lbhighscore.Size = new System.Drawing.Size(539, 246); this.lbhighscore.TabIndex = 1; + this.lbhighscore.UseCompatibleStateImageBehavior = false; // // flowLayoutPanel1 // @@ -525,10 +527,11 @@ namespace ShiftOS.WinForms.Applications // // pnlintro // + this.pnlintro.Controls.Add(this.btnmatchmake); this.pnlintro.Controls.Add(this.Label6); this.pnlintro.Controls.Add(this.btnstartgame); this.pnlintro.Controls.Add(this.Label8); - this.pnlintro.Location = new System.Drawing.Point(1139, 41); + this.pnlintro.Location = new System.Drawing.Point(0, 0); this.pnlintro.Name = "pnlintro"; this.pnlintro.Size = new System.Drawing.Size(595, 303); this.pnlintro.TabIndex = 13; @@ -539,7 +542,7 @@ namespace ShiftOS.WinForms.Applications 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.Size = new System.Drawing.Size(589, 159); this.Label6.TabIndex = 15; this.Label6.Text = "{PONG_DESC}"; this.Label6.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; @@ -548,7 +551,7 @@ namespace ShiftOS.WinForms.Applications // 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.Location = new System.Drawing.Point(188, 215); this.btnstartgame.Name = "btnstartgame"; this.btnstartgame.Size = new System.Drawing.Size(242, 28); this.btnstartgame.TabIndex = 15; @@ -672,6 +675,17 @@ namespace ShiftOS.WinForms.Applications this.lblstatsX.Text = "Xspeed: "; this.lblstatsX.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // + // btnmatchmake + // + this.btnmatchmake.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnmatchmake.Location = new System.Drawing.Point(188, 253); + this.btnmatchmake.Name = "btnmatchmake"; + this.btnmatchmake.Size = new System.Drawing.Size(242, 28); + this.btnmatchmake.TabIndex = 16; + this.btnmatchmake.Text = "Or, play against another Shifter!"; + this.btnmatchmake.UseVisualStyleBackColor = true; + this.btnmatchmake.Click += new System.EventHandler(this.btnmatchmake_Click); + // // Pong // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -750,5 +764,6 @@ namespace ShiftOS.WinForms.Applications internal System.Windows.Forms.Label label12; private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; private System.Windows.Forms.Button button2; + internal System.Windows.Forms.Button btnmatchmake; } } diff --git a/ShiftOS.WinForms/Applications/Pong.cs b/ShiftOS.WinForms/Applications/Pong.cs index e0fe793..585639a 100644 --- a/ShiftOS.WinForms/Applications/Pong.cs +++ b/ShiftOS.WinForms/Applications/Pong.cs @@ -82,7 +82,23 @@ namespace ShiftOS.WinForms.Applications 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)); + if (IsMultiplayerSession) + { + if (IsLeader) + { + paddleHuman.Location = new Point(paddleHuman.Location.X, (loc.Y) - (paddleHuman.Height / 2)); + ServerManager.Forward(OpponentGUID, "pong_mp_setopponenty", paddleHuman.Top.ToString()); + } + else + { + paddleComputer.Location = new Point(paddleComputer.Location.X, (loc.Y) - (paddleComputer.Height / 2)); + ServerManager.Forward(OpponentGUID, "pong_mp_setopponenty", paddleComputer.Top.ToString()); + } + } + else + { + paddleHuman.Location = new Point(paddleHuman.Location.X, (loc.Y) - (paddleHuman.Height / 2)); + } } private void CenterPanels() @@ -104,7 +120,13 @@ namespace ShiftOS.WinForms.Applications lblstatscodepoints.Top = this.Height - lblstatscodepoints.Height - 5; lblstatscodepoints.Left = (this.Width - lblstatscodepoints.Width) / 2; } - + + int OpponentY = 0; + + bool IsLeader = false; + + int LeaderX = 0; + int LeaderY = 0; // ERROR: Handles clauses are not supported in C# private void gameTimer_Tick(object sender, EventArgs e) @@ -118,39 +140,50 @@ namespace ShiftOS.WinForms.Applications //Check if paddle upgrade has been bought and change paddles accordingly //if (ShiftoriumFrontend.UpgradeInstalled("pong_increased_paddle_size")) //{ - // paddleHuman.Height = 150; - // paddleComputer.Height = 150; + // paddleHuman.Height = 150; + // paddleComputer.Height = 150; //} //I don't know the point of this but I'm fucking 86ing it. - Michael //Set the computer player to move according to the ball's position. - if (aiShouldIsbeEnabled) - if (ball.Location.X > (this.Width - (this.Width / 3)) - xVel * 10 && xVel > 0) - { - if (ball.Location.Y > paddleComputer.Location.Y + 50) - { - paddleComputer.Location = new Point(paddleComputer.Location.X, paddleComputer.Location.Y + computerspeed); - } - if (ball.Location.Y < paddleComputer.Location.Y + 50) - { - paddleComputer.Location = new Point(paddleComputer.Location.X, paddleComputer.Location.Y - computerspeed); - } - casualposition = rand.Next(-150, 201); - } + if (IsMultiplayerSession == true) + { + //If we're multiplayer, then we want to set the computer Y to the opponent's Y. + //If we're the leader, we set the AI paddle, else we set the player paddle. + if (IsLeader) + paddleComputer.Top = OpponentY; else - { - //used to be me.location.y - except it's fucking C# and this comment is misleading as fuck. OH WAIT! I didn't write it! And none of the current devs did either! - Michael - if (paddleComputer.Location.Y > this.Size.Height / 2 - paddleComputer.Height + casualposition) + paddleHuman.Top = OpponentY; + } + else + { + if (aiShouldIsbeEnabled) + if (ball.Location.X > (this.Width - (this.Width / 3)) - xVel * 10 && xVel > 0) { - paddleComputer.Location = new Point(paddleComputer.Location.X, paddleComputer.Location.Y - computerspeed); + if (ball.Location.Y > paddleComputer.Location.Y + 50) + { + paddleComputer.Location = new Point(paddleComputer.Location.X, paddleComputer.Location.Y + computerspeed); + } + if (ball.Location.Y < paddleComputer.Location.Y + 50) + { + paddleComputer.Location = new Point(paddleComputer.Location.X, paddleComputer.Location.Y - computerspeed); + } + casualposition = rand.Next(-150, 201); } - //Rylan is hot. Used to be //used to be me.location.y - if (paddleComputer.Location.Y < this.Size.Height / 2 - paddleComputer.Height + casualposition) + else { - paddleComputer.Location = new Point(paddleComputer.Location.X, paddleComputer.Location.Y + computerspeed); + //used to be me.location.y - except it's fucking C# and this comment is misleading as fuck. OH WAIT! I didn't write it! And none of the current devs did either! - Michael + if (paddleComputer.Location.Y > this.Size.Height / 2 - paddleComputer.Height + casualposition) + { + paddleComputer.Location = new Point(paddleComputer.Location.X, paddleComputer.Location.Y - computerspeed); + } + //Rylan is hot. Used to be //used to be me.location.y + if (paddleComputer.Location.Y < this.Size.Height / 2 - paddleComputer.Height + casualposition) + { + paddleComputer.Location = new Point(paddleComputer.Location.X, paddleComputer.Location.Y + computerspeed); + } } - } - + } //Set Xvel and Yvel speeds from decimal if (xVel > 0) xVel = (int)Math.Round(xveldec); @@ -161,119 +194,290 @@ namespace ShiftOS.WinForms.Applications if (yVel < 0) yVel = (int)-Math.Round(yveldec); - // Move the game ball. - ball.Location = new Point(ball.Location.X + xVel, ball.Location.Y + yVel); + bool BallPhysics = true; - // Check for top wall. - if (ball.Location.Y < 0) + if (IsMultiplayerSession) { - ball.Location = new Point(ball.Location.X, 0); - yVel = -yVel; - ShiftOS.Engine.AudioManager.PlayStream(Properties.Resources.typesound); + //Logic for moving the ball in Multiplayer. + if (IsLeader) + { + ball.Location = new Point(ball.Location.X + xVel, ball.Location.Y + yVel); + } + else + { + //Move it to the leader's ball position. + ball.Location = new Point(LeaderX, LeaderY); + BallPhysics = false; + } } - - // 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; - ShiftOS.Engine.AudioManager.PlayStream(Properties.Resources.typesound); + else + {// Move the game ball. + ball.Location = new Point(ball.Location.X + xVel, ball.Location.Y + yVel); } - - // Check for player paddle. - if (ball.Bounds.IntersectsWith(paddleHuman.Bounds)) + if (BallPhysics) { - ball.Location = new Point(paddleHuman.Location.X + ball.Size.Width + 1, ball.Location.Y); - //randomly increase x or y speed of ball - switch (rand.Next(1, 3)) + // Check for top wall. + if (ball.Location.Y < 0) { - case 1: - xveldec = xveldec + incrementx; - break; - case 2: - if (yveldec > 0) - yveldec = yveldec + incrementy; - if (yveldec < 0) - yveldec = yveldec - incrementy; - break; + ball.Location = new Point(ball.Location.X, 0); + yVel = -yVel; + ShiftOS.Engine.AudioManager.PlayStream(Properties.Resources.typesound); } - xVel = -xVel; - ShiftOS.Engine.AudioManager.PlayStream(Properties.Resources.writesound); - } + // 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; + ShiftOS.Engine.AudioManager.PlayStream(Properties.Resources.typesound); + } - // 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; - ShiftOS.Engine.AudioManager.PlayStream(Properties.Resources.writesound); + + // Check for player paddle. + if (ball.Bounds.IntersectsWith(paddleHuman.Bounds)) + { + ball.Location = new Point(paddleHuman.Location.X + ball.Size.Width + 1, 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; + ShiftOS.Engine.AudioManager.PlayStream(Properties.Resources.writesound); + + } + + // 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; + ShiftOS.Engine.AudioManager.PlayStream(Properties.Resources.writesound); + } } + + // 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")) + //If we are in multiplayer, and not the leader, we won. + if (IsMultiplayerSession) { - 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)); + if (IsLeader) + { + //We lost. + NotifyLoseToTarget(); + } + else + { + //We won. + NotifyWinToTarget(); + Win(); + } } else { - lblbutyougained.Hide(); + 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(); + if (IsMultiplayerSession) + { + //If we are the leader we won. + if (IsLeader) + { + NotifyWinToTarget(); + Win(); + } + else + { + NotifyLoseToTarget(); + } + } + else + { + Win(); + } } - //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 (IsMultiplayerSession) + { + if (IsLeader) + { + ServerManager.Forward(OpponentGUID, "pong_mp_setballpos", JsonConvert.SerializeObject(ball.Location)); + } + } - if (xVel > 20 || xVel < -20) + if (IsLeader) { - paddleHuman.Width = Math.Abs(xVel); - paddleComputer.Width = Math.Abs(xVel); + //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; + } } - else + if (!IsMultiplayerSession) { - paddleHuman.Width = 20; - paddleComputer.Width = 20; + computerspeed = Math.Abs(yVel); } + } + } - computerspeed = Math.Abs(yVel); + public void ServerMessageReceivedHandler(ServerMessage msg) + { + if(msg.Name == "pong_mp_setballpos") + { + var pt = JsonConvert.DeserializeObject(msg.Contents); + LeaderX = pt.X; + LeaderY = pt.Y; + } + else if(msg.Name == "pong_mp_youlose") + { + LoseMP(); + } + else if(msg.Name == "pong_mp_setopponenty") + { + int y = Convert.ToInt32(msg.Contents); + OpponentY = y; + } + else if(msg.Name == "pong_handshake_matchmake") + { + PossibleMatchmakes.Add(msg.Contents); + } + else if(msg.Name == "pong_handshake_complete") + { + LeaveMatchmake(); + StartLevel(); + } + else if(msg.Name == "pong_handshake_giveleaderid") + { + IsLeader = false; + OpponentGUID = msg.Contents; + YouGUID = ServerManager.thisGuid.ToString(); + SendFollowerGUID(); + } + else if(msg.Name == "pong_handshake_left") + { + if (this.PossibleMatchmakes.Contains(msg.Contents)) + this.PossibleMatchmakes.Remove(msg.Contents); + } + else if(msg.Name == "pong_handshake_setfollowerguid") + { + IsLeader = false; + OpponentGUID = msg.Contents; + } + else if(msg.Name == "pong_mp_youwin") + { + Win(); + } + } - // pgcontents.Refresh() - // pgcontents.CreateGraphics.FillRectangle(Brushes.Black, ball.Location.X, ball.Location.Y, ball.Width, ball.Height) + public void NotifyLoseToTarget() + { + ServerManager.Forward(OpponentGUID, "pong_mp_youwin", null); + } + + public void NotifyWinToTarget() + { + ServerManager.Forward(OpponentGUID, "pong_mp_youlose", null); + } + + public void LeaveMatchmake() + { + ServerManager.Forward("all", "pong_handshake_left", YouGUID); + } + + List PossibleMatchmakes = new List(); + + public void SendLeaderGUID() + { + ServerManager.Forward(OpponentGUID, "pong_handshake_giveleaderid", YouGUID); + } + + + public void StartMultiplayer() + { + IsMultiplayerSession = true; + YouGUID = ServerManager.thisGuid.ToString(); + ServerManager.SendMessage("pong_handshake_matchmake", YouGUID); + } + + + public void SendFollowerGUID() + { + ServerManager.Forward(OpponentGUID, "pong_handshake_setfollowerguid", YouGUID); + } + + public void LoseMP() + { + ball.Location = new Point(this.Size.Width / 2 + 200, this.Size.Height / 2); + if(IsLeader) + if (xVel > 0) + xVel = -xVel; + lblbeatai.Show(); + lblbeatai.Text = "The opponent has beaten you!"; + tmrcountdown.Start(); + gameTimer.Stop(); + counter.Stop(); + + } + + public void Win() + { + ball.Location = new Point(this.Size.Width / 2 + 200, this.Size.Height / 2); + paddleComputer.Location = new Point(paddleComputer.Location.X, ball.Location.Y); + if (xVel > 0) + xVel = -xVel; + beatairewardtotal = beatairewardtotal + beataireward; + lblbeatai.Show(); + lblbeatai.Text = Localization.Parse($"{{PONG_BEAT_AI_REWARD_SECONDARY}}: {beataireward}"); + tmrcountdown.Start(); + gameTimer.Stop(); + counter.Stop(); - } } // ERROR: Handles clauses are not supported in C# @@ -606,6 +810,11 @@ namespace ShiftOS.WinForms.Applications SetupHighScores(); } + bool IsMultiplayerSession = false; + + string YouGUID = ""; + string OpponentGUID = ""; + public void SetupHighScores() { lbhighscore.Items.Clear(); @@ -668,6 +877,11 @@ namespace ShiftOS.WinForms.Applications newgame(); } + public void StartLevel() + { + newgame(); + } + // ERROR: Handles clauses are not supported in C# private void btnstartgame_Click(object sender, EventArgs e) { @@ -750,5 +964,14 @@ namespace ShiftOS.WinForms.Applications { pnlhighscore.Hide(); } + + private void btnmatchmake_Click(object sender, EventArgs e) + { + this.StartMultiplayer(); + pnlintro.Hide(); + lblbeatai.Text = "Beat the other player to earn Codepoints."; + lblcountdown.Text = "Waiting for another player..."; + lblcountdown.Left = (this.Width - lblcountdown.Width) / 2; + } } } diff --git a/ShiftOS_TheReturn/ServerManager.cs b/ShiftOS_TheReturn/ServerManager.cs index d356600..0bdfcd9 100644 --- a/ShiftOS_TheReturn/ServerManager.cs +++ b/ShiftOS_TheReturn/ServerManager.cs @@ -172,6 +172,10 @@ namespace ShiftOS.Engine { Console.WriteLine(msg.Contents); } + else if(msg.Name == "forward") + { + MessageReceived?.Invoke(JsonConvert.DeserializeObject(msg.Contents)); + } else if (msg.Name == "Error") { var ex = JsonConvert.DeserializeObject(msg.Contents); @@ -239,6 +243,16 @@ namespace ShiftOS.Engine public static event ServerMessageReceived MessageReceived; + public static void Forward(string targetGUID, string v, string message) + { + var smsg = new ServerMessage + { + GUID = targetGUID, + Name = v, + Contents = message + }; + ServerManager.SendMessage("mud_forward", JsonConvert.SerializeObject(smsg)); + } } public delegate void ServerMessageReceived(ServerMessage msg); -- cgit v1.2.3 From e43d47007e8ef5d18a0b58b9c1c24ca6e5212e18 Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 4 May 2017 14:59:58 -0400 Subject: More Multiplayer Pong work. --- ShiftOS.WinForms/Applications/Pong.Designer.cs | 171 +++++++++++++++---------- ShiftOS.WinForms/Applications/Pong.cs | 87 ++++++++++--- 2 files changed, 176 insertions(+), 82 deletions(-) (limited to 'ShiftOS.WinForms/Applications/Pong.Designer.cs') diff --git a/ShiftOS.WinForms/Applications/Pong.Designer.cs b/ShiftOS.WinForms/Applications/Pong.Designer.cs index b1186c6..d0ff466 100644 --- a/ShiftOS.WinForms/Applications/Pong.Designer.cs +++ b/ShiftOS.WinForms/Applications/Pong.Designer.cs @@ -79,6 +79,14 @@ namespace ShiftOS.WinForms.Applications this.tmrcountdown = new System.Windows.Forms.Timer(this.components); this.tmrstoryline = new System.Windows.Forms.Timer(this.components); this.pgcontents = new ShiftOS.WinForms.Controls.Canvas(); + this.pnlmultiplayerhandshake = new System.Windows.Forms.Panel(); + this.lvotherplayers = new System.Windows.Forms.ListView(); + this.lbmpstatus = new System.Windows.Forms.Label(); + this.pnlintro = new System.Windows.Forms.Panel(); + this.btnmatchmake = new System.Windows.Forms.Button(); + this.Label6 = new System.Windows.Forms.Label(); + this.btnstartgame = new System.Windows.Forms.Button(); + this.Label8 = new System.Windows.Forms.Label(); this.pnlhighscore = new System.Windows.Forms.Panel(); this.lbhighscore = new System.Windows.Forms.ListView(); this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); @@ -111,10 +119,6 @@ namespace ShiftOS.WinForms.Applications 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(); @@ -124,14 +128,14 @@ namespace ShiftOS.WinForms.Applications this.lblstatscodepoints = new System.Windows.Forms.Label(); this.lblstatsY = new System.Windows.Forms.Label(); this.lblstatsX = new System.Windows.Forms.Label(); - this.btnmatchmake = new System.Windows.Forms.Button(); this.pgcontents.SuspendLayout(); + this.pnlmultiplayerhandshake.SuspendLayout(); + this.pnlintro.SuspendLayout(); this.pnlhighscore.SuspendLayout(); this.flowLayoutPanel1.SuspendLayout(); this.pnlgamestats.SuspendLayout(); this.pnlfinalstats.SuspendLayout(); this.pnllose.SuspendLayout(); - this.pnlintro.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.paddleHuman)).BeginInit(); this.SuspendLayout(); // @@ -158,6 +162,7 @@ namespace ShiftOS.WinForms.Applications // pgcontents // this.pgcontents.BackColor = System.Drawing.Color.White; + this.pgcontents.Controls.Add(this.pnlmultiplayerhandshake); this.pgcontents.Controls.Add(this.pnlintro); this.pgcontents.Controls.Add(this.pnlhighscore); this.pgcontents.Controls.Add(this.pnlgamestats); @@ -180,6 +185,95 @@ namespace ShiftOS.WinForms.Applications this.pgcontents.Paint += new System.Windows.Forms.PaintEventHandler(this.pgcontents_Paint); this.pgcontents.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pongMain_MouseMove); // + // pnlmultiplayerhandshake + // + this.pnlmultiplayerhandshake.Controls.Add(this.lvotherplayers); + this.pnlmultiplayerhandshake.Controls.Add(this.lbmpstatus); + this.pnlmultiplayerhandshake.Location = new System.Drawing.Point(446, 88); + this.pnlmultiplayerhandshake.Name = "pnlmultiplayerhandshake"; + this.pnlmultiplayerhandshake.Size = new System.Drawing.Size(396, 231); + this.pnlmultiplayerhandshake.TabIndex = 15; + // + // lvotherplayers + // + this.lvotherplayers.Dock = System.Windows.Forms.DockStyle.Fill; + this.lvotherplayers.Location = new System.Drawing.Point(0, 45); + this.lvotherplayers.MultiSelect = false; + this.lvotherplayers.Name = "lvotherplayers"; + this.lvotherplayers.Size = new System.Drawing.Size(396, 186); + this.lvotherplayers.TabIndex = 1; + this.lvotherplayers.UseCompatibleStateImageBehavior = false; + this.lvotherplayers.View = System.Windows.Forms.View.Details; + this.lvotherplayers.DoubleClick += new System.EventHandler(this.lvotherplayers_DoubleClick); + // + // lbmpstatus + // + this.lbmpstatus.Dock = System.Windows.Forms.DockStyle.Top; + this.lbmpstatus.Location = new System.Drawing.Point(0, 0); + this.lbmpstatus.Name = "lbmpstatus"; + this.lbmpstatus.Size = new System.Drawing.Size(396, 45); + this.lbmpstatus.TabIndex = 0; + this.lbmpstatus.Tag = "header2"; + this.lbmpstatus.Text = "Waiting for other players..."; + this.lbmpstatus.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // pnlintro + // + this.pnlintro.Controls.Add(this.btnmatchmake); + this.pnlintro.Controls.Add(this.Label6); + this.pnlintro.Controls.Add(this.btnstartgame); + this.pnlintro.Controls.Add(this.Label8); + this.pnlintro.Location = new System.Drawing.Point(0, 0); + this.pnlintro.Name = "pnlintro"; + this.pnlintro.Size = new System.Drawing.Size(595, 303); + this.pnlintro.TabIndex = 13; + this.pnlintro.Tag = "header2"; + // + // btnmatchmake + // + this.btnmatchmake.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnmatchmake.Location = new System.Drawing.Point(188, 253); + this.btnmatchmake.Name = "btnmatchmake"; + this.btnmatchmake.Size = new System.Drawing.Size(242, 28); + this.btnmatchmake.TabIndex = 16; + this.btnmatchmake.Text = "Or, play against another Shifter!"; + this.btnmatchmake.UseVisualStyleBackColor = true; + this.btnmatchmake.Click += new System.EventHandler(this.btnmatchmake_Click); + // + // Label6 + // + this.Label6.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Label6.Location = new System.Drawing.Point(3, 39); + this.Label6.Name = "Label6"; + this.Label6.Size = new System.Drawing.Size(589, 159); + this.Label6.TabIndex = 15; + this.Label6.Text = "{PONG_DESC}"; + this.Label6.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + 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(188, 215); + this.btnstartgame.Name = "btnstartgame"; + this.btnstartgame.Size = new System.Drawing.Size(242, 28); + this.btnstartgame.TabIndex = 15; + this.btnstartgame.Text = "{PLAY}"; + this.btnstartgame.UseVisualStyleBackColor = true; + this.btnstartgame.Click += new System.EventHandler(this.btnstartgame_Click); + // + // Label8 + // + this.Label8.AutoSize = true; + this.Label8.Font = new System.Drawing.Font("Microsoft Sans Serif", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Label8.ForeColor = System.Drawing.Color.Black; + this.Label8.Location = new System.Drawing.Point(250, 5); + this.Label8.Name = "Label8"; + this.Label8.Size = new System.Drawing.Size(280, 31); + this.Label8.TabIndex = 14; + this.Label8.Text = "{PONG_WELCOME}"; + this.Label8.Click += new System.EventHandler(this.Label8_Click); + // // pnlhighscore // this.pnlhighscore.Controls.Add(this.lbhighscore); @@ -525,52 +619,6 @@ namespace ShiftOS.WinForms.Applications this.Label1.Text = "You lose!"; this.Label1.TextAlign = System.Drawing.ContentAlignment.TopCenter; // - // pnlintro - // - this.pnlintro.Controls.Add(this.btnmatchmake); - this.pnlintro.Controls.Add(this.Label6); - this.pnlintro.Controls.Add(this.btnstartgame); - this.pnlintro.Controls.Add(this.Label8); - this.pnlintro.Location = new System.Drawing.Point(0, 0); - this.pnlintro.Name = "pnlintro"; - this.pnlintro.Size = new System.Drawing.Size(595, 303); - this.pnlintro.TabIndex = 13; - this.pnlintro.Tag = "header2"; - // - // Label6 - // - this.Label6.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.Label6.Location = new System.Drawing.Point(3, 39); - this.Label6.Name = "Label6"; - this.Label6.Size = new System.Drawing.Size(589, 159); - this.Label6.TabIndex = 15; - this.Label6.Text = "{PONG_DESC}"; - this.Label6.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - 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(188, 215); - this.btnstartgame.Name = "btnstartgame"; - this.btnstartgame.Size = new System.Drawing.Size(242, 28); - this.btnstartgame.TabIndex = 15; - this.btnstartgame.Text = "{PLAY}"; - this.btnstartgame.UseVisualStyleBackColor = true; - this.btnstartgame.Click += new System.EventHandler(this.btnstartgame_Click); - // - // Label8 - // - this.Label8.AutoSize = true; - this.Label8.Font = new System.Drawing.Font("Microsoft Sans Serif", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.Label8.ForeColor = System.Drawing.Color.Black; - this.Label8.Location = new System.Drawing.Point(250, 5); - this.Label8.Name = "Label8"; - this.Label8.Size = new System.Drawing.Size(280, 31); - this.Label8.TabIndex = 14; - this.Label8.Text = "{PONG_WELCOME}"; - 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))); @@ -675,17 +723,6 @@ namespace ShiftOS.WinForms.Applications this.lblstatsX.Text = "Xspeed: "; this.lblstatsX.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // - // btnmatchmake - // - this.btnmatchmake.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.btnmatchmake.Location = new System.Drawing.Point(188, 253); - this.btnmatchmake.Name = "btnmatchmake"; - this.btnmatchmake.Size = new System.Drawing.Size(242, 28); - this.btnmatchmake.TabIndex = 16; - this.btnmatchmake.Text = "Or, play against another Shifter!"; - this.btnmatchmake.UseVisualStyleBackColor = true; - this.btnmatchmake.Click += new System.EventHandler(this.btnmatchmake_Click); - // // Pong // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -699,6 +736,9 @@ namespace ShiftOS.WinForms.Applications this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pongMain_MouseMove); this.pgcontents.ResumeLayout(false); this.pgcontents.PerformLayout(); + this.pnlmultiplayerhandshake.ResumeLayout(false); + this.pnlintro.ResumeLayout(false); + this.pnlintro.PerformLayout(); this.pnlhighscore.ResumeLayout(false); this.pnlhighscore.PerformLayout(); this.flowLayoutPanel1.ResumeLayout(false); @@ -708,8 +748,6 @@ namespace ShiftOS.WinForms.Applications 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.ResumeLayout(false); @@ -765,5 +803,8 @@ namespace ShiftOS.WinForms.Applications private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; private System.Windows.Forms.Button button2; internal System.Windows.Forms.Button btnmatchmake; + private System.Windows.Forms.Panel pnlmultiplayerhandshake; + private System.Windows.Forms.ListView lvotherplayers; + private System.Windows.Forms.Label lbmpstatus; } } diff --git a/ShiftOS.WinForms/Applications/Pong.cs b/ShiftOS.WinForms/Applications/Pong.cs index 585639a..ad81197 100644 --- a/ShiftOS.WinForms/Applications/Pong.cs +++ b/ShiftOS.WinForms/Applications/Pong.cs @@ -368,50 +368,84 @@ namespace ShiftOS.WinForms.Applications public void ServerMessageReceivedHandler(ServerMessage msg) { - if(msg.Name == "pong_mp_setballpos") + if (msg.Name == "pong_mp_setballpos") { var pt = JsonConvert.DeserializeObject(msg.Contents); LeaderX = pt.X; LeaderY = pt.Y; } - else if(msg.Name == "pong_mp_youlose") + else if (msg.Name == "pong_mp_youlose") { LoseMP(); } - else if(msg.Name == "pong_mp_setopponenty") + else if (msg.Name == "pong_mp_setopponenty") { int y = Convert.ToInt32(msg.Contents); OpponentY = y; } - else if(msg.Name == "pong_handshake_matchmake") + else if (msg.Name == "pong_handshake_matchmake") { - PossibleMatchmakes.Add(msg.Contents); + if (!PossibleMatchmakes.Contains(msg.Contents)) + PossibleMatchmakes.Add(msg.Contents); + this.Invoke(new Action(ListMatchmakes)); } - else if(msg.Name == "pong_handshake_complete") + else if (msg.Name == "pong_handshake_resendid") { + ServerManager.Forward("all", "pong_handshake_matchmake", YouGUID); + } + else if (msg.Name == "pong_handshake_complete") + { + IsLeader = true; + + OpponentGUID = msg.Contents; LeaveMatchmake(); - StartLevel(); + this.Invoke(new Action(() => + { + pnlmultiplayerhandshake.Hide(); + StartLevel(); + })); } - else if(msg.Name == "pong_handshake_giveleaderid") + else if (msg.Name == "pong_handshake_chosen") { IsLeader = false; OpponentGUID = msg.Contents; YouGUID = ServerManager.thisGuid.ToString(); SendFollowerGUID(); + this.Invoke(new Action(() => + { + pnlmultiplayerhandshake.Hide(); + })); } - else if(msg.Name == "pong_handshake_left") + else if (msg.Name == "pong_handshake_left") { if (this.PossibleMatchmakes.Contains(msg.Contents)) this.PossibleMatchmakes.Remove(msg.Contents); + this.Invoke(new Action(ListMatchmakes)); } - else if(msg.Name == "pong_handshake_setfollowerguid") + else if (msg.Name == "pong_mp_youwin") { - IsLeader = false; - OpponentGUID = msg.Contents; + Win(); } - else if(msg.Name == "pong_mp_youwin") + } + + public void ListMatchmakes() + { + lvotherplayers.Items.Clear(); + lvotherplayers.FullRowSelect = true; + foreach (var itm in PossibleMatchmakes) { - Win(); + var l = new ListViewItem(); + l.Text = itm; + lvotherplayers.Items.Add(l); + } + + if (PossibleMatchmakes.Count > 0) + { + lbmpstatus.Text = "Select a player."; + } + else + { + lbmpstatus.Text = "Waiting for players..."; } } @@ -432,9 +466,9 @@ namespace ShiftOS.WinForms.Applications List PossibleMatchmakes = new List(); - public void SendLeaderGUID() + public void SendLeaderGUID(string target) { - ServerManager.Forward(OpponentGUID, "pong_handshake_giveleaderid", YouGUID); + ServerManager.Forward(target, "pong_handshake_chosen", YouGUID); } @@ -443,12 +477,23 @@ namespace ShiftOS.WinForms.Applications IsMultiplayerSession = true; YouGUID = ServerManager.thisGuid.ToString(); ServerManager.SendMessage("pong_handshake_matchmake", YouGUID); + StartMatchmake(); + } + + public void StartMatchmake() + { + pnlmultiplayerhandshake.Show(); + pnlmultiplayerhandshake.CenterParent(); + pnlmultiplayerhandshake.BringToFront(); + + ServerManager.Forward("all", "pong_handshake_resendid", null); + } public void SendFollowerGUID() { - ServerManager.Forward(OpponentGUID, "pong_handshake_setfollowerguid", YouGUID); + ServerManager.Forward(OpponentGUID, "pong_handshake_complete", YouGUID); } public void LoseMP() @@ -973,5 +1018,13 @@ namespace ShiftOS.WinForms.Applications lblcountdown.Text = "Waiting for another player..."; lblcountdown.Left = (this.Width - lblcountdown.Width) / 2; } + + private void lvotherplayers_DoubleClick(object sender, EventArgs e) + { + if(lvotherplayers.SelectedItems.Count > 0) + { + SendLeaderGUID(lvotherplayers.SelectedItems[0].Text); + } + } } } -- cgit v1.2.3 From 41da0b25000f93cf405d6bf18a1597e2616731bd Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 4 May 2017 16:06:32 -0400 Subject: fix bug with multiplayer ui --- ShiftOS.WinForms/Applications/Pong.Designer.cs | 1 + ShiftOS.WinForms/Applications/Pong.cs | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) (limited to 'ShiftOS.WinForms/Applications/Pong.Designer.cs') diff --git a/ShiftOS.WinForms/Applications/Pong.Designer.cs b/ShiftOS.WinForms/Applications/Pong.Designer.cs index d0ff466..0254e94 100644 --- a/ShiftOS.WinForms/Applications/Pong.Designer.cs +++ b/ShiftOS.WinForms/Applications/Pong.Designer.cs @@ -193,6 +193,7 @@ namespace ShiftOS.WinForms.Applications this.pnlmultiplayerhandshake.Name = "pnlmultiplayerhandshake"; this.pnlmultiplayerhandshake.Size = new System.Drawing.Size(396, 231); this.pnlmultiplayerhandshake.TabIndex = 15; + this.pnlmultiplayerhandshake.Visible = false; // // lvotherplayers // diff --git a/ShiftOS.WinForms/Applications/Pong.cs b/ShiftOS.WinForms/Applications/Pong.cs index ad81197..3e93c34 100644 --- a/ShiftOS.WinForms/Applications/Pong.cs +++ b/ShiftOS.WinForms/Applications/Pong.cs @@ -374,6 +374,14 @@ namespace ShiftOS.WinForms.Applications LeaderX = pt.X; LeaderY = pt.Y; } + else if(msg.Name == "pong_mp_left") + { + this.Invoke(new Action(() => + { + AppearanceManager.Close(this); + })); + Infobox.Show("Opponent has closed Pong.", "The opponent has closed Pong, therefore the connection between you two has dropped."); + } else if (msg.Name == "pong_mp_youlose") { LoseMP(); @@ -408,6 +416,7 @@ namespace ShiftOS.WinForms.Applications else if (msg.Name == "pong_handshake_chosen") { IsLeader = false; + LeaveMatchmake(); OpponentGUID = msg.Contents; YouGUID = ServerManager.thisGuid.ToString(); SendFollowerGUID(); @@ -984,6 +993,7 @@ namespace ShiftOS.WinForms.Applications pnlfinalstats.Hide(); CenterPanels(); lblbeatai.Hide(); + ServerManager.MessageReceived += this.ServerMessageReceivedHandler; } public void OnSkinLoad() @@ -997,6 +1007,14 @@ namespace ShiftOS.WinForms.Applications public bool OnUnload() { + if(IsMultiplayerSession == true) + { + if(!string.IsNullOrWhiteSpace(OpponentGUID)) + ServerManager.Forward(OpponentGUID, "pong_mp_left", null); + } + LeaveMatchmake(); + ServerManager.MessageReceived -= this.ServerMessageReceivedHandler; + return true; } -- cgit v1.2.3