WEBVTT

00:06.860 --> 00:08.040
Welcome back.

00:08.060 --> 00:14.810
Now that we have our widget controller, I'm going to go to Aura Hut here and just take a look at an

00:14.960 --> 00:15.560
overlay.

00:15.560 --> 00:24.440
We know we have a widget controller on our overlay widget and the overlay widget has a handle to the

00:24.440 --> 00:25.250
widget controller.

00:25.250 --> 00:28.550
It has a pointer variable and we can access that.

00:28.550 --> 00:31.430
We've seen that we can even access it from Blueprint.

00:31.580 --> 00:37.340
Now the widget controller doesn't know anything about the overlay widget.

00:37.340 --> 00:42.440
All the widget controller knows is that it has access to the four key variables.

00:42.470 --> 00:47.240
That's how it's going to access data to broadcast to the widget.

00:47.240 --> 00:54.050
And when we say broadcast to the widget, we are talking about delegates because delegates are a great

00:54.050 --> 01:00.530
way to have one way dependencies where our widget controller doesn't know about the widgets, that it's

01:00.530 --> 01:04.400
broadcasting data to the widgets know about the controller.

01:04.400 --> 01:06.170
That's the way that it goes.

01:06.170 --> 01:14.850
So our widget controller should have a way to broadcast initial values such as the initial health and

01:14.850 --> 01:19.200
the initial mana values for those mana and health globes.

01:19.200 --> 01:25.410
So our widget controllers all are going to want some sort of way to broadcast initial values.

01:25.410 --> 01:33.180
So for that reason I'd like a function in the base widget controller class or a widget controller to

01:33.180 --> 01:35.070
broadcast initial values.

01:35.070 --> 01:39.030
So I'm going to make a public function here for just that.

01:39.150 --> 01:47.820
So we'll make this a virtual function void and it'll be called broadcast initial values.

01:48.180 --> 01:56.340
And any widget controller that inherits this function should be able to broadcast its own unique initial

01:56.340 --> 01:57.360
values.

01:57.360 --> 02:02.940
But they're all going to have this function and I'm going to go ahead and generate the definition,

02:02.940 --> 02:07.800
but it'll be empty here for the base class or a widget controller.

02:07.800 --> 02:14.340
We're just going to use it in classes that derive from it, such as our overlay widget controller,

02:14.340 --> 02:17.280
and I'd like to override that now.

02:17.280 --> 02:20.060
So we're going to go to overlay widget controllers.

02:20.730 --> 02:26.940
We're going to make a public section and we'll override that function virtual void, and it's going

02:26.940 --> 02:29.700
to be broadcast initial values.

02:29.700 --> 02:33.270
That's an override and we'll generate that definition.

02:33.270 --> 02:34.140
No need to call.

02:34.140 --> 02:34.560
Super.

02:34.560 --> 02:35.970
Super is empty.

02:36.000 --> 02:39.300
We're just going to put our own broadcast now.

02:39.300 --> 02:40.920
What are we going to broadcast?

02:40.950 --> 02:43.500
Well, we know that we have health and mana.

02:43.500 --> 02:48.120
We need to broadcast some values to those widgets.

02:48.120 --> 02:54.060
And for that reason, I'd like to create a couple of delegates for broadcasting those values.

02:54.180 --> 02:56.910
So let's keep this a bit cleaner.

02:56.910 --> 03:04.380
Let's go ahead and right click and close other tabs and I'm going to alt O control k O and Visual Studio

03:04.380 --> 03:06.730
to open overlay widget controllers.

03:06.990 --> 03:11.100
And I'd like to add a couple of new delegates.

03:11.520 --> 03:15.300
I'd like to make these dynamic multicast delegates.

03:15.300 --> 03:23.040
I'd like them to be dynamic multicast because for one, I'd like to assign events to them in Blueprint

03:23.040 --> 03:25.170
and our widget blueprint specifically.

03:25.170 --> 03:32.130
That's why I want them to be dynamic and multicast because multiple blueprints, multiple widget blueprints

