public void UpdateQuad(QuadHandle _handle) { var handle = _handle.index; var data = Data[handle]; Trace.Assert(handle < Handles.Count); { int[] verts = new int[4]; // vertexes int vOffset = vPerQuad * handle; for (int i = 0; i < 4; ++i) { var vIndex = i + vOffset; verts[i] = vIndex; vArray[vIndex] = new TVertex().GenVertex(data, i); } // indexes to those vertexes // see the index diagram at https://github.com/MonoGame/MonoGame/blob/develop/MonoGame.Framework/Graphics/SpriteBatcher.cs // except we flipped vertex 2 and 3 int iOffset = iPerQuad * handle; iArray[iOffset + 0] = verts[0]; iArray[iOffset + 1] = verts[1]; iArray[iOffset + 2] = verts[2]; iArray[iOffset + 3] = verts[0]; iArray[iOffset + 4] = verts[2]; iArray[iOffset + 5] = verts[3]; } handlesToUpdate.Add(_handle); }
public QuadHandle AddQuad(TQuadData data) { var newHandle = new QuadHandle() { index = Handles.Count }; Handles.Add(newHandle); Trace.Assert(Handles.Count <= MaxQuads, "Too many quads added"); Data.Add(data); UpdateQuad(newHandle); return(newHandle); }
public void RemoveQuad(QuadHandle toHandle) { var lastIndex = Handles.Count - 1; var fromHandle = Handles[lastIndex]; // if they are equal, we don't need to do anything if (toHandle.index != Handles.Count - 1) { // copy last into another position Data[toHandle.index] = Data[lastIndex]; Handles[toHandle.index] = Handles[lastIndex]; // update the handle fromHandle.index = toHandle.index; UpdateQuad(fromHandle); } // remove the data for the last element Data.RemoveAt(lastIndex); Handles.RemoveAt(lastIndex); }