private void SpawnBalls(int amount) { // cria uma quantidade de bolas de acordo com a dificuldade // e aplica uma variação aleatória na direção horizontal dela for (int i = 0; i < amount; i++) { var ball = new BallObject(Ball.Position, Ball.Radius, Ball.Sprite, Color.Aqua.ToVector3(), new Vector2(Ball.Velocity.X + ((float)Util.Random.NextDouble() * 2f), Ball.Velocity.Y)) { Stuck = false }; Balls.Add(ball); } }
//Método responsável por inicializar todos os recursos utilizados no jogo public void Init() { // carregar sons var bgm = ResourceManager.LoadSound("resources/bgm.mp3", "bgm", true); SoundEngine.Instance.PlaySound(bgm); ResourceManager.LoadSound("resources/bleep.wav", "bleepPaddle"); ResourceManager.LoadSound("resources/powerup.wav", "powerup"); ResourceManager.LoadSound("resources/solid.wav", "solid"); ResourceManager.LoadSound("resources/bleep.mp3", "bleepBrick"); //carregar shaders ResourceManager.LoadShader("shaders/sprite.vert", "shaders/sprite.frag", "sprite"); ResourceManager.LoadShader("shaders/particle.vert", "shaders/particle.frag", "particle"); ResourceManager.LoadShader("shaders/postProcessing.vert", "shaders/postProcessing.frag", "postProcessing"); //instanciar a matriz de projeção ortogonal var projection = Matrix4.CreateOrthographicOffCenter(0, Width, Height, 0, -1, 1); // instanciar o renderizador padrão de texturas var spriteshader = ResourceManager.GetShader("sprite"); var particleshader = ResourceManager.GetShader("particle"); spriteshader.SetInteger("image", 0, true); spriteshader.SetMatrix4("projection", projection, true); particleshader.SetInteger("sprite", 0, true); particleshader.SetMatrix4("projection", projection, true); Renderer = new Renderer2D(spriteshader); // carregar as texturas do jogo ResourceManager.LoadTexture("resources/ball.png", "ball"); ResourceManager.LoadTexture("resources/paddle.png", "paddle"); ResourceManager.LoadTexture("resources/block.png", "block", false); ResourceManager.LoadTexture("resources/block_solid.png", "block_solid", false); ResourceManager.LoadTexture("resources/background.jpg", "breakout_bg", false); ResourceManager.LoadTexture("resources/particle.png", "particle"); ResourceManager.LoadTexture("resources/speed.png", "speed"); ResourceManager.LoadTexture("resources/meteor.png", "comet"); ResourceManager.LoadTexture("resources/width.png", "padIncrease"); ResourceManager.LoadTexture("resources/shrink.png", "padDecrease"); ResourceManager.LoadTexture("resources/multiply.png", "multiply"); ResourceManager.LoadTexture("resources/sticky.png", "sticky"); ResourceManager.LoadTexture("resources/confuse.png", "confuse"); ResourceManager.LoadTexture("resources/skull.png", "chaos"); //carregar os níveis disponíveis no jogo GameLevel one = new GameLevel(); one.Load("levels/one.lvl", Width, Height / 2); GameLevel two = new GameLevel(); two.Load("levels/two.lvl", Width, Height / 2); GameLevel three = new GameLevel(); three.Load("levels/three.lvl", Width, Height / 2); GameLevel four = new GameLevel(); four.Load("levels/four.lvl", Width, Height / 2); GameLevel five = new GameLevel(); five.Load("levels/five.lvl", Width, Height / 2); GameLevel six = new GameLevel(); six.Load("levels/six.lvl", Width, Height / 2); Levels.Add(one); Levels.Add(two); Levels.Add(three); Levels.Add(four); Levels.Add(five); Levels.Add(six); Level = 4; // instanciar jogador const float offset = 84f; Vector2 playerStartPos = new Vector2((Width / 2) - (PLAYER_SIZE.X / 2), Height - PLAYER_SIZE.Y - offset); Player = new GameObject(playerStartPos, PLAYER_SIZE, ResourceManager.GetTex("paddle")); // instanciar bola Vector2 ballStartPos = playerStartPos + new Vector2((Player.Size.X / 2f) - BALL_RADIUS, -BALL_RADIUS * 2f); Ball = new BallObject(ballStartPos, BALL_RADIUS, ResourceManager.GetTex("ball"), Color.Pink.ToVector3(), velocity: new Vector2(GetRandomBallSpeed(), Difficulty.BallUpSpeed)); Balls.Add(Ball); // instanciar gerador de partículas para efeito de "rastro" ParticleGenerator = new ParticleGenerator(ResourceManager.GetShader("particle"), ResourceManager.GetTex("particle"), 500); // instanciar classe responsável pelos efeitos de pós-processamento PostProcessor = new PostProcessor(ResourceManager.GetShader("postProcessing"), Width, Height); // iniciar renderizador de texto TextRenderer = new TextRenderer(Width, Height); TextRenderer.Load("fonts/ocraext.TTF", 24); // iniciar overlay para tela de "pause" Overlay = new Texture2D(); Overlay.Generate(Width, Height, IntPtr.Zero); // setar a posição inicial do mouse para o meio da tela var point = PointToScreen(new Point(Width / 2, Height / 2)); Mouse.SetPosition(point.X, point.Y); // estado inicial do jogo deve ser o menu State = GameState.Menu; }