public void InitializeBattleData(GameObject objectPrefab, bool isPlayer, BattleScriptableObject battleScriptable, CharacterStats characterStats)
    {
        // Set the Object to create using the ScriptableObject
        objectPrefab.GetComponent <ScriptableObjectProperties>().objectToCreate = battleScriptable;

        // Set sorting layers
        objectPrefab.GetComponent <SpriteRenderer>().sortingLayerName = "Battle Characters";
        objectPrefab.GetComponent <SpriteRenderer>().sprite           = battleScriptable.objectSprite;

        // Set stats
        if (isPlayer)
        {
            objectPrefab.GetComponent <ScriptableObjectProperties>().objectName             = characterStats.charName;
            objectPrefab.GetComponent <ScriptableObjectProperties>().objectSprite           = characterStats.charImage;
            objectPrefab.GetComponent <ScriptableObjectProperties>().currentHP              = characterStats.currentHP;
            objectPrefab.GetComponent <ScriptableObjectProperties>().currentMP              = characterStats.currentMP;
            objectPrefab.GetComponent <ScriptableObjectProperties>().maxHP                  = characterStats.maxHP;
            objectPrefab.GetComponent <ScriptableObjectProperties>().maxMP                  = characterStats.maxMP;
            objectPrefab.GetComponent <ScriptableObjectProperties>().wpnPwr                 = characterStats.wpnPwr;
            objectPrefab.GetComponent <ScriptableObjectProperties>().armrPwr                = characterStats.armrPwr;
            objectPrefab.GetComponent <ScriptableObjectProperties>().strength               = characterStats.strength;
            objectPrefab.GetComponent <ScriptableObjectProperties>().vitality               = characterStats.vitality;
            objectPrefab.GetComponent <ScriptableObjectProperties>().intelligence           = characterStats.intelligence;
            objectPrefab.GetComponent <ScriptableObjectProperties>().dexterity              = characterStats.dexterity;
            objectPrefab.GetComponent <ScriptableObjectProperties>().luck                   = characterStats.luck;
            objectPrefab.GetComponent <ScriptableObjectProperties>().hasDied                = characterStats.hasDied;
            objectPrefab.GetComponent <ScriptableObjectProperties>().movesAvailable         = battleScriptable.movesAvailable;
            objectPrefab.GetComponent <ScriptableObjectProperties>().objectSpriteRenderer   = objectPrefab.GetComponent <SpriteRenderer>();
            objectPrefab.GetComponent <ScriptableObjectProperties>().aliveSprite            = battleScriptable.aliveSprite;
            objectPrefab.GetComponent <ScriptableObjectProperties>().deadSprite             = battleScriptable.deadSprite;
            objectPrefab.GetComponent <ScriptableObjectProperties>().equippedWeapon         = characterStats.equippedWeapon;
            objectPrefab.GetComponent <ScriptableObjectProperties>().equippedArmor          = characterStats.equippedArmor;
            objectPrefab.GetComponent <ScriptableObjectProperties>().equippedShield         = characterStats.equippedShield;
            objectPrefab.GetComponent <ScriptableObjectProperties>().equippedGloves         = characterStats.equippedGloves;
            objectPrefab.GetComponent <ScriptableObjectProperties>().equippedBoots          = characterStats.equippedBoots;
            objectPrefab.GetComponent <ScriptableObjectProperties>().equippedAccessoryLeft  = characterStats.equippedAccessoryLeft;
            objectPrefab.GetComponent <ScriptableObjectProperties>().equippedAccessoryRight = characterStats.equippedAccessoryRight;
            objectPrefab.GetComponent <ScriptableObjectProperties>().isPlayer               = true;
            objectPrefab.GetComponent <SpriteRenderer>().sortingOrder = 1;

            // Set AnimatorController if a controller exists
            var animatorResource = Resources.Load <RuntimeAnimatorController>("Battle Animations/" + characterStats.charName + "/" + characterStats.charName + "Controller");
            if (animatorResource)
            {
                objectPrefab.GetComponent <Animator>().runtimeAnimatorController = animatorResource;
            }
        }
        else
        {
            // Set enemy data
            objectPrefab.GetComponent <ScriptableObjectProperties>().objectName        = battleScriptable.objectName;
            objectPrefab.GetComponent <ScriptableObjectProperties>().objectDescription = battleScriptable.objectDescription;
            objectPrefab.GetComponent <ScriptableObjectProperties>().objectSprite      = battleScriptable.objectSprite;
            objectPrefab.GetComponent <ScriptableObjectProperties>().currentHP         = battleScriptable.currentHP;
            objectPrefab.GetComponent <ScriptableObjectProperties>().currentMP         = battleScriptable.currentMP;
            objectPrefab.GetComponent <ScriptableObjectProperties>().maxHP             = battleScriptable.maxHP;
            objectPrefab.GetComponent <ScriptableObjectProperties>().maxMP             = battleScriptable.maxMP;
            objectPrefab.GetComponent <ScriptableObjectProperties>().strength          = battleScriptable.strength;
            objectPrefab.GetComponent <ScriptableObjectProperties>().vitality          = battleScriptable.vitality;
            objectPrefab.GetComponent <ScriptableObjectProperties>().intelligence      = battleScriptable.intelligence;
            objectPrefab.GetComponent <ScriptableObjectProperties>().dexterity         = battleScriptable.dexterity;
            objectPrefab.GetComponent <ScriptableObjectProperties>().luck                 = battleScriptable.luck;
            objectPrefab.GetComponent <ScriptableObjectProperties>().hasDied              = battleScriptable.hasDied;
            objectPrefab.GetComponent <ScriptableObjectProperties>().movesAvailable       = battleScriptable.movesAvailable;
            objectPrefab.GetComponent <ScriptableObjectProperties>().objectSpriteRenderer = objectPrefab.GetComponent <SpriteRenderer>();
            objectPrefab.GetComponent <ScriptableObjectProperties>().itemsToDrop          = battleScriptable.itemsToDrop;
            objectPrefab.GetComponent <ScriptableObjectProperties>().gilDropAmount        = Random.Range(battleScriptable.gilMinDropAmount, battleScriptable.gilMaxDropAmount);
            objectPrefab.GetComponent <ScriptableObjectProperties>().expPoints            = battleScriptable.expPoints;
            objectPrefab.GetComponent <ScriptableObjectProperties>().isPlayer             = false;

            // Flip the sprite
            if (battleScriptable.flipSpriteHorizontally)
            {
                objectPrefab.GetComponent <SpriteRenderer>().flipX = true;
            }

            // Set AnimatorController if a controller exists
            var animatorResource = Resources.Load <RuntimeAnimatorController>("Battle Animations/Enemy Animations/" + battleScriptable.objectName + "/" + battleScriptable.objectName + "Controller");
            if (animatorResource)
            {
                objectPrefab.GetComponent <Animator>().runtimeAnimatorController = animatorResource;
            }
        }

        // Add to the combat list
        BattleManager.instance.activeCombatants.Add(objectPrefab);
    }
