public void CreateQuad(Entity e, float3 org, RectangleRenderState rectangleRenderState, RectTransformResult rRes) { var indices = EntityManager.GetBuffer <DynamicIndex>(e); var vertices = EntityManager.GetBuffer <DynamicSimpleVertex>(e); vertices.ResizeUninitialized(4); indices.ResizeUninitialized(6); float2 size = rRes.Size; float4 outer = rectangleRenderState.Outer; for (int j = 0; j < 2; ++j) { for (int i = 0; i < 2; ++i) { float x = size.x * i; float y = size.y * j; SimpleVertex sv = new SimpleVertex { Position = new float3(x, y, org.z), Color = new float4(1, 1, 1, 1), TexCoord0 = new float2(i == 0 ? outer.x : outer.z, j == 0 ? outer.w : outer.y) }; vertices[j * 2 + i] = new DynamicSimpleVertex() { Value = sv }; } } indices[0] = new DynamicIndex() { Value = 0 }; indices[1] = new DynamicIndex() { Value = 3 }; indices[2] = new DynamicIndex() { Value = 1 }; indices[3] = new DynamicIndex() { Value = 0 }; indices[4] = new DynamicIndex() { Value = 2 }; indices[5] = new DynamicIndex() { Value = 3 }; AddMeshRendererComponents(e, vertices.Length, indices.Length, vertices.AsNativeArray().Reinterpret <DynamicSimpleVertex, SimpleVertex>()); }
private Dictionary<int, DynamicIndex> EnsureIndexes(Type type) { Dictionary<int, DynamicIndex> value; if (!_indexes.TryGetValue(type, out value)) { value = _indexes[type] = new Dictionary<int, DynamicIndex>(); if (type.BaseType != null) { var seed = EnsureIndexes(type.BaseType); foreach (var entry in seed) { var dn = new DynamicIndex(); if (entry.Value.Getters != null) dn.Getters = new List<Tuple<MethodInfo, DynamicFlags>>(entry.Value.Getters); if (entry.Value.Setters != null) dn.Setters = new List<Tuple<MethodInfo, DynamicFlags>>(entry.Value.Setters); value.Add(entry.Key, entry.Value); } } PopulateIndexes(type, value); } return value; }
/// <summary> /// Dynamic Index Assignment operator. /// </summary> /// <param name="DynamicIndex">Dynamic Index</param> /// <param name="Operand">Operand.</param> /// <param name="Start">Start position in script expression.</param> /// <param name="Length">Length of expression covered by node.</param> /// <param name="Expression">Expression containing script.</param> public DynamicIndexAssignment(DynamicIndex DynamicIndex, ScriptNode Operand, int Start, int Length, Expression Expression) : base(Operand, Start, Length, Expression) { this.dynamicIndex = DynamicIndex; }
public void Create9Slice(Entity e, float3 org, RectangleRenderState rectangleRenderState, RectTransformResult rRes) { var indices = EntityManager.GetBuffer <DynamicIndex>(e); var vertices = EntityManager.GetBuffer <DynamicSimpleVertex>(e); vertices.ResizeUninitialized(kMaxVertex); indices.ResizeUninitialized(kMaxIndex); float2 size = rectangleRenderState.BaseSize; size = size / (rectangleRenderState.PixelsPerUnit * rectangleRenderState.PixelsPerUnitMultiplier); float4 border = rectangleRenderState.Border; float4 outer = rectangleRenderState.Outer; float2 split0 = new float2(border.x, border.y); float2 split1 = new float2(border.z, border.w); float2[] xy = new float2[4]; xy[0] = new float2(0); xy[1] = size * split0; xy[2] = rRes.Size - split1 * size; xy[3] = rRes.Size; float2[] uv = new float2[4]; uv[0] = outer.xy; uv[1] = outer.xy + (outer.zw - outer.xy) * split0; uv[2] = outer.zw - (outer.zw - outer.xy) * split1; uv[3] = outer.zw; for (int j = 0; j < 4; ++j) { for (int i = 0; i < 4; ++i) { float x = org.x + xy[i].x; float y = org.y + xy[j].y; SimpleVertex sv = new SimpleVertex { Position = new float3(x, y, org.z), Color = new float4(1, 1, 1, 1), TexCoord0 = new float2(uv[i].x, 1.0f - uv[j].y) }; vertices[j * 4 + i] = new DynamicSimpleVertex() { Value = sv }; } } for (int j = 0; j < 3; ++j) { for (int i = 0; i < 3; ++i) { const int P0 = 0; const int P1 = 1; const int P2 = 5; const int P3 = 4; int iB = j * 18 + i * 6; int vB = j * 4 + i; indices[iB + 0] = new DynamicIndex() { Value = (ushort)(vB + P0) }; indices[iB + 1] = new DynamicIndex() { Value = (ushort)(vB + P2) }; indices[iB + 2] = new DynamicIndex() { Value = (ushort)(vB + P1) }; indices[iB + 3] = new DynamicIndex() { Value = (ushort)(vB + P3) }; indices[iB + 4] = new DynamicIndex() { Value = (ushort)(vB + P2) }; indices[iB + 5] = new DynamicIndex() { Value = (ushort)(vB + P0) }; } } AddMeshRendererComponents(e, vertices.Length, indices.Length, vertices.AsNativeArray().Reinterpret <DynamicSimpleVertex, SimpleVertex>()); }