Fix effect queue with multiple items of the same instance.

This commit is contained in:
2023-02-19 22:15:25 +08:00
parent 3728360dd2
commit f2f3dba098

View File

@@ -43,14 +43,17 @@ namespace Cryville.Crtr {
} }
public void Emit(float index) { public void Emit(float index) {
EffectInstance instance; EffectInstance instance;
if (!_instances.TryGetValue(index, out instance)) { if (_instances.TryGetValue(index, out instance)) {
var i = _endQueue.BinarySearch(instance);
_endQueue.RemoveAt(i);
}
else {
_instances.Add(index, instance = _pool.Rent()); _instances.Add(index, instance = _pool.Rent());
} }
instance.Index = index; instance.Index = index;
instance.OnEmit(_time); instance.OnEmit(_time);
var i = _endQueue.BinarySearch(instance); var i2 = ~_endQueue.BinarySearch(instance);
if (i < 0) i = ~i; _endQueue.Insert(i2, instance);
_endQueue.Insert(i, instance);
} }
public void Dispose() { public void Dispose() {
_pool.DisposeAll(); _pool.DisposeAll();