Buildings och BuildingManager
|
Jag har gjort en byggnadsklass och en manager för den klassen. Byggnadsmanagern hanterar skapandet, uppdateringen, lagringen och ritandet utav byggnaderna. Ett problem som jag hade när det gällde skapandet utav byggnaderna var rotationen på de. Eftersom allting i spelet ritas ut i relation till planeten, som är en cirkel, och alla byggnaderna skapas i samma for-loop och får deras position runt cirkeln baserad på värdet utav integer variabeln ”i” i denna for-loop i form av radianer. Jag hade allmänna svårigheter med att komma på ett sätt att dynamiskt sätta rotationen på varje byggnad och få det att fungera rätt på grund utav att min trigonometri är praktiskt tagit icke existerande. Som tur var min gruppkamrat som kunde trigonometri till hands och sa att jag bara behövde sätta ut varje byggnads nuvarande position (som var bestämt utav i) gånger 180 gånger M_PI. Jag förstår inte vad något utav det där gör, men det fungerar så jag bryr mig inte. Anledningen till att vi har en byggnadsmanager över huvud taget är tvåfaldigt. Den första anledningen är att när fiende skeppen landar på planeten så kommer husen i närheten på vart de hade landat att se mer skitiga ut på grund av att de människorna som bodde där flyttade därifrån. För att hantera detta i kod så hade jag gjort en funktion i byggnadsmanagern som tog emot en fiendeskepp pekare och jämförde dess position med positionen utav alla byggnaderna och om någon utav de positionerna hade överlappats så ändrades den påverkade byggnadens status (som var bestämt utav enums) till att vara i en skadad status. Det är vid det laget som byggnaden automatisk ändrade sin sprite till att vara den förstörda versionen på dess sprite (vilken sprite den skulle byta till var också bestämt utav enums). Denna funktion kallas i Enemymanagern när en fiende har landat. Nu när jag tänker efter dock så kommer jag på att jag inte behövde sätta ut enums för att bestämma om en byggnad var förstörd eller inte, en bool skulle vara mycket bättre för det. Aja, om vi bestämmer oss för att ha flera stadier av förstörda hus så skulle enums fungera. Den andra anledningen till att jag gjorde en byggnadsmanager är för att när ett visst antal byggnader förstörs så ska ens chef komma upp i den nedre högra hörnen av skärmen och skrika på spelaren om att de hade gjort ett dåligt jobb. I den funktionen som nämndes två paragrafer upp, i if-satsen som kollar kollisionen mellan byggnaderna och fienden, så finns det en integer variabel som adderas med 1 för varje byggnad som blir förstörd. Denna integer variabel hämtas då ut ur byggnadsmanagern varje frame och in i Gamestate klassen som sedan kollar vilket värde den har och säjer åt boss klassen att skapas och rita ut en bit text som då säger något, oftast elakt, till spelaren. |
