Fix effect queue with multiple items of the same instance.
This commit is contained in:
@@ -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();
|
||||||
|
Reference in New Issue
Block a user