This repository has been archived on 2022-08-05. You can view files and clone it, but cannot push or open issues or pull requests.
LaptopSimulator2015/4/4.cs

236 lines
37 KiB
C#
Raw Normal View History

2019-09-14 14:00:28 +02:00
using Base;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Windows.Forms;
namespace LaptopSimulator2015.Levels
{
class Lvl4 : Level
{
public string installerHeader
{
get {
switch (CultureInfo.CurrentUICulture.Name.Split('-')[0])
{
case "de":
return "Flux-Kernel Installationswerkzeug";
default:
return "FluxKernel installer";
}
}
}
public string installerText
{
get {
switch (CultureInfo.CurrentUICulture.Name.Split('-')[0])
{
case "de":
return "Flux-Kernel ist der beste und schnellste Ersatz-Kernel für Macrohard Doors 98 (tm). Flux erweitert das RAM-Management und Speicher-Vorgänge mit fortschrittlichen APIs, um in unterstützten Anwendungen die Prozessornutzung zu verringern.";
default:
return "Flux-Kernel is the best and fastest custom kernel for Macrohard Doors 98 (tm). Flux extends RAM-Management and Storage operations with advanced APIs to allow supported Applications to reduce their CPU-Usage.";
}
}
}
static Image _installer;
public Image installerIcon
{
get {
if (_installer == null)
{
string __installer = "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
Stream s = new MemoryStream(Convert.FromBase64String(__installer));
_installer = Image.FromStream(s);
s.Close();
}
return _installer;
}
}
public int LevelNumber => 4;
public int gameClock => 17;
public Panel desktopIcon { get; set; }
public int installerProgressSteps => 500;
uint minigamePrevTime = 0;
Random rnd = new Random();
Vector2 player = new Vector2();
Vector2 playerV = new Vector2();
double lazor;
double lazorTime;
int jmpj;
List<Vector2> platforms = new List<Vector2>();
public void gameTick(Graphics e, Panel minigamePanel, Timer minigameTimer, uint minigameTime)
{
BufferedGraphics buffer = BufferedGraphicsManager.Current.Allocate(e, new Rectangle(0, 0, minigamePanel.Width, minigamePanel.Height));
Graphics g = buffer.Graphics;
try
{
g.Clear(Color.Black);
g.FillRectangle(new SolidBrush(Color.Green), player2rect());
bool onPlatform = false;
for (int i = 0; i < platforms.Count; i++)
{
g.FillRectangle(new SolidBrush(Color.White), plat2rect(i));
onPlatform |= isOnPlatform(i);
}
if (lazorTime >= 0 && lazorTime <= 30)
{
g.FillRectangle(new SolidBrush(Color.DarkGray), new RectangleF((float)lazor - 1, 0, 2, minigamePanel.Height));
g.FillRectangle(new SolidBrush(Color.Red), new RectangleF((float)lazor - 1, 0, 2, minigamePanel.Height - (float)Misc.map(0, 30, 0, minigamePanel.Height, lazorTime)));
}
Random random = new Random();
if (minigameTime != minigamePrevTime)
{
lazorTime -= minigameTime - minigamePrevTime;
minigamePrevTime = minigameTime;
if (lazorTime <= 0)
{
g.FillRectangle(new SolidBrush(Color.Red), new RectangleF((float)lazor - 5, 0, 10, minigamePanel.Height));
if (lazorTime <= -2)
{
lazorTime = 40;
lazor = player.X;
}
else
{
if (player.X >= lazor - 5 && player.X <= lazor + 5)
throw new Exception("The VM was shut down to prevent damage to your Machine.", new Exception("0717750f-3508-4bc2-841e-f3b077c676fe"));
}
}
if (onPlatform)
playerV.Y = Math.Min(playerV.Y, 0);
else
playerV.Y += 1;
playerV.X /= 1.2f;
if (onPlatform)
jmpj = 10;
else
if (!Input.Up)
jmpj = 0;
if ((onPlatform || jmpj > 0) && Input.Up)
{
playerV.Y -= jmpj / 6d + 1.5;
jmpj--;
}
double movementFactor = 15;
if (onPlatform)
movementFactor /= 4;
if (Input.Left)
playerV.X -= movementFactor;
if (Input.Right)
playerV.X += movementFactor;
player.X += playerV.X;
onPlatform = false;
if (playerV.Y < 0)
player.Y += playerV.Y;
else
for (int i = 0; i < playerV.Y / 2; i++)
{
for (int j = 0; j < platforms.Count; j++)
onPlatform |= isOnPlatform(j);
if (!onPlatform)
player.Y += 2;
}
List<Vector2> platformsToRemove = new List<Vector2>();
for (int i = 0; i < platforms.Count; i++)
{
platforms[i].Y += 1.7;
if (platforms[i].Y > minigamePanel.Height)
{
platforms[i].Y = 0;
platforms[i].X = rnd.Next(minigamePanel.Width);
}
}
if (player.Y > minigamePanel.Height)
throw new Exception("The VM was shut down to prevent damage to your Machine.", new Exception("0717750f-3508-4bc2-841e-f3b077c676fe"));
}
buffer.Render();
buffer.Dispose();
}
catch (Exception ex) { if (ex.InnerException?.Message == "0717750f-3508-4bc2-841e-f3b077c676fe") Misc.closeGameWindow.Invoke(); else Console.WriteLine(ex.ToString()); }
}
public void initGame(Graphics g, Panel minigamePanel, Timer minigameTimer)
{
playerV = new Vector2();
playerV.bounds = new Rectangle(-5, -20, 10, 40);
playerV.bounds_wrap = false;
for (int i = 0; i < 5; i++)
for (int j = 0; j < 2; j++)
platforms.Add(new Vector2(rnd.Next(minigamePanel.Width), i * (minigamePanel.Height / 5)));
player = new Vector2(platforms[0].X, -10);
player.bounds = new Rectangle(-5, 0, minigamePanel.Width + 10, 0);
player.bounds_wrap = true;
lazor = player.X;
lazorTime = 50;
}
RectangleF plat2rect(int platform) => new RectangleF((platforms[platform] - new Vector2(50, 5)).toPointF(), new SizeF(100, 10));
RectangleF player2rect() => new RectangleF((player - new Vector2(5, 5)).toPointF(), new SizeF(10, 10));
bool isOnPlatform(int platform)
{
calcDist(platform);
return ((double)platforms[platform].Tag) <= 20 && RectangleF.Intersect(player2rect(), plat2rect(platform)) != RectangleF.Empty && player.Y < platforms[platform].Y - 8;
}
void calcDist(int platform)
{
RectangleF rect = plat2rect(platform);
if (player.X < rect.X)
{
if (player.Y < rect.Y)
{
Vector2 diff = player - new Vector2(rect.X, rect.Y);
platforms[platform].Tag = diff.magnitude;
}
else if (player.Y > rect.Y + rect.Height)
{
Vector2 diff = player - new Vector2(rect.X, rect.Y + rect.Height);
platforms[platform].Tag = diff.magnitude;
}
else
{
platforms[platform].Tag = rect.X - player.X;
}
}
else if (player.X > rect.X + rect.Width)
{
if (player.Y < rect.Y)
{
Vector2 diff = player - new Vector2(rect.X + rect.Width, rect.Y);
platforms[platform].Tag = diff.magnitude;
}
else if (player.Y > rect.Y + rect.Height)
{
Vector2 diff = player - new Vector2(rect.X + rect.Width, rect.Y + rect.Height);
platforms[platform].Tag = diff.magnitude;
}
else
{
platforms[platform].Tag = player.X - rect.X + rect.Width;
}
}
else
{
if (player.Y < rect.Y)
{
platforms[platform].Tag = rect.Y - player.Y;
}
else if (player.Y > rect.Y + rect.Height)
{
platforms[platform].Tag = player.Y - (rect.Y + rect.Height);
}
else
{
platforms[platform].Tag = 0d;
}
}
}
}
}