@@ -197,21 +197,39 @@ public void WriteField(Stream stream)
197197 }
198198
199199 /// <inheritdoc />
200- public void ReadField ( Stream stream )
200+ public void ReadField ( Stream stream , bool keepDirtyState )
201201 {
202202 using ( PooledBitReader reader = PooledBitReader . Get ( stream ) )
203203 {
204+ if ( keepDirtyState )
205+ {
206+ dirtyEvents . Add ( new NetworkedListEvent < T > ( )
207+ {
208+ eventType = NetworkedListEvent < T > . EventType . Clear
209+ } ) ;
210+ }
211+
204212 list . Clear ( ) ;
205213 ushort count = reader . ReadUInt16Packed ( ) ;
206214 for ( int i = 0 ; i < count ; i ++ )
207215 {
208216 list . Add ( ( T ) reader . ReadObjectPacked ( typeof ( T ) ) ) ; //BOX
217+
218+ if ( keepDirtyState )
219+ {
220+ dirtyEvents . Add ( new NetworkedListEvent < T > ( )
221+ {
222+ eventType = NetworkedListEvent < T > . EventType . Add ,
223+ index = i ,
224+ value = list [ i ]
225+ } ) ;
226+ }
209227 }
210228 }
211229 }
212230
213231 /// <inheritdoc />
214- public void ReadDelta ( Stream stream )
232+ public void ReadDelta ( Stream stream , bool keepDirtyDelta )
215233 {
216234 using ( PooledBitReader reader = PooledBitReader . Get ( stream ) )
217235 {
@@ -226,12 +244,24 @@ public void ReadDelta(Stream stream)
226244 list . Add ( ( T ) reader . ReadObjectPacked ( typeof ( T ) ) ) ; //BOX
227245
228246 if ( OnListChanged != null )
229- OnListChanged ( new NetworkedListEvent < T >
247+ {
248+ OnListChanged ( new NetworkedListEvent < T >
230249 {
231250 eventType = eventType ,
232- index = list . Count - 1 ,
251+ index = list . Count - 1 ,
233252 value = list [ list . Count - 1 ]
234253 } ) ;
254+ }
255+
256+ if ( keepDirtyDelta )
257+ {
258+ dirtyEvents . Add ( new NetworkedListEvent < T > ( )
259+ {
260+ eventType = eventType ,
261+ index = list . Count - 1 ,
262+ value = list [ list . Count - 1 ]
263+ } ) ;
264+ }
235265 }
236266 break ;
237267 case NetworkedListEvent < T > . EventType . Insert :
@@ -240,12 +270,24 @@ public void ReadDelta(Stream stream)
240270 list . Insert ( index , ( T ) reader . ReadObjectPacked ( typeof ( T ) ) ) ; //BOX
241271
242272 if ( OnListChanged != null )
243- OnListChanged ( new NetworkedListEvent < T >
273+ {
274+ OnListChanged ( new NetworkedListEvent < T >
275+ {
276+ eventType = eventType ,
277+ index = index ,
278+ value = list [ index ]
279+ } ) ;
280+ }
281+
282+ if ( keepDirtyDelta )
283+ {
284+ dirtyEvents . Add ( new NetworkedListEvent < T > ( )
244285 {
245286 eventType = eventType ,
246287 index = index ,
247288 value = list [ index ]
248289 } ) ;
290+ }
249291 }
250292 break ;
251293 case NetworkedListEvent < T > . EventType . Remove :
@@ -255,12 +297,24 @@ public void ReadDelta(Stream stream)
255297 list . RemoveAt ( index ) ;
256298
257299 if ( OnListChanged != null )
258- OnListChanged ( new NetworkedListEvent < T >
300+ {
301+ OnListChanged ( new NetworkedListEvent < T >
259302 {
260303 eventType = eventType ,
261304 index = index ,
262305 value = value
263306 } ) ;
307+ }
308+
309+ if ( keepDirtyDelta )
310+ {
311+ dirtyEvents . Add ( new NetworkedListEvent < T > ( )
312+ {
313+ eventType = eventType ,
314+ index = index ,
315+ value = value
316+ } ) ;
317+ }
264318 }
265319 break ;
266320 case NetworkedListEvent < T > . EventType . RemoveAt :
@@ -270,12 +324,24 @@ public void ReadDelta(Stream stream)
270324 list . RemoveAt ( index ) ;
271325
272326 if ( OnListChanged != null )
273- OnListChanged ( new NetworkedListEvent < T >
327+ {
328+ OnListChanged ( new NetworkedListEvent < T >
329+ {
330+ eventType = eventType ,
331+ index = index ,
332+ value = value
333+ } ) ;
334+ }
335+
336+ if ( keepDirtyDelta )
337+ {
338+ dirtyEvents . Add ( new NetworkedListEvent < T > ( )
274339 {
275340 eventType = eventType ,
276341 index = index ,
277342 value = value
278343 } ) ;
344+ }
279345 }
280346 break ;
281347 case NetworkedListEvent < T > . EventType . Value :
@@ -285,12 +351,14 @@ public void ReadDelta(Stream stream)
285351 if ( index < list . Count ) list [ index ] = value ;
286352
287353 if ( OnListChanged != null )
288- OnListChanged ( new NetworkedListEvent < T >
354+ {
355+ OnListChanged ( new NetworkedListEvent < T >
289356 {
290357 eventType = eventType ,
291358 index = index ,
292359 value = value
293360 } ) ;
361+ }
294362 }
295363 break ;
296364 case NetworkedListEvent < T > . EventType . Clear :
@@ -299,10 +367,12 @@ public void ReadDelta(Stream stream)
299367 list . Clear ( ) ;
300368
301369 if ( OnListChanged != null )
302- OnListChanged ( new NetworkedListEvent < T >
370+ {
371+ OnListChanged ( new NetworkedListEvent < T >
303372 {
304373 eventType = eventType ,
305374 } ) ;
375+ }
306376 }
307377 break ;
308378 }
0 commit comments