forked from arookas/Demolisher
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Primitive.cs
53 lines (46 loc) · 1.48 KB
/
Primitive.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
using Arookas.Collections;
using Arookas.IO.Binary;
using OpenTK.Graphics.OpenGL;
using System;
using System.Collections;
using System.Collections.Generic;
namespace Arookas.Demolisher
{
class Primitive : IEnumerable<Vertex>
{
public Vertex[] vertices;
public PrimitiveType Type { get; private set; }
public int VertexCount { get { return vertices.Length; } }
public int FaceCount { get { return (VertexCount - 2); } }
public Vertex this[int index] { get { return vertices[index]; } }
public BeginMode GLType
{
get
{
switch (Type)
{
case PrimitiveType.Lines: return BeginMode.Lines;
case PrimitiveType.LineStrip: return BeginMode.LineStrip;
case PrimitiveType.Points: return BeginMode.Points;
case PrimitiveType.TriangleFan: return BeginMode.TriangleFan;
case PrimitiveType.Triangles: return BeginMode.Triangles;
case PrimitiveType.TriangleStrip: return BeginMode.TriangleStrip;
default: throw new InvalidOperationException("Primitive type is invalid.");
}
}
}
public Primitive(ABinaryReader binaryReader, bool useNBT, int uvCount, BatchAttributes attributes)
{
Type = (PrimitiveType)binaryReader.Read8();
vertices = CollectionHelper.Initialize<Vertex>(binaryReader.Read16(), () => new Vertex(binaryReader, useNBT, uvCount, attributes));
}
public IEnumerator<Vertex> GetEnumerator()
{
return vertices.GetArrayEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
}