Måndag 18/4 – Fixade klart fången. Jag fixade klart det sista med fången så att rätt vakt eskorterar rätt fånge. Tidigare fick jag problem med att när jag hade flera fångar och vakter så kunde det bli fel när en vakt skulle eskortera en fånge. Jag lyckades lösa det genom att fången sparar en variabel med vad för objekt den kolliderar med och om objektet då är en vakt och fången inte eskorteras av en annan vakt, så kommer fången följa efter vakten.
På slutet av dagen började jag läsa på om nytt system för AI. Jag läste av en klasskamrats blogg att han också arbetar med AI och använde sig av ett system som verkade bättre än det jag själv använder. Jag har nu läst igenom hans blogg och kollar tutorial om hur det funkar. Tutorialen kan man se här: http://unity3d.com/learn/tutorials/modules/beginner/live-training-archive/state-machine-interface
Tisdag 19/4 – Refactoring (Omgjort arbete). Jag har nu arbetat med ny AI-hantering. Förut använde jag eget system som blev spaghetti-kod (massa onödig kod som sköts på dumt sätt) och nu använder jag ett system som fungerar. Jag hade tidigare använt väldigt mycket hårdkodning (manuellt uträknade variabler och algoritmer istället för att vara dynamiskt uträknade), men valde istället att använda ett system som det fanns en tutorial till. Jag har alltså skapat en ”state machine” (kod som hanterar event åt AI – Artificiell Intelligens ). Jag använder mig av ”Interface klass” vilket som i C++ är samma sak som virtuell abstrakt klass. Alltså, en klass som andra klasser ärver metoder ifrån. Så alla klasser som ärver ifrån klassen, måste använda samma metoder annars säger koden ifrån. Varför man vill göra så är för att man vet alltid att dem klasserna kommer att ha dom metoderna så man kan göra en till klass som säger i vilken ordning metoderna och klasserna ska köras med. I mitt fall så använder jag state machine till mina vakter och min abstrakta klass heter ”iGuardState”. Sen skapar jag klasser som ska ärva av iGuardState som är vaktens beteenden, alltså; Patrullering, jaga och eskortera.
Efter klasserna skapar jag då min state machine klass som skapar en instans av alla klasserna i början när projektet körs och säger att patrullering är vaktens första beteende. Patrullering fungerar på samma sätt som jag nämnt tidigare i bloggen, att användaren själv sätter ut punkter som vakten går emellan. I patrulleringen så kollar hela tiden vakten ifall det finns en fånge i närheten och om det finns det så går vakten in i sitt ”jaga” beteende och sätter fart mot fången. När väl vakten är framme vid fången så går den över i sitt eskortering beteende och guidar fången till närmsta fängelse.
Onsdag 20/4 – State machine till fångarna. Fixat fången så att den har likadant som vakternas state machine. Jag kopierade det mesta från vaktens kod men fångens olika beteende är; Röra sig, bli eskorterad och inaktiv. Röra sig är när spelaren sköter rörelsen (kommer berätta mer om det senare), bli eskorterad är när vakten har hämtat upp fången och eskorterar fången mot fängelset. Inaktiv är när fången väl är i fängelset, då jag enbart bara stänger av kollisionen för fången så att den står och blir ospelbar.
Torsdag 21/4 – Monitors. Jag gjorde om tv-skärmarna som tidigare var spelarens sätt att röra fångarna så att den hanteras med hjälp av en Enum. Anledningen till att jag gjorde om skärmarna var för att det tidigare var också väldigt hårdkodat och jag kom på ett sätt man kunde göra det väldigt mycket smidigare. Genom att använda mig av Enum (enuminator) som är en metod som håller heltal så kan jag aktivera skärmarna så att de också får ett beteende. I Enumen finns det; On, Off, Idle, som är På, Av och standby. När skärmen är på, så blir den grön, om skärmen är av så blir den röd och standby gör inget i nuläget. Skärmarna känner av ifall de har en fånge vid sig och ifall det blir aktiverade då och en annan skärm aktiveras, så går fången från skärmen till den andra. Jag gjorde också så att skärmarna stängs av direkt så spelaren har aktiverat två stycken så att spelaren kan direkt aktivera två till. Anledningen till det var för att vi tog emot feedback om att det var jobbigt att spelaren behövde manuellt stänga av skärmen igen för att sen kunna aktivera två andra.
Koden fungerar så att jag har en metod som aktiveras efter 0.1 sekunder och då stängs skärmarna av.
Jag tänkte senare att standby ska vara att skärmarna pekar dit fången går. Men det är ingen prioritering för nuvarande så avvaktar med det. Det är också en sak som är i diskussion.
Fredag 22/4 – Bugg fix. Idag har jag till mestadels bara fixat buggar eftersom det ska vara speltestning senare idag. Ett exempel på en bugg jag hanterade var; ibland stannade både vakter och fångar och stod helt stilla. Anledning till det var för att jag hade i koden skrivit att när det har nått sin destination så ska deras hastighet sättas till noll. Jag sätter deras hastighet till noll för att när man använder navmesh och sin agent har nått sitt mål så ställer sig agenten och ”vobblar” på sitt ställe (alltså går fram och tillbaka väldigt snabbt). Det jag gjorde var att varje gång agenten byter beteende så får den även en garanterad hastighet. Speltestning verkar ha gått bra.