55
66local require = require (script .Parent .loader ).load (script )
77
8- local Maid = require (" Maid" )
98local Signal = require (" Signal" )
9+ local ValueObject = require (" ValueObject" )
1010
1111local EnabledMixin = {}
1212
@@ -17,12 +17,14 @@ function EnabledMixin:Add(class)
1717 assert (not class .SetEnabled , " class.SetEnabled already defined" )
1818 assert (not class .IsEnabled , " class.IsEnabled already defined" )
1919 assert (not class .InitEnabledMixin , " class.InitEnabledMixin already defined" )
20+ assert (not class .ObserveIsEnabled , " class.ObserveIsEnabled already defined" )
2021
2122 -- Inject methods
2223 class .IsEnabled = self .IsEnabled
2324 class .Enable = self .Enable
2425 class .Disable = self .Disable
2526 class .SetEnabled = self .SetEnabled
27+ class .ObserveIsEnabled = self .ObserveIsEnabled
2628 class .InitEnabledMixin = self .InitEnabledMixin
2729end
2830
@@ -33,13 +35,17 @@ function EnabledMixin:InitEnabledMixin(maid)
3335
3436 self ._enabledMaidReference = maid
3537
36- self ._enabled = false
37- self .EnabledChanged = Signal .new () -- :Fire(isEnabled, doNotAnimate, enabledMaid)
38- self ._enabledMaidReference :GiveTask (self .EnabledChanged )
38+ self ._enabledState = maid :Add (ValueObject .new (false , " boolean" ))
39+
40+ self .EnabledChanged = maid :Add (Signal .new ()) -- :Fire(isEnabled, doNotAnimate)
41+
42+ self ._maid :GiveTask (self ._enabledState .Changed :Connect (function (isEnabled , _ , doNotAnimate )
43+ self .EnabledChanged :Fire (isEnabled , doNotAnimate )
44+ end ))
3945end
4046
4147function EnabledMixin :IsEnabled ()
42- return self ._enabled
48+ return self ._enabledState . Value
4349end
4450
4551function EnabledMixin :Enable (doNotAnimate )
@@ -50,17 +56,14 @@ function EnabledMixin:Disable(doNotAnimate)
5056 self :SetEnabled (false , doNotAnimate )
5157end
5258
59+ function EnabledMixin :ObserveIsEnabled ()
60+ return self ._enabledState :Observe ()
61+ end
62+
5363function EnabledMixin :SetEnabled (isEnabled , doNotAnimate )
5464 assert (type (isEnabled ) == " boolean" , " Bad isEnabled" )
5565
56- if self ._enabled ~= isEnabled then
57- self ._enabled = isEnabled
58-
59- local enabledMaid = Maid .new ()
60- self ._enabledMaidReference ._enabledMaid = enabledMaid
61-
62- self .EnabledChanged :Fire (isEnabled , doNotAnimate , enabledMaid )
63- end
66+ self ._enabledState :SetValue (isEnabled , doNotAnimate )
6467end
6568
6669return EnabledMixin
0 commit comments