03:32.130 --> 03:36.920
may want to bind to these delegates so that they can update.

03:36.930 --> 03:40.410
So we're choosing dynamic multicast.

03:40.410 --> 03:51.660
So we're going to say declare, underscore, dynamic multicast delegate and we have several flavors.

03:51.660 --> 03:54.240
We're going to want one with one param.

03:54.240 --> 03:54.810
Why?

03:54.840 --> 03:58.980
Because we want to send a value out through the delegate.

03:59.010 --> 04:02.220
We want to broadcast the health value.

04:02.220 --> 04:05.490
So we need to pick a name for this delegate type.

04:05.490 --> 04:13.470
It has to start with an F and I'm going to call this on health changed, but I'm going to add signature

04:13.470 --> 04:14.280
at the end of it.

04:14.280 --> 04:19.020
You may have seen this on some delegate types in the engine.

04:19.020 --> 04:21.300
They put signature at the end.

04:21.330 --> 04:31.020
That's just to specify that this is the delegate type and this one is capable of sending a single parameter.

04:31.020 --> 04:35.550
It's going to be a float and it's going to be the new health.

04:35.550 --> 04:44.370
So we're declaring a delegate that can broadcast a float and this is going to be designated for the

04:44.370 --> 04:45.660
health specifically.

04:45.660 --> 04:47.910
Now I'd like to make another one for Max Health.

04:47.910 --> 04:53.850
I want to broadcast the values of health and max health as they change separately.

04:53.850 --> 05:02.310
So for this one, we'll call this F on max health changed signature and we'll say this is called New

05:02.340 --> 05:03.360
Max health.

05:03.360 --> 05:06.300
Now this just declares the type we.

05:06.390 --> 05:11.880
Want a couple of member variables of these types that we can assign in blueprint.

05:11.880 --> 05:18.900
So we're going to come down here into the public section in the widget controller class and make a couple

05:18.900 --> 05:19.160
of these.

05:19.170 --> 05:25.020
We're going to make an F on health change signature and we're going to call this on health change.

05:25.230 --> 05:31.080
So this is why I didn't call this F on health changed and then create an on health change.

05:31.080 --> 05:34.080
The signature makes it clear that this is the delegate type.

05:34.080 --> 05:37.680
And then on health change is the delegate itself.

05:37.680 --> 05:40.200
And we're going to give it a new property.

05:40.200 --> 05:43.350
And I'd like to be able to assign to this in blueprint.

05:43.350 --> 05:49.260
So we're going to make it blueprint assignable and we'll go ahead and give it a category.

05:50.380 --> 05:52.630
And this is related to gas.

05:52.630 --> 06:01.060
So I'll have gas and I'll use the vertical line half of the logical or right, and we'll have a sub

06:01.060 --> 06:03.130
category attributes.

06:04.150 --> 06:05.260
That's where this will be.

06:05.260 --> 06:12.220
And because we made a dynamic multicast delegate and we made it blueprint assignable, then we can bind

06:12.220 --> 06:17.950
to this delegate in blueprint and that's where I plan on binding to it.

06:18.040 --> 06:22.090
Now I'm going to do the same thing for our max health variable.

06:22.090 --> 06:26.890
So we're going to have an on max health changed delegate as well.

06:27.220 --> 06:37.900
And once our widget blueprint, our WP overlay or our health globe or our mana globe, any of those,

06:37.900 --> 06:45.400
if they have access to the widget controller, they can assign an event to receive that health if we

06:45.400 --> 06:46.210
broadcast it.

06:46.210 --> 06:47.200
So this is great.

06:47.200 --> 06:49.330
We have two delegates now.

06:49.330 --> 06:52.460
We need to broadcast the initial values.

06:52.700 --> 06:58.490
So what that means is we need to take these delegates and broadcast some value, right?

06:58.490 --> 07:03.350
We need to take on health changed and call dot broadcast.

07:03.350 --> 07:04.280
That's how we do it.