Esempio n. 2
0
    public void StartBattle(BattleScriptableObject[] enemiesToSpawn)
    {
        // Set the camera when battle start for shaking
        camera = GameObject.Find("Custom Camera");
        camera.GetComponent <CinemachineBrain>().enabled = false;

        // Set background based on fight
        var bgResource = Resources.Load <Sprite>("Backgrounds/" + background + " BG");

        if (bgResource)
        {
            battleScene.transform.GetChild(0).GetComponent <SpriteRenderer>().sprite = bgResource;
        }
        else
        {
            battleScene.transform.GetChild(0).GetComponent <SpriteRenderer>().sprite = Resources.Load <Sprite>("Backgrounds/Field BG");
        }

        // Activate battle
        GameManager.instance.activeBattle = true;
        bool bossBattle = false;

        // Check first if we're not in a battle already
        if (!activeBattle)
        {
            activeBattle = true;

            GameManager.instance.activeBattle = true;

            // Set the appropriate BG position
            transform.position = new Vector3(Camera.main.transform.position.x, Camera.main.transform.position.y, transform.position.z);
            battleScene.SetActive(true);

            AudioManager.instance.PlayBGM(0);

            // Activate and load each player character into the battle scene
            for (int i = 0; i < playerPositions.Length; i++)
            {
                var playerStats = GameManager.instance.playerStats[i];
                if (playerStats && playerStats.gameObject.activeInHierarchy)
                {
                    if (GameManager.instance.playerScriptables.ContainsKey(playerStats.charName))
                    {
                        BattleScriptableObject character = GameManager.instance.playerScriptables[playerStats.charName];

                        // Create the player character battle object
                        // Allow movement of player objects
                        GameObject newPlayer = Instantiate(objectScriptablePrefab, playerPositions[i].position, playerPositions[i].rotation);
                        newPlayer.transform.parent = playerPositions[i];

                        bmHelper.InitializeBattleData(newPlayer, true, character, playerStats);
                    }
                }
            }

            // Load enemies
            for (int i = 0; i < enemiesToSpawn.Length; i++)
            {
                if (enemiesToSpawn[i] != null && enemiesToSpawn[i].objectName != "")
                {
                    if (GameManager.instance.enemyScriptables.ContainsKey(enemiesToSpawn[i].objectName))
                    {
                        // Instantiate a new enemy prefab using the SO
                        GameObject newEnemy = Instantiate(objectScriptablePrefab, enemyPositions[i].position, enemyPositions[i].rotation);
                        newEnemy.transform.parent = enemyPositions[i];

                        bmHelper.InitializeBattleData(newEnemy, false, enemiesToSpawn[i], null);

                        if (enemiesToSpawn[i].isBoss)
                        {
                            bossBattle = true;
                        }
                    }
                }
            }

            // If boss fight, disable Flee button
            if (bossBattle)
            {
                fleeButton.GetComponent <Button>().interactable = false;
            }

            waitingForATurn = true;
            currentTurn     = Random.Range(0, activeCombatants.Count);

            this.UpdateUIStats();
        }
    }