1
1
using System ;
2
+ using System . ComponentModel ;
3
+ using System . Runtime . CompilerServices ;
2
4
using Gameframe . ScriptableObjects . Events ;
5
+ using JetBrains . Annotations ;
3
6
using UnityEngine ;
4
7
5
8
namespace Gameframe . ScriptableObjects . Locks
6
9
{
7
10
[ CreateAssetMenu ( menuName = MenuNames . LockMenu + "Lock" ) ]
8
- public class GameLock : ScriptableObject
11
+ public class GameLock : ScriptableObject , INotifyPropertyChanged
9
12
{
10
13
[ NonSerialized ]
11
14
private int lockCount = 0 ;
@@ -65,8 +68,22 @@ public void Unlock()
65
68
}
66
69
67
70
private void RaiseValueChanged ( )
71
+ {
72
+ OnPropertyChanged ( nameof ( Locked ) ) ;
73
+ }
74
+
75
+ /// <summary>
76
+ /// INotifyPropertyChanged interface implemented to support Gameframe.Bindings
77
+ /// </summary>
78
+ #region INotifyPropertyChanged
79
+
80
+ public event PropertyChangedEventHandler PropertyChanged ;
81
+
82
+ [ NotifyPropertyChangedInvocator ]
83
+ private void OnPropertyChanged ( string propertyName = null )
68
84
{
69
85
var value = Locked ;
86
+
70
87
if ( value )
71
88
{
72
89
if ( lockedEvent != null )
@@ -81,8 +98,27 @@ private void RaiseValueChanged()
81
98
unlockedEvent . Raise ( ) ;
82
99
}
83
100
}
84
- OnValueChanged ? . Invoke ( value ) ;
101
+
102
+ try
103
+ {
104
+ PropertyChanged ? . Invoke ( this , new PropertyChangedEventArgs ( propertyName ) ) ;
105
+ }
106
+ catch ( Exception e )
107
+ {
108
+ Debug . LogException ( e , this ) ;
109
+ }
110
+
111
+ try
112
+ {
113
+ OnValueChanged ? . Invoke ( value ) ;
114
+ }
115
+ catch ( Exception e )
116
+ {
117
+ Debug . LogException ( e , this ) ;
118
+ }
85
119
}
120
+
121
+ #endregion
86
122
87
123
}
88
124
}
0 commit comments