public void ReturnTrianglesBuffer(MyEntity physObject) { foreach (byte value in Enum.GetValues(typeof(MyDecalTexturesEnum))) { var key = new MyDecalsForModelsDictionaryKey(physObject, (MyDecalTexturesEnum)value); MyDecalsForPhysObjectsTriangleBuffer outValue; if (m_triangleBuffersByKey.TryGetValue(key, out outValue)) { MyDecalsForPhysObjectsTriangleBuffer usedBuffer = outValue; m_triangleBuffersByKey.Remove(key); usedBuffer.Clear(); m_usedTriangleBuffers.Remove(usedBuffer); m_freeTriangleBuffers.Push(usedBuffer); } } }
public void CheckIfBufferIsFull() { if (m_status == MyDecalForModelsState.FADING_OUT) { if ((MyMinerGame.TotalGamePlayTimeInMilliseconds - m_fadingOutStartTime) > MyDecalsConstants.DECALS_FADE_OUT_INTERVAL_MILISECONDS) { // If fading-out phase finished, we change state and remove faded-out buffers for (int i = 0; i < m_fadingOutBuffersCount; i++) { if (m_usedTriangleBuffers.Count > 0) { MyDecalsForPhysObjectsTriangleBuffer releasedBuffer = m_usedTriangleBuffers[0]; m_usedTriangleBuffers.RemoveAt(0); releasedBuffer.Clear(); m_freeTriangleBuffers.Push(releasedBuffer); m_triangleBuffersByKey.Remove(new MyDecalsForModelsDictionaryKey(releasedBuffer.Entity, releasedBuffer.DecalTexture)); } } m_status = MyDecalForModelsState.READY; } } else { if (m_triangleBuffersByKey.Count >= m_fadingOutStartLimit) { int i = 0; foreach (MyDecalsForPhysObjectsTriangleBuffer buffer in m_usedTriangleBuffers) { if (i < m_fadingOutBuffersCount) { buffer.FadeOutAll(); } i++; } m_status = MyDecalForModelsState.FADING_OUT; m_fadingOutStartTime = MyMinerGame.TotalGamePlayTimeInMilliseconds; } } }