Hey Gui, posting your answers here for posterity.
- Some BP Libraries work fine (Oculus for example), others don’t. No idea why. There is obviously some bit that needs to be twiddled - but I haven’t found it yet.
- Using the Begin Play is currently the only way, I can likely expose that Tag container. So I’ll look at that for the next update - I can’t think of any reason why not off the top of my head.
- There is a “CanAbilityActivate” check that you can have look at Tags and have all your other Abilities inherit from that so that BP call gets hit.
- The timeline has to be set to some value so you can drag and drop things, but yes, you could just set it to 1 second and as long as you have “Must Finish All Tasks” - the Ability will take as long as the Task requires. There’s just no way for me to know what that time may be to show in the Editor.
- Yes, manually adding things in BeginPlay is the best way. I do that in my own projects. Just make a quick system that takes a list of Abilities to auto apply.
- You can put both Client / Server / Client And Server tasks in the same Ability. The server just won’t execute the Client only tasks, and vice-versa. So make a simple Custom Task that hides your UI if you’re the local player and toss the animation and stuff in there as well.
- A death ability is what I do in my own projects. Basically just loops a dead animation, set some material parameters to fade the model out, and then, once the Ability is done playing, clean up the Actor. If you wanted corpses, you could just spawn in a corpse and do some pose copy - but it all begins with that Death ability.
- No, Damage is an event. There is a OnDamaged Event on the Actor itself, so you know when the Actor’s health is changing and possibly goes to 0. No reason to constantly check.
- Not sure what a Kill Task would do (unless maybe you mean mark the Actor as destroyed or something).
The basic questions I ask myself when deciding how to split logic is:
- Is the logic something simple and holistic that I want to expose to designers? Then it’s probably good for a Task. Doing a collision query, playing an Animation, playing a Particle effect. All simple tools that make for great Tasks. Tasks are your wood, hammer, nails, screws, etc. They are simple things that do one thing only but are fairly useless by themselves.
- Is the logic something I can see building from those pieces and may re-use? Then it’s probably good for an Ability. Abilities are your chairs, tables, etc - all made using using Tasks. Can you have a one-off Ability? Absolutely. If I want to have a background NPC play some animation to act as if he’s talking to another NPC and the other NPC just laughs - I can set that up with Able pretty easily (two abilities - same length, one plays the “talking animation” the other is timed to play the laugh when the talking ends and both Abilities are just auto applied when the game starts to their appropriate actors). That’s entirely fine. You don’t need to do a whole sequencer movie for something like that.
Able is pretty cheap in the grand scheme of things. The network bandwidth is super small, the CPU over head is relative to the number of Tasks you have running in an Ability so tiny Abilities don’t take much time. Odds are Physics, Rendering and Character Movement will be your high nails of performance or bandwidth long before Able is. So just do what is works and is easiest - you can always go back and refactor things as needed.