Suggestions/ guidance for "powers" ability architecture

Hi,
I have an ability system that I have integrated with Opsive ability system. However, I have come to the conclusion that balancing a power's active states within an Opsive ability is proving... messy.
So, I am going to use Opsive abilities solely for my "powers" implementation.

My question is "What would an Opsive engineer recommend, at an architectural level, for creating reusable code blocks for powers?" and "What tools or features are already included in opsive systems that I would be wise to utilize?"

I'll list some examples of my scope:
--Ability/Power Use Management--
-A character can have multiple active and passive powers.
-Active powers are based on recharge (cooldown) or charge (like ammo or grenades)
-Recharge bases powers can optionally share a cooldown
-Charge based powers optionally share a charge pool.

--Ability/Power Lifetime--
-Powers can be on-off (like activating permanent energy armor that slows the character while active)
-Powers can be instant use (like instantly firing a wrist rocket)
-Powers can (and often will) be equippable (such as equipping a rechargeable drone)
-Powers can often be interrupted by stagger, or by activating other powers or abilities, depending on the state of the power (such as a drone being canceled by another power before it is launched, but not able to be canceled while the "throw drone" animation is being played)

--Ability/Power Use--
-Power effects can affect the user or another target. (including effects that may persist after the ability finishes)
-Powers can have any number of effects. (In my power system I injected effects into power-wrappers for runtime... It seems like a good idea, but I don't know if there is a more reusable way)
-A Power is "active" as long as any effect is still active.

--Ability/ Power Upgrades--
-Powers can have "upgrades" which modify base values, add new effects, change existing effects, or change.
-Upgrades are non-procedural, and are catered to each ability specifically. (even though they are non-procedural, they still can be injected)

While I am providing a whole bunch of information, it's just to give some context. I'm primarily looking for architecture suggestions and to be pointed to existing features that may help.

Also I know you guys have all sorts of other requests to respond to, as well as actual code to write... so feel free to respond to this in parts, or in a week, or whatever. I am in no rush, and I recognize that this may be a time consuming question.

Thank you for your support and for the UCC asset.
 
For a powers system you have two options:

- Use the state system.
- Create your own system that sets the properties manually.

The state system only allows you to set a single value to a property so it's not too dynamic. In this situation it looks like you have a lot of different use cases so I recommend creating a new component and expanding from there. At the heart of it you'll need to modify the properties, which will need to reference different abilities and effects. The character controller doesn't have anything built in which will do this for you so I would start with the most basic use case and expand from there.
 
Okay,
When you say "create a new component", I assume I would want to extend the opsive Ability base class, so I can use it's inbuilt lifecycle and and features?
 
I would have it be a completely new independent component. You aren't controlling any forces or animation state of the controller so there's really no advantage to inheriting from ability.
 
Okay, makes sense.
I just have one thing I'd like to clarify:
Powers will have animations, and when these power animations are playing it should bock or modify attributes like ability to reload, what equipment is selected, movement speed, so on and so forth.
so, when you say "animation state of the controller", we are talking about internal animation state, and not the current motion of the Animator Controller?
 
Ah, I was assuming that not all powers had animations associated with them and they just changed the properties. In that case then yes, using the ability system makes sense.
 
Top