diff --git a/1/1.cs b/1/1.cs index eec1f67..a731054 100644 --- a/1/1.cs +++ b/1/1.cs @@ -54,13 +54,10 @@ namespace LaptopSimulator2015.Levels } public int availableAfter => 1; - public int gameClock => 17; - public Panel desktopIcon { get; set; } - public int installerProgressSteps => 500; - + public Color backColor => Color.Black; List enemies; List bullets; Vector2 player; @@ -90,7 +87,7 @@ namespace LaptopSimulator2015.Levels bullets[i].X += 4; for (int j = 0; j < enemies.Count; j++) { - if (bullets[i].distanceFromSquared(enemies[j] + new Vector2(2.5f, 2.5f)) < 56.25f) + if (bullets[i].distanceFromSquared(enemies[j]) < 56.25f) { enemiesToRemove.Add(enemies[j]); bulletsToRemove.Add(bullets[i]); @@ -104,16 +101,16 @@ namespace LaptopSimulator2015.Levels speedMod += 0.1; speedMod = Math.Max(Math.Min(speedMod, 5), 1); if (Input.Up) - player.Y -= speedMod; + player.Y += speedMod; if (Input.Left) player.X -= speedMod; if (Input.Down) - player.Y += speedMod; + player.Y -= speedMod; if (Input.Right) player.X += speedMod; if (Input.Action & enemiesCanShoot) { - bullets.Add(new Vector2(0, 2.5) + player); + bullets.Add(new Vector2(player)); enemiesCanShoot = false; speedMod--; } @@ -129,21 +126,16 @@ namespace LaptopSimulator2015.Levels enemiesCanShoot = true; player = new Vector2(minigamePanel.Width / 4, minigamePanel.Height / 2); player.bounds_wrap = true; - player.bounds = new Rectangle(-10, -10, minigamePanel.Width + 10, minigamePanel.Height + 10); + player.bounds = new Rectangle(-5, -5, minigamePanel.Width + 10, minigamePanel.Height + 10); } public void draw(GraphicsWrapper g, Panel minigamePanel, Timer minigameTimer, uint minigameTime) { - g.g.Clear(Color.Black); for (int i = 0; i < enemies.Count; i++) - { - g.g.FillRectangle(new SolidBrush(Color.Red), new Rectangle(enemies[i].toPoint(), new Size(10, 10))); - } + g.DrawRectangle(new RectangleF(enemies[i].toPointF(), new SizeF(10, 10)), Color.Red); for (int i = 0; i < bullets.Count; i++) - { - g.g.FillRectangle(new SolidBrush(Color.White), new Rectangle(bullets[i].toPoint(), new Size(5, 5))); - } - g.g.FillRectangle(new SolidBrush(Color.Green), new Rectangle(player.toPoint(), new Size(10, 10))); + g.DrawRectangle(new RectangleF(bullets[i].toPointF(), new SizeF(5, 5)), Color.White); + g.DrawRectangle(new RectangleF(player.toPointF(), new SizeF(10, 10)), Color.Green); } } } \ No newline at end of file diff --git a/2/2.cs b/2/2.cs index 217111a..d780d80 100644 --- a/2/2.cs +++ b/2/2.cs @@ -55,13 +55,10 @@ namespace LaptopSimulator2015.Levels } public int availableAfter => 2; - public int gameClock => 17; - public Panel desktopIcon { get; set; } - public int installerProgressSteps => 500; - + public Color backColor => Color.Black; List enemies; Vector2 player; int lives; @@ -84,11 +81,11 @@ namespace LaptopSimulator2015.Levels enemies.Add(new Vector2(0, tst - minigamePanel.Width * 2 - minigamePanel.Height + 10)); } if (Input.Up) - player.Y -= 5; + player.Y += 5; if (Input.Left) player.X -= 5; if (Input.Down) - player.Y += 5; + player.Y -= 5; if (Input.Right) player.X += 5; List enemiesToRemove = new List(); @@ -118,16 +115,18 @@ namespace LaptopSimulator2015.Levels enemies = new List(); player = new Vector2(minigamePanel.Width / 2, minigamePanel.Height / 2); player.bounds_wrap = true; - player.bounds = new Rectangle(-10, -10, minigamePanel.Width + 10, minigamePanel.Height + 10); + player.bounds = new Rectangle(-5, -5, minigamePanel.Width + 10, minigamePanel.Height + 10); lives = 3; } public void draw(GraphicsWrapper g, Panel minigamePanel, Timer minigameTimer, uint minigameTime) { for (int i = 0; i < enemies.Count; i++) - g.g.FillRectangle(new SolidBrush(Color.Red), new Rectangle(enemies[i].toPoint(), new Size(10, 10))); - g.g.FillRectangle(new SolidBrush(Color.Green), new Rectangle(player.toPoint(), new Size(10, 10))); - g.DrawSizedString(lives.ToString(), 7, (player + new PointF(5, 5)).toPointF(), Brushes.White, true); + //g.g.FillRectangle(new SolidBrush(Color.Red), new Rectangle(enemies[i].toPoint(), new Size(10, 10))); + g.DrawRectangle(new RectangleF(enemies[i].toPointF(), new SizeF(10, 10)), Color.Red); + //g.g.FillRectangle(new SolidBrush(Color.Green), new Rectangle(player.toPoint(), new Size(10, 10))); + g.DrawRectangle(new RectangleF(player.toPointF(), new SizeF(10, 10)), Color.Green); + g.DrawSizedString(lives.ToString(), 7, player.toPointF(), Brushes.White, true, true); } } } diff --git a/3/3.cs b/3/3.cs index 9947ad9..72e4333 100644 --- a/3/3.cs +++ b/3/3.cs @@ -61,12 +61,12 @@ namespace LaptopSimulator2015.Levels public Panel desktopIcon { get; set; } public int installerProgressSteps => 500; + public Color backColor => Color.Black; Vector2 center; Vector2 cannon; Vector2 targ; List targets; - Rectangle player => new Rectangle(center.toPoint().X - 5, center.toPoint().Y - 5, 10, 10); double playerRot; double cannonL; double power; @@ -146,8 +146,8 @@ namespace LaptopSimulator2015.Levels public void draw(GraphicsWrapper g, Panel minigamePanel, Timer minigameTimer, uint minigameTime) { - g.g.Clear(Color.Black); - g.g.FillRectangle(new SolidBrush(Color.Green), player); + //g.g.FillRectangle(new SolidBrush(Color.Green), player); + g.DrawRectangle(new RectangleF(center.toPointF(), new SizeF(10, 10)), Color.Green, transform:false); g.g.DrawLine(new Pen(new SolidBrush(Color.Green), 5), center.toPoint(), cannon.toPoint()); for (int i = 0; i < targets.Count; i++) { @@ -159,13 +159,15 @@ namespace LaptopSimulator2015.Levels } if (firing) { - g.g.DrawRectangle(new Pen(new SolidBrush(Color.Green), 1), new Rectangle(Misc.d2i(targ.X - power / 2), Misc.d2i(targ.Y - power / 2), Misc.d2i(power), Misc.d2i(power))); + //g.g.DrawRectangle(new Pen(new SolidBrush(Color.Green), 1), new Rectangle(Misc.d2i(targ.X - power / 2), Misc.d2i(targ.Y - power / 2), Misc.d2i(power), Misc.d2i(power))); + g.DrawRectangle(new RectangleF(targ.toPointF(), new SizeF(Misc.d2f(power), Misc.d2f(power))), Color.Green, filled: false, transform: false); g.g.DrawLine(new Pen(new SolidBrush(Color.Green), 1), new PointF(Misc.d2i(targ.X), Misc.d2i(targ.Y - power / 2)), new PointF(Misc.d2i(targ.X), Misc.d2i(targ.Y + power / 2))); g.g.DrawLine(new Pen(new SolidBrush(Color.Green), 1), new PointF(Misc.d2i(targ.X - power / 2), Misc.d2i(targ.Y)), new PointF(Misc.d2i(targ.X + power / 2), Misc.d2i(targ.Y))); } else { - g.g.FillRectangle(new SolidBrush(Color.Green), new RectangleF(Misc.d2f(targ.X - 2.5f), Misc.d2f(targ.Y - 2.5f), 5, 5)); + //g.g.FillRectangle(new SolidBrush(Color.Green), new RectangleF(Misc.d2f(targ.X - 2.5f), Misc.d2f(targ.Y - 2.5f), 5, 5)); + g.DrawRectangle(new RectangleF(targ.toPointF(), new SizeF(5, 5)), Color.Green, transform: false); } } } diff --git a/3g/3.cs b/3g/3.cs index 2d9b7c3..49af6ed 100644 --- a/3g/3.cs +++ b/3g/3.cs @@ -33,13 +33,9 @@ namespace LaptopSimulator2015.Goals } public int availableAfter => 0; - public int gameClock => 300; - public Panel desktopIcon { get; set; } - public int playableAfter => 4; - public string[] availableText { get { @@ -79,7 +75,7 @@ namespace LaptopSimulator2015.Goals } } - + public Color backColor => Color.Black; public static int[,] grid = new int[23, 10]; public static int[,] droppedtetrominoeLocationGrid = new int[23, 10]; public static bool isDropped = false; @@ -198,13 +194,12 @@ namespace LaptopSimulator2015.Goals public void draw(GraphicsWrapper g, Panel minigamePanel, Timer minigameTimer, uint minigameTime) { - g.g.Clear(Color.Black); for (int y = 0; y < 23; ++y) { for (int x = 0; x < 10; x++) { if (grid[y, x] == 1 | droppedtetrominoeLocationGrid[y, x] == 1) - g.g.FillRectangle(Brushes.White, new Rectangle(x * 10, y * 10, 10, 10)); + g.DrawRectangle(new RectangleF(x * 10, y * 10, 10, 10), Color.White, false, false); } g.g.DrawLine(new Pen(Color.DarkGray), new Point(0, (y + 1) * 10), new Point(10 * 10, (y + 1) * 10)); } @@ -212,9 +207,9 @@ namespace LaptopSimulator2015.Goals { g.g.DrawLine(new Pen(Color.DarkGray), new Point((x + 1) * 10, 0), new Point((x + 1) * 10, 23 * 10)); } - g.DrawSizedString("Level " + level, 10, new PointF(150, 10), Brushes.White); - g.DrawSizedString("Score " + score, 10, new PointF(150, 30), Brushes.White); - g.DrawSizedString("LinesCleared " + linesCleared, 10, new PointF(150, 50), Brushes.White); + g.DrawSizedString("Level " + level, 10, new PointF(150, 10), Brushes.White, false); + g.DrawSizedString("Score " + score, 10, new PointF(150, 30), Brushes.White, false); + g.DrawSizedString("LinesCleared " + linesCleared, 10, new PointF(150, 50), Brushes.White, false); } public class Tetrominoe diff --git a/4/4.cs b/4/4.cs index 3de222f..d70731d 100644 --- a/4/4.cs +++ b/4/4.cs @@ -55,6 +55,7 @@ namespace LaptopSimulator2015.Levels public int gameClock => 17; public Panel desktopIcon { get; set; } public int installerProgressSteps => 500; + public Color backColor => Color.Black; Random rnd; Vector2 player; @@ -74,7 +75,7 @@ namespace LaptopSimulator2015.Levels lazorTime -= Math.Min(minigameTime / 800, 2.5) + 0.5; if (lazorTime <= 0) { - g.g.FillRectangle(new SolidBrush(Color.Red), new RectangleF((float)lazor - 5, 0, 10, minigamePanel.Height)); + g.DrawRectangle(new RectangleF((float)lazor, minigamePanel.Height / 2, 10, minigamePanel.Height), Color.Red); if (lazorTime <= -2) { lazorTime = 100; @@ -86,13 +87,13 @@ namespace LaptopSimulator2015.Levels throw new Exception("The VM was shut down to prevent damage to your Machine.", new Exception("0717750f-3508-4bc2-841e-f3b077c676fe")); } } - player.Y += speed; + player.Y -= speed; for (int i = 0; i < platforms.Count; i++) { - platforms[i].Y += speed; - if (platforms[i].Y > minigamePanel.Height) + platforms[i].Y -= speed; + if (platforms[i].Y < 0) { - platforms[i].Y = 0; + platforms[i].Y = minigamePanel.Height; platforms[i].X = rnd.Next(minigamePanel.Width); } } @@ -101,19 +102,19 @@ namespace LaptopSimulator2015.Levels { movementFactor = 2; playerV.X *= 0.7; - playerV.Y = Math.Min(playerV.Y, 0); + playerV.Y = Math.Max(playerV.Y, 0); } else { movementFactor = 5; playerV.X *= 0.9; - playerV.Y += 1; + playerV.Y -= 1; } if (Input.Up) { if (wasOnPlatform || jmpj > 0) { - playerV.Y -= jmpj / 6d + 1.5; + playerV.Y += jmpj / 6d + 1.5; jmpj--; } } @@ -130,16 +131,16 @@ namespace LaptopSimulator2015.Levels if (Input.Right) playerV.X += movementFactor; player.X += playerV.X; - if (playerV.Y < 0) + if (playerV.Y > 0) player.Y += playerV.Y; else - for (int i = 0; i < playerV.Y / 2; i++) + for (int i = 0; i < (-playerV.Y) / 2; i++) { if (onPlatform) break; - player.Y += 2; + player.Y -= 2; } - if (player.Y > minigamePanel.Height) + if (player.Y < 0) throw new Exception("The VM was shut down to prevent damage to your Machine.", new Exception("0717750f-3508-4bc2-841e-f3b077c676fe")); wasOnPlatform = onPlatform; } @@ -158,7 +159,7 @@ namespace LaptopSimulator2015.Levels { platforms.Add(new Vector2(rnd.Next(minigamePanel.Width - 100) + 50, i * (minigamePanel.Height / 5))); } - player = new Vector2(platforms[platforms.Count / 2].X, -10); + player = new Vector2(platforms[platforms.Count / 2].X, minigamePanel.Height + 10); player.bounds = new Rectangle(-5, 0, minigamePanel.Width + 10, 0); player.bounds_wrap = true; lazor = player.X; @@ -200,7 +201,7 @@ namespace LaptopSimulator2015.Levels else platforms[i].Tag = 0d; } - if (((double)platforms[i].Tag) <= 20 && RectangleF.Intersect(player2rect(), rect) != RectangleF.Empty && player.Y < platforms[i].Y - 8) + if (((double)platforms[i].Tag) <= 20 && RectangleF.Intersect(player2rect(), rect) != RectangleF.Empty && player.Y > platforms[i].Y + 8) return true; } return false; @@ -211,15 +212,15 @@ namespace LaptopSimulator2015.Levels public void draw(GraphicsWrapper g, Panel minigamePanel, Timer minigameTimer, uint minigameTime) { - g.g.Clear(Color.Black); - g.g.FillRectangle(new SolidBrush(Color.Green), player2rect()); + g.DrawRectangle(new RectangleF(player.toPointF(), new SizeF(10, 10)), Color.Green); if (lazorTime >= 0 && lazorTime <= 80) { - g.g.FillRectangle(new SolidBrush(Color.DarkGray), new RectangleF((float)lazor - 1, 0, 2, minigamePanel.Height)); - g.g.FillRectangle(new SolidBrush(Color.Red), new RectangleF((float)lazor - 1, 0, 2, minigamePanel.Height - (float)Misc.map(0, 80, 0, minigamePanel.Height, lazorTime))); + g.DrawRectangle(new RectangleF((float)lazor, minigamePanel.Height / 2, 2, minigamePanel.Height), Color.DarkGray); + float m = (float)Misc.map(0, 80, 0, minigamePanel.Height, lazorTime); + g.DrawRectangle(new RectangleF((float)lazor, minigamePanel.Height - m / 2, 2, m), Color.Red); } for (int i = 0; i < platforms.Count; i++) - g.g.FillRectangle(new SolidBrush(Color.White), plat2rect(i)); + g.DrawRectangle(new RectangleF(platforms[i].toPointF(), new SizeF(100, 10)), Color.White); } } } diff --git a/Base/Drawing.cs b/Base/Drawing.cs index 0fa35c4..bd27cb5 100644 --- a/Base/Drawing.cs +++ b/Base/Drawing.cs @@ -11,16 +11,20 @@ namespace Base public class GraphicsWrapper : IDisposable { BufferedGraphics _g; + Color backColor; + Rectangle targetSize; public readonly Graphics g; /// /// Wrap the Graphics object with these excellent High-Quality functions /// /// The Graphics-object to wrap /// The size of the device the Graphics are drawn to - public GraphicsWrapper(Graphics g, Rectangle targetSize) + public GraphicsWrapper(Graphics g, Color backColor, Rectangle targetSize) { _g = BufferedGraphicsManager.Current.Allocate(g ?? throw new ArgumentNullException(nameof(g)), targetSize); this.g = _g.Graphics; + this.backColor = backColor; + this.targetSize = targetSize; } /// @@ -31,7 +35,7 @@ namespace Base /// The location to draw the string at /// The brush to draw the string with /// Set to true if you want to draw the string around instead of left-down from the location - public void DrawSizedString(string s, int size, PointF location, Brush brush, bool isLocationCentered = false) + public void DrawSizedString(string s, int size, PointF location, Brush brush, bool transform = true, bool isLocationCentered = false) { SmoothingMode tmpS = g.SmoothingMode; InterpolationMode tmpI = g.InterpolationMode; @@ -40,17 +44,43 @@ namespace Base g.InterpolationMode = InterpolationMode.HighQualityBicubic; g.PixelOffsetMode = PixelOffsetMode.HighQuality; SizeF sLen = g.MeasureString(s, new Font("Tahoma", size)); - RectangleF rectf; + RectangleF rectf = new RectangleF(location, sLen); if (isLocationCentered) - rectf = new RectangleF(location.X - sLen.Width / 2, location.Y - sLen.Height / 2, sLen.Width, sLen.Height); - else - rectf = new RectangleF(location, sLen); + rectf = new RectangleF(rectf.X - rectf.Width / 2, rectf.Y - rectf.Height / 2, rectf.Width, rectf.Height); + if (transform) + rectf = w2s(rectf); g.DrawString(s, new Font("Tahoma", size), brush, rectf); g.PixelOffsetMode = tmpP; g.InterpolationMode = tmpI; g.SmoothingMode = tmpS; } + /// + /// Draws a rectangle + /// + /// Use the PointF/SizeF Constructor as it is much more logical + /// The color of the rectangle + /// Whether the rectangle should be drawn centered rather than down-left + /// Whether the rectangle should be filled + /// The size of the lines used when not filling + public void DrawRectangle(RectangleF rectangle, Color color, bool centered = true, bool transform = true, bool filled = true, int unfilledLineSize = 1) + { + RectangleF r = rectangle; + if (transform) + r = w2s(r); + Brush b = new SolidBrush(color); + if (centered) + { + r = new RectangleF(new PointF(r.X - r.Width / 2, r.Y - r.Height / 2), r.Size); + } + if (filled) + g.FillRectangle(b, r); + else + g.DrawRectangle(new Pen(b, unfilledLineSize), new Rectangle(Misc.f2i(r.X), Misc.f2i(r.Y), Misc.f2i(r.Width), Misc.f2i(r.Height))); + } + + public void Clear() => g.Clear(backColor); + public void Dispose() { g.Flush(); @@ -58,5 +88,8 @@ namespace Base g.Dispose(); _g.Dispose(); } + + public RectangleF w2s(RectangleF from) => new RectangleF(w2s(from.Location), from.Size); + public PointF w2s(PointF from) => new PointF(from.X, targetSize.Height - from.Y); } } diff --git a/Base/Minigame.cs b/Base/Minigame.cs index 344e3a7..cd4609d 100644 --- a/Base/Minigame.cs +++ b/Base/Minigame.cs @@ -54,6 +54,10 @@ namespace LaptopSimulator2015 /// The timer used for scheduling frames /// The amount of total displayed frames void draw(GraphicsWrapper g, Panel minigamePanel, Timer minigameTimer, uint minigameTime); + /// + /// Color to be painted to the Background before calling the draw method + /// + Color backColor { get; } } public interface Level : Minigame { diff --git a/LaptopSimulator2015.sln b/LaptopSimulator2015.sln index 40c3f2b..bb683c3 100644 --- a/LaptopSimulator2015.sln +++ b/LaptopSimulator2015.sln @@ -9,6 +9,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LaptopSimulator2015", "Lapt {8109040E-9D8D-43E7-A461-83475B2939C9} = {8109040E-9D8D-43E7-A461-83475B2939C9} {4AA1EF48-BC5E-4FE4-9B7D-BAE6D6AB9529} = {4AA1EF48-BC5E-4FE4-9B7D-BAE6D6AB9529} {048BCC52-64BA-452B-A3F6-3683F9049AFD} = {048BCC52-64BA-452B-A3F6-3683F9049AFD} + {DFD89655-00A7-4DF8-8B2E-17F5BEFE5090} = {DFD89655-00A7-4DF8-8B2E-17F5BEFE5090} {E61E2797-62B4-471C-ACBF-31EAB7C746CF} = {E61E2797-62B4-471C-ACBF-31EAB7C746CF} {DFA2FB97-D676-4B0D-B281-2685F85781EE} = {DFA2FB97-D676-4B0D-B281-2685F85781EE} {72BBB6B8-5DA3-4FF1-8FA6-75256637F931} = {72BBB6B8-5DA3-4FF1-8FA6-75256637F931} @@ -28,8 +29,11 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "3", "3\3.csproj", "{8109040 EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "4", "4\4.csproj", "{4AA1EF48-BC5E-4FE4-9B7D-BAE6D6AB9529}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{23D851A7-722E-416A-91F8-0C86349D5BF3}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Meta", "Meta", "{23D851A7-722E-416A-91F8-0C86349D5BF3}" ProjectSection(SolutionItems) = preProject + .gitignore = .gitignore + make.bat = make.bat + README.md = README.md ToDo.txt = ToDo.txt EndProjectSection EndProject @@ -48,6 +52,13 @@ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "zzz_ShuffleChars", "zzz_ShuffleChars\zzz_ShuffleChars.csproj", "{5E10F1D0-0114-444A-B80E-975B5DC40D9F}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LevelTest", "LevelTest\LevelTest.csproj", "{DFD89655-00A7-4DF8-8B2E-17F5BEFE5090}" + ProjectSection(ProjectDependencies) = postProject + {0965C803-49B2-4311-B62F-1E60DBD9185F} = {0965C803-49B2-4311-B62F-1E60DBD9185F} + {8109040E-9D8D-43E7-A461-83475B2939C9} = {8109040E-9D8D-43E7-A461-83475B2939C9} + {4AA1EF48-BC5E-4FE4-9B7D-BAE6D6AB9529} = {4AA1EF48-BC5E-4FE4-9B7D-BAE6D6AB9529} + {E61E2797-62B4-471C-ACBF-31EAB7C746CF} = {E61E2797-62B4-471C-ACBF-31EAB7C746CF} + {DFA2FB97-D676-4B0D-B281-2685F85781EE} = {DFA2FB97-D676-4B0D-B281-2685F85781EE} + EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/LaptopSimulator2015/FakeDesktop.cs b/LaptopSimulator2015/FakeDesktop.cs index b973089..7729382 100644 --- a/LaptopSimulator2015/FakeDesktop.cs +++ b/LaptopSimulator2015/FakeDesktop.cs @@ -475,8 +475,9 @@ namespace LaptopSimulator2015 uint minigamePrevTime = 0; private void InvadersPanel_Paint(object sender, PaintEventArgs e) { - using (GraphicsWrapper w = new GraphicsWrapper(e.Graphics, new Rectangle(Point.Empty, minigamePanel.Size))) + using (GraphicsWrapper w = new GraphicsWrapper(e.Graphics, levels[levelInd].backColor, new Rectangle(Point.Empty, minigamePanel.Size))) { + w.Clear(); levels[levelInd].draw(w, minigamePanel, minigameClockT, minigameTime); if (minigameTime != minigamePrevTime) { diff --git a/LaptopSimulator2015/LaptopSimulator2015.csproj b/LaptopSimulator2015/LaptopSimulator2015.csproj index 68aa4e1..0a52123 100644 --- a/LaptopSimulator2015/LaptopSimulator2015.csproj +++ b/LaptopSimulator2015/LaptopSimulator2015.csproj @@ -144,6 +144,9 @@ if not exist "$(TargetDir)Content\Glitches" mkdir "$(TargetDir)Content\Glitches" if exist "$(SolutionDir)tmp2" copy $(SolutionDir)tmp2\* "$(TargetDir)Content\Glitches" rmdir /s /q "$(SolutionDir)tmp2" +if exist "$(SolutionDir)tmp3" copy $(SolutionDir)tmp3\* "$(TargetDir)" +rmdir /s /q "$(SolutionDir)tmp3" + del /q "$(TargetDir)save.xml" diff --git a/LevelTest/ArrayDialog.Designer.cs b/LevelTest/ArrayDialog.Designer.cs index 0ee8f9b..ef24034 100644 --- a/LevelTest/ArrayDialog.Designer.cs +++ b/LevelTest/ArrayDialog.Designer.cs @@ -46,7 +46,6 @@ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(482, 262); - this.ControlBox = false; this.Controls.Add(this.listBox1); this.MaximizeBox = false; this.MinimizeBox = false; diff --git a/LevelTest/ArrayDialog.cs b/LevelTest/ArrayDialog.cs index b08f98f..2c51b72 100644 --- a/LevelTest/ArrayDialog.cs +++ b/LevelTest/ArrayDialog.cs @@ -13,10 +13,11 @@ namespace LevelTest public partial class ArrayDialog : Form { public int returnIndex; - public ArrayDialog(string[] items) + public ArrayDialog(string[] items, string title = "") { InitializeComponent(); listBox1.Items.AddRange(items); + Text = title; } private void ListBox1_SelectedIndexChanged(object sender, EventArgs e) diff --git a/LevelTest/LevelTest.csproj b/LevelTest/LevelTest.csproj index cd0c24a..d6e5b8f 100644 --- a/LevelTest/LevelTest.csproj +++ b/LevelTest/LevelTest.csproj @@ -95,4 +95,8 @@ + + if not exist "$(SolutionDir)tmp3" mkdir "$(SolutionDir)tmp3" +copy "$(TargetPath)" "$(SolutionDir)tmp3" + \ No newline at end of file diff --git a/LevelTest/MainForm.Designer.cs b/LevelTest/MainForm.Designer.cs index 2c7dac9..3de4cb6 100644 --- a/LevelTest/MainForm.Designer.cs +++ b/LevelTest/MainForm.Designer.cs @@ -31,7 +31,6 @@ this.components = new System.ComponentModel.Container(); this.minigamePanel = new System.Windows.Forms.Panel(); this.minigameClockT = new System.Windows.Forms.Timer(this.components); - this.closeButton = new System.Windows.Forms.Label(); this.SuspendLayout(); // // minigamePanel @@ -50,28 +49,19 @@ this.minigameClockT.Interval = 17; this.minigameClockT.Tick += new System.EventHandler(this.MinigameClockT_Tick); // - // closeButton - // - this.closeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.closeButton.BackColor = System.Drawing.Color.Red; - this.closeButton.Location = new System.Drawing.Point(776, 2); - this.closeButton.Name = "closeButton"; - this.closeButton.Size = new System.Drawing.Size(23, 23); - this.closeButton.TabIndex = 0; - this.closeButton.Text = "X"; - this.closeButton.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - this.closeButton.Click += new System.EventHandler(this.CloseButton_Click); - // // MainForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(800, 450); - this.Controls.Add(this.closeButton); this.Controls.Add(this.minigamePanel); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.MinimizeBox = false; this.Name = "MainForm"; + this.ShowIcon = false; this.Text = "Form1"; + this.TopMost = true; this.ResumeLayout(false); } @@ -79,7 +69,6 @@ #endregion private System.Windows.Forms.Panel minigamePanel; private System.Windows.Forms.Timer minigameClockT; - private System.Windows.Forms.Label closeButton; } } diff --git a/LevelTest/MainForm.cs b/LevelTest/MainForm.cs index 9467f80..32724c2 100644 --- a/LevelTest/MainForm.cs +++ b/LevelTest/MainForm.cs @@ -17,14 +17,14 @@ namespace LevelTest Minigame level; public MainForm(Minigame game) { + Misc.closeGameWindow = () => { level.initGame(minigamePanel, minigameClockT); }; level = game; InitializeComponent(); minigameClockT.Interval = level.gameClock; Text = level.name; - level.initGame(minigamePanel, minigameClockT); + Misc.closeGameWindow.Invoke(); } - private void CloseButton_Click(object sender, EventArgs e) => Application.Exit(); uint minigameTime; uint minigamePrevTime; private void MinigameClockT_Tick(object sender, EventArgs e) @@ -35,8 +35,9 @@ namespace LevelTest private void MinigamePanel_Paint(object sender, PaintEventArgs e) { - using (GraphicsWrapper w = new GraphicsWrapper(e.Graphics, new Rectangle(Point.Empty, minigamePanel.Size))) + using (GraphicsWrapper w = new GraphicsWrapper(e.Graphics, level.backColor, new Rectangle(Point.Empty, minigamePanel.Size))) { + w.Clear(); level.draw(w, minigamePanel, minigameClockT, minigameTime); if (minigameTime != minigamePrevTime) { diff --git a/LevelTest/Program.cs b/LevelTest/Program.cs index 50771e1..45cf8a2 100644 --- a/LevelTest/Program.cs +++ b/LevelTest/Program.cs @@ -17,49 +17,56 @@ namespace LevelTest [STAThread] static void Main(string[] args) { - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - if (args != null && args.Length > 0) + try { - if (Directory.Exists(args[0].Replace("\"", ""))) - Directory.SetCurrentDirectory(args[0].Replace("\"", "")); - else if (File.Exists(args[0].Replace("\"", ""))) - Directory.SetCurrentDirectory(Path.GetDirectoryName(args[0].Replace("\"", ""))); + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + if (args != null && args.Length > 0) + { + if (Directory.Exists(args[0].Replace("\"", ""))) + Directory.SetCurrentDirectory(args[0].Replace("\"", "")); + else if (File.Exists(args[0].Replace("\"", ""))) + Directory.SetCurrentDirectory(Path.GetDirectoryName(args[0].Replace("\"", ""))); + else + throw new Exception("Invalid argument"); + } else - throw new Exception("Invalid argument"); - } - else - { - string[] tmp = Directory.EnumerateFiles(Directory.GetCurrentDirectory(), "*.dll", SearchOption.AllDirectories).Where(s => Path.GetFileName(s) != "Base.dll").ToArray(); - if (tmp.Length == 0) - using (FolderBrowserDialog openFileDialog = new FolderBrowserDialog()) + { + string[] tmp = Directory.EnumerateFiles(Directory.GetCurrentDirectory(), "*.dll", SearchOption.AllDirectories).Where(s => Path.GetFileName(s) != "Base.dll").ToArray(); + if (tmp.Length == 0) + using (FolderBrowserDialog openFileDialog = new FolderBrowserDialog()) + { + if (openFileDialog.ShowDialog() == DialogResult.OK) + Directory.SetCurrentDirectory(openFileDialog.SelectedPath); + else + throw new Exception("Please select a folder"); + } + } + Minigame[] levels = Directory.EnumerateFiles(Directory.GetCurrentDirectory(), "*.dll", SearchOption.AllDirectories).Where(s => Path.GetFileName(s) != "Base.dll") + .Select(s => Assembly.LoadFrom(s)).SelectMany(s => s.GetTypes()).Distinct() + .Where(p => typeof(Minigame).IsAssignableFrom(p)).Distinct().Except(new Type[] { typeof(Minigame), typeof(Level), typeof(Goal) }) + .Select(s => (Minigame)Activator.CreateInstance(s)).OrderBy(lv => lv.availableAfter).ToArray(); + Minigame level; + if (levels.Length == 0) + throw new Exception("No Levels found!"); + else if (levels.Length == 1) + level = levels[0]; + else + { + using (ArrayDialog dialog = new ArrayDialog(levels.Select(s => s.name).ToArray(), "Select a Minigame")) { - if (openFileDialog.ShowDialog() == DialogResult.OK) - Directory.SetCurrentDirectory(openFileDialog.SelectedPath); + if (dialog.ShowDialog() == DialogResult.OK) + level = levels[dialog.returnIndex]; else throw new Exception("Please select a folder"); } - } - Minigame[] levels = Directory.EnumerateFiles(Directory.GetCurrentDirectory(), "*.dll", SearchOption.AllDirectories).Where(s => Path.GetFileName(s) != "Base.dll") - .Select(s => Assembly.LoadFrom(s)).SelectMany(s => s.GetTypes()).Distinct() - .Where(p => typeof(Minigame).IsAssignableFrom(p)).Distinct().Except(new Type[] { typeof(Minigame), typeof(Level), typeof(Goal) }) - .Select(s => (Minigame)Activator.CreateInstance(s)).OrderBy(lv => lv.availableAfter).ToArray(); - Minigame level; - if (levels.Length == 0) - throw new Exception("No Levels found!"); - else if (levels.Length == 1) - level = levels[0]; - else - { - using (ArrayDialog dialog = new ArrayDialog(levels.Select(s => s.name).ToArray())) - { - if (dialog.ShowDialog() == DialogResult.OK) - level = levels[dialog.returnIndex]; - else - throw new Exception("Please select a folder"); } + Application.Run(new MainForm(level)); + } + catch (Exception e) + { + Console.WriteLine(e.Message); } - Application.Run(new MainForm(level)); } } } diff --git a/ToDo.txt b/ToDo.txt index 565b748..880f938 100644 --- a/ToDo.txt +++ b/ToDo.txt @@ -1,3 +1,5 @@ -Centralize drawing, distance, screen/worldspace, central "Content"-Folder with depth, in-game level inspector +Centralize distance functions +Fully implement new graphics on Goal and Level 3 +Handle Subtitle-Exception https://devblogs.nvidia.com/hybridizer-csharp/ (?) -OS Install as Tutoral \ No newline at end of file +OS Install as Tutorial \ No newline at end of file