@@ -133,6 +133,7 @@ private void OnDestroy()
133133 private List < FieldInfo > syncedFields = new List < FieldInfo > ( ) ;
134134 internal List < FieldType > syncedFieldTypes = new List < FieldType > ( ) ;
135135 private List < object > syncedFieldValues = new List < object > ( ) ;
136+ private List < MethodInfo > syncedVarHooks = new List < MethodInfo > ( ) ;
136137 //A dirty field is a field that's not synced.
137138 public bool [ ] dirtyFields ;
138139 internal void SyncVarInit ( )
@@ -142,107 +143,134 @@ internal void SyncVarInit()
142143 {
143144 if ( sortedFields [ i ] . IsDefined ( typeof ( SyncedVar ) , true ) )
144145 {
146+ object [ ] syncedVarAttributes = sortedFields [ i ] . GetCustomAttributes ( typeof ( SyncedVar ) , true ) ;
147+ MethodInfo method = null ;
148+ for ( int j = 0 ; j < syncedVarAttributes . Length ; j ++ )
149+ {
150+ if ( ! string . IsNullOrEmpty ( ( ( SyncedVar ) syncedVarAttributes [ j ] ) . hook ) )
151+ {
152+ method = GetType ( ) . GetMethod ( ( ( SyncedVar ) syncedVarAttributes [ j ] ) . hook , BindingFlags . NonPublic | BindingFlags . Public | BindingFlags . Instance ) ;
153+ break ;
154+ }
155+ }
145156 if ( sortedFields [ i ] . FieldType == typeof ( bool ) )
146157 {
147158 syncedFields . Add ( sortedFields [ i ] ) ;
148159 syncedFieldValues . Add ( sortedFields [ i ] . GetValue ( this ) ) ;
149160 syncedFieldTypes . Add ( FieldType . Bool ) ;
161+ syncedVarHooks . Add ( method ) ;
150162 }
151163 else if ( sortedFields [ i ] . FieldType == typeof ( byte ) )
152164 {
153165 syncedFields . Add ( sortedFields [ i ] ) ;
154166 syncedFieldValues . Add ( sortedFields [ i ] . GetValue ( this ) ) ;
155167 syncedFieldTypes . Add ( FieldType . Byte ) ;
168+ syncedVarHooks . Add ( method ) ;
156169 }
157170 else if ( sortedFields [ i ] . FieldType == typeof ( char ) )
158171 {
159172 syncedFields . Add ( sortedFields [ i ] ) ;
160173 syncedFieldValues . Add ( sortedFields [ i ] . GetValue ( this ) ) ;
161174 syncedFieldTypes . Add ( FieldType . Char ) ;
175+ syncedVarHooks . Add ( method ) ;
162176 }
163177 else if ( sortedFields [ i ] . FieldType == typeof ( double ) )
164178 {
165179 syncedFields . Add ( sortedFields [ i ] ) ;
166180 syncedFieldValues . Add ( sortedFields [ i ] . GetValue ( this ) ) ;
167181 syncedFieldTypes . Add ( FieldType . Double ) ;
182+ syncedVarHooks . Add ( method ) ;
168183 }
169184 else if ( sortedFields [ i ] . FieldType == typeof ( float ) )
170185 {
171186 syncedFields . Add ( sortedFields [ i ] ) ;
172187 syncedFieldValues . Add ( sortedFields [ i ] . GetValue ( this ) ) ;
173188 syncedFieldTypes . Add ( FieldType . Single ) ;
189+ syncedVarHooks . Add ( method ) ;
174190 }
175191 else if ( sortedFields [ i ] . FieldType == typeof ( int ) )
176192 {
177193 syncedFields . Add ( sortedFields [ i ] ) ;
178194 syncedFieldValues . Add ( sortedFields [ i ] . GetValue ( this ) ) ;
179195 syncedFieldTypes . Add ( FieldType . Int ) ;
196+ syncedVarHooks . Add ( method ) ;
180197 }
181198 else if ( sortedFields [ i ] . FieldType == typeof ( long ) )
182199 {
183200 syncedFields . Add ( sortedFields [ i ] ) ;
184201 syncedFieldValues . Add ( sortedFields [ i ] . GetValue ( this ) ) ;
185202 syncedFieldTypes . Add ( FieldType . Long ) ;
203+ syncedVarHooks . Add ( method ) ;
186204 }
187205 else if ( sortedFields [ i ] . FieldType == typeof ( sbyte ) )
188206 {
189207 syncedFields . Add ( sortedFields [ i ] ) ;
190208 syncedFieldValues . Add ( sortedFields [ i ] . GetValue ( this ) ) ;
191209 syncedFieldTypes . Add ( FieldType . SByte ) ;
210+ syncedVarHooks . Add ( method ) ;
192211 }
193212 else if ( sortedFields [ i ] . FieldType == typeof ( short ) )
194213 {
195214 syncedFields . Add ( sortedFields [ i ] ) ;
196215 syncedFieldValues . Add ( sortedFields [ i ] . GetValue ( this ) ) ;
197216 syncedFieldTypes . Add ( FieldType . Short ) ;
217+ syncedVarHooks . Add ( method ) ;
198218 }
199219 else if ( sortedFields [ i ] . FieldType == typeof ( uint ) )
200220 {
201221 syncedFields . Add ( sortedFields [ i ] ) ;
202222 syncedFieldValues . Add ( sortedFields [ i ] . GetValue ( this ) ) ;
203223 syncedFieldTypes . Add ( FieldType . UInt ) ;
224+ syncedVarHooks . Add ( method ) ;
204225 }
205226 else if ( sortedFields [ i ] . FieldType == typeof ( ulong ) )
206227 {
207228 syncedFields . Add ( sortedFields [ i ] ) ;
208229 syncedFieldValues . Add ( sortedFields [ i ] . GetValue ( this ) ) ;
209230 syncedFieldTypes . Add ( FieldType . ULong ) ;
231+ syncedVarHooks . Add ( method ) ;
210232 }
211233 else if ( sortedFields [ i ] . FieldType == typeof ( ushort ) )
212234 {
213235 syncedFields . Add ( sortedFields [ i ] ) ;
214236 syncedFieldValues . Add ( sortedFields [ i ] . GetValue ( this ) ) ;
215237 syncedFieldTypes . Add ( FieldType . UShort ) ;
238+ syncedVarHooks . Add ( method ) ;
216239 }
217240 else if ( sortedFields [ i ] . FieldType == typeof ( string ) )
218241 {
219242 syncedFields . Add ( sortedFields [ i ] ) ;
220243 syncedFieldValues . Add ( sortedFields [ i ] . GetValue ( this ) ) ;
221244 syncedFieldTypes . Add ( FieldType . String ) ;
245+ syncedVarHooks . Add ( method ) ;
222246 }
223247 else if ( sortedFields [ i ] . FieldType == typeof ( Vector3 ) )
224248 {
225249 syncedFields . Add ( sortedFields [ i ] ) ;
226250 syncedFieldValues . Add ( sortedFields [ i ] . GetValue ( this ) ) ;
227251 syncedFieldTypes . Add ( FieldType . Vector3 ) ;
252+ syncedVarHooks . Add ( method ) ;
228253 }
229254 else if ( sortedFields [ i ] . FieldType == typeof ( Vector2 ) )
230255 {
231256 syncedFields . Add ( sortedFields [ i ] ) ;
232257 syncedFieldValues . Add ( sortedFields [ i ] . GetValue ( this ) ) ;
233258 syncedFieldTypes . Add ( FieldType . Vector2 ) ;
259+ syncedVarHooks . Add ( method ) ;
234260 }
235261 else if ( sortedFields [ i ] . FieldType == typeof ( Quaternion ) )
236262 {
237263 syncedFields . Add ( sortedFields [ i ] ) ;
238264 syncedFieldValues . Add ( sortedFields [ i ] . GetValue ( this ) ) ;
239265 syncedFieldTypes . Add ( FieldType . Quaternion ) ;
266+ syncedVarHooks . Add ( method ) ;
240267 }
241268 else if ( sortedFields [ i ] . FieldType == typeof ( byte [ ] ) )
242269 {
243270 syncedFields . Add ( sortedFields [ i ] ) ;
244271 syncedFieldValues . Add ( sortedFields [ i ] . GetValue ( this ) ) ;
245272 syncedFieldTypes . Add ( FieldType . ByteArray ) ;
273+ syncedVarHooks . Add ( method ) ;
246274 }
247275 else
248276 {
@@ -260,6 +288,8 @@ internal void SyncVarInit()
260288 internal void OnSyncVarUpdate ( object value , byte fieldIndex )
261289 {
262290 syncedFields [ fieldIndex ] . SetValue ( this , value ) ;
291+ if ( syncedVarHooks [ fieldIndex ] != null )
292+ syncedVarHooks [ fieldIndex ] . Invoke ( this , null ) ;
263293 }
264294
265295 internal void FlushToClient ( int clientId )
0 commit comments