From 0d7f4f49543a8ad08ddf557eddcd10f89c2bc252 Mon Sep 17 00:00:00 2001 From: henriquenakashima Date: Sat, 26 Sep 2020 23:04:14 -0400 Subject: [PATCH] Create basic Story classes and parameterize monsters in Battle scene --- Assets/Battle/BattleController.cs | 87 +++++++++---------- Assets/Battle/BattleParameters.cs | 24 +++++ Assets/Battle/BattleParameters.cs.meta | 11 +++ Assets/Battle/BattleSetup.cs | 16 ++++ Assets/Battle/BattleSetup.cs.meta | 11 +++ Assets/Story/SceneId.cs | 8 ++ Assets/Story/SceneId.cs.meta | 11 +++ Assets/Story/Scenes.meta | 8 ++ Assets/Story/Scenes/Scene_Chapter1_Cave.cs | 45 ++++++++++ .../Story/Scenes/Scene_Chapter1_Cave.cs.meta | 11 +++ Assets/Story/StoryController.cs | 21 +++++ Assets/Story/StoryController.cs.meta | 11 +++ Assets/Story/StoryScene.cs | 8 ++ Assets/Story/StoryScene.cs.meta | 11 +++ Assets/Story/StorySceneDatabase.cs | 14 +++ Assets/Story/StorySceneDatabase.cs.meta | 11 +++ ProjectSettings/EditorBuildSettings.asset | 8 +- 17 files changed, 268 insertions(+), 48 deletions(-) create mode 100644 Assets/Battle/BattleParameters.cs create mode 100644 Assets/Battle/BattleParameters.cs.meta create mode 100644 Assets/Battle/BattleSetup.cs create mode 100644 Assets/Battle/BattleSetup.cs.meta create mode 100644 Assets/Story/SceneId.cs create mode 100644 Assets/Story/SceneId.cs.meta create mode 100644 Assets/Story/Scenes.meta create mode 100644 Assets/Story/Scenes/Scene_Chapter1_Cave.cs create mode 100644 Assets/Story/Scenes/Scene_Chapter1_Cave.cs.meta create mode 100644 Assets/Story/StoryController.cs create mode 100644 Assets/Story/StoryController.cs.meta create mode 100644 Assets/Story/StoryScene.cs create mode 100644 Assets/Story/StoryScene.cs.meta create mode 100644 Assets/Story/StorySceneDatabase.cs create mode 100644 Assets/Story/StorySceneDatabase.cs.meta diff --git a/Assets/Battle/BattleController.cs b/Assets/Battle/BattleController.cs index 03a77c0..4eb33cd 100644 --- a/Assets/Battle/BattleController.cs +++ b/Assets/Battle/BattleController.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using UnityEngine; +using UnityEngine.SceneManagement; public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffectResolver, MonsterViewpoint { @@ -39,6 +40,39 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe private event BattleStateChangedAction OnBattleStateChanged; void Awake() { + BattleParameters parameters = BattleSetup.RetrieveParameters(); + if (parameters == null) { + Debug.Log("Using default battle"); + + MonsterId[] monsterIds = new MonsterId[3] { + MonsterId.Golem, + MonsterId.Bat, + MonsterId.Bat, + }; + + MCardId[] mCardIds = new MCardId[10] { + MCardId.GraniteDefense, + MCardId.GraniteDefense, + MCardId.GolemCharge, + MCardId.GolemFist, + + MCardId.VampireFangs, + MCardId.VampireFangs, + MCardId.Whirlwind, + + MCardId.VampireFangs, + MCardId.VampireFangs, + MCardId.Whirlwind, + }; + int[] mCardOwnerIndexes = new int[10] { + 0, 0, 0, 0, + 1, 1, 1, + 2, 2, 2, + }; + parameters = new BattleParameters(); + parameters.SetMonsters(monsterIds, mCardIds, mCardOwnerIndexes); + } + HeroId[] heroIds = new HeroId[3] { HeroId.Alchemist, HeroId.NPCGuard, @@ -78,43 +112,6 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe // HCardId.IronskinDraught, // }; - MonsterId[] monsterIds = new MonsterId[3] { - MonsterId.Golem, - MonsterId.Bat, - MonsterId.Bat, - }; - - MCardId[] mCardIds = new MCardId[10] { - MCardId.GraniteDefense, - MCardId.GraniteDefense, - MCardId.GolemCharge, - MCardId.GolemFist, - - MCardId.VampireFangs, - MCardId.VampireFangs, - MCardId.Whirlwind, - - MCardId.VampireFangs, - MCardId.VampireFangs, - MCardId.Whirlwind, - }; - int[] mCardOwnerIndexes = new int[10] { - 0, 0, 0, 0, - 1, 1, 1, - 2, 2, 2, - }; - // MCardId[] mCardIds = new MCardId[5] { - // MCardId.Whirlwind, - // MCardId.Whirlwind, - // MCardId.Whirlwind, - // MCardId.Whirlwind, - // MCardId.Whirlwind, - // }; - // int[] mCardOwnerIndexes = new int[5] { - // 1, 1, - // 2, 2, 2, - // }; - this.heroCardDatabase = new HeroCardDatabase(); this.monsterCardDatabase = new MonsterCardDatabase(); @@ -154,11 +151,11 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe this.heroUIs[hero] = heroUI; } - this.monsters = new BattleMonster[monsterIds.Length]; + this.monsters = new BattleMonster[parameters.MonsterIds.Length]; this.monsterSprites = new Dictionary(); this.monsterUIs = new Dictionary(); for (int i = 0; i < 3; i++) { - MonsterId id = monsterIds[i]; + MonsterId id = parameters.MonsterIds[i]; BattleMonster monster = MonsterDatabase.createMonsterScript(id); monster.Init(); @@ -186,16 +183,12 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe this.heroDeck = new BattleDeck( this.heroCardDatabase, cardIds.Cast().ToArray(), cardOwners); - BattleParticipant[] mCardOwners = new BattleParticipant[mCardIds.Length]; - if (mCardIds.Length != mCardOwnerIndexes.Length) { - throw new System.ArgumentException( - "mCardIds and mCardOwnerIndexes need to have the same length"); - } - for (int i = 0; i < mCardIds.Length; i++) { - mCardOwners[i] = this.monsters[mCardOwnerIndexes[i]]; + BattleParticipant[] mCardOwners = new BattleParticipant[parameters.MCardIds.Length]; + for (int i = 0; i < parameters.MCardIds.Length; i++) { + mCardOwners[i] = this.monsters[parameters.MCardOwnerIndexes[i]]; } this.monsterDeck = new BattleDeck( - this.monsterCardDatabase, mCardIds.Cast().ToArray(), mCardOwners); + this.monsterCardDatabase, parameters.MCardIds.Cast().ToArray(), mCardOwners); this.playArea = new PlayArea(); diff --git a/Assets/Battle/BattleParameters.cs b/Assets/Battle/BattleParameters.cs new file mode 100644 index 0000000..8655534 --- /dev/null +++ b/Assets/Battle/BattleParameters.cs @@ -0,0 +1,24 @@ +public class BattleParameters { + private MonsterId[] monsterIds; + private MCardId[] mCardIds; + private int[] mCardOwnerIndexes; + + public BattleParameters() { + + } + + public void SetMonsters(MonsterId[] monsterIds, MCardId[] mCardIds, int[] mCardOwnerIndexes) { + if (mCardIds.Length != mCardOwnerIndexes.Length) { + throw new System.ArgumentException( + "mCardIds and mCardOwnerIndexes need to have the same length"); + } + + this.monsterIds = monsterIds; + this.mCardIds = mCardIds; + this.mCardOwnerIndexes = mCardOwnerIndexes; + } + + public MonsterId[] MonsterIds {get => this.monsterIds;} + public MCardId[] MCardIds {get => this.mCardIds;} + public int[] MCardOwnerIndexes {get => this.mCardOwnerIndexes;} +} diff --git a/Assets/Battle/BattleParameters.cs.meta b/Assets/Battle/BattleParameters.cs.meta new file mode 100644 index 0000000..b1a4a52 --- /dev/null +++ b/Assets/Battle/BattleParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 27e7d9637e99afb46ab6521f276bcdbd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Battle/BattleSetup.cs b/Assets/Battle/BattleSetup.cs new file mode 100644 index 0000000..31737f9 --- /dev/null +++ b/Assets/Battle/BattleSetup.cs @@ -0,0 +1,16 @@ +using UnityEngine.SceneManagement; + +public class BattleSetup { + private static BattleParameters sParameters; + + public static void StartBattle(BattleParameters parameters) { + sParameters = parameters; + SceneManager.LoadScene("BattleScene"); + } + + public static BattleParameters RetrieveParameters() { + BattleParameters result = sParameters; + sParameters = null; + return result; + } +} diff --git a/Assets/Battle/BattleSetup.cs.meta b/Assets/Battle/BattleSetup.cs.meta new file mode 100644 index 0000000..e4b2666 --- /dev/null +++ b/Assets/Battle/BattleSetup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d20269def60ce9b418f46f701f6eba0e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Story/SceneId.cs b/Assets/Story/SceneId.cs new file mode 100644 index 0000000..4f290c6 --- /dev/null +++ b/Assets/Story/SceneId.cs @@ -0,0 +1,8 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public enum SceneId +{ + Chapter1_Cave, +} diff --git a/Assets/Story/SceneId.cs.meta b/Assets/Story/SceneId.cs.meta new file mode 100644 index 0000000..dc24706 --- /dev/null +++ b/Assets/Story/SceneId.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d8adf44d7c7685443a7454f0ca29023b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Story/Scenes.meta b/Assets/Story/Scenes.meta new file mode 100644 index 0000000..7c8d325 --- /dev/null +++ b/Assets/Story/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a17f0c1277fdfea4285176b4888ca019 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Story/Scenes/Scene_Chapter1_Cave.cs b/Assets/Story/Scenes/Scene_Chapter1_Cave.cs new file mode 100644 index 0000000..aeb8320 --- /dev/null +++ b/Assets/Story/Scenes/Scene_Chapter1_Cave.cs @@ -0,0 +1,45 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class Scene_Chapter1_Cave: StoryScene +{ + public override IEnumerator Play() { + Debug.Log("OMG monsters!"); + yield return new WaitForSeconds(2f); + + BattleParameters battleParameters = BuildBattleGolemBats(); + BattleSetup.StartBattle(battleParameters); + } + + private BattleParameters BuildBattleGolemBats() { + BattleParameters battleParameters = new BattleParameters(); + MonsterId[] monsterIds = new MonsterId[3] { + MonsterId.Golem, + MonsterId.Bat, + MonsterId.Bat, + }; + + MCardId[] mCardIds = new MCardId[10] { + MCardId.GraniteDefense, + MCardId.GraniteDefense, + MCardId.GolemCharge, + MCardId.GolemFist, + + MCardId.VampireFangs, + MCardId.VampireFangs, + MCardId.Whirlwind, + + MCardId.VampireFangs, + MCardId.VampireFangs, + MCardId.Whirlwind, + }; + int[] mCardOwnerIndexes = new int[10] { + 0, 0, 0, 0, + 1, 1, 1, + 2, 2, 2, + }; + battleParameters.SetMonsters(monsterIds, mCardIds, mCardOwnerIndexes); + return battleParameters; + } +} diff --git a/Assets/Story/Scenes/Scene_Chapter1_Cave.cs.meta b/Assets/Story/Scenes/Scene_Chapter1_Cave.cs.meta new file mode 100644 index 0000000..8da8eac --- /dev/null +++ b/Assets/Story/Scenes/Scene_Chapter1_Cave.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f44cf58dd36528d44892aa54d8d17637 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Story/StoryController.cs b/Assets/Story/StoryController.cs new file mode 100644 index 0000000..af8b90f --- /dev/null +++ b/Assets/Story/StoryController.cs @@ -0,0 +1,21 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class StoryController : MonoBehaviour +{ + // Start is called before the first frame update + void Start() + { + // TODO: Read which scene should be loaded. + StoryScene scene = StorySceneDatabase.Load(SceneId.Chapter1_Cave); + + StartCoroutine(scene.Play()); + } + + // Update is called once per frame + void Update() + { + + } +} diff --git a/Assets/Story/StoryController.cs.meta b/Assets/Story/StoryController.cs.meta new file mode 100644 index 0000000..fc07db7 --- /dev/null +++ b/Assets/Story/StoryController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2e976139d539dae45bf8db63e6f697fe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Story/StoryScene.cs b/Assets/Story/StoryScene.cs new file mode 100644 index 0000000..501ba4e --- /dev/null +++ b/Assets/Story/StoryScene.cs @@ -0,0 +1,8 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public abstract class StoryScene +{ + public abstract IEnumerator Play(); +} diff --git a/Assets/Story/StoryScene.cs.meta b/Assets/Story/StoryScene.cs.meta new file mode 100644 index 0000000..0a7d128 --- /dev/null +++ b/Assets/Story/StoryScene.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 354fc5f67bf09ba42b407a7858cdf711 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Story/StorySceneDatabase.cs b/Assets/Story/StorySceneDatabase.cs new file mode 100644 index 0000000..09db53b --- /dev/null +++ b/Assets/Story/StorySceneDatabase.cs @@ -0,0 +1,14 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class StorySceneDatabase { + public static StoryScene Load(SceneId id) { + switch (id) { + case SceneId.Chapter1_Cave: + return new Scene_Chapter1_Cave(); + default: + throw new System.NotImplementedException("StoryScene with id " + id + " missing."); + } + } +} diff --git a/Assets/Story/StorySceneDatabase.cs.meta b/Assets/Story/StorySceneDatabase.cs.meta new file mode 100644 index 0000000..a54b66b --- /dev/null +++ b/Assets/Story/StorySceneDatabase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4bcc3155ffc3d3d4cb862f25f7ae431a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset index 0147887..58dae9d 100644 --- a/ProjectSettings/EditorBuildSettings.asset +++ b/ProjectSettings/EditorBuildSettings.asset @@ -4,5 +4,11 @@ EditorBuildSettings: m_ObjectHideFlags: 0 serializedVersion: 2 - m_Scenes: [] + m_Scenes: + - enabled: 1 + path: Assets/Story/StoryScene.unity + guid: 34bfaaf524118f34b8e2d9d80122ab5c + - enabled: 1 + path: Assets/Battle/BattleScene.unity + guid: 2cda990e2423bbf4892e6590ba056729 m_configObjects: {}