public void Load()
        {
            vertexCollection = new VertexPosTexNormal[6];

            VertexPosTexNormal singleVertex = new VertexPosTexNormal(new Vector3(-1, 0, -1), new Vector2(0, 0), new Vector3(0, 1, 0));

            //singleVertex.Color = Color.White;
            vertexCollection[0] = singleVertex;

            singleVertex = new VertexPosTexNormal(new Vector3(-1, 0, 1), new Vector2(0, 1), new Vector3(0, 1, 0));
            // singleVertex.Color = Color.White;
            vertexCollection[1] = singleVertex;

            singleVertex = new VertexPosTexNormal(new Vector3(1, 0, -1), new Vector2(1, 0), new Vector3(0, 1, 0));
            // singleVertex.Color = Color.White;
            vertexCollection[2] = singleVertex;

            singleVertex = new VertexPosTexNormal(new Vector3(-1, 0, 1), new Vector2(0, 1), new Vector3(0, 1, 0));
            // singleVertex.Color = Color.White;
            vertexCollection[3] = singleVertex;

            singleVertex = new VertexPosTexNormal(new Vector3(1, 0, 1), new Vector2(1, 1), new Vector3(0, 1, 0));
            // singleVertex.Color = Color.White;
            vertexCollection[4] = singleVertex;

            singleVertex = new VertexPosTexNormal(new Vector3(1, 0, -1), new Vector2(1, 0), new Vector3(0, 1, 0));
            // singleVertex.Color = Color.White;
            vertexCollection[5] = singleVertex;
        }
Example #2
0
        private void RecalculateTitlePaths()
        {
            for (int i = 0; i < TileElements.Length; i += 6)
            {
                VertexPosTexNormal[] quadElements = TileElements.Skip(i).Take(6).ToArray();
                int[]       pattern = { quadElements[0].Taken, (quadElements[1].Taken == 0? quadElements[4].Taken: quadElements[1].Taken), (quadElements[2].Taken == 0 ? quadElements[3].Taken : quadElements[2].Taken), quadElements[5].Taken };
                TileElement stg1    = TileSheetData.TileElements.Where(x => x.Groups.Any(y => y.Pattern.SequenceEqual(pattern))).FirstOrDefault();
                if (stg1 != null)
                {
                    ElementsGroup texture2Put = stg1.Groups.Where(x => x.Pattern.SequenceEqual(pattern)).FirstOrDefault();
                    if (texture2Put != null)
                    {
                        int value;
                        using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
                        {
                            byte[] randomNumber = new byte[4];//4 for int32
                            rng.GetBytes(randomNumber);
                            value = BitConverter.ToInt32(randomNumber, 0);
                        }

                        int indexRand = new Random(value).Next((texture2Put.Positions.Count <= 1 ? 1 : texture2Put.Positions.Count));

                        float uvX = (float)texture2Put.Positions[indexRand].X / (ContentContainer.GetObjectFromContainer <Texture2D>(TileSheetData.Name).Width);
                        float uvY = (float)texture2Put.Positions[indexRand].Y / (ContentContainer.GetObjectFromContainer <Texture2D>(TileSheetData.Name).Height);

                        float uvX2 = ((float)texture2Put.Positions[indexRand].X / (float)ContentContainer.GetObjectFromContainer <Texture2D>(TileSheetData.Name).Width) + ((float)TileSheetData.TileElementWeight / ContentContainer.GetObjectFromContainer <Texture2D>(TileSheetData.Name).Width);
                        float uvY2 = ((float)texture2Put.Positions[indexRand].Y / (float)ContentContainer.GetObjectFromContainer <Texture2D>(TileSheetData.Name).Height) - ((float)TileSheetData.TileElementHeight / ContentContainer.GetObjectFromContainer <Texture2D>(TileSheetData.Name).Height);

                        VertexPosTexNormal temp = TileElements[i];
                        temp.texCoord   = new Vector2(uvX, uvY);
                        TileElements[i] = temp;

                        temp                = TileElements[i + 1];
                        temp.texCoord       = new Vector2(uvX, uvY2);
                        TileElements[i + 1] = temp;

                        temp                = TileElements[i + 2];
                        temp.texCoord       = new Vector2(uvX2, uvY);
                        TileElements[i + 2] = temp;

                        temp                = TileElements[i + 3];
                        temp.texCoord       = new Vector2(uvX2, uvY);
                        TileElements[i + 3] = temp;

                        temp                = TileElements[i + 4];
                        temp.texCoord       = new Vector2(uvX, uvY2);
                        TileElements[i + 4] = temp;

                        temp                = TileElements[i + 5];
                        temp.texCoord       = new Vector2(uvX2, uvY2);
                        TileElements[i + 5] = temp;
                    }
                }
            }
        }
Example #3
0
        public Layer(int w, int h, float z, int r, string sheetName, ContentManager content)
        {
            this.W = w;
            this.H = h;

            SheetName    = (SheetName == null) ? sheetName : SheetName;
            TileElements = new VertexPosTexNormal[w * h * 6];
            LoadTileMap((SheetName != null)?SheetName:sheetName);
            TileSheetData.Load(content);
            LoadMapData(w, h, z, r);
        }
Example #4
0
        public void LoadMapData(int terrainWidth, int terrainHeight, float terrainZ, int r)
        {
            ElementsGroup element       = TileSheetData.TileElements.Where(x => x.Groups.Any(z => z.Name == "Default")).FirstOrDefault().Groups.Where(y => y.Name == "Default").FirstOrDefault();
            int           TableIterator = 0;

            for (int x = 0; x < terrainWidth; x += 1)
            {
                for (int y = 0; y < terrainHeight; y += 1)
                {
                    int value;
                    using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
                    {
                        byte[] randomNumber = new byte[4];//4 for int32
                        rng.GetBytes(randomNumber);
                        value = BitConverter.ToInt32(randomNumber, 0);
                    }

                    int indexRand = new Random(value).Next(element.Positions.Count);

                    float uvX = (float)element.Positions[indexRand].X / (float)ContentContainer.GetObjectFromContainer <Texture2D>(TileSheetData.Name).Width;
                    float uvY = (float)element.Positions[indexRand].Y / (float)ContentContainer.GetObjectFromContainer <Texture2D>(TileSheetData.Name).Height;

                    float uvX2 = ((float)element.Positions[indexRand].X / (float)ContentContainer.GetObjectFromContainer <Texture2D>(TileSheetData.Name).Width) + ((float)TileSheetData.TileElementWeight / (float)ContentContainer.GetObjectFromContainer <Texture2D>(TileSheetData.Name).Width);
                    float uvY2 = ((float)element.Positions[indexRand].Y / (float)ContentContainer.GetObjectFromContainer <Texture2D>(TileSheetData.Name).Height) + ((float)TileSheetData.TileElementHeight / (float)ContentContainer.GetObjectFromContainer <Texture2D>(TileSheetData.Name).Height);

                    VertexPosTexNormal _temp = new VertexPosTexNormal(new Vector3(x, terrainZ, y) * r, new Vector2(uvX, uvY), new Vector3(0, 1, 0));
                    TileElements[TableIterator] = (_temp);
                    TableIterator++;

                    _temp = new VertexPosTexNormal(new Vector3(x, terrainZ, y + 1) * r, new Vector2(uvX, uvY2), new Vector3(0, 1, 0));
                    TileElements[TableIterator] = (_temp);
                    TableIterator++;

                    _temp = new VertexPosTexNormal(new Vector3(x + 1, terrainZ, y) * r, new Vector2(uvX2, uvY), new Vector3(0, 1, 0));
                    TileElements[TableIterator] = (_temp);
                    TableIterator++;


                    _temp = new VertexPosTexNormal(new Vector3(x + 1, terrainZ, y) * r, new Vector2(uvX2, uvY), new Vector3(0, 1, 0));
                    TileElements[TableIterator] = (_temp);
                    TableIterator++;


                    _temp = new VertexPosTexNormal(new Vector3(x, terrainZ, y + 1) * r, new Vector2(uvX, uvY2), new Vector3(0, 1, 0));
                    TileElements[TableIterator] = (_temp);
                    TableIterator++;

                    _temp = new VertexPosTexNormal(new Vector3(x + 1, terrainZ, y + 1) * r, new Vector2(uvX2, uvY2), new Vector3(0, 1, 0));
                    TileElements[TableIterator] = (_temp);
                    TableIterator++;
                }
            }
        }
Example #5
0
        public void LayerClick(float clickX, float clickY)
        {
            //  IEnumerable<VertexPosTexNormal> points2Change = TileElements.Where(p => p.);
            int log = 0;

            for (int i = 0; i < TileElements.Length; i++)
            {
                if (TileElements[i].position.X == clickX && TileElements[i].position.Z == clickY)
                {
                    log++;
                    VertexPosTexNormal temp = TileElements[i];
                    temp.SetTaken();
                    TileElements[i] = temp;
                }
            }

            RecalculateTitlePaths();
        }