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

200 lines
35 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 name
2019-09-14 14:00:28 +02:00
{
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 icon
2019-09-14 14:00:28 +02:00
{
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;
}
}
2019-09-19 18:51:31 +02:00
public int availableAfter => 4;
2019-09-14 14:00:28 +02:00
public int gameClock => 17;
public Panel desktopIcon { get; set; }
public int installerProgressSteps => 500;
2019-09-26 22:24:45 +02:00
public Color backColor => Color.Black;
2019-10-05 17:49:56 +02:00
public bool isLowQuality => false;
2019-09-29 11:23:07 +02:00
public string[] credits => new string[] { "Level4 Icon made by Microsoft" };
2019-09-15 16:21:56 +02:00
Random rnd;
Vector2 player;
Vector2 playerV;
2019-09-14 14:00:28 +02:00
double lazor;
double lazorTime;
2019-09-15 16:21:56 +02:00
double speed;
2019-09-14 14:00:28 +02:00
int jmpj;
2019-09-15 16:21:56 +02:00
bool wasOnPlatform;
List<Vector2> platforms;
public void gameTick(GraphicsWrapper g, Panel minigamePanel, Timer minigameTimer, uint minigameTime)
2019-09-14 14:00:28 +02:00
{
try
{
Random random = new Random();
speed = Math.Min(minigameTime / 200d, 2) + 0.5;
lazorTime -= Math.Min(minigameTime / 800, 2.5) + 0.5;
if (lazorTime <= 0)
2019-09-14 14:00:28 +02:00
{
2019-09-26 22:24:45 +02:00
g.DrawRectangle(new RectangleF((float)lazor, minigamePanel.Height / 2, 10, minigamePanel.Height), Color.Red);
if (lazorTime <= -2)
2019-09-15 16:21:56 +02:00
{
lazorTime = 100;
lazor = player.X;
2019-09-15 16:21:56 +02:00
}
2019-09-14 14:00:28 +02:00
else
2019-09-15 16:21:56 +02:00
{
if (player.X > lazor - 10 && player.X < lazor + 10)
throw new Exception("The VM was shut down to prevent damage to your Machine.", new Exception("0717750f-3508-4bc2-841e-f3b077c676fe"));
2019-09-15 16:21:56 +02:00
}
}
2019-09-26 22:24:45 +02:00
player.Y -= speed;
for (int i = 0; i < platforms.Count; i++)
{
2019-09-26 22:24:45 +02:00
platforms[i].Y -= speed;
if (platforms[i].Y < 0)
2019-09-15 16:21:56 +02:00
{
2019-09-26 22:24:45 +02:00
platforms[i].Y = minigamePanel.Height;
platforms[i].X = rnd.Next(minigamePanel.Width);
2019-09-15 16:21:56 +02:00
}
}
double movementFactor;
if (wasOnPlatform)
{
movementFactor = 2;
playerV.X *= 0.7;
2019-09-26 22:24:45 +02:00
playerV.Y = Math.Max(playerV.Y, 0);
}
else
{
movementFactor = 5;
playerV.X *= 0.9;
2019-09-26 22:24:45 +02:00
playerV.Y -= 1;
}
if (Input.Up)
{
if (wasOnPlatform || jmpj > 0)
2019-09-14 14:00:28 +02:00
{
2019-09-26 22:24:45 +02:00
playerV.Y += jmpj / 6d + 1.5;
jmpj--;
2019-09-14 14:00:28 +02:00
}
}
else
{
if (wasOnPlatform)
jmpj = 10;
2019-09-14 14:00:28 +02:00
else
jmpj = 0;
2019-09-14 14:00:28 +02:00
}
jmpj = Math.Max(0, jmpj);
if (Input.Left)
playerV.X -= movementFactor;
if (Input.Right)
playerV.X += movementFactor;
player.X += playerV.X;
2019-09-26 22:24:45 +02:00
if (playerV.Y > 0)
player.Y += playerV.Y;
else
2019-09-26 22:24:45 +02:00
for (int i = 0; i < (-playerV.Y) / 2; i++)
{
if (onPlatform)
break;
2019-09-26 22:24:45 +02:00
player.Y -= 2;
}
2019-09-26 22:24:45 +02:00
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;
2019-09-14 14:00:28 +02:00
}
catch (Exception ex) { if (ex.InnerException?.Message == "0717750f-3508-4bc2-841e-f3b077c676fe") Misc.closeGameWindow.Invoke(); else Console.WriteLine(ex.ToString()); }
}
public void initGame(Panel minigamePanel, Timer minigameTimer)
2019-09-14 14:00:28 +02:00
{
2019-09-15 16:21:56 +02:00
rnd = new Random();
2019-09-14 14:00:28 +02:00
playerV = new Vector2();
2019-09-15 16:21:56 +02:00
playerV.bounds = new Rectangle(-10, -20, 20, 40);
2019-09-14 14:00:28 +02:00
playerV.bounds_wrap = false;
2019-09-15 16:21:56 +02:00
platforms = new List<Vector2>();
2019-09-14 14:00:28 +02:00
for (int i = 0; i < 5; i++)
for (int j = 0; j < 2; j++)
2019-09-15 16:21:56 +02:00
{
platforms.Add(new Vector2(rnd.Next(minigamePanel.Width - 100) + 50, i * (minigamePanel.Height / 5)));
}
2019-09-26 22:24:45 +02:00
player = new Vector2(platforms[platforms.Count / 2].X, minigamePanel.Height + 10);
2019-09-14 14:00:28 +02:00
player.bounds = new Rectangle(-5, 0, minigamePanel.Width + 10, 0);
player.bounds_wrap = true;
lazor = player.X;
2019-09-15 16:21:56 +02:00
lazorTime = 100;
speed = 1;
wasOnPlatform = true;
2019-09-14 14:00:28 +02:00
}
2019-09-15 16:21:56 +02:00
bool onPlatform
2019-09-14 14:00:28 +02:00
{
2019-09-15 16:21:56 +02:00
get {
for (int i = 0; i < platforms.Count; i++)
2019-09-14 14:00:28 +02:00
{
2019-09-27 08:59:21 +02:00
Rect rect = new Rect(platforms[i], new Vector2(100, 10), true);
if (player.distanceToRectSquared(rect) <= 20 && rect.doOverlap(new Rect(player, new Vector2(10, 10), true)) && platforms[i].Y + 11 > player.Y && player.Y > platforms[i].Y + 9)
2019-09-15 16:21:56 +02:00
return true;
2019-09-14 14:00:28 +02:00
}
2019-09-15 16:21:56 +02:00
return false;
2019-09-14 14:00:28 +02:00
}
}
public void draw(GraphicsWrapper g, Panel minigamePanel, Timer minigameTimer, uint minigameTime)
{
2019-09-27 08:59:21 +02:00
g.DrawRectangle(new Rect(player, new Vector2(10, 10), true), Color.Green);
if (lazorTime >= 0 && lazorTime <= 80)
{
2019-09-26 22:24:45 +02:00
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++)
2019-09-27 08:59:21 +02:00
g.DrawRectangle(new Rect(platforms[i], new Vector2(100, 10), true), Color.White);
}
2019-09-14 14:00:28 +02:00
}
}