07:04.280 --> 07:07.490
And we can broadcast 100 F, right.

07:07.490 --> 07:10.130
But well, what if this is wrong?

07:10.130 --> 07:15.560
What if our attribute set doesn't have the health value initialized to 100?

07:15.560 --> 07:17.720
What if it's a weaker type of character class?

07:17.720 --> 07:20.570
What if it starts off at 50 or 65?

07:20.600 --> 07:23.210
We can't be hard coding things like this.

07:23.240 --> 07:28.160
We need to get the actual value of the health attribute right.

07:28.190 --> 07:29.660
How do we do that?

07:29.930 --> 07:32.030
And that's going to be a request.

07:32.330 --> 07:40.910
I'd like you to figure out how to get the actual health attribute in broadcast initial values and well

07:40.940 --> 07:41.690
broadcast.

07:41.690 --> 07:46.250
It broadcast both the health and the max health.

07:46.340 --> 07:51.710
So pause the video and do this in broadcast initial values now.

07:54.980 --> 07:55.340
Okay.

07:55.340 --> 08:00.110
So here in broadcast initial values, we don't want to just broadcast 100 for the health.

08:00.110 --> 08:04.640
We want to broadcast the real value of that health attribute.

08:04.790 --> 08:12.380
Now, in overlay widget controller, we are a widget controller class based on or a widget controller.

08:12.380 --> 08:15.560
So we know that we have an attribute set right.

08:15.590 --> 08:20.890
We have the attribute set member variable and that's of type.

08:20.900 --> 08:30.050
You attribute set, it's a T object pointer, but we want to access the actual health value of the aura

08:30.050 --> 08:36.340
attribute set health attribute so we can cast this to an aura attribute set.

08:36.350 --> 08:37.310
So let's do that.

08:37.310 --> 08:42.350
Let's say you aura attribute set right is going to include that header.

08:42.350 --> 08:49.070
For me, that's a pointer and we'll call it aura attribute set and we'll initialize it with a cast.

08:49.280 --> 08:57.600
Now we can use cast checked as this should never fail as long as we call broadcast initial values after

08:57.600 --> 09:01.050
the attribute set member variable has been initialized.

09:01.050 --> 09:07.800
So we just have to make sure that we only call this after attribute set has become valid.

09:07.800 --> 09:14.400
So we're going to cast to aura attribute set and we're casting our attribute set member variable and

09:14.400 --> 09:21.990
then we can access aura attribute sets, attribute accessors such as get health and get max health so

09:21.990 --> 09:29.880
we can take on health changed and we can broadcast and we can broadcast the aura attribute set, get

09:29.910 --> 09:35.790
health, and we can also take on max health changed and we can broadcast.

09:36.060 --> 09:40.800
And what we can broadcast is aura attribute set, get max health.

09:42.750 --> 09:50.580
And now as soon as broadcast initial values is called, we'll broadcast the values of the actual health

09:50.580 --> 09:54.030
and max health attributes on the attribute set.

09:54.060 --> 09:59.100
Now writer is going to tell me this can be a const local variable, so why not?

09:59.130 --> 10:05.580
We'll make that pointer const and now broadcast initial values will broadcast our initial values.

10:05.580 --> 10:09.810
So when do we actually call broadcast initial values?

10:09.810 --> 10:11.130
That's the question, right?

10:11.130 --> 10:16.320
Because we have to make sure that we have a valid attribute set at that point in time.

10:16.590 --> 10:22.560
And we should also call this after any widgets have had their widget controller set.

10:22.590 --> 10:26.430
Well, let's go back to Aura HUD dot CP.

10:27.900 --> 10:30.210
Right here in init overlay.

10:30.240 --> 10:32.700
Now we've created the widget.

10:32.730 --> 10:35.160
We've created the widget controller.

10:35.160 --> 10:43.050
And then here we're setting the widget controller to the result of git overlay widget controller.

10:43.080 --> 10:46.110
So when can we broadcast initial values?

10:46.140 --> 10:49.260
Well, we've got our widget controller here.

