Hola , he vuelto. I was a bit absent because my brain kept repeating “you havent done any art in a while so get yo as$ back to Zbrush!”, but now that the itch is over I can return to studying the toolkit. So I rewatched the Turn Manager video (timestamps in the comments), and made some notes and questions. Anyone feel free to address them if you have any comments or remarks, I would super appreciate it; specially the questions, since those are obviously my biggest doubts I came upon when watching the vid.
My plan would be to do the same with the Ability system videos next before returning to full-on experimenting with the ATBTT again. Good luck with your thesis too ! Best of luck to you.
**Turn Manager
Sort Objects in Order **
- Unless shuffled, the array is not ordered entirely randomly - their order will vary depending on which was the last element modified in the viewport, which is undesirable.
- The** Local Sorted Objects** array will initially be empty. Because of this, the first time an actor passes through the ForEachLoopWithBreak it’ll go through the Completed route and add itself to the empty Local Sorted Objects array. By the end of the function though, this array will include all the actors that have initiative, and whatever is at index 0 is the unit that’s currently active (or about to be).
- The Turn Manager itself is also added to the initiative array, in order to keep track of the current rounds/turn number. It’s default initiative value is set to a super high value (1000000) so as to always be first when the game starts.
Begin Actor Turn Event
- This event is called by the Start Match event.
- There are two similarly named variables here: Active Actor, an Actor Object Reference, and Active Unit, a BP Unit Object Reference. Usually the AA variable will contain the next Actor in-line coming with the highest initiative at the time, after which it also becomes the AU, which will let variables contained within to be accessed more easily. Exception to this would be when the Turn Manager is the AA for example - it will never become an AU too.
1- (7:29) I understand these as safety checks, though I wonder if they are really necessary, like the IsValid pin here (or the isValid pin in the End Turn function). In which situation would this prove useful? If I had an invalid actor, I’d imagine I’d encounter issues way before here, like in the Sort Objects in Order function that sorts actors into the initiative array…?
2- (09:12) Set w/ Notify - What is this kind of node? I understand it calls a function and sets a variable (which comes first though I do not know), but what is this blueprint pin type called so as to investigate it a little more in the unreal docs? Given that I create it by simply selecting Set Active Actor (picture below), I would normally think it is no different than a simple Set pin, yet this one comes out saying Set w/Notify. I’ll chalk this one up to BPs being sometimes a bit confusingly designed…
https://forums.unrealengine.com/core/06cfdf0e-35db-4ab6-b806-1b0b34e94c51

3- (09:48) “If it is a unit, we set the BP Unit as the new Active Unit. If not, we set the Active Unit as empty.” Why/What would be the point of setting it as empty? Won’t that cause problems later?
4- And speaking of Active Unit, is it really that necessary to create it as a separate variable from Active Actor? Using the Search function I only found it being used in the Set w/Notify, where you only set its value, and then in the Swap To Unit function, where it is admittedly reference multiple times. Still, is it worth creating this variable for just this rare scenarios, or is it another modular-kind of convenience you created to accommodate for potential needs and projects in the future?
5- (11:20) I don’t fully understand the queueAction StoreTurnInfo’s purpose. To sum it up in one sentence without going into the nitty-gritty, is it correct to say it is something that waits till all Client are ready to see it, and gives the green light for that unit to start animating (by setting the Active Actor Animate variable)?
Turn Manager - Activate Actor
- Keeps track of the number of rounds/turns. It also serves as a good function to add in turn-related events.
BP_Unit - Activate Actor
- This event was designed to be called first when activating the unit, and its main purpose is to keep track of abilities’ cooldowns and status effects, if there are any.
- It will check if the unit is using the Ability System - something which would allow the unit to have various abilities to select and choose from. At the end of this function, the Run on Turn Start function is called to activate any status effects that should occur at the beginning of the unit’s turn. Basic units lack an Ability System, so none of this applies to them.
BP_Unit - Reactivate Actor
- Whenever a unit is activated or reactivated, if it still has action points, it will queue the Select action which will get the Player Pawn, the camera, to focus on the active unit.
Turn Manager - End Turn
6- (24:13) Why do you call the Player Controller by calling the Owner of the Active Actor instead of simply using the Get Player Controller pin? What’s the difference?

https://forums.unrealengine.com/core/f7458015-a5c9-4b57-b59f-911bcb588fb2
Move Actor in Initiative
- Moves Actors in the initiative array in various ways for different needs. It’s function will change according to the Selection enum states:
End: Moves actor to end of array. Default state. This actor will not move again until all others get a turn first.
First: Moves actor to top of array. Used for example in the BeginActorTurn Event, to put the next-in-line unit as the active actor.
Second: Moves actor to second to top of array. In what practical examples would this be needed? Is this currently being used in the toolkit at any point for example? *
Last in Faction: Moves actor to the end of its faction group of initiatives, before opposing faction starts. Could this be used to replicate Tab-switching between your team members in an firaxisXCOM-like game for example?
Remove: After the actor ends its turn, it will be removed from the array. Useful for elements which we only want activated once. Any examples?*
First in Next Round: Moves actor right after the Turn Manager, which normally marks the division between rounds.
Check if Actor Will Act This Turn
7-(28:25) If I understand correctly, CheckIfActorWillActThisTurn’s result is really only needed for the forementioned firaxisXCOM-like Tab-switching?
And that’s it! Thanks for reading.