Beispiel #1
0
    IEnumerator shootBullet(shootDir shootingDir)
    {
        isShooting = true;
        yield return(new WaitForFixedUpdate());

        // Calculate the vector of the bullet based on the input direction
        // And the position relative to the player
        float   spawnDisplacement = 1f;
        Vector2 bulletSpawnPos    = new Vector2();
        Vector2 bulletVel         = new Vector2();

        switch (shootingDir)
        {
        case shootDir.up:
            bulletVel      = new Vector2(0f, 1f);
            bulletSpawnPos = new Vector2(0f, spawnDisplacement);
            break;

        case shootDir.down:
            bulletVel      = new Vector2(0f, -1f);
            bulletSpawnPos = new Vector2(0f, -spawnDisplacement);
            break;

        case shootDir.right:
            bulletVel      = new Vector2(1f, 0f);
            bulletSpawnPos = new Vector2(spawnDisplacement, 0f);
            break;

        case shootDir.left:
            bulletVel      = new Vector2(-1f, 0f);
            bulletSpawnPos = new Vector2(-spawnDisplacement, 0f);
            break;
        }

        // TODO: add the players movement to modify the bullet speed

        // Now let's instantiate the bullet
        Vector2    pos       = new Vector2(transform.position.x, transform.position.y);
        GameObject newBullet = Instantiate(bullet, pos + bulletSpawnPos, Quaternion.identity);

        newBullet.GetComponent <Rigidbody2D>().velocity = bulletVel * bulletSpeed;
        newBullet.transform.parent = gameObject.transform;


        // Wait for the player to be able to shoot the next bullet
        yield return(new WaitForSeconds(.1f));

        isShooting = false;
    }
Beispiel #2
0
        public void Update(GameTime gameTime)
        {
            hitBox = new Rectangle(xPos, yPos, Game1.gameSize, Game1.gameSize / 2);

            if (new Rectangle((int)Game1.charPlace.X, (int)Game1.charPlace.Y, Game1.charWidth, Game1.charHeight).Intersects(hitBox) && !Game1.Invincible(gameTime) && isHostile)
            {
                Game1.health -= 1;
                Game1.timer   = 0;
                isShooting    = false;
            }

            switch (direction)
            {
            case "arrowRight":
                shootDirection = shootDir.arrowRight;
                spriteX        = 0;
                spriteY        = 150;
                spriteWidth    = 150;
                spriteHeight   = 30;
                break;

            case "arrowLeft":
                shootDirection = shootDir.arrowLeft;
                spriteX        = 30;
                spriteY        = 0;
                spriteWidth    = 150;
                spriteHeight   = 30;
                break;

            case "arrowUp":
                shootDirection = shootDir.arrowUp;
                spriteX        = 0;
                spriteY        = 0;
                spriteWidth    = 30;
                spriteHeight   = 150;
                break;

            case "arrowDown":
                shootDirection = shootDir.arrowDown;
                spriteX        = 150;
                spriteY        = 30;
                spriteWidth    = 30;
                spriteHeight   = 150;
                break;
            }
            switch (shootDirection)
            {
            //Beroende på vilket håll man skjuter åt så bestämms massa modifiers (för att den skall vara längre än bred), och sedan skjuts pilen iväg tills den kolliderar med något.
            case shootDir.arrowRight:
                spritePlaceModY = 7;
                spriteSizeModH  = 0.5f;
                spritePlaceModX = 0;
                spriteSizeModW  = 1f;
                xPos           += 2;
                if (xPos > Game1.maxX || Collision.isColliding("ArrowRight", xPos, yPos) || startPosX + range * Game1.gameSize <= xPos)
                {
                    shootDirection = shootDir.none;
                    isShooting     = false;
                }
                break;

            case shootDir.arrowLeft:
                spritePlaceModY = 7;
                spriteSizeModH  = 0.5f;
                spritePlaceModX = 0;
                spriteSizeModW  = 1f;
                xPos           -= 2;
                if (xPos < Game1.minX || Collision.isColliding("ArrowLeft", xPos, yPos) || startPosX - range * Game1.gameSize >= xPos)
                {
                    shootDirection = shootDir.none;
                    isShooting     = false;
                }
                break;

            case shootDir.arrowUp:
                spritePlaceModX = 7;
                spriteSizeModW  = 0.5f;
                spritePlaceModY = 0;
                spriteSizeModH  = 1f;
                yPos           -= 2;
                if (yPos < Game1.minY || Collision.isColliding("ArrowUp", xPos, yPos) || startPosY - range * Game1.gameSize >= yPos)
                {
                    shootDirection = shootDir.none;
                    isShooting     = false;
                }
                break;

            case shootDir.arrowDown:
                spritePlaceModX = 7;
                spriteSizeModW  = 0.5f;
                spritePlaceModY = 0;
                spriteSizeModH  = 1f;
                yPos           += 2;
                if (yPos < Game1.minY || Collision.isColliding("ArrowDown", xPos, yPos) || startPosY + range * Game1.gameSize <= yPos)
                {
                    shootDirection = shootDir.none;
                    isShooting     = false;
                }
                break;
            }
        }