Exemple #1
0
        public void AddCell(Vector2i cellInGroup)
        {
            Vector2i cell = cellInGroup + groupPosition;


            Vector2i position = groupPosition + cellInGroup;

            SampledData2i data = options.ImageSampler.Sample(options.Image, cell);

            int minusXres_x1y0 = options.ImageSampler.SampleX1Y0(options.Image, new Vector2i(cell.x - 1, cell.y - 0));
            int minusXres_x1y1 = options.ImageSampler.SampleX1Y1(options.Image, new Vector2i(cell.x - 1, cell.y - 0));
            int minusYres_x0y1 = options.ImageSampler.SampleX0Y1(options.Image, new Vector2i(cell.x - 0, cell.y - 1));
            int minusYres_x1y1 = options.ImageSampler.SampleX1Y1(options.Image, new Vector2i(cell.x - 0, cell.y - 1));
            // Debug.Log($"{minusXres_x1y0} {minusXres_x1y1}");
            var pos_x0y0 = new Vector3i(position.x, position.y, data.x0y0);
            var pos_x0y1 = new Vector3i(position.x, position.y + 1, data.x0y1);
            var pos_x1y0 = new Vector3i(position.x + 1, position.y, data.x1y0);
            var pos_x1y1 = new Vector3i(position.x + 1, position.y + 1, data.x1y1);

            var pos_x0y0_lowerY = new Vector3i(position.x, position.y, minusXres_x1y0);
            var pos_x0y1_lowerY = new Vector3i(position.x, position.y + 1, minusXres_x1y1);

            var pos_x0y0_lowerX = new Vector3i(position.x, position.y, minusYres_x0y1);
            var pos_x1y0_lowerX = new Vector3i(position.x + 1, position.y, minusYres_x1y1);

            mesh.AddQuad(cellInGroup, pos_x0y0, pos_x0y1, pos_x1y0, pos_x1y1, IsFlipped(data));

            mesh.AddWallY(cellInGroup, pos_x0y0, pos_x0y1, pos_x0y1_lowerY, pos_x0y0_lowerY);

            mesh.AddWallX(cellInGroup, pos_x1y0, pos_x0y0, pos_x0y0_lowerX, pos_x1y0_lowerX);
        }
Exemple #2
0
        public SampledData2i Process(SampledData2i sampleData)
        {
            int height = sampleData.Max - 1;

            SampledData2i normalizedHeightData = new SampledData2i(Math.Max(sampleData.x0y0 - height, -1),
                                                                   Math.Max(sampleData.x0y1 - height, -1),
                                                                   Math.Max(sampleData.x1y0 - height, -1),
                                                                   Math.Max(sampleData.x1y1 - height, -1));

            SampledData2i choosenTemplateTile = TileMap[normalizedHeightData];

            return(choosenTemplateTile + height);
        }
Exemple #3
0
        private bool IsFlipped(SampledData2i sampleData)
        {
            var  difMain  = Mathf.Abs(sampleData.x0y0 - sampleData.x1y1);
            var  difMinor = Mathf.Abs(sampleData.x1y0 - sampleData.x0y1);
            bool flip;

            if (difMain == difMinor)
            {
                var sumMain  = sampleData.x0y0 + sampleData.x1y1;
                var sumMinor = sampleData.x1y0 + sampleData.x0y1;
                flip = sumMain < sumMinor;
            }
            else
            {
                flip = difMain < difMinor;
            }
            return(flip);
        }