I recommend using seperate timers and only have them run as often as they need to for each calculation. If you need all of the calculations every second, maybe you can limit how far each loop gets in its calculations by using Branch/If statements. For example, if the trace fails (cannot see an enemy), then you might not need to calculate the rotation. You can use the profiler to determine how much CPU time the calculations are taking. If you just have a ton of calculations, you should think about using C++ for them since blueprint is slower.