Exemple #1
0
    /*[Header("Ship Components")]
     * [SerializeField]
     * private SpriteRenderer spriteRenderer;
     * public SpriteRenderer SpriteRenderer
     * {
     *  get; protected set;
     * }*/



    // Start is called before the first frame update
    void Start()
    {
        // FuelBar.SetMaxFuel(ShipStats.InitialFuel);
        // PowerBank.SetMaxPower(ShipStats.InitialPower);
        //IntegrityBar.SetMaxIntegrity(ShipStats.InitialIntegrity);
        //FuelBar.SetFuel(ShipStats.InitialFuel);
        //DescentSpeedDisplay.SetInitialDescentSpeed(ShipStats.InitialDescentSpeed)
        IntegrityText.SetMaxIntegrity(ShipStats.InitialIntegrity);
        PowerText.SetMaxPower(ShipStats.InitialPower);
        FuelText.SetMaxFuel(ShipStats.InitialFuel);
    }
        protected override void Draw(GameTime gameTime)
        {
            //Window data
            int width = graphics.GraphicsDevice.Viewport.Width;
            int height = graphics.GraphicsDevice.Viewport.Height;
            // Begin drawing sprites
            spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend);
            //Draw bg
            if (spellcard != null)
                for (int i = 0; i < spellcard.backgrounds.Count; i++) spellcard.backgrounds[i].draw();
            else
                for (int i = 0; i < level.backgrounds.Length; i++) level.backgrounds[i].draw();
            //Move and draw player bullets
            for (int i = 0; i < pBullets.Count; i++)
            {
                Bullet b = pBullets[i];
                if (!b.update()) { pBullets.RemoveAt(i); i--; continue; }
                b.draw(0.4f);
            }
            //Move and draw the player
            Player.update();
            Player.draw(0.5f);

            //Move and draw enemies
            for (int i = 0; i < enemies.Count; i++)
            {
                Enemy e = enemies[i];
                if (!e.update() || e.collide()) { enemies.RemoveAt(i); i--; continue; }
                e.draw(0.3f);
            }
            //Draw boss
            if (boss != null)
            {
                boss.collide(); boss.draw(0.3f);
            }
            //Switch blend state for color blending
            spriteBatch.End();
            spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.NonPremultiplied);
            //Move and draw enemy bullets
            for (int i = 0; i < eBullets.Count; i++)
            {
                Bullet b = eBullets[i];
                if (!b.update() || b.collide()) { eBullets.RemoveAt(i); i--; continue; }
                b.draw(0.2f);
            }
            //Switch back
            spriteBatch.End();
            spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend);
            //Move and draw items
            for (int i = 0; i < items.Count; i++)
            {
                Item x = items[i];
                if (!x.update()) { items.RemoveAt(i); i--; continue; }
                x.draw(0.1f);
            }
            //Move and draw score texts
            for (int i = 0; i < scoreTexts.Count; i++)
            {
                ScoreText t = scoreTexts[i];
                if (!t.update()) { scoreTexts.RemoveAt(i); i--; continue; }
                spriteBatch.DrawString(font, t.amount.ToString(), t.pos, t.color);
            }
            if (powerText != null)
            {
                spriteBatch.Draw(powerText.text, powerText.pos, powerText.text.Bounds, Color.White, 0.0f,
                       Vector2.Zero, 1.0f, SpriteEffects.None, 0.1f);
                if (!powerText.update()) powerText = null;
            }
            //Update and draw orbs
            for (int i = 0; i < orbs.Count; i++)
            {
                Orb b = orbs[i];
                if (!b.update()) { orbs.RemoveAt(i); i--;
                explosions.Add(new Explosion("explode", b.pos, 5.0f, 1.0f, 1.0f, Color.White));
                    sounds["enemyshoot1"].play(); continue;
                }
                b.draw(0.1f);
            }
            //Switch blend state for color blending
            spriteBatch.End();
            spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.NonPremultiplied);
            //Update and draw explosions
            for (int i = 0; i < explosions.Count; i++)
            {
                Explosion e = explosions[i];
                if (!e.update()) { explosions.RemoveAt(i); i--; continue; }
                e.draw(0.05f);
            }
            //Switch back
            spriteBatch.End();
            spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend);

            //Update spellcards
            if (spellcard != null && !spellcard.update()) spellcard = null;
            if (bomb != null && !bomb.update()) bomb = null;

            //Draw conversation
            if (conversation != null) if (!conversation.show()) conversation = null;

            //Draw foreground
            drawForeground();

            //Draw other text
            spriteBatch.DrawString(fontfps, fps.ToString(), new Vector2(0,450), Color.White);
            if (fullPowerTime >= 0)
            {
                fullPowerTime += dt;
                spriteBatch.DrawString(fontfps, "Max Power Mode!!",
                    new Vector2(MathHelper.Clamp((float)fullPowerTime * 500 - 400, -1000, 100), 100.0f),
                    Color.Red);
                if (fullPowerTime >= 3) fullPowerTime = -1;
            }

            //End drawing sprites
            spriteBatch.End();
            //base.Draw(gameTime);
        }
 public override bool update()
 {
     if (autoCollect)
     {
         //Auto collect item
         radians = MathHelper.ToRadians(Player.getAngle(pos) - 90.0f);
         pos += new Vector2((float)Math.Cos(radians), (float)Math.Sin(radians)) * 300.0f *(float)dt;
     }
     else
     {
         //Cause the item to fall
         speed += (float)dt;
         if (speed >= 1.5f) speed = 1.5f;
         pos.Y += speed;
     }
     //Draw arrow if item above screen
     if (pos.Y < 0)
     {
         Texture2D arrowImg = textures[item + "arrow"];
         spriteBatch.Draw(arrowImg, new Vector2(pos.X - arrowImg.Width / 2, 0), Color.White);
     }
     //Return false if item off-screen
     if (pos.Y > gameDim.Y + 10)
         return false;
     //Check for item collisions with player (but only if the player is not dead)
     if (Math.Abs(pos.X - Player.pos.X) < Player.img.dim.X - 10 &&
         Math.Abs(pos.Y - Player.pos.Y) < Player.img.dim.Y - 20 &&
         Player.status != PlayerStatus.Dead)
     //Destroy item upon collision with player and create text
     {
         sounds["item"].play();
         switch(item)
         {
             case "itempower":
                 scoreTexts.Add(new ScoreText(10, pos, Color.White));
                 power++;
                 if (Player.powerUp())
                 {
                     powerText = new PowerText(textures["powerup"], pos, Color.White);
                     sounds["powersound"].play();
                 }
                 break;
             case "itemhighpower":
                 scoreTexts.Add(new ScoreText(100, pos, Color.White));
                 power += 10;
                 if (Player.powerUp())
                 {
                     powerText = new PowerText(textures["powerup"], pos, Color.White);
                     sounds["powersound"].play();
                 }
                 break;
             case "itemfullpower":
                 scoreTexts.Add(new ScoreText(1000, pos, Color.White));
                 power = 128;
                 if (Player.powerUp())
                 {
                     powerText = new PowerText(textures["powerup"], pos, Color.White);
                     sounds["powersound"].play();
                 }
                 break;
             case "itembomb": bombs++; break;
             case "itemplayer": players++; sounds["1up"].play(); break;
             case "itempoint":
                 point++;
                 if (Player.pos.Y < 150) scoreTexts.Add(new ScoreText(100000, pos, Color.Yellow));
                 else scoreTexts.Add(new ScoreText(100000 - (int)Player.pos.Y * 100, pos, Color.White));
             break;
             case "itemstar": scoreTexts.Add(new ScoreText(1000+graze*10, pos, Color.White)); break;
         }
         //Return false to indicate item destruction
         return false;
     }
     return true;
 }