ModelData ModelDataClone(ModelData source) { ModelData dest = new ModelData(); dest.xyz = new float[source.GetXyzCount()]; for (int i = 0; i < source.GetXyzCount(); i++) { dest.xyz[i] = source.xyz[i]; } dest.uv = new float[source.GetUvCount()]; for (int i = 0; i < source.GetUvCount(); i++) { dest.uv[i] = source.uv[i]; } dest.rgba = new byte[source.GetRgbaCount()]; for (int i = 0; i < source.GetRgbaCount(); i++) { dest.rgba[i] = source.rgba[i]; } dest.indices = new int[source.GetIndicesCount()]; for (int i = 0; i < source.GetIndicesCount(); i++) { dest.indices[i] = source.indices[i]; } dest.SetVerticesCount(source.GetVerticesCount()); dest.SetIndicesCount(source.GetIndicesCount()); return(dest); }
static void DrawLineLoop(ModelData m, Vector3Ref p0, Vector3Ref p1, Vector3Ref p2, Vector3Ref p3) { int startVertex = m.GetVerticesCount(); AddVertex(m, p0.X, p0.Y, p0.Z, 0, 0, Game.ColorFromArgb(255, 255, 255, 255)); AddVertex(m, p1.X, p1.Y, p1.Z, 0, 0, Game.ColorFromArgb(255, 255, 255, 255)); AddVertex(m, p2.X, p2.Y, p2.Z, 0, 0, Game.ColorFromArgb(255, 255, 255, 255)); AddVertex(m, p3.X, p3.Y, p3.Z, 0, 0, Game.ColorFromArgb(255, 255, 255, 255)); m.indices[m.indicesCount++] = startVertex + 0; m.indices[m.indicesCount++] = startVertex + 1; m.indices[m.indicesCount++] = startVertex + 1; m.indices[m.indicesCount++] = startVertex + 2; m.indices[m.indicesCount++] = startVertex + 2; m.indices[m.indicesCount++] = startVertex + 3; m.indices[m.indicesCount++] = startVertex + 3; m.indices[m.indicesCount++] = startVertex + 0; }
public void AddTorch(GameData d_Data, Game d_TerainRenderer, ModelData m, int x, int y, int z, TorchType type) { float one = 1; int curcolor = Game.ColorFromArgb(255, 255, 255, 255); float torchsizexy = one * 16 / 100; float topx = one / 2 - torchsizexy / 2; float topy = one / 2 - torchsizexy / 2; float bottomx = one / 2 - torchsizexy / 2; float bottomy = one / 2 - torchsizexy / 2; topx += x; topy += y; bottomx += x; bottomy += y; if (type == TorchType.Front) { bottomx = x - torchsizexy; } if (type == TorchType.Back) { bottomx = x + 1; } if (type == TorchType.Left) { bottomy = y - torchsizexy; } if (type == TorchType.Right) { bottomy = y + 1; } Vector3Ref top00 = Vector3Ref.Create(topx, z + (one * 9 / 10), topy); Vector3Ref top01 = Vector3Ref.Create(topx, z + (one * 9 / 10), topy + torchsizexy); Vector3Ref top10 = Vector3Ref.Create(topx + torchsizexy, z + (one * 9 / 10), topy); Vector3Ref top11 = Vector3Ref.Create(topx + torchsizexy, z + (one * 9 / 10), topy + torchsizexy); if (type == TorchType.Left) { top01.Y += -(one * 1 / 10); top11.Y += -(one * 1 / 10); } if (type == TorchType.Right) { top10.Y += -(one * 1 / 10); top00.Y += -(one * 1 / 10); } if (type == TorchType.Front) { top10.Y += -(one * 1 / 10); top11.Y += -(one * 1 / 10); } if (type == TorchType.Back) { top01.Y += -(one * 1 / 10); top00.Y += -(one * 1 / 10); } Vector3Ref bottom00 = Vector3Ref.Create(bottomx, z + 0, bottomy); Vector3Ref bottom01 = Vector3Ref.Create(bottomx, z + 0, bottomy + torchsizexy); Vector3Ref bottom10 = Vector3Ref.Create(bottomx + torchsizexy, z + 0, bottomy); Vector3Ref bottom11 = Vector3Ref.Create(bottomx + torchsizexy, z + 0, bottomy + torchsizexy); //top { int sidetexture = TopTexture; RectFRef texrec = TextureAtlas.TextureCoords2d(sidetexture, d_TerainRenderer.texturesPacked()); int lastelement = m.GetVerticesCount(); AddVertex(m, top00.X, top00.Y, top00.Z, texrec.Left(), texrec.Top(), curcolor); AddVertex(m, top01.X, top01.Y, top01.Z, texrec.Left(), texrec.Bottom(), curcolor); AddVertex(m, top10.X, top10.Y, top10.Z, texrec.Right(), texrec.Top(), curcolor); AddVertex(m, top11.X, top11.Y, top11.Z, texrec.Right(), texrec.Bottom(), curcolor); m.indices[m.indicesCount++] = (lastelement + 0); m.indices[m.indicesCount++] = (lastelement + 1); m.indices[m.indicesCount++] = (lastelement + 2); m.indices[m.indicesCount++] = (lastelement + 1); m.indices[m.indicesCount++] = (lastelement + 3); m.indices[m.indicesCount++] = (lastelement + 2); } //bottom - same as top, but z is 1 less. { int sidetexture = SideTexture; RectFRef texrec = TextureAtlas.TextureCoords2d(sidetexture, d_TerainRenderer.texturesPacked()); int lastelement = m.GetVerticesCount(); AddVertex(m, bottom00.X, bottom00.Y, bottom00.Z, texrec.Left(), texrec.Top(), curcolor); AddVertex(m, bottom01.X, bottom01.Y, bottom01.Z, texrec.Left(), texrec.Bottom(), curcolor); AddVertex(m, bottom10.X, bottom10.Y, bottom10.Z, texrec.Right(), texrec.Top(), curcolor); AddVertex(m, bottom11.X, bottom11.Y, bottom11.Z, texrec.Right(), texrec.Bottom(), curcolor); m.indices[m.indicesCount++] = (lastelement + 1); m.indices[m.indicesCount++] = (lastelement + 0); m.indices[m.indicesCount++] = (lastelement + 2); m.indices[m.indicesCount++] = (lastelement + 3); m.indices[m.indicesCount++] = (lastelement + 1); m.indices[m.indicesCount++] = (lastelement + 2); } //front { int sidetexture = SideTexture; RectFRef texrec = TextureAtlas.TextureCoords2d(sidetexture, d_TerainRenderer.texturesPacked()); int lastelement = m.GetVerticesCount(); AddVertex(m, bottom00.X, bottom00.Y, bottom00.Z, texrec.Left(), texrec.Bottom(), curcolor); AddVertex(m, bottom01.X, bottom01.Y, bottom01.Z, texrec.Right(), texrec.Bottom(), curcolor); AddVertex(m, top00.X, top00.Y, top00.Z, texrec.Left(), texrec.Top(), curcolor); AddVertex(m, top01.X, top01.Y, top01.Z, texrec.Right(), texrec.Top(), curcolor); m.indices[m.indicesCount++] = (lastelement + 0); m.indices[m.indicesCount++] = (lastelement + 1); m.indices[m.indicesCount++] = (lastelement + 2); m.indices[m.indicesCount++] = (lastelement + 1); m.indices[m.indicesCount++] = (lastelement + 3); m.indices[m.indicesCount++] = (lastelement + 2); } //back - same as front, but x is 1 greater. { int sidetexture = SideTexture; RectFRef texrec = TextureAtlas.TextureCoords2d(sidetexture, d_TerainRenderer.texturesPacked()); int lastelement = m.GetVerticesCount(); AddVertex(m, bottom10.X, bottom10.Y, bottom10.Z, texrec.Right(), texrec.Bottom(), curcolor); AddVertex(m, bottom11.X, bottom11.Y, bottom11.Z, texrec.Left(), texrec.Bottom(), curcolor); AddVertex(m, top10.X, top10.Y, top10.Z, texrec.Right(), texrec.Top(), curcolor); AddVertex(m, top11.X, top11.Y, top11.Z, texrec.Left(), texrec.Top(), curcolor); m.indices[m.indicesCount++] = (lastelement + 1); m.indices[m.indicesCount++] = (lastelement + 0); m.indices[m.indicesCount++] = (lastelement + 2); m.indices[m.indicesCount++] = (lastelement + 3); m.indices[m.indicesCount++] = (lastelement + 1); m.indices[m.indicesCount++] = (lastelement + 2); } { int sidetexture = SideTexture; RectFRef texrec = TextureAtlas.TextureCoords2d(sidetexture, d_TerainRenderer.texturesPacked()); int lastelement = m.GetVerticesCount(); AddVertex(m, bottom00.X, bottom00.Y, bottom00.Z, texrec.Right(), texrec.Bottom(), curcolor); AddVertex(m, top00.X, top00.Y, top00.Z, texrec.Right(), texrec.Top(), curcolor); AddVertex(m, bottom10.X, bottom10.Y, bottom10.Z, texrec.Left(), texrec.Bottom(), curcolor); AddVertex(m, top10.X, top10.Y, top10.Z, texrec.Left(), texrec.Top(), curcolor); m.indices[m.indicesCount++] = (lastelement + 0); m.indices[m.indicesCount++] = (lastelement + 1); m.indices[m.indicesCount++] = (lastelement + 2); m.indices[m.indicesCount++] = (lastelement + 1); m.indices[m.indicesCount++] = (lastelement + 3); m.indices[m.indicesCount++] = (lastelement + 2); } //right - same as left, but y is 1 greater. { int sidetexture = SideTexture; RectFRef texrec = TextureAtlas.TextureCoords2d(sidetexture, d_TerainRenderer.texturesPacked()); int lastelement = m.GetVerticesCount(); AddVertex(m, bottom01.X, bottom01.Y, bottom01.Z, texrec.Left(), texrec.Bottom(), curcolor); AddVertex(m, top01.X, top01.Y, top01.Z, texrec.Left(), texrec.Top(), curcolor); AddVertex(m, bottom11.X, bottom11.Y, bottom11.Z, texrec.Right(), texrec.Bottom(), curcolor); AddVertex(m, top11.X, top11.Y, top11.Z, texrec.Right(), texrec.Top(), curcolor); m.indices[m.indicesCount++] = (lastelement + 1); m.indices[m.indicesCount++] = (lastelement + 0); m.indices[m.indicesCount++] = (lastelement + 2); m.indices[m.indicesCount++] = (lastelement + 3); m.indices[m.indicesCount++] = (lastelement + 1); m.indices[m.indicesCount++] = (lastelement + 2); } }
void DrawCube(ModelData m, int x, int y, int z, int c) { //top //if (drawtop) { int sidetexture = GetWeaponTextureId(TileSide.Top); RectFRef texrec = TextureAtlas.TextureCoords2d(sidetexture, texturesPacked()); int lastelement = m.GetVerticesCount(); AddVertex(m, x + 0, z + 1, y + 0, texrec.Left(), texrec.Top(), c); AddVertex(m, x + 0, z + 1, y + 1, texrec.Left(), texrec.Bottom(), c); AddVertex(m, x + 1, z + 1, y + 0, texrec.Right(), texrec.Top(), c); AddVertex(m, x + 1, z + 1, y + 1, texrec.Right(), texrec.Bottom(), c); m.indices[m.indicesCount++] = (lastelement + 0); m.indices[m.indicesCount++] = (lastelement + 1); m.indices[m.indicesCount++] = (lastelement + 2); m.indices[m.indicesCount++] = (lastelement + 1); m.indices[m.indicesCount++] = (lastelement + 3); m.indices[m.indicesCount++] = (lastelement + 2); } //bottom - same as top, but z is 1 less. //if (drawbottom) { int sidetexture = GetWeaponTextureId(TileSide.Bottom); RectFRef texrec = TextureAtlas.TextureCoords2d(sidetexture, texturesPacked()); int lastelement = m.GetVerticesCount(); AddVertex(m, x + 0, z, y + 0, texrec.Left(), texrec.Top(), c); AddVertex(m, x + 0, z, y + 1, texrec.Left(), texrec.Bottom(), c); AddVertex(m, x + 1, z, y + 0, texrec.Right(), texrec.Top(), c); AddVertex(m, x + 1, z, y + 1, texrec.Right(), texrec.Bottom(), c); m.indices[m.indicesCount++] = (lastelement + 1); m.indices[m.indicesCount++] = (lastelement + 0); m.indices[m.indicesCount++] = (lastelement + 2); m.indices[m.indicesCount++] = (lastelement + 3); m.indices[m.indicesCount++] = (lastelement + 1); m.indices[m.indicesCount++] = (lastelement + 2); } // //front //if (drawfront) { int sidetexture = GetWeaponTextureId(TileSide.Front); RectFRef texrec = TextureAtlas.TextureCoords2d(sidetexture, texturesPacked()); int lastelement = m.GetVerticesCount(); AddVertex(m, x + 0, z + 0, y + 0, texrec.Left(), texrec.Bottom(), c); AddVertex(m, x + 0, z + 0, y + 1, texrec.Right(), texrec.Bottom(), c); AddVertex(m, x + 0, z + 1, y + 0, texrec.Left(), texrec.Top(), c); AddVertex(m, x + 0, z + 1, y + 1, texrec.Right(), texrec.Top(), c); m.indices[m.indicesCount++] = (lastelement + 0); m.indices[m.indicesCount++] = (lastelement + 1); m.indices[m.indicesCount++] = (lastelement + 2); m.indices[m.indicesCount++] = (lastelement + 1); m.indices[m.indicesCount++] = (lastelement + 3); m.indices[m.indicesCount++] = (lastelement + 2); } //back - same as front, but x is 1 greater. //if (drawback) {//TODO: fix tcoords int sidetexture = GetWeaponTextureId(TileSide.Back); RectFRef texrec = TextureAtlas.TextureCoords2d(sidetexture, texturesPacked()); int lastelement = m.GetVerticesCount(); AddVertex(m, x + 1, z + 0, y + 0, texrec.Left(), texrec.Bottom(), c); AddVertex(m, x + 1, z + 0, y + 1, texrec.Right(), texrec.Bottom(), c); AddVertex(m, x + 1, z + 1, y + 0, texrec.Left(), texrec.Top(), c); AddVertex(m, x + 1, z + 1, y + 1, texrec.Right(), texrec.Top(), c); m.indices[m.indicesCount++] = (lastelement + 1); m.indices[m.indicesCount++] = (lastelement + 0); m.indices[m.indicesCount++] = (lastelement + 2); m.indices[m.indicesCount++] = (lastelement + 3); m.indices[m.indicesCount++] = (lastelement + 1); m.indices[m.indicesCount++] = (lastelement + 2); } //if (drawleft) { int sidetexture = GetWeaponTextureId(TileSide.Left); RectFRef texrec = TextureAtlas.TextureCoords2d(sidetexture, texturesPacked()); int lastelement = m.GetVerticesCount(); AddVertex(m, x + 0, z + 0, y + 0, texrec.Left(), texrec.Bottom(), c); AddVertex(m, x + 0, z + 1, y + 0, texrec.Left(), texrec.Top(), c); AddVertex(m, x + 1, z + 0, y + 0, texrec.Right(), texrec.Bottom(), c); AddVertex(m, x + 1, z + 1, y + 0, texrec.Right(), texrec.Top(), c); m.indices[m.indicesCount++] = (lastelement + 0); m.indices[m.indicesCount++] = (lastelement + 1); m.indices[m.indicesCount++] = (lastelement + 2); m.indices[m.indicesCount++] = (lastelement + 1); m.indices[m.indicesCount++] = (lastelement + 3); m.indices[m.indicesCount++] = (lastelement + 2); } //right - same as left, but y is 1 greater. //if (drawright) {//TODO: fix tcoords int sidetexture = GetWeaponTextureId(TileSide.Right); RectFRef texrec = TextureAtlas.TextureCoords2d(sidetexture, texturesPacked()); int lastelement = m.GetVerticesCount(); AddVertex(m, x + 0, z + 0, y + 1, texrec.Left(), texrec.Bottom(), c); AddVertex(m, x + 0, z + 1, y + 1, texrec.Left(), texrec.Top(), c); AddVertex(m, x + 1, z + 0, y + 1, texrec.Right(), texrec.Bottom(), c); AddVertex(m, x + 1, z + 1, y + 1, texrec.Right(), texrec.Top(), c); m.indices[m.indicesCount++] = (lastelement + 1); m.indices[m.indicesCount++] = (lastelement + 0); m.indices[m.indicesCount++] = (lastelement + 2); m.indices[m.indicesCount++] = (lastelement + 3); m.indices[m.indicesCount++] = (lastelement + 1); m.indices[m.indicesCount++] = (lastelement + 2); } }
ModelData ModelDataClone(ModelData source) { ModelData dest = new ModelData(); #if !CITO unchecked { #endif dest.xyz = new float[source.GetXyzCount()]; for (int i = 0; i < source.GetXyzCount(); i++) { dest.xyz[i] = source.xyz[i]; } dest.uv = new float[source.GetUvCount()]; for (int i = 0; i < source.GetUvCount(); i++) { dest.uv[i] = source.uv[i]; } dest.rgba = new byte[source.GetRgbaCount()]; for (int i = 0; i < source.GetRgbaCount(); i++) { dest.rgba[i] = source.rgba[i]; } dest.indices = new int[source.GetIndicesCount()]; for (int i = 0; i < source.GetIndicesCount(); i++) { dest.indices[i] = source.indices[i]; } dest.SetVerticesCount(source.GetVerticesCount()); dest.SetIndicesCount(source.GetIndicesCount()); #if !CITO } #endif return dest; }