You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
275 lines
12 KiB
275 lines
12 KiB
using Microsoft.Xna.Framework;
|
|
using Microsoft.Xna.Framework.Graphics;
|
|
using Microsoft.Xna.Framework.Input;
|
|
using System.Collections.Generic;
|
|
using System;
|
|
|
|
namespace Asteroids;
|
|
|
|
public class Scenes
|
|
{
|
|
public int Scene;
|
|
private gameui GU;
|
|
private SpriteBatch _spriteBatch;
|
|
private Game1 Game;
|
|
private List<Button> Buttons;
|
|
public bool wait;
|
|
private bool mwait;
|
|
private RenderTarget2D blackborder;
|
|
public Scenes(Game1 Game, SpriteBatch _spriteBatch)
|
|
{
|
|
GU = GU = new gameui(Game.Content.Load<Texture2D>("background"), Game.PL);
|
|
this._spriteBatch = _spriteBatch;
|
|
this.Game = Game;
|
|
Buttons = new List<Button>();
|
|
blackborder = new RenderTarget2D(_spriteBatch.GraphicsDevice, (int)vars.ScreenSize.X, (int)vars.ScreenSize.Y);
|
|
Rectangle[] box = new Rectangle[]{
|
|
new Rectangle(0, 0, (int)vars.ScreenSize.X, vars.PlayArea.Y),
|
|
new Rectangle(0, 0, vars.PlayArea.X, (int)vars.ScreenSize.Y),
|
|
new Rectangle(0, vars.PlayArea.Bottom, (int)vars.ScreenSize.X, (int)vars.ScreenSize.Y-vars.PlayArea.Bottom),
|
|
new Rectangle(vars.PlayArea.Right, 0, (int)vars.ScreenSize.X-vars.PlayArea.Right, (int)vars.ScreenSize.Y),
|
|
};
|
|
_spriteBatch.GraphicsDevice.SetRenderTarget(blackborder);
|
|
_spriteBatch.GraphicsDevice.Clear(Color.Transparent);
|
|
_spriteBatch.Begin();
|
|
foreach(var item in box)
|
|
{
|
|
_spriteBatch.Draw(vars.ThePixel, item, null, Color.Black);
|
|
}
|
|
_spriteBatch.End();
|
|
_spriteBatch.GraphicsDevice.SetRenderTarget(null);
|
|
initscenes();
|
|
}
|
|
public void draw(GameTime gameTime)
|
|
{
|
|
switch (Scene)
|
|
{
|
|
case 0:
|
|
U0();
|
|
S0();
|
|
break;
|
|
case 1:
|
|
U1(gameTime);
|
|
S1(gameTime);
|
|
break;
|
|
case 2:
|
|
U2();
|
|
S2();
|
|
break;
|
|
default:
|
|
Scene = 0;
|
|
break;
|
|
}
|
|
}
|
|
public void initscenes()
|
|
{
|
|
//S0
|
|
Buttons.Add(new Button(0, new Rectangle((int)vars.ScreenSize.X / 2 - 250, 200, 500, 150), Color.Gray, Color.DarkGray, 0, "Start"));
|
|
Buttons.Add(new Button(0, new Rectangle((int)vars.ScreenSize.X / 2 - 250, 400, 500, 150), Color.Gray, Color.DarkGray, 1, "Options"));
|
|
Buttons.Add(new Button(0, new Rectangle((int)vars.ScreenSize.X / 2 - 250, 600, 500, 150), Color.Gray, Color.DarkGray, 2, "Exit"));
|
|
//S2
|
|
Buttons.Add(new Button(2, new Rectangle((int)vars.PlayArea.X + 20, vars.PlayArea.Y + 100, vars.PlayArea.Width - 40, 150), Color.Gray, Color.DarkGray, 3, "Continue"));
|
|
Buttons.Add(new Button(2, new Rectangle((int)vars.PlayArea.X + 20, vars.PlayArea.Y + 300, vars.PlayArea.Width - 40, 150), Color.Gray, Color.DarkGray, 4, "Options"));
|
|
Buttons.Add(new Button(2, new Rectangle((int)vars.PlayArea.X + 20, vars.PlayArea.Y + 500, vars.PlayArea.Width - 40, 150), Color.Gray, Color.DarkGray, 5, "Exit to menu"));
|
|
}
|
|
public void S0()
|
|
{
|
|
Game.GraphicsDevice.Clear(Color.Black);
|
|
_spriteBatch.Begin();
|
|
_spriteBatch.DrawString(vars.Font, "Asteroids", new Vector2(vars.ScreenSize.X / 2 - vars.Font.MeasureString("Asteroids").X / 2, 40), Color.White);
|
|
foreach (var item in Buttons)
|
|
{
|
|
if (item.Key == 0)
|
|
{
|
|
item.draw(_spriteBatch);
|
|
}
|
|
}
|
|
_spriteBatch.End();
|
|
}
|
|
public void U0()
|
|
{
|
|
if(Mouse.GetState().LeftButton == ButtonState.Released)
|
|
{
|
|
mwait = false;
|
|
}
|
|
if(mwait)
|
|
{
|
|
return;
|
|
}
|
|
foreach (var item in Buttons)
|
|
{
|
|
if (item.Key == 0)
|
|
{
|
|
item.Update();
|
|
if (item.clicked)
|
|
{
|
|
switch (item.id)
|
|
{
|
|
case 0:
|
|
Scene = 1;
|
|
break;
|
|
case 1:
|
|
Scene = 4;
|
|
break;
|
|
case 2:
|
|
Game.Exit();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
public void S1(GameTime gameTime)
|
|
{
|
|
Game.GraphicsDevice.Clear(Color.Black);
|
|
_spriteBatch.Begin();
|
|
GU.draw(_spriteBatch);
|
|
Game.PL.Draw(_spriteBatch, gameTime);
|
|
Game.AS.Draw(_spriteBatch, gameTime);
|
|
_spriteBatch.Draw(blackborder, Vector2.Zero, null, Color.White);
|
|
GU.draw(_spriteBatch);
|
|
_spriteBatch.End();
|
|
}
|
|
public void U1(GameTime gameTime)
|
|
{
|
|
Game.PL.input(gameTime);
|
|
Rectangle[] boxes = new Rectangle[]{
|
|
vars.PlayArea,
|
|
};
|
|
Game.PL.Collision(boxes);
|
|
Game.AS.Update(_spriteBatch);
|
|
}
|
|
public void S2()
|
|
{
|
|
Game.GraphicsDevice.Clear(Color.Black);
|
|
_spriteBatch.Begin();
|
|
GU.draw(_spriteBatch);
|
|
_spriteBatch.Draw(vars.ThePixel, vars.PlayArea, null, new Color(20, 20, 20));
|
|
_spriteBatch.DrawString(vars.Font, "Pause", new Vector2(vars.PlayArea.X + vars.PlayArea.Width / 2 - vars.Font.MeasureString("Pause").X / 2, vars.PlayArea.Y + 20), Color.White);
|
|
foreach (var item in Buttons)
|
|
{
|
|
if (item.Key == 2)
|
|
{
|
|
item.draw(_spriteBatch);
|
|
}
|
|
}
|
|
_spriteBatch.Draw(blackborder, Vector2.Zero, null, Color.White);
|
|
GU.draw(_spriteBatch);
|
|
_spriteBatch.End();
|
|
}
|
|
public void U2()
|
|
{
|
|
if(Keyboard.GetState().IsKeyDown(Keys.Escape) && wait)
|
|
{
|
|
vars.Scens.Scene = 1;
|
|
Game.PL.waitb = false;
|
|
}
|
|
if(Keyboard.GetState().IsKeyUp(Keys.Escape)){wait = true;}
|
|
foreach (var item in Buttons)
|
|
{
|
|
if (item.Key == 2)
|
|
{
|
|
item.Update();
|
|
if (item.clicked)
|
|
{
|
|
switch (item.id)
|
|
{
|
|
case 3:
|
|
Scene = 1;
|
|
break;
|
|
case 4:
|
|
Scene = 3;
|
|
break;
|
|
case 5:
|
|
Scene = 0;
|
|
mwait = true;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
public class gameui
|
|
{
|
|
public Texture2D Background;
|
|
private float bgY;
|
|
private Player PL;
|
|
private int layer;
|
|
public gameui(Texture2D bg, Player PL)
|
|
{
|
|
this.Background = bg;
|
|
this.PL = PL;
|
|
bgY = vars.PlayArea.Y;
|
|
}
|
|
public void draw(SpriteBatch _spriteBatch)
|
|
{
|
|
//Neaded variables
|
|
int dimnes = 30;
|
|
string[] pows = new string[PL.Ups.Count];
|
|
for (int i = 0; i < pows.Length; i++)
|
|
{
|
|
pows[i] = PL.Ups[i].TimeLeft.ToString();
|
|
}
|
|
bgY++;
|
|
if (bgY >= vars.PlayArea.Bottom)
|
|
{
|
|
bgY = vars.PlayArea.Y;
|
|
}
|
|
//the boxes
|
|
if(layer == 0)
|
|
{
|
|
_spriteBatch.Draw(Background, new Rectangle(vars.PlayArea.X, (int)bgY, vars.PlayArea.Width, vars.PlayArea.Height), null, Color.White, 0f, Vector2.Zero, SpriteEffects.None, 0);
|
|
_spriteBatch.Draw(Background, new Rectangle(vars.PlayArea.X, (int)bgY - vars.PlayArea.Height, vars.PlayArea.Width, vars.PlayArea.Height), null, Color.White, 0f, Vector2.Zero, SpriteEffects.None, 0);
|
|
layer++;
|
|
return;
|
|
}
|
|
_spriteBatch.Draw(vars.ThePixel, new Rectangle(50, 50, vars.PlayArea.X - 100, (int)vars.ScreenSize.Y - 100), null, new Color(dimnes, dimnes, dimnes));
|
|
Rectangle rightbox = new Rectangle(vars.PlayArea.Right + 50, 50, (int)vars.ScreenSize.X - vars.PlayArea.Right - 100, (int)vars.ScreenSize.Y - 100);
|
|
_spriteBatch.Draw(vars.ThePixel, rightbox, null, new Color(dimnes, dimnes, dimnes));
|
|
//all the powerup things
|
|
_spriteBatch.DrawString(vars.Font, "Power Up Times", new Vector2(100, 60), Color.RoyalBlue, 0f, Vector2.Zero, 1f, SpriteEffects.None, 0f);
|
|
for (int i = 0; i < pows.Length; i++)
|
|
{
|
|
_spriteBatch.DrawString(vars.Font, pows[i], new Vector2(120, 130 + 50 * i), Color.RoyalBlue, 0f, Vector2.Zero, 0.5f, SpriteEffects.None, 0f);
|
|
}
|
|
//Points text
|
|
_spriteBatch.DrawString(vars.Font, "Points", new Vector2(vars.PlayArea.Right + 100, 60), Color.RoyalBlue);
|
|
_spriteBatch.Draw(vars.ThePixel, new Rectangle(vars.PlayArea.Right + 100, 130, (int)vars.ScreenSize.X - vars.PlayArea.Right - 200, 70), null, Color.Black);
|
|
_spriteBatch.DrawString(vars.Font, vars.Points.ToString(), new Vector2(vars.PlayArea.Right + 110, 130), Color.RoyalBlue);
|
|
//health Bar
|
|
int wid = (int)vars.ScreenSize.X - vars.PlayArea.Right - 220;
|
|
int inp = (int)(((float)PL.Health / (float)PL.maxHP) * wid);
|
|
_spriteBatch.DrawString(vars.Font, "Health: " + PL.Health, new Vector2(vars.PlayArea.Right + 100, 250), Color.RoyalBlue);
|
|
_spriteBatch.Draw(vars.ThePixel, new Rectangle(vars.PlayArea.Right + 100, 320, (int)vars.ScreenSize.X - vars.PlayArea.Right - 200, 100), null, Color.Black);
|
|
_spriteBatch.Draw(vars.ThePixel, new Rectangle(vars.PlayArea.Right + 110, 330, wid, 80), null, Color.Red);
|
|
_spriteBatch.Draw(vars.ThePixel, new Rectangle(vars.PlayArea.Right + 110, 330, inp, 80), null, Color.Green);
|
|
//boost bar
|
|
inp = (int)(((float)PL.boost / (float)PL.maxboost) * wid);
|
|
_spriteBatch.DrawString(vars.Font, "Boost: " + MathF.Round(PL.boost), new Vector2(vars.PlayArea.Right + 100, 460), Color.RoyalBlue);
|
|
_spriteBatch.Draw(vars.ThePixel, new Rectangle(vars.PlayArea.Right + 100, 530, (int)vars.ScreenSize.X - vars.PlayArea.Right - 200, 100), null, Color.Black);
|
|
_spriteBatch.Draw(vars.ThePixel, new Rectangle(vars.PlayArea.Right + 110, 540, wid, 80), null, new Color(60, 60, 60));
|
|
_spriteBatch.Draw(vars.ThePixel, new Rectangle(vars.PlayArea.Right + 110, 540, inp, 80), null, Color.SkyBlue);
|
|
//music backboard
|
|
Rectangle musice = new Rectangle(rightbox.X+25, 655, rightbox.Width-50, rightbox.Bottom-680);
|
|
_spriteBatch.Draw(vars.ThePixel, musice, null , new Color(dimnes + 30, dimnes + 30, dimnes + 30));
|
|
|
|
//musicbar
|
|
int max = musice.Width-40;
|
|
int widt = (int)((AudioEn.playedtime.TotalSeconds/AudioEn.songtime.TotalSeconds)*max);
|
|
_spriteBatch.Draw(vars.ThePixel, new Rectangle(musice.X+10, musice.Bottom-120, musice.Width-20, 110), null, Color.Black);
|
|
_spriteBatch.Draw(vars.ThePixel, new Rectangle(musice.X+20, musice.Bottom-110, musice.Width-40, 90), null, Color.DarkGray);
|
|
_spriteBatch.Draw(vars.ThePixel, new Rectangle(musice.X+20, musice.Bottom-110, widt, 90), null, Color.Green);
|
|
|
|
//music text
|
|
_spriteBatch.DrawString(vars.Font, "Music", new Vector2(musice.X + musice.Width/2 - vars.Font.MeasureString("Music").X/2, musice.Y+25), Color.RoyalBlue);
|
|
_spriteBatch.DrawString(vars.Font, "Current Nr: " + AudioEn.cursong, new Vector2(musice.Center.X - vars.Font.MeasureString("Current Nr: " + AudioEn.cursong).X/2, musice.Center.Y - vars.Font.MeasureString("Current Nr: " + AudioEn.cursong).Y/2), Color.RoyalBlue);
|
|
string time = AudioEn.playedtime.ToString().Remove(0, 3).Remove(5) + " / " + AudioEn.songtime.ToString().Remove(0, 3).Remove(5);
|
|
_spriteBatch.DrawString(vars.Font, time, new Vector2(musice.Center.X - vars.Font.MeasureString(time).X/2, musice.Bottom-vars.Font.MeasureString(time).Y-25), Color.RoyalBlue);
|
|
layer = 0;
|
|
}
|
|
} |