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); }
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(); } }