Blogginlägg nr 5

Tjena!

Den här veckan har handlat mycket om att fixa saker som inte riktigt funkar, finslipning, buggar osv. En sak som vi egentligen hade som mål att hinna få färdigt till betan var AI:n för våra turrets. Dock så prioriterade vi andra fundamentala saker som kändes viktigare och då var det turrets:en som fick stycka lite på foten.

Tidigare så har dom funkat lite halvdant och istället för att välja måltavlor själva så sköt dom dit åt spelaren sköt med huvudkanonen, eller rättare sagt parallellt med spelarnas raketer. Så planen nu var att varje turret skulle välja det mest lämpliga skeppet och skjuta mot det.

Det ända jag behöll av den provisoriska koden som fanns innan var klockan och koden som spawnar raketen åt turreten (en push_back till vectorn med raketer).

Till att börja med så gjorde jag en vector-loop för våran vector med turrets. I den gjorde jag ytterligare en vector-loop för våran vector med enemies. Sen med hjälp av if-satser så kollar jag först och främst vilken sektor fienden är på (del av spelplanen) och om den är på samma sektor som turret:en, det var viktigt att utesluta fienderna på andra sektorer tidigt för att annars skulle mina senare if-satser inte fungera.

Då skeppen åker uppifrån och neråt så började jag med att kolla vilket av skeppen som var närmast planten, alltså vilket skepp som har högst värde på y-axeln. Man vill ju att turret:en ska skjuta ner den fiende som hotar mest lixom. Detta gjorde jag med if-satser och SFMLs inbyggda getPosition-funktion. Sen använde jag ”set” funktioner som jag gjort själv för att spara turret:ens och turret:ens måltavlas x & y koordinater.

Koden för rakternas rörelse hade jag gjort sen innan som endast är en vector-loop för raket-vectorn som har en ”update”-funktion, som jag också gjort sedan innan, som tar 4 floats (turret:ens x & y koordinat och måltavlans x & y) och som beräknar vinkeln som raketen ska förhålla sig till.

När jag hade gjort detta fick jag problemet att om du hade flera turrets på samma sektor så sköt dom på samma skepp hela tiden vilket kändes rätt meningslöst. Därför behövde jag lägga till x-axeln i beräkningen också så jag gjorde beräkningar med if-satser att turrets:en hela tiden siktade mot det skeppet som var närmast dom i x-led istället, men om något skepp hade kommit tillräckligt långt på y-leden så skulle dom sikta mot dem istället.

Från början hade jag fundering på en lösning där ifall en turret skjuter mot ett skepp så kan inte någon annan turret skjuta mot det skeppet. Förmodligen inte jättesvårt att lösa men jag kände att jag behövde gå vidare att lägga tid på annat istället. Dessutom skulle jag vilja ha en bättre kompromiss mellan x och y axeln egentligen men men. Behöver också fixa rotationen på raketerna också. Relativt nöjd i alla fall. Det var allt för denna veckan. Tack och hej!

About Mathias Henningsson

2015 Programming