Not sure I understand entirely - the top portion of the video seems like an overall score. I suppose the blue/red squares could represent captured zones…
Either way, the widget needs to be dynamic. As I’m sure you have already considered given your question about not making them static.
The map needs to take care of adding however many widgets to represent each location at runtime (on begin play).
- to do this you would probably loop through all actors of class “trigger” or with a custom tag for “capture point” and generate the widgets to add to the HUD with it.
Doing so, means that the values of each widget can all be separately instanced and updated. You can even output a capture percentage or fill an image bar based on the value of the total points / 100 rather then just flip between red and blue (or team colors).
IF you want to re-organize the order to have it be fixed then you would have to modify at runtime based on what is getting conquered. You can somewhat easily do this by changing the Row order of the widget element at runtime.
The option is available when you place the widgets inside a container that supports it. like a grid.
As an example of creating widgets procedurally:
On player start I’m creating A widget and filling custom variables with info.
Whenever the widget is added to the screen it will contain those variables (if you use the instanced pin ofc.)
The widget automatically creates what it needs based on the variables:
A good way to call for updates is to create an interface and add it to the widgets so that you can quickly loop through all the ones that implement the interface. However, if you just create your own widget type to add - like in my case the WidgetPart Button class, you can use that to loop though. Just make the class something specific to the captures so that it’s unique.
A custom event can loop through all the widgets, find one that has a matching a variable name tag or whatever other means you choose to identify them and allow you to update the displayed data.
Or, each widget class can updated itself with the on-tick function (maybe reduce the timing of the tick event for it).
I would even go as far as just implementing an interface for it.
then you can call the updates directly from the area without having to do much of anything - when the trigger/overlap of the capture zone happens you can just issue the interface call to update all the widgets.