safe update controllers

This commit is contained in:
2016-09-09 21:16:47 +07:00
parent b3783f22c4
commit 891c1790c3
3 changed files with 28 additions and 2 deletions

View File

@@ -62,5 +62,9 @@ namespace FlashTools.Internal {
_list.Clear();
_dict.Clear();
}
public void AssignTo(SwfList<T> list) {
_list.AssignTo(list);
}
}
}

View File

@@ -106,5 +106,22 @@ namespace FlashTools.Internal {
}
}
}
public void AssignTo(SwfList<T> list) {
if ( list._data.Length < _size ) {
var new_data = new T[_size * 2];
Array.Copy(_data, new_data, _size);
list._data = new_data;
list._size = _size;
} else {
if ( _size < list._size ) {
Array.Clear(list._data, _size, list._size - _size);
}
if ( _size > 0 ) {
Array.Copy(_data, list._data, _size);
}
list._size = _size;
}
}
}
}

View File

@@ -7,6 +7,7 @@ namespace FlashTools {
SwfAssocList<SwfClip> _clips = new SwfAssocList<SwfClip>();
SwfAssocList<SwfClipController> _controllers = new SwfAssocList<SwfClipController>();
SwfList<SwfClipController> _safeUpdates = new SwfList<SwfClipController>();
// ---------------------------------------------------------------------
//
@@ -92,8 +93,12 @@ namespace FlashTools {
void UpdateControllers() {
var dt = Time.deltaTime;
for ( int i = 0, e = _controllers.Count; i < e; ++i ) {
_controllers[i].InternalUpdate(dt);
_controllers.AssignTo(_safeUpdates);
for ( int i = 0, e = _safeUpdates.Count; i < e; ++i ) {
var ctrl = _safeUpdates[i];
if ( ctrl ) {
ctrl.InternalUpdate(dt);
}
}
}