10:49.260 --> 10:53.910
We've called get overlay widget controller passing in those widget controller params.

10:53.910 --> 11:00.960
So at this point the widget controller does have a valid attribute set and at this point our overlay

11:00.960 --> 11:08.460
widget has its widget controller set, which means that widget controller set blueprint event will be

11:08.460 --> 11:08.850
called.

11:08.850 --> 11:15.350
At this point, that's where we can do those things like bind to the widget controllers delegates.

11:15.360 --> 11:22.170
So only after this has happened should we tell the widget controller to broadcast its initial values.

11:22.170 --> 11:24.380
So we'll do it right after that.

11:24.390 --> 11:27.340
So what we'll do is take widget controller.

11:29.010 --> 11:31.620
And we'll call broadcast initial values.

11:31.830 --> 11:38.400
So as long as we're setting the widget controller and binding those widget blueprints events to the

11:38.400 --> 11:44.070
widget controllers delegates, as long as that's happened first, then we can call broadcast initial

11:44.070 --> 11:45.300
values in our widget.

11:45.300 --> 11:47.550
Blueprints can respond to them.

11:47.880 --> 11:52.290
So let's make sure that everything is done on the blueprint side for this system.

11:52.290 --> 11:54.450
I'm going to go ahead and run in debug mode.

11:55.360 --> 12:03.580
Okay, I'm back in the editor and what I'm going to do is go into my blueprints, UI overlay and open

12:03.850 --> 12:05.440
up overlay.

12:05.470 --> 12:13.870
This widget blueprint has its widget controller set to my overlay widget controller of that, I'm certain,

12:14.020 --> 12:22.510
but I really would like my health and Mana globes to also have their widget controller set to my overlay

12:22.510 --> 12:23.410
widget controller.

12:23.440 --> 12:28.480
See multiple widgets can have their widget controller set to the same widget controller.

12:28.720 --> 12:36.040
So here in the graph I'm going to right click and get my event called Widget Controller set.

12:36.340 --> 12:43.600
At this point I know my widget controller is a valid widget controller and I'm going to set the widget

12:43.600 --> 12:48.640
controllers on my two widgets, my health globe.

12:48.640 --> 12:55.340
I'm going to select that here and check is variable and my mana globe, I'm going to select that and

12:55.340 --> 12:56.360
check is variable.

12:56.360 --> 13:03.410
And back here in the graph, now that I have these as variables, I can drag them out, both of them,

13:03.410 --> 13:08.570
and I can set their widget controllers by calling set widget controller.

13:08.840 --> 13:14.060
We made that blueprint callable, so I'm going to call that for both of them.

13:14.060 --> 13:21.920
And what I'm going to set their widget controllers to is the widget controller that WPP overlay has.

13:22.100 --> 13:29.930
So I can access that with a right click typing widget controller and I can get widget controller and

13:29.930 --> 13:32.630
simply set it for both of these.

13:34.380 --> 13:42.210
And now as soon as Overlay has its widget controller set and by the way, that's right here in Init

13:42.210 --> 13:47.830
overlay in Aura HUD, it's calling set widget controller for the overlay widget right here.

13:47.850 --> 13:53.970
As soon as that happens, this event triggers off, which means we're calling set widget controller

13:53.970 --> 13:56.850
for the health globe and the manner globe.

13:56.940 --> 13:58.200
But what does that mean?

13:58.200 --> 14:03.570
It means that their event widget controller set will also be kicked off.

14:03.630 --> 14:06.950
That's because set widget controller calls this.

14:06.960 --> 14:10.050
So here in C plus plus we've called this function.

14:10.050 --> 14:13.230
We have not yet reached broadcast initial values.

14:13.230 --> 14:20.430
We're still here because this sets off a chain reaction, starting with event widget controller set,

14:20.460 --> 14:27.120
which calls set widget controller for the Health and Mana Globes and that triggers their event widget

14:27.120 --> 14:31.830
controller set to be called, which means we can go into those widget blueprints.

