Exemplo n.º 1
0
    public static void getCard(string id, ref Game.info userInfo, int slotID, int cardLevel)                    //Temporary. TODO: Check for empty slot to add card in
    {
        userInfo.inventory[slotID].id     = id;                                                                 //Assign "int id" to item in slot
        userInfo.inventory[slotID].level += cardLevel;                                                          //Assign number of card / increment level of card

        /*
         *      VALUE LERP FORMULA:
         *      Assume value varies from 1 -> 10 (x; with x1=1, x2=10)
         *      y1: Starting value
         *      y2: Ending value
         *
         *      FORMULA: y = ((y2 - y1)*(x-1)/(10-1))+y1
         */

        /*
         *      Weapon/Card variables:
         *      TYPE: Card type: 0: Weapon Module; 1: Spell Card; 2: Consumables; 3: Special
         *      POWER: Card Damage / Buff power / Debuff power
         *      SPEED: Projectile travel speed / Spell Channel time / etc
         *      PROJECTILE: Card Projectiles number / size
         *      DELAYMAX: Card delay, decreases every frame, unusuable until reaches 0. Reset when use card
         *      HEATDES: Heat cost
         *      HEATACCELBASE: Heat acceleration, increases by multiplicative increment
         */
        int   baseType = 0, baseProjectileFROM = 0, baseProjectileTO = 0;
        float basePowerFROM = 0, basePowerTO = 0, baseSpeedFROM = 0, baseSpeedTO = 0, baseDelayMaxFROM = 0, baseDelayMaxTO = 0, baseHeatDesFROM = 0, baseHeatDesTO = 0, baseHeatAccelBaseFROM = 0, baseHeatAccelBaseTO = 0;

        switch (id)
        {
        case "cone-stick":                                              // HOLY
            baseType              = 0;
            basePowerFROM         = 3;                                              basePowerTO = 10;
            baseSpeedFROM         = 50;                                             baseSpeedTO = 50;
            baseProjectileFROM    = 1;                                 baseProjectileTO = 5;
            baseDelayMaxFROM      = 18;                                  baseDelayMaxTO = 12;
            baseHeatDesFROM       = 7;                                    baseHeatDesTO = 5;
            baseHeatAccelBaseFROM = 0.1f;                   baseHeatAccelBaseTO = 0.08f;
            break;

        case "laser-once":                                              // Laser beam
            baseType              = 0;
            basePowerFROM         = 8;                                              basePowerTO = 20;
            baseSpeedFROM         = 0;                                              baseSpeedTO = 0;
            baseProjectileFROM    = 1;                                 baseProjectileTO = 3;
            baseDelayMaxFROM      = 30;                                  baseDelayMaxTO = 20;
            baseHeatDesFROM       = 14;                                   baseHeatDesTO = 8;
            baseHeatAccelBaseFROM = 0.05f;                  baseHeatAccelBaseTO = 0.01f;
            break;

        //Enemy weapons
        case "enemy-cone-stick":                                                // Stick-projectile shoot in cone shape (TEMPORARY)
            baseType              = 0;
            basePowerFROM         = 3;                                              basePowerTO = 10;
            baseSpeedFROM         = 20;                                             baseSpeedTO = 20;
            baseProjectileFROM    = 1;                                 baseProjectileTO = 5;
            baseDelayMaxFROM      = 20;                                  baseDelayMaxTO = 10;
            baseHeatDesFROM       = 7;                                    baseHeatDesTO = 5;
            baseHeatAccelBaseFROM = 0.1f;                   baseHeatAccelBaseTO = 0.08f;
            break;

        case "enemy-surround-ball":                                             // Ball-projectile shoot in 180/x direction (surrounding)
            baseType              = 0;
            basePowerFROM         = 3;                                              basePowerTO = 10;
            baseSpeedFROM         = 10;                                             baseSpeedTO = 10;
            baseProjectileFROM    = 1;                                 baseProjectileTO = 5;
            baseDelayMaxFROM      = 15;                                  baseDelayMaxTO = 13;
            baseHeatDesFROM       = 10;                                   baseHeatDesTO = 6;
            baseHeatAccelBaseFROM = 0.25f;                  baseHeatAccelBaseTO = 0.1f;
            break;

        case "enemy-cone-ball-targetPlayer":                                            // Ball-projectile shoot in cone shape - TARGET PLAYER (PLACEHOLDER)
            baseType              = 0;
            basePowerFROM         = 3;                                              basePowerTO = 10;
            baseSpeedFROM         = 5;                                              baseSpeedTO = 5;
            baseProjectileFROM    = 1;                                 baseProjectileTO = 5;
            baseDelayMaxFROM      = 20;                                  baseDelayMaxTO = 10;
            baseHeatDesFROM       = 7;                                    baseHeatDesTO = 5;
            baseHeatAccelBaseFROM = 0.1f;                   baseHeatAccelBaseTO = 0.08f;
            break;

        case "enemy-burst-ball-targetPlayer":                                           // Ball-projectile shoot in burst - TARGET PLAYER (PLACEHOLDER)
            baseType              = 0;
            basePowerFROM         = 3;                                              basePowerTO = 10;
            baseSpeedFROM         = 5;                                              baseSpeedTO = 5;
            baseProjectileFROM    = 1;                                 baseProjectileTO = 5;
            baseDelayMaxFROM      = 20;                                  baseDelayMaxTO = 10;
            baseHeatDesFROM       = 7;                                    baseHeatDesTO = 5;
            baseHeatAccelBaseFROM = 0.1f;                   baseHeatAccelBaseTO = 0.08f;
            break;
        }
        userInfo.inventory[slotID].type          = baseType;
        userInfo.inventory[slotID].projectile    = ((baseProjectileTO - baseProjectileFROM) * (userInfo.inventory[slotID].level - 1) / (10 - 1)) + baseProjectileFROM;
        userInfo.inventory[slotID].power         = ((basePowerTO - basePowerFROM) * (userInfo.inventory[slotID].level - 1) / (10 - 1)) + basePowerFROM;
        userInfo.inventory[slotID].speed         = ((baseSpeedTO - baseSpeedFROM) * (userInfo.inventory[slotID].level - 1) / (10 - 1)) + baseSpeedFROM;
        userInfo.inventory[slotID].delayMax      = ((baseDelayMaxTO - baseDelayMaxFROM) * (userInfo.inventory[slotID].level - 1) / (10 - 1)) + baseDelayMaxFROM;
        userInfo.inventory[slotID].delay         = userInfo.inventory[slotID].delayMax;                 // Non-static
        userInfo.inventory[slotID].heatDes       = ((baseHeatDesTO - baseHeatDesFROM) * (userInfo.inventory[slotID].level - 1) / (10 - 1)) + baseHeatDesFROM;
        userInfo.inventory[slotID].heatAccelBase = ((baseHeatAccelBaseTO - baseHeatAccelBaseFROM) * (userInfo.inventory[slotID].level - 1) / (10 - 1)) + baseHeatAccelBaseFROM;
        userInfo.inventory[slotID].heatAccel     = 1;                                                                                   // Non-static
    }
Exemplo n.º 2
0
    public void useCard(ref Game.info userInfo, int slotID, GameObject user)
    {
        userInfo.heat -= userInfo.inventory[slotID].heatDes * userInfo.inventory[slotID].heatAccel; //Decrease Heat capacity when shot
        userInfo.inventory[slotID].heatAccel += userInfo.inventory[slotID].heatAccelBase;           //Increase Heat Accel when shot
        userInfo.inventory[slotID].delay      = userInfo.inventory[slotID].delayMax;                //Reset delay to Max when shot

        AudioSource audiosource = user.GetComponent <AudioSource>();                                //Get AudioSource component from user
        UserAudioDB useraudiodb = GameObject.Find("GameMaster").GetComponent <UserAudioDB>();       //non-static void => get component required

        useraudiodb.playSFX(audiosource, userInfo.inventory[slotID].id);                            //Play sfx with determined Card ID

        int facedown      = (userInfo.type == 2)?1:0;                                               // Face downward if user is an enemy
        int unconcentrate = 0;                                                                      // Unconcentrating: Shots won't be accurate when stamina deplete

        System.Random rnd    = new System.Random();                                                 // Randomizing angel for Unconcentrating Shots
        Vector3       zDepth = new Vector3(0, 0, -1);                                               // In 3D space, projectile stay on top of player and enemies in order to reflect light

        if (userInfo.weakShot == 1)
        {
            unconcentrate = 1;
        }

        //PREFAB SELECT
        switch (userInfo.inventory[slotID].id)
        {
        case "cone-stick":
        case "enemy-cone-stick": {
            projectile = longBullet;
        }
        break;

        case "enemy-surround-ball":
        case "enemy-cone-ball-targetPlayer":
        case "enemy-burst-ball-targetPlayer": {
            projectile = smallBall;
        }
        break;

        case "laser-once": {
            projectile = laser;                                                 //TEMPORARY
        }
        break;
        }
        // CARD BEHAVIOUR (TODO: Card properties (sprite, etc.) separately)
        switch (userInfo.inventory[slotID].id)
        {
        case "cone-stick":
        case "enemy-cone-stick": {                                              // Stick-projectile shoot in cone shape
            int bulletAngel = 5;
            for (var i = 0; i <= (userInfo.inventory[slotID].projectile - 1) * 2; i++)
            {
                GameObject Bullet = Instantiate(projectile, user.transform.position + userInfo.barrelPos + zDepth, Quaternion.identity) as GameObject;
                Bullet.transform.rotation = Quaternion.Euler(0, 0, user.transform.rotation.z - (userInfo.inventory[slotID].projectile - 1) * bulletAngel + bulletAngel * i + facedown * 180 + unconcentrate * rnd.Next(-5, 5));
                Projectile bulletComponent = Bullet.GetComponent <Projectile>();                                        // Get Projectile.cs component
                //VARIABLE TRANSFER
                bulletComponent.damage      = userInfo.inventory[slotID].power;                                         // Transfer damage/power data into Projectile.cs
                bulletComponent.travelSpeed = userInfo.inventory[slotID].speed;                                         // Transfer speed into Projectile.cs
                bulletComponent.userType    = userInfo.type;                                                            // Transfer user type into Projectile.cs
            }
            break;
        }

        case "laser-once": {                                            // Laser beam
            GameObject Beam = Instantiate(projectile, new Vector2(user.transform.position.x, user.transform.position.y + userInfo.barrelPos.y), Quaternion.identity) as GameObject;
            Beam.transform.rotation = Quaternion.Euler(0, 0, 0 + facedown * 180);
            //TODO: Laser size based on w.projectile
            Laser laserComponent = Beam.GetComponent <Laser>();
            laserComponent.laserWidth = userInfo.inventory[slotID].projectile;
            laserComponent.damage     = userInfo.inventory[slotID].power;                                               // Transfer damage/power data into Projectile.cs
            laserComponent.userType   = userInfo.type;                                                                  // Transfer user type into Projectile.cs
            break;
        }

        case "enemy-surround-ball": {                                           // Ball-projectile shoot in 180/x direction (surrounding)
            int bulletAngel = 180 / (userInfo.inventory[slotID].projectile);
            for (var i = 0; i < userInfo.inventory[slotID].projectile * 2; i++)
            {
                GameObject Bullet = Instantiate(projectile, user.transform.position + userInfo.barrelPos + zDepth, Quaternion.identity) as GameObject;
                Bullet.transform.rotation = Quaternion.Euler(0, 0, user.transform.rotation.z + bulletAngel * i);
                Projectile bulletComponent = Bullet.GetComponent <Projectile>();                                        // Get Projectile.cs component
                bulletComponent.damage      = userInfo.inventory[slotID].power;                                         // Transfer damage/power data into Projectile.cs
                bulletComponent.travelSpeed = userInfo.inventory[slotID].speed;                                         // Transfer speed into Projectile.cs
                bulletComponent.userType    = userInfo.type;                                                            // Transfer user type into Projectile.cs
            }
            break;
        }

        case "enemy-cone-ball-targetPlayer": {                                          // Ball-projectile shoot in cone shape - TARGET PLAYER (PLACEHOLDER)
            int bulletAngel = 5;
            for (var i = 0; i <= (userInfo.inventory[slotID].projectile - 1) * 2; i++)
            {
                GameObject Bullet            = Instantiate(projectile, user.transform.position + userInfo.barrelPos + zDepth, Quaternion.identity) as GameObject;
                Player     playerComponent   = GameObject.Find("Player").GetComponent <Player>();
                float      targetPlayerAngle = Vector2.SignedAngle(transform.up, (playerComponent.transform.position - Bullet.transform.position).normalized);
                Bullet.transform.rotation = Quaternion.Euler(0, 0, user.transform.rotation.z + targetPlayerAngle - (userInfo.inventory[slotID].projectile - 1) * bulletAngel + bulletAngel * i);
                Projectile bulletComponent = Bullet.GetComponent <Projectile>();                                        // Get Projectile.cs component
                //VARIABLE TRANSFER
                bulletComponent.damage      = userInfo.inventory[slotID].power;                                         // Transfer damage/power data into Projectile.cs
                bulletComponent.travelSpeed = userInfo.inventory[slotID].speed;                                         // Transfer speed into Projectile.cs
                bulletComponent.userType    = userInfo.type;                                                            // Transfer user type into Projectile.cs
            }
            break;
        }

        case "enemy-burst-ball-targetPlayer": {                                         // Ball-projectile shoot in burst - TARGET PLAYER (PLACEHOLDER)
            int bulletAngel = 5;
            for (var i = 0; i <= (userInfo.inventory[slotID].projectile - 1) * 2; i++)
            {
                GameObject Bullet            = Instantiate(projectile, user.transform.position + userInfo.barrelPos + zDepth, Quaternion.identity) as GameObject;
                Player     playerComponent   = GameObject.Find("Player").GetComponent <Player>();
                float      targetPlayerAngle = Vector2.SignedAngle(transform.up, (playerComponent.transform.position - Bullet.transform.position).normalized);
                Bullet.transform.rotation = Quaternion.Euler(0, 0, user.transform.rotation.z + targetPlayerAngle - (userInfo.inventory[slotID].projectile - 1) * bulletAngel + bulletAngel * i + rnd.Next(-5, 5));
                Projectile bulletComponent = Bullet.GetComponent <Projectile>();                                        // Get Projectile.cs component
                //VARIABLE TRANSFER
                bulletComponent.damage      = userInfo.inventory[slotID].power;                                         // Transfer damage/power data into Projectile.cs
                bulletComponent.travelSpeed = userInfo.inventory[slotID].speed;                                         // Transfer speed into Projectile.cs
                bulletComponent.userType    = userInfo.type;                                                            // Transfer user type into Projectile.cs
            }
            break;
        }
        }
    }