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
{
2019-09-15 21:31:36 +02:00
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 ;
2019-09-15 21:31:36 +02:00
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 ;
2019-09-26 20:44:45 +02:00
public void gameTick ( GraphicsWrapper g , Panel minigamePanel , Timer minigameTimer , uint minigameTime )
2019-09-14 14:00:28 +02:00
{
try
{
Random random = new Random ( ) ;
2019-09-26 20:44:45 +02:00
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 ) ;
2019-09-26 20:44:45 +02:00
if ( lazorTime < = - 2 )
2019-09-15 16:21:56 +02:00
{
2019-09-26 20:44:45 +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
{
2019-09-26 20:44:45 +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 20:44:45 +02:00
}
2019-09-26 22:24:45 +02:00
player . Y - = speed ;
2019-09-26 20:44:45 +02:00
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 ;
2019-09-26 20:44:45 +02:00
platforms [ i ] . X = rnd . Next ( minigamePanel . Width ) ;
2019-09-15 16:21:56 +02:00
}
2019-09-26 20:44:45 +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 ) ;
2019-09-26 20:44:45 +02:00
}
else
{
movementFactor = 5 ;
playerV . X * = 0.9 ;
2019-09-26 22:24:45 +02:00
playerV . Y - = 1 ;
2019-09-26 20:44:45 +02:00
}
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 ;
2019-09-26 20:44:45 +02:00
jmpj - - ;
2019-09-14 14:00:28 +02:00
}
2019-09-26 20:44:45 +02:00
}
else
{
if ( wasOnPlatform )
jmpj = 10 ;
2019-09-14 14:00:28 +02:00
else
2019-09-26 20:44:45 +02:00
jmpj = 0 ;
2019-09-14 14:00:28 +02:00
}
2019-09-26 20:44:45 +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 )
2019-09-26 20:44:45 +02:00
player . Y + = playerV . Y ;
else
2019-09-26 22:24:45 +02:00
for ( int i = 0 ; i < ( - playerV . Y ) / 2 ; i + + )
2019-09-26 20:44:45 +02:00
{
if ( onPlatform )
break ;
2019-09-26 22:24:45 +02:00
player . Y - = 2 ;
2019-09-26 20:44:45 +02:00
}
2019-09-26 22:24:45 +02:00
if ( player . Y < 0 )
2019-09-26 20:44:45 +02:00
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 ( ) ) ; }
}
2019-09-26 20:44:45 +02:00
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 ) ;
2019-10-07 17:26:55 +02:00
if ( 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
}
}
2019-09-26 20:44:45 +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 ) ;
2019-09-26 20:44:45 +02:00
if ( lazorTime > = 0 & & lazorTime < = 80 )
{
2019-09-26 22:24:45 +02:00
float m = ( float ) Misc . map ( 0 , 80 , 0 , minigamePanel . Height , lazorTime ) ;
2019-10-06 17:13:10 +02:00
Vector2 mp = new Vector2 ( lazor , m ) ;
g . DrawLine ( mp , new Vector2 ( lazor , 0 ) , Color . DarkGray , 2 ) ;
g . DrawLine ( new Vector2 ( lazor , minigamePanel . Height ) , mp , Color . Red , 2 ) ;
2019-09-26 20:44:45 +02:00
}
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-26 20:44:45 +02:00
}
2019-09-14 14:00:28 +02:00
}
}