2019-08-01 22:42:35 +02:00
using Base ;
using System ;
using System.Collections.Generic ;
using System.Drawing ;
using System.Globalization ;
using System.IO ;
using System.Linq ;
using System.Text ;
using System.Threading.Tasks ;
using System.Windows.Forms ;
namespace LaptopSimulator2015.Levels
{
class Lvl3 : Level
{
2019-09-15 21:31:36 +02:00
public string name
2019-08-01 22:42:35 +02:00
{
get {
switch ( CultureInfo . CurrentUICulture . Name . Split ( '-' ) [ 0 ] )
{
case "de" :
return "NVidia Geforce 630M Installationsassistent (gratis)" ;
default :
return "NVidia Geforce 630M Installer (free)" ;
}
}
}
public string installerText
{
get {
switch ( CultureInfo . CurrentUICulture . Name . Split ( '-' ) [ 0 ] )
{
case "de" :
return "Thx 4 installiere gratis grapicz upgr8, ich hoffen es gefallen dir (bitte bewerten 5 Sterne und abonniere)!\r\niN todayz installer ich installiere u frei NVidia Geforec 630M\r\n\r\nTagz 4 Googl:\r\nftx fre\r\ngtx\r\nRTX 2080 ti kostenlose\r\ngta 6 frei\r\nWindows Office crack frei\r\ncrack\r\nhack" ;
default :
return "Thx 4 install free grapicz upgr8, I hope u like it (plz rate 5 starz and subscrib)!\r\niN todayz installer i install u free NVidia Geforec 630M\r\n\r\ntagz 4 googl:\r\nftx fre\r\ngtx\r\nRTX 2080 ti free\r\ngta 6 free\r\nwindows office crack free\r\ncrack\r\nhack" ;
}
}
}
static Image _installer ;
2019-09-15 21:31:36 +02:00
public Image icon
2019-08-01 22:42:35 +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 = > 3 ;
2019-08-01 22:42:35 +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-09-26 20:44:45 +02:00
2019-08-01 22:42:35 +02:00
Vector2 center ;
Vector2 cannon ;
Vector2 targ ;
2019-09-15 16:21:56 +02:00
List < Vector2 > targets ;
double playerRot ;
double cannonL ;
double power ;
bool firing ;
uint lastTarget ;
2019-09-26 20:44:45 +02:00
public void gameTick ( GraphicsWrapper g , Panel minigamePanel , Timer minigameTimer , uint minigameTime )
2019-08-01 22:42:35 +02:00
{
try
{
2019-09-26 20:44:45 +02:00
Random random = new Random ( ) ;
if ( minigameTime - lastTarget > 90 + 40 / ( minigameTime / 100 + 1 ) )
2019-08-01 22:42:35 +02:00
{
2019-09-26 20:44:45 +02:00
targets . Add ( new Vector2 ( random . Next ( minigamePanel . Height + 25 ) + ( minigamePanel . Width - minigamePanel . Height - 50 ) / 2 , random . Next ( minigamePanel . Height ) ) ) ;
targets [ targets . Count - 1 ] . Tag = ( double ) 130 ;
lastTarget = minigameTime ;
2019-08-01 22:42:35 +02:00
}
2019-09-26 20:44:45 +02:00
cannon = new Vector2 ( center ) ;
cannon . moveInDirection ( Misc . deg2rad ( playerRot ) , 20 ) ;
if ( Input . Action )
2019-08-01 22:42:35 +02:00
{
2019-09-26 20:44:45 +02:00
firing = true ;
power = Math . Min ( power + 5 , 100 ) ;
2019-08-01 22:42:35 +02:00
}
else
2019-09-26 20:44:45 +02:00
if ( firing )
2019-08-01 22:42:35 +02:00
{
2019-09-26 20:44:45 +02:00
firing = false ;
List < Vector2 > targetsToRemove = new List < Vector2 > ( ) ;
2019-08-01 22:42:35 +02:00
for ( int i = 0 ; i < targets . Count ; i + + )
{
2019-09-26 20:44:45 +02:00
if ( targets [ i ] . distanceFromSquared ( targ ) < = Math . Pow ( power + 10 , 2 ) )
targetsToRemove . Add ( targets [ i ] ) ;
2019-08-01 22:42:35 +02:00
}
2019-09-26 20:44:45 +02:00
targets = targets . Except ( targetsToRemove . Distinct ( ) ) . Distinct ( ) . ToList ( ) ;
g . g . FillRectangle ( new SolidBrush ( Color . White ) , new Rectangle ( Misc . d2i ( targ . X - power / 2 ) , Misc . d2i ( targ . Y - power / 2 ) , Misc . d2i ( power ) , Misc . d2i ( power ) ) ) ;
power = 10 ;
}
targ = new Vector2 ( center ) ;
targ . Tag = playerRot ;
if ( Input . Up )
cannonL + = 100 / power ;
if ( Input . Down )
cannonL - = 100 / power ;
if ( Input . Right )
playerRot + = 80 / power ;
if ( Input . Left )
playerRot - = 80 / power ;
while ( playerRot > 360 )
playerRot - = 360 ;
while ( playerRot < 0 )
playerRot + = 360 ;
cannonL = Math . Max ( Math . Min ( cannonL , minigamePanel . Height / 2 ) , 22.5f ) ;
targ . moveInDirection ( Misc . deg2rad ( ( double ) targ . Tag ) , cannonL ) ;
for ( int i = 0 ; i < targets . Count ; i + + )
{
targets [ i ] . Tag = ( ( double ) targets [ i ] . Tag ) - 1 ;
if ( ( double ) targets [ i ] . Tag < = 0 )
throw new Exception ( "The VM was shut down to prevent damage to your Machine." , new Exception ( "0717750f-3508-4bc2-841e-f3b077c676fe" ) ) ;
2019-08-01 22:42:35 +02:00
}
}
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-08-01 22:42:35 +02:00
}
2019-09-26 20:44:45 +02:00
public void initGame ( Panel minigamePanel , Timer minigameTimer )
2019-08-01 22:42:35 +02:00
{
center = new Vector2 ( minigamePanel . Width / 2 , minigamePanel . Height / 2 ) ;
2019-09-15 16:21:56 +02:00
cannon = new Vector2 ( center ) ;
targ = new Vector2 ( center ) ;
2019-08-01 22:42:35 +02:00
targets = new List < Vector2 > ( ) ;
playerRot = 0 ;
cannonL = 30 ;
power = 10 ;
firing = false ;
lastTarget = 0 ;
}
2019-09-26 20:44:45 +02:00
public void draw ( GraphicsWrapper g , Panel minigamePanel , Timer minigameTimer , uint minigameTime )
{
2019-09-26 22:24:45 +02:00
//g.g.FillRectangle(new SolidBrush(Color.Green), player);
g . DrawRectangle ( new RectangleF ( center . toPointF ( ) , new SizeF ( 10 , 10 ) ) , Color . Green , transform : false ) ;
2019-09-26 20:44:45 +02:00
g . g . DrawLine ( new Pen ( new SolidBrush ( Color . Green ) , 5 ) , center . toPoint ( ) , cannon . toPoint ( ) ) ;
for ( int i = 0 ; i < targets . Count ; i + + )
{
g . g . DrawEllipse ( new Pen ( new SolidBrush ( Color . Red ) , 6 ) , new RectangleF ( Misc . d2f ( targets [ i ] . X - 10 ) , Misc . d2f ( targets [ i ] . Y - 10 ) , 20 , 20 ) ) ;
g . g . DrawEllipse ( new Pen ( new SolidBrush ( Color . White ) , 6 ) , new RectangleF ( Misc . d2f ( targets [ i ] . X - 7 ) , Misc . d2f ( targets [ i ] . Y - 7 ) , 14 , 14 ) ) ;
g . g . FillEllipse ( new SolidBrush ( Color . Red ) , new RectangleF ( Misc . d2f ( targets [ i ] . X - 3 ) , Misc . d2f ( targets [ i ] . Y - 3 ) , 6 , 6 ) ) ;
g . g . DrawLine ( new Pen ( new SolidBrush ( Color . Gray ) , 3 ) , Misc . d2f ( targets [ i ] . X - 13 ) , Misc . d2f ( targets [ i ] . Y - 15 ) , Misc . d2f ( targets [ i ] . X + 13 ) , Misc . d2f ( targets [ i ] . Y - 15 ) ) ;
g . g . DrawLine ( new Pen ( new SolidBrush ( Color . Red ) , 3 ) , Misc . d2f ( targets [ i ] . X - 13 ) , Misc . d2f ( targets [ i ] . Y - 15 ) , Misc . d2f ( targets [ i ] . X + ( ( ( ( double ) targets [ i ] . Tag ) * 0.2 ) - 12.9 ) + 0.1 ) , Misc . d2f ( targets [ i ] . Y - 15 ) ) ;
}
if ( firing )
{
2019-09-26 22:24:45 +02:00
//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 ) ;
2019-09-26 20:44:45 +02:00
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
{
2019-09-26 22:24:45 +02:00
//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 ) ;
2019-09-26 20:44:45 +02:00
}
}
2019-08-01 22:42:35 +02:00
}
}