SimpleJavaEngine/src/main/java/speiger/src/coreengine/rendering/tesselation/VertexList.java

69 lines
1.6 KiB
Java

package speiger.src.coreengine.rendering.tesselation;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import speiger.src.collections.ints.lists.IntArrayList;
import speiger.src.collections.ints.lists.IntList;
import speiger.src.coreengine.rendering.tesselation.VertexElement.ElementUsage;
import speiger.src.coreengine.utils.collections.iterators.ReadOnlyIterator;
public class VertexList implements Iterable<VertexElement>
{
List<VertexElement> elements = new ArrayList<VertexElement>();
Set<ElementUsage> types = EnumSet.noneOf(ElementUsage.class);
IntList offsets = new IntArrayList();
int totalOffset;
public VertexList() {}
public VertexList(VertexList vertexList)
{
elements.addAll(vertexList.elements);
offsets.addAll(vertexList.offsets);
totalOffset = vertexList.totalOffset;
}
public VertexList add(VertexElement element)
{
elements.add(element);
offsets.add(totalOffset);
totalOffset += element.getSize();
types.add(element.getUsage());
return this;
}
public int getOffsets()
{
return totalOffset;
}
public int size()
{
return elements.size();
}
public VertexElement get(int index)
{
return elements.get(index);
}
public int getOffset(int index)
{
return offsets.getInt(index);
}
@Override
public Iterator<VertexElement> iterator()
{
return new ReadOnlyIterator<>(elements.iterator());
}
public boolean hasType(ElementUsage type)
{
return types.contains(type);
}
}