Fortsat fra sidste post
Til mit battle system skal jeg bruge:
- Jeg skal have nogle particle effects som jeg kan smide på spells
- jeg skal have nogle spawn position som mine characters (både fjender og frendlies) spawner på.
- Mine characters skal have nogle stats (Liv, mana, navn, maxliv)
- spawning processen skal automatiseres, så fjenderne eller player character ikke behøves hardcodes in i min battle scene.
- Jeg skal kunne starte en battle.
- mine characters skal kunne angribe hinanden og tage skade.
- Jeg skal kæde mine commands sammen med noget UI så jeg kan klikke på og udstede kommandoer i en battle.
- Jeg skal kunne teste mit system.
- Jeg vil ikke kunne styre mine fjender, så jeg skal have lidt AI som kan bestemme hvad en fjende skal gøre og hvem den skal gøre tingene mod
- Jeg vil vinde en battle!
Jeg har nu testet om player character kan angribe mine enemy characters, og jeg har tweeket min UI lidt så mit canvas ser lidt bedre ud. Jeg har også dræbt min første fjende og castet mit første spell, nu vil jeg gerne lege med lidt UI så mine fjender forhåbenligt kan angribe mine player characters uden jeg skal involveres i deres actions.
Derfor opretter jeg nu et BattleController.cs script, her bliver jeg enig med mig selv om at jeg præcis som i mit scene view gerne vil have 2 lister (en med player characters og KUN player characters, og det samme for enemies.) derfor laver jeg en dictionary "public Dictionary<int, List<BattleCharacter>> characters = new Dictionary<int, List<BattleCharacter>>();" hvilket betyder at for hver int skal der være en List af Battlecharacters, og da jeg i min StartBattle metode tager List<BattleCharacter> player, som første input så bliver min player list 0 i dictionaryen og enemies 1.
Dernæst skal jeg have en måde at holde styr på hvilken listes tur det er lige som hvilken character fra denne listes tur det er (dvs ALLE player characters SKAL have deres tur før det bliver mine fjenders tur, som så alle skal have en go før det bliver en players tur igen.)
til dette bruger jeg:
switch (actTurn)
{
case 0:
uiController.ToggleActionState(true);
uiController.BuildSpellList(GetCurrentCharacter().spells);
break;
case 1:
StartCoroutine(PerformAct());
uiController.ToggleActionState(false);
break;
}
hvor case 0 gælder hvis det er en players tur og case 1 (en fjendes tur) starter en Corutine (En corutine lader mig stoppe executionen og lade unity arbejde for så at fortsætte hvor jeg slap når unity er færdig) som håntere fjendernes tur.
jeg tester nu:
- kan mine fjender act? Ja - de kan caste spells, almindelige angreb og hæve deres defence Power (NOTE defence power skal nok have en max værdi, da jeg ved min test kan se at mine fjenders defence power kan blive så højt at de får liv af player angreb i stedet for at mist liv)
- Kan jeg vinde en kamp? - Yes!!! yes I can.
Link til Github
