‫Dus als ik in de buurt van onze torens kom, kan ik zien dat ze debug-bollen tekenen, wat bewijst dat
‫ze de vuurfunctie aanroepen en dat ze dit elke 2 seconden doen.
‫Nu, daarnaast roepen ze alleen deze functie aan.
‫Als ik in vuurbereik ben, als ik hier terugkom, zul je merken dat ze geen foutopsporingsbollen tekenen.
‫Hier hoort dus ook een controle op afstand bij.
‫En zodra ik dichtbij genoeg ben, nou, daar gaan ze, die debug-bollen tekenen.
‫Hallo en welkom terug.
‫Nu hebben we al een vuurfunctie gemaakt en die gebruiken we in de tankklasse omdat we
‫deze hebben gekoppeld aan de vuuractietoewijzing.
‫Maar we willen dit ook graag hergebruiken met de torenklasse.
‫In plaats van gebruikersinvoer voor de torenklasse te gebruiken, gaan we nu timers gebruiken.
‫We gaan een timer maken voor de torenklasse zodat de timer de vuurfunctie kan aanroepen.
‫Om de zoveel tijd stellen we een bepaald aantal seconden in tussen oproepen naar de brandfunctie.
‫Dus omdat we willen dat de vuurfunctie af en toe wordt aangeroepen in de torenklasse, moeten we het nu
‫over timers hebben.
‫Unreal Engine heeft de mogelijkheid om timers in te stellen met behulp van een klasse genaamd F Timer Manager.
‫Er bestaat een wereldtimermanager die timers in de wereld beheert.
‫Nu heeft deze wereldtimermanager een functie genaamd Set Timer en set timer heeft een aantal ingangen,
‫zoals een timerhandvat.
‫Dit is een handvat voor een specifieke timer die wordt beheerd door de timermanager.
‫Hierdoor kan de manager meerdere timers hebben en hebben we toegang tot de timerinformatie voor elke timer door de timerhandle te
‫gebruiken als een soort naam of ID voor die timer.
‫Dit is een object van het type F timerhandvat.
‫We maken dus een timerhandvat en geven dit door aan de ingestelde timerfunctie.
‫Nu de timer instellen vereist ook andere invoer, zoals de snelheid of de hoeveelheid tijd die we moeten wachten
‫voordat we daadwerkelijk iets doen.
‫Dat gaat iets in onze callback-functie zijn.
‫We maken een functie aan en koppelen deze functie aan de timer zodat zodra er voldoende tijd is
‫verstreken, namelijk de timer rate, onze callback functie kan worden aangeroepen.
‫Dus we hebben gezien dat we een paar dingen nodig hebben voor onze timer en we gaan deze dingen in de torenklasse
‫plaatsen.
‫Dus laten we naar Toren H gaan en hier in het Toren H-bestand gaan we enkele privévariabelen toevoegen.
‫Dus net onder vuurbereik, hebben we onze timer nodig.
‫Dit is dus een F-timerhendel en we kunnen deze timer-handgreep voor de vuursnelheid eenvoudigweg noemen.
‫En we hebben ook een vuursnelheid nodig die een vlotter wordt.
‫We gaan deze vuursnelheid noemen en we kunnen dit initialiseren op twee punten F.
‫Dus op die manier moeten we twee seconden wachten voordat onze callback-functie daadwerkelijk wordt aangeroepen.
‫En over terugbelfuncties gesproken, we hebben er eigenlijk een nodig.
‫Dus we gaan een void-functie maken en we kunnen dit check fire-conditie noemen.
‫We hebben dus een timer-handvat en zodra we de timer instellen en deze begint te lopen, hebben we 2 seconden
‫om te wachten voordat de timer daadwerkelijk resulteert in het aanroepen van onze functie.
‫En ik noem dit check fire-conditie omdat we kunnen controleren of onze toren de fire-functie moet kunnen oproepen, zodat we
‫een aantal voorwaarden kunnen stellen die we kunnen controleren om er zeker van te zijn dat brand moet
‫worden opgeroepen.
‫Nu hebben we de functie brandvoorwaarde gedeclareerd.
‫We moeten het definiëren, zodat we naar toren CPP kunnen gaan en de functie hier kunnen definiëren.
‫Ik ga het onder begin play plaatsen, dus ik geef het een functielichaam en de naam van een torenklasse net
‫voor de functienaam.
‫Dus nu hebben we een functie, maar we moeten de timer eigenlijk zo instellen dat die tijd begint te lopen en de
‫functie aan het einde van die tijd wordt aangeroepen.
‫En we kunnen hier de timer instellen en beginnen met spelen, zodat deze begint te lopen vanaf het begin van het spel.
‫Dus we noemden de World Timer Manager en we hebben daar toegang toe met een functie genaamd Get World
‫Timer Manager.
‫Haal nu World Timer Manager op, retourneert een F timer manager-object.
‫En aangezien we dat type gebruiken, moeten we het headerbestand voor F timer manager opnemen.
‫Dus hier is het opnemen, het is gewoon timermanager h.
‫En we kunnen ook enkele van de functies zien die tot deze klasse behoren.
‫Dus blader hier doorheen als je geïnteresseerd bent in alle verschillende functies die bij F timer
‫manager horen.
‫Dus we kunnen dit header-bestand hier bovenaan de toren opnemen, net onder de andere omvat.
‫Dus nu we dat header-bestand hebben opgenomen, hebben we nu toegang tot de World Timer Manager en
‫de functie waarin we geïnteresseerd zijn heet set timer.
‫Haal nu wereldtimermanager gewoon een F-timermanager terug, hij retourneert geen aanwijzer.
‫Dus we gaan de punt gebruiken in plaats van de.
‫Arrow en we gaan de timer instellen.
‫Nu heeft de ingestelde timer verschillende versies of functie-overbelastingen.
‫Nu vs code heeft deze pop-up waarmee we door elke overbelasting kunnen gaan en de verschillende versies van deze
‫functie kunnen zien.
‫En de versie waarin ik geïnteresseerd ben, heeft eerst een F-timerhandvat en we gaan onze timerhandvat voor
‫vuursnelheid gebruiken, die we hebben verklaard in Tower H.
‫Nu zal de volgende parameter voor onze specifieke functie-overbelasting de gebruikersklasse zijn, net als
‫in bind-as en bind-actie.
‫Dit is de klasse waarin we werken waarin we de functie binden, want dat wordt dit.
‫Nu is de volgende callback-functie onze A Tower Check Fire-conditie, die functie die we
‫zojuist hebben gemaakt.
‫Nu hebben we het adres van de operator nodig omdat de ingestelde timer het functieadres heeft.
‫Nu is de volgende parameter een float voor de snelheid. Dit zal zijn hoeveel tijd er moet verstrijken voordat
‫onze callback wordt aangeroepen.
‫Dat wordt onze vuursnelheid.
‫En de laatste parameter is een boolean die aangeeft of deze timer al dan niet moet worden herhaald.
‫Nu wil ik dat onze callback-functie elke 2 seconden wordt aangeroepen, dus ik wil dat deze timer wordt herhaald.
‫Dus ik ga zeggen waar.
‫Als we vals zouden passen, zouden er 2 seconden verstrijken.
‫Onze functie zou worden aangeroepen en dat zou het zijn.
‫Maar aangezien we het op loop hebben ingesteld, wordt onze functie na 2 seconden aangeroepen, waarna de timer opnieuw
‫wordt gestart, en na nog twee seconden wordt de functie opnieuw aangeroepen en blijft het herhalen totdat
‫het spel afgelopen is.
‫Dus we hebben nu een functie gebonden aan onze timer en deze wordt elke 2 seconden aangeroepen.
‫We hebben dus een functie aan onze timer gekoppeld en deze wordt elke 2 seconden aangeroepen.
‫Maar we willen graag een soort bewijs of bevestiging dat deze functie daadwerkelijk wordt aangeroepen.
‫Dus voor je uitdaging in de torenklasse, ga naar onze nieuwe terugbelfunctie, controleer de staat van de brand.
‫Zorg ervoor dat de tank binnen vuurbereik is.
‫Je gaat de afstand van de toren tot de tank controleren.
‫En we weten hoe we dit moeten doen, omdat we dit al doen in de vinkfunctie.
‫Dus je moet misschien in de vinkfunctie kijken en zien hoe dit wordt gedaan om jezelf eraan te
‫herinneren, controleer nu die afstand, zorg ervoor dat we binnen vuurbereik zijn, en als we dat zijn, bel dan de
‫vuurfunctie, pauzeer de video en implementeer Dit nu.
‫Oké.
‫Dus ik ben terug in Tower CP en ik ga gewoon naar boven scrollen naar de tick-functie om mezelf eraan te herinneren hoe ik
‫deze afstand heb gekregen en heb gecontroleerd of het binnen vuurbereik was.
‫Nu kunnen we deze code hier eenvoudig hergebruiken en de brandtoestand controleren.
‫Nu is het hergebruiken van code niet erg efficiënt, dus we kunnen erover nadenken om dit te refactoreren, maar laten we er eerst voor zorgen
‫dat dit werkt, zodat we eerst onze tankaanwijzer kunnen controleren om er zeker van te zijn dat deze geldig is.
‫Dus ik ga dat hier doen en de staat van de brand controleren.
‫Ik ga zeggen dat als tank en als de tank geldig is, het volgende dat we kunnen doen
‫die afstand is, wat deze waarde is die hier wordt berekend met de f vector dist-functie.
‫Dus ik ga dat nemen en het hier neerleggen in controlebrandtoestand.
‫Het volgende dat we nu doen, is controleren of de afstand kleiner is dan of gelijk is aan het vuurbereik.
‫Dus dat gaan we hier beneden doen.
‫We zeggen dat als de afstand kleiner is dan of gelijk is aan het vuurbereik, en als dat het geval is, dan kunnen we
‫gewoon de vuurfunctie aanroepen.
‫Dus we gaan vuur roepen, en zo simpel is het.
‫Dus laten we doorgaan en dit compileren en we zijn terug bij de editor en ik ga op play drukken en
‫in vuurbereik komen.
‫En ik kan zien dat onze torens debug-bollen tekenen aan de punt van het vat, zodat we
‫kunnen zien dat die vuurfunctie wordt opgeroepen en het werkt op dezelfde manier voor de toren als voor de tank.
‫Dit is dus geweldig.
‫Dit bewijst voor ons dat onze timer loopt en dat onze callback-functie elke 2 seconden wordt aangeroepen.
‫Oké, dus we hebben deze brandfunctie om de 2 seconden aangeroepen nu in controle, brandconditie.
‫We hebben deze functionaliteit waarbij we zien of we binnen bereik zijn en we doen precies hetzelfde hier
‫in de vinkfunctie.
‫Dit is dus een perfecte gelegenheid om te refactoren.
‫We kunnen een soort functie maken die ons een boolean teruggeeft als we binnen bereik zijn met de tank.
‫Dus waarom gaan we niet door en refactor dit snel in een bull-return-functie?
‫Laten we hier in Toren H een privéfunctie creëren.
‫Het keert bool terug en we gaan zeggen in vuurbereik.
‫Dit is een eenvoudig spel en onze toren zal alleen binnen bereik zijn met de tank.
‫Dus dit is niet dubbelzinnig, want er is niets anders dat de toren ooit zou willen controleren om te
‫zien of het binnen bereik is van nu, als dit een ingewikkelder spel was met andere dingen waarvan de toren
‫de afstand zou willen controleren, dan zouden we misschien noem dit een beetje anders, maar we
‫kunnen dit gewoon in brandbereik noemen.
‫En wat ik ga doen is dit hier in Tower implementeren.
‫Dus laten we doorgaan en de functie-body maken.
‫We hebben een toren nodig die de functienaam vooraf vastlegt.
‫En wat we hier gaan doen is eigenlijk dezelfde afstandscontrole.
‫Dus we gaan eerst controleren of de tank geldig is met een if-controle.
‫Als dat zo is, dan kunnen we deze afstand krijgen, zodat we deze lijn kunnen kopiëren en onze lokale float voor de afstand hier
‫maken en die afstand vergelijken met het vuurbereik, zodat we kunnen zeggen of de afstand kleiner is dan of gelijk
‫is aan het vuurbereik, en als dat het geval is, kunnen we gewoon true retourneren.
‫Deze functie kan de waarde true retourneren.
‫En nu hebben we een functie die we kunnen aanroepen en die true teruggeeft als we binnen bereik zijn.
‫Nu, zodra we deze return true-regel hier in de if-instructie raken, keert de functie terug.
‫We springen uit de functie.
‫Dus al het andere na dit if-statement wordt niet uitgevoerd.
‫Dus wat we kunnen doen is helemaal aan het einde van onze in-fire range-functie, we kunnen false retourneren, want als we
‫ooit de return true bereiken, zullen we hier nooit echt bij de return false-regel komen.
‫We verlaten de functie gewoon eerder.
‫Maar als we niet binnen bereik zijn, als deze afstandscontrole hier faalt, dan halen we nooit de return true.
‫En we zullen het einde van de functie bereiken en false retourneren.
‫Dus deze functie retourneert waar of onwaar op basis van het feit of we al dan niet binnen bereik zijn, en we kunnen dit
‫gebruiken in plaats van herhaalde code in onze twee functies te gebruiken.
‫Dus hier in het vinkje hebben we bijvoorbeeld maar een enkele controle nodig om te zien of we binnen bereik zijn voordat we de toren
‫draaien.
‫Dus wat we kunnen doen, is dat we kunnen zeggen dat als we in vuurbereik zijn en als dit waar is, we ons in vuurbereik bevinden, dus we kunnen
‫een roterend torentje noemen.
‫Dus we zullen dat daar in de if-verklaring plaatsen.
‫En nu is al deze code overbodig, dus we kunnen het gewoon verwijderen.
‫En nu ziet dit er een stuk schoner uit dan wat we eerder hadden.
‫En dan kunnen we hierheen komen om de staat van de brand te controleren en hetzelfde te doen.
‫In plaats van dit alles, kunnen we eenvoudig controleren of we binnen brandbereik zijn.
‫En als dat zo is, kunnen we gewoon vuur noemen.
‫Dus nu hebben we met succes al die code herwerkt in een controle die is gemaakt in onze
‫in-fire range-functie.
‫Dus laten we doorgaan en dit opnieuw compileren en het gewoon heel snel testen om er zeker van te zijn dat
‫alles werkt zoals verwacht.
‫Dus we gaan door en spelen op play en komen in vuurbereik.
‫En natuurlijk zijn we in brandbereik en het werkt correct.
‫Dus samenvattend hebben we een timer gemaakt en elke 2 seconden roepen we de vuurfunctie in de torenklasse
‫aan.
‫Nu controleren we ook of Tank binnen bereik is.
‫Dus we roepen de vuurfunctie alleen om de 2 seconden op als de tank zich binnen het vuurbereik bevindt.
‫En we zagen ook dat we die afstandscontrole in twee verschillende functies gebruikten.
‫Dus we hebben het omgevormd tot zijn eigen functie en we noemen dat gewoon om te controleren of we binnen bereik zijn.
‫Dus we hebben nu een vuurfunctie die wordt aangeroepen op de torenklasse.
‫Het volgende wat je moet doen is om daadwerkelijk projectielen te spawnen met onze vuurfunctie.
‫Dus daar gaan we het in de volgende video over hebben.
‫Ik zie je snel.