14:31.830 --> 14:41.620
We'll go to UI Progressbar here and open health globe and here in the graph we can right click and type

14:41.620 --> 14:49.150
widget controller set and this will be kicked off as soon as we've set that widget controller here in

14:49.150 --> 14:50.090
the overlay.

14:50.110 --> 14:51.160
Pretty cool.

14:51.160 --> 14:54.610
And that means the widget controller here is valid.

14:54.610 --> 14:59.860
So we can right click, we can say widget controller, we can get that.

14:59.860 --> 15:01.840
And this is just a you object.

15:01.840 --> 15:09.310
But the cool thing is it's been set here, which means if we can cast it to overlay widget controller,

15:09.310 --> 15:12.160
we can bind to those delegates.

15:12.160 --> 15:16.720
But if I type overlay widget controller, well, we don't see anything here.

15:16.720 --> 15:25.030
And that's because back here in C plus plus our overlay widget controller needs to be a blueprint type

15:25.030 --> 15:27.370
and we should make it blue printable as well.

15:27.400 --> 15:34.210
Blueprint type means we can do things like use it as a type in the event graph, such as if we want

15:34.210 --> 15:35.080
to cast to it.

15:35.080 --> 15:39.580
And blue printable means we can make a blueprint based on this class.

15:39.580 --> 15:43.090
So let's make it blueprint type and blueprint able.

15:43.090 --> 15:44.350
We'll do both.

15:44.680 --> 15:51.580
And for that reason I'm going to close the editor, but I want to save selected, save all that stuff

15:51.580 --> 15:54.310
and we'll go ahead and launch again.

15:54.310 --> 16:01.330
So we'll run in debug mode and I'll go ahead and open up the health globe and the overlay both.

16:01.360 --> 16:05.980
And right here I want to be able to cast it to a widget controller.

16:05.980 --> 16:10.090
If I type in cast to overlay widget controller.

16:10.090 --> 16:12.430
Now I have that option right?

16:12.430 --> 16:20.350
And from here I can access those delegates on health changed and such and bind things to those.

16:20.740 --> 16:24.370
But we also made this class blueprint able.

16:24.370 --> 16:31.540
And for that reason I'd like to create a blueprint for overlay widget controller and just work with

16:31.540 --> 16:32.500
that.

16:32.530 --> 16:41.050
So I'm going to go to Blueprints UI, make a new folder called Widget Controller here in Widget Controller,

16:41.050 --> 16:46.090
I'm going to make a new blueprint based on overlay widget controller.

16:46.180 --> 16:54.790
So selecting that and I'll call this BP underscore overlay widget controller.

16:55.210 --> 17:01.840
And it's this class that I would like our HUD to construct rather than a raw C plus plus class.

17:01.840 --> 17:09.100
So back in the UI HUD folder opening BP aura, HUD, we can set overlay widget controller class now

17:09.100 --> 17:11.560
to BP overlay widget controller.

17:11.560 --> 17:14.800
Now we're not using a raw C plus plus class there.

17:14.800 --> 17:21.490
And now in our health globe rather than casting to the raw C plus plus class, I'm going to cast to

17:21.490 --> 17:22.450
the BP version.

17:22.450 --> 17:26.620
I'm going to say cast to BP overlay widget controller.

17:26.620 --> 17:29.020
And that way we're dealing with the blueprint.

17:29.020 --> 17:36.520
And as soon as Health Globe has its widget controller set, it can access the on health changed.

17:36.520 --> 17:43.480
And if we choose, assign on health change here and hook that up, then as soon as that broadcast is

17:43.480 --> 17:44.140
made.

17:44.140 --> 17:50.500
Remember in broadcast, initial values were broadcasting on health changed as soon as this broadcast

17:50.500 --> 17:57.310
is made, if we assign this event to that delegate, then this event is going to be called.

17:57.310 --> 18:03.640
And I'd like to assign to not only on health changed, but also on max health change.

18:03.640 --> 18:08.410
So I'm going to type on max health change and assign that one as well.

18:09.060 --> 18:12.660
So now we have the ability to do something.

18:12.660 --> 18:20.580
When we broadcast that and when we broadcast the initial values, we want to set the percentage for

18:20.580 --> 18:21.750
our health globe.

18:21.780 --> 18:25.560
Now we're going to be setting one and then the other, right?

18:25.560 --> 18:30.460
And typically our percent is health divided by max health.

18:30.480 --> 18:34.710
So what we'll do is we'll set the percent for both times.

18:34.710 --> 18:41.310
Each time we set the health and the max health, we'll go ahead and divide and get the percent.

18:41.310 --> 18:49.230
So here's what we'll do as soon as on health changed is called, we can promote new health to a variable

18:49.230 --> 18:53.820
and that way we'll set that variable and then we'll do the same thing for on Max Health.

18:53.820 --> 18:56.130
We'll promote that to a variable.

18:56.340 --> 19:02.340
So for on Health changed, we'll promote this and we'll call this simply health.

19:02.340 --> 19:08.650
And for on max health change, we'll promote this and we'll call this max health.

19:08.740 --> 19:11.230
Now our health globe has both of these.

19:11.320 --> 19:16.660
And after setting health and after setting max health, we'll set the health percent.

19:16.690 --> 19:21.910
Now we want to be able to set the percent for the progress bar, but we don't have access to it here

19:21.910 --> 19:25.030
because this exists on the parent class.

19:25.030 --> 19:33.700
So we need to open that parent class, WP Globe Progress Bar and we need a function to set that percent

19:33.700 --> 19:36.760
for our progress bar globe here.

19:36.760 --> 19:40.060
So we're going to make a function here on the base class.

19:40.060 --> 19:47.380
So we're going to click add function and we're going to call this set progress bar percent.

19:47.860 --> 19:51.280
We're going to give this a float input parameter.

19:51.280 --> 19:54.670
So adding an input here, it's going to be of type float.

19:54.820 --> 20:02.620
We're going to call this percent and we're going to get our progress bar here, Progress Bar Globe,

20:02.740 --> 20:12.940
get that and call set percent on this and hook that up and just pass percent in like that and set progress

20:12.940 --> 20:14.110
bar percent.

20:14.230 --> 20:18.010
This function can be called in our health globe.

20:18.010 --> 20:26.080
So I'm going to compile here and here in WP Health Globe After we set health we're going to call set

20:26.080 --> 20:28.900
progress bar percent.

20:30.380 --> 20:32.480
And what are we going to set it to?

20:32.510 --> 20:35.360
We're going to set it to health divided by max health.

20:35.450 --> 20:42.860
So I'm going to hold control, drag out health, drag out max health, and I'm going to divide.

20:42.860 --> 20:45.500
But I want to do a safe divide.

20:45.770 --> 20:52.940
And that way, if max health is zero, in other words, it hasn't been set yet or it just happens to

20:52.940 --> 20:53.910
be zero.

20:53.930 --> 20:56.090
Well then we're not dividing by zero.

20:56.090 --> 20:59.150
Safe divide will just return zero in that case.

20:59.480 --> 21:06.320
And I'm going to take this copy it and paste it over here so that I can call set progress bar percent

21:06.350 --> 21:07.370
here as well.

21:07.370 --> 21:11.170
I'm going to duplicate this function call and do it there.

21:11.180 --> 21:17.990
So we're calling set progress bar percent whenever health gets set and whenever max health gets set.

21:17.990 --> 21:25.460
So when we broadcast initial values, well, we're going to call this here when max health is zero and

21:25.460 --> 21:27.640
set progress bar percent to zero.

21:27.650 --> 21:30.960
If health gets set before max health.

21:30.960 --> 21:36.840
But if max health gets set first, then at this point, Max health will not be zero.

21:36.840 --> 21:41.360
So either way, we'll get that progress bar percent set.

21:41.370 --> 21:47.460
So I'm going to compile and save all just in case we crash and press play.

21:47.460 --> 21:53.850
And now our health is set to full because we're actually accessing the real health value and the real

21:53.850 --> 21:54.900
max health value.

21:54.900 --> 21:59.520
Both of those should be 100 if we type show debug in the console.

22:00.400 --> 22:01.780
Ability system.

22:01.960 --> 22:05.470
We'll see that health is 100 max, health is 100.

22:05.470 --> 22:09.730
And so we see the real value there and that is great.

22:09.730 --> 22:17.050
So this is nice because our base class, Globe Progress Bar now has a function to set its own health

22:17.050 --> 22:17.890
percent.

22:17.890 --> 22:24.670
And in our child class health globe, we can call that function and we have the ability to do the same

22:24.670 --> 22:28.060
thing in other child classes such as our mana Globe.

22:28.060 --> 22:33.670
Now, before wrapping up this video, I'd like this all to be nice and organized.

22:33.670 --> 22:41.140
So what I think I'd like to do here is I'd like to promote this BP overlay widget controller to its

22:41.140 --> 22:50.380
own variable, so I'm going to drag off of it, promote a variable and call this BP overlay widget controller

22:51.250 --> 22:52.690
and set that.

22:52.810 --> 22:56.560
And then I can organize this a little bit better.

22:56.560 --> 23:02.870
So instead of just dragging off of the cast, I now have this variable here that I can use.

23:02.870 --> 23:07.280
I can control, drag it in and hook that up there.

23:07.490 --> 23:10.370
I can control, drag it in and hook it up there.

23:10.370 --> 23:13.850
And we don't need these all connected like this.

23:13.850 --> 23:16.910
This one needs to be connected, but these two don't.

23:16.910 --> 23:20.390
And I can also organize this all with a sequence.

23:20.390 --> 23:29.330
So why don't I just drag everything off to the side just a bit and after event, widget controller set

23:29.360 --> 23:30.260
fires off.

23:30.260 --> 23:31.520
We'll do a sequence.

23:33.110 --> 23:39.260
The first thing we'll do is set the widget controller after we've cast it to the blueprint version.

23:39.260 --> 23:47.660
And then for then one we'll bind to on health changed and then we'll have a then to where we bind to

23:47.660 --> 23:48.680
the max health.

23:50.540 --> 23:51.650
Like this.

23:55.060 --> 23:58.450
And that way things are organized.

23:58.450 --> 24:06.850
And up here, this will be put in its own comment where we'll say set widget controller.

24:09.070 --> 24:11.380
And I'll add a reroute node to it.

24:12.270 --> 24:15.330
And I'll put a comment on the second one here.

24:16.670 --> 24:27.290
Where we say bind to on health changed and I'll put a reroute node there and I'll comment the third

24:27.290 --> 24:32.660
one and say bind to on max health changed.

24:32.690 --> 24:35.330
We'll put a reroute node on that one as well.

24:35.600 --> 24:42.100
And if you like, you can click on the comment and change the comment color if you want.

24:42.110 --> 24:49.310
For example, if you want to bind all your delegates and have those share the same color, say a light

24:49.340 --> 24:51.320
green, for example, you can do that.

24:51.320 --> 24:55.100
You can also drag that color up here to save it.

24:55.370 --> 25:00.020
And then you can select this comment and choose that saved color.

25:00.020 --> 25:05.120
If you want your delegate bindings to all share the same color, for instance.

25:05.750 --> 25:11.930
That way you can look at it and know that those are binding to some delegates.

25:12.470 --> 25:20.030
Okay, So now we're successfully broadcasting from our widget controller and binding to those delegate

25:20.030 --> 25:28.190
broadcasts here in our widgets so that we can have actual real values shown here on the screen.

25:28.190 --> 25:34.340
And we're going to get to test that and also set this up for the Manna Globe as well in the videos to

25:34.340 --> 25:34.640
come.

25:34.640 --> 25:35.990
So great job.

25:36.020 --> 25:37.220
I'll see you soon.
