OpenRA.Map.ProjectCellInner C# (CSharp) Method

ProjectCellInner() private method

private ProjectCellInner ( MPos uv ) : OpenRA.PPos[]
uv MPos
return OpenRA.PPos[]
        PPos[] ProjectCellInner(MPos uv)
        {
            var mapHeight = Height;
            if (!mapHeight.Contains(uv))
                return NoProjectedCells;

            var height = mapHeight[uv];
            if (height == 0)
                return new[] { (PPos)uv };

            // Odd-height ramps get bumped up a level to the next even height layer
            if ((height & 1) == 1)
            {
                var ti = Rules.TileSet.GetTileInfo(Tiles[uv]);
                if (ti != null && ti.RampType != 0)
                    height += 1;
            }

            var candidates = new List<PPos>();

            // Odd-height level tiles are equally covered by four projected tiles
            if ((height & 1) == 1)
            {
                if ((uv.V & 1) == 1)
                    candidates.Add(new PPos(uv.U + 1, uv.V - height));
                else
                    candidates.Add(new PPos(uv.U - 1, uv.V - height));

                candidates.Add(new PPos(uv.U, uv.V - height));
                candidates.Add(new PPos(uv.U, uv.V - height + 1));
                candidates.Add(new PPos(uv.U, uv.V - height - 1));
            }
            else
                candidates.Add(new PPos(uv.U, uv.V - height));

            return candidates.Where(c => mapHeight.Contains((MPos)c)).ToArray();
        }