PageRenderTime 14ms CodeModel.GetById 5ms app.highlight 8ms RepoModel.GetById 0ms app.codeStats 0ms

/src/aerys/minko/render/geometry/stream/iterator/TriangleIterator.as

https://bitbucket.org/HopeSky/mars_nd2d
ActionScript | 97 lines | 70 code | 21 blank | 6 comment | 3 complexity | c1ccef716cc48b27fa68451ed9e25644 MD5 | raw file
 1package aerys.minko.render.geometry.stream.iterator
 2{
 3	import aerys.minko.ns.minko_stream;
 4	import aerys.minko.render.geometry.stream.IVertexStream;
 5	import aerys.minko.render.geometry.stream.IndexStream;
 6	
 7	import flash.utils.Proxy;
 8	import flash.utils.flash_proxy;
 9
10	/**
11	 * TriangleIterator allow per-triangle access on VertexStream objects.
12	 *
13	 * @author Jean-Marc Le Roux
14	 *
15	 */
16	public final class TriangleIterator extends Proxy
17	{
18		use namespace minko_stream;
19
20		private var _singleReference	: Boolean			= true;
21
22		private var _offset				: int				= 0;
23		private var _index				: int				= 0;
24
25		private var _vb					: IVertexStream		= null;
26		private var _ib					: IndexStream		= null;
27
28		private var _triangle			: TriangleReference	= null;
29
30		public function get length() : int
31		{
32			return _ib ? _ib.length / 3 : _vb.numVertices / 3;
33		}
34
35		public function TriangleIterator(vertexStream 		: IVertexStream,
36										   indexStream		: IndexStream,
37										   singleReference	: Boolean = true)
38		{
39			super();
40
41			_vb = vertexStream;
42			_ib = indexStream;
43			_singleReference = singleReference;
44		}
45
46		override flash_proxy function hasProperty(name : *) : Boolean
47		{
48			return int(name) < _ib.length / 3;
49		}
50
51		override flash_proxy function nextNameIndex(index : int) : int
52		{
53			index -= _offset;
54			_offset = 0;
55
56			return index < _ib.length / 3 ? index + 1 : 0;
57		}
58
59		override flash_proxy function nextName(index : int) : String
60		{
61			return String(index - 1);
62		}
63
64		override flash_proxy function nextValue(index : int) : *
65		{
66			_index = index - 1;
67
68			if (!_singleReference || !_triangle)
69				_triangle = new TriangleReference(_vb, _ib, _index);
70
71			if (_singleReference)
72			{
73				_triangle._index = _index;
74				_triangle.v0._index = _ib._data[int(_index * 3)];
75				_triangle.v1._index = _ib._data[int(_index * 3 + 1)];
76				_triangle.v2._index = _ib._data[int(_index * 3 + 2)];
77				_triangle._update = TriangleReference.UPDATE_ALL;
78			}
79
80			return _triangle;
81		}
82
83		override flash_proxy function getProperty(name : *) : *
84		{
85			return new TriangleReference(_vb, _ib, int(name));
86		}
87
88		override flash_proxy function deleteProperty(name : *) : Boolean
89		{
90			var index 	: uint 	= uint(name);
91			
92			_ib.deleteTriangle(index);
93			
94			return true;
95		}
96	}
97}