Ejemplo n.º 1
0
    /// <summary>
    /// Retrieves data from the details to fill in appropriate ui elements.
    /// </summary>
    /// <param name="details"></param>
    public void FillUI(WaifuDetails details)
    {
        WaifuCreator baseDetails = details.waifu;;

        nameText.text = baseDetails.CharacterName;

        string text = "" + details.Health.ToString() + "/" + baseDetails.HealthMax.ToString();

        healthText.SetText(text, true);

        //Debug.Log(slider.value);
        slider.maxValue = baseDetails.HealthMax;
        slider.value    = details.Health;
    }
    /// <summary>
    /// create the player character and set up the values
    /// </summary>
    void CreatePlayer()
    {
        //instantiate player and get their detials
        GameObject player = Instantiate(playerCharacter);

        playerDetails = player.GetComponent <WaifuDetails>();
        //playerDetails.waifu = Waifus.waifuList[PlayerPrefs.GetInt("Player1")];
        //transfer the specifications from the scriptable objects to our player
        playerDetails.waifu = Waifus.waifuList[0];
        playerDetails.waifuSprite.sprite = playerDetails.waifu.characterImage;
        playerDetails.Health             = playerDetails.waifu.HealthMax;

        //update our default abilities with our saved abilities
        OverideAbilities();
    }
    /// <summary>
    /// Create the enemy player and their details
    /// </summary>

    void CreateEnemy()
    {
        //nstantiate enemy and get their detials
        GameObject enemy = Instantiate(enemyCharacter);

        enemyDetails       = enemy.GetComponent <WaifuDetails>();
        enemyDetails.waifu = Waifus.waifuList[UnityEngine.Random.Range(1, 4)];

        //transfer the specifications from the scriptable objects to our enemy
        enemyDetails.waifuSprite.sprite = enemyDetails.waifu.characterImage;
        enemyDetails.Health             = enemyDetails.waifu.HealthMax;


        dialogueText.text = "You face off against " + enemyDetails.waifu.CharacterName;
    }
    void CreateEnemy()
    {
        //nstantiate enemy and get their detials
        GameObject enemy = Instantiate(enemyCharacter);

        enemyDetails = enemy.GetComponent <WaifuDetails>();
        //enemyDetails.waifu = Waifus.waifuList[1];
        //if (networkClient.MyLobby.Player1 == networkClient.PlayerUserID)//if player 1
        //{
        enemyDetails.waifu = Waifus.waifuList[networkClient.EnemyPlayerCharacter];

        //}
        //else
        //{
        //    enemyDetails.waifu = Waifus.waifuList[networkClient.EnemyPlayerCharacter];
        //}
        enemyDetails.waifuSprite.sprite = enemyDetails.waifu.characterImage;
        enemyDetails.Health             = enemyDetails.waifu.HealthMax;


        dialogueText.text = "You face off against " + enemyDetails.waifu.CharacterName;
    }
    void CreatePlayer()
    {
        //instantiate player and get their detials
        GameObject player = Instantiate(playerCharacter);

        playerDetails = player.GetComponent <WaifuDetails>();
        //playerDetails.waifu = Waifus.waifuList[PlayerPrefs.GetInt("Player1")];

        //TODO: get the waifu from the network client
        if (networkClient.MyLobby.Player1 == networkClient.PlayerUserID)//if player 1
        {
            playerDetails.waifu = Waifus.waifuList[networkClient.MyPlayerCharacter];
            MyPlayerNum         = BattleState.PLAYER1;
        }
        else
        {
            playerDetails.waifu = Waifus.waifuList[networkClient.MyPlayerCharacter];
            MyPlayerNum         = BattleState.PLAYER2;
        }

        playerDetails.waifuSprite.sprite = playerDetails.waifu.characterImage;
        playerDetails.Health             = playerDetails.waifu.HealthMax;
    }
    IEnumerator Attack(int ability, WaifuDetails attacker, WaifuDetails defender)
    {
        bool    defenderDefeated = false;
        bool    attackerDefeated = false;
        Ability move             = attacker.waifu.MyAbilties.abilityList[ability];

        dialogueText.text = attacker.waifu.CharacterName + " uses " + move.AbilityName + "!";
        yield return(new WaitForSeconds(1));

        float levelAdjustmentBonus = 0.0f;

        if (MyPlayerNum == state) // my turn use my level
        {
            levelAdjustmentBonus = networkClient.MyLevel / 10;
        }
        else // other players turn // use their level
        {
            levelAdjustmentBonus = networkClient.OpponentLevel / 10;
        }

        defenderDefeated = defender.TakeDamage((int)((levelAdjustmentBonus + attacker.waifu.Attack) * move.AttackMultipier * (1.0f + 0.05f * attacker.buffs[(int)BUFF_ARRAY.ATTACK])));
        attackerDefeated = attacker.Recoil((int)(move.CostHp));

        // buffs and debuffs
        attacker.buffs[(int)BUFF_ARRAY.ATTACK]   = move.SelfBuff[(int)BUFF_ARRAY.ATTACK];
        attacker.buffs[(int)BUFF_ARRAY.DEFENCE]  = move.SelfBuff[(int)BUFF_ARRAY.DEFENCE];
        attacker.buffs[(int)BUFF_ARRAY.LOVE]     = move.SelfBuff[(int)BUFF_ARRAY.LOVE];
        attacker.buffs[(int)BUFF_ARRAY.ATTACK]  -= move.SelfDebuff[(int)BUFF_ARRAY.ATTACK];
        attacker.buffs[(int)BUFF_ARRAY.DEFENCE] -= move.SelfDebuff[(int)BUFF_ARRAY.DEFENCE];
        attacker.buffs[(int)BUFF_ARRAY.LOVE]    -= move.SelfDebuff[(int)BUFF_ARRAY.LOVE];

        defender.buffs[(int)BUFF_ARRAY.ATTACK]   = move.SelfBuff[(int)BUFF_ARRAY.ATTACK];
        defender.buffs[(int)BUFF_ARRAY.DEFENCE]  = move.SelfBuff[(int)BUFF_ARRAY.DEFENCE];
        defender.buffs[(int)BUFF_ARRAY.LOVE]     = move.SelfBuff[(int)BUFF_ARRAY.LOVE];
        defender.buffs[(int)BUFF_ARRAY.ATTACK]  -= move.SelfDebuff[(int)BUFF_ARRAY.ATTACK];
        defender.buffs[(int)BUFF_ARRAY.DEFENCE] -= move.SelfDebuff[(int)BUFF_ARRAY.DEFENCE];
        defender.buffs[(int)BUFF_ARRAY.LOVE]    -= move.SelfDebuff[(int)BUFF_ARRAY.LOVE];

        dialogueText.text = move.Description;
        yield return(new WaitForSeconds(1));

        attacker.Rest((int)((levelAdjustmentBonus + attacker.waifu.Love) * move.LoveMultiplier * (1.0f + 0.05f * attacker.buffs[(int)BUFF_ARRAY.LOVE])));

        UpdateCharactersUI();

        yield return(new WaitForSeconds(2));

        if (CheckPlayerWin())
        {
            state = BattleState.WIN;
            EndBattle();
        }
        if (CheckEnemyWin())
        {
            state = BattleState.LOOSE;
            EndBattle();
        }

        Debug.Log("Move Made");
        if (state == BattleState.PLAYER2)
        {
            state        = BattleState.PLAYER1;
            MoveAvailble = true;
            Player1Turn();
        }
        else if (state == BattleState.PLAYER1)
        {
            state        = BattleState.PLAYER2;
            MoveAvailble = true;
            Player2Turn();
        }
    }
    /// <summary>
    /// Called when an attack occurs to process the attack effect
    /// </summary>
    /// <param name="ability"></param>
    /// <param name="attacker"></param>
    /// <param name="defender"></param>
    /// <returns></returns>
    IEnumerator Attack(int ability, WaifuDetails attacker, WaifuDetails defender)
    {
        bool defenderDefeated = false;
        bool attackerDefeated = false;
        //if player 1 use player abilities if not use the preset abilities for enemy
        Ability move = (attacker == playerDetails ?  playerAbilities[ability]: attacker.waifu.MyAbilties.abilityList[ability]);

        dialogueText.text = attacker.waifu.CharacterName + " uses " + move.AbilityName + "!";
        yield return(new WaitForSeconds(1));


        //generate a hit chance for our roll
        float hitChance = UnityEngine.Random.Range(0.0f, 1.0f);

        //check to see if the hit will succeed
        if (hitChance > move.PercentChance)
        {
            //missed so update the text
            dialogueText.text = attacker.waifu.CharacterName + " failed to use " + move.AbilityName + "!";
            yield return(new WaitForSeconds(1));
        }
        else // ability hit succeeds
        {
            //check if escaping
            if (move.AbilityName == "Escape")
            {
                dialogueText.text = attacker.waifu.CharacterName + " managed to " + move.AbilityName + "!";

                Debug.Log("Escaped!");
                Escape(); //return to the city scene
            }
            defenderDefeated = defender.TakeDamage((int)(attacker.waifu.Attack * move.AttackMultipier * (1.0f + 0.05f * attacker.buffs[(int)BUFF_ARRAY.ATTACK])));
            attackerDefeated = attacker.Recoil((int)(move.CostHp));

            // buffs and debuffs
            attacker.buffs[(int)BUFF_ARRAY.ATTACK]   = move.SelfBuff[(int)BUFF_ARRAY.ATTACK];
            attacker.buffs[(int)BUFF_ARRAY.DEFENCE]  = move.SelfBuff[(int)BUFF_ARRAY.DEFENCE];
            attacker.buffs[(int)BUFF_ARRAY.LOVE]     = move.SelfBuff[(int)BUFF_ARRAY.LOVE];
            attacker.buffs[(int)BUFF_ARRAY.ATTACK]  -= move.SelfDebuff[(int)BUFF_ARRAY.ATTACK];
            attacker.buffs[(int)BUFF_ARRAY.DEFENCE] -= move.SelfDebuff[(int)BUFF_ARRAY.DEFENCE];
            attacker.buffs[(int)BUFF_ARRAY.LOVE]    -= move.SelfDebuff[(int)BUFF_ARRAY.LOVE];

            defender.buffs[(int)BUFF_ARRAY.ATTACK]   = move.SelfBuff[(int)BUFF_ARRAY.ATTACK];
            defender.buffs[(int)BUFF_ARRAY.DEFENCE]  = move.SelfBuff[(int)BUFF_ARRAY.DEFENCE];
            defender.buffs[(int)BUFF_ARRAY.LOVE]     = move.SelfBuff[(int)BUFF_ARRAY.LOVE];
            defender.buffs[(int)BUFF_ARRAY.ATTACK]  -= move.SelfDebuff[(int)BUFF_ARRAY.ATTACK];
            defender.buffs[(int)BUFF_ARRAY.DEFENCE] -= move.SelfDebuff[(int)BUFF_ARRAY.DEFENCE];
            defender.buffs[(int)BUFF_ARRAY.LOVE]    -= move.SelfDebuff[(int)BUFF_ARRAY.LOVE];

            dialogueText.text = move.Description;
            yield return(new WaitForSeconds(1));

            //process healing
            attacker.Rest((int)(attacker.waifu.Love * move.LoveMultiplier * (1.0f + 0.05f * attacker.buffs[(int)BUFF_ARRAY.LOVE])));

            //play ability effects
            move.PlayEffects(attacker.transform, defender.transform);
            if (move.Clip != null)
            {
                audioSource.clip = move.Clip;
                audioSource.Play();
            }
        }
        //update ui elements
        UpdateCharactersUI();

        yield return(new WaitForSeconds(2));

        //check states
        if (CheckEnemyWin())
        {
            state = BattleState.LOOSE;
            EndBattle();
        }
        if (CheckPlayerWin())
        {
            state = BattleState.WIN;
            EndBattle();
        }

        //transition turns
        if (state == BattleState.PLAYER2)
        {
            state = BattleState.PLAYER1;
            Player1Turn();
        }
        else if (state == BattleState.PROCESSING)
        {
            state = BattleState.PLAYER2;
            StartCoroutine(EnemyTurn());
        }
    }