コード例 #1
0
ファイル: TileMap.cs プロジェクト: Rohansi/Collapse
        private bool IsStable(Vector2i pos, Vector2i ignorePos, int horizontal, int vertical, out Vector2i? collapse)
        {
            const int maxHorizontal = 10;
            const int maxVertical = 50;

            collapse = null;

            if (pos.X < 0 || pos.Y < 0 || pos.X >= _width || pos.Y >= _height)
                return false;

            if (_tiles[pos.X, pos.Y] == Tile.None)
                return false;

            if (_tiles[pos.X, pos.Y] == Tile.Floor)
                return true;

            if (horizontal >= maxHorizontal)
                return false;

            var effectiveMaxVertical = (float)Math.Ceiling(maxVertical * (2 - horizontal / (float)maxHorizontal));
            if (vertical >= effectiveMaxVertical)
            {
            Console.WriteLine("hi");
                collapse = pos;
                return true;
            }

            var newPos = pos;
            newPos.Y += 1;
            if (!newPos.EqualTo(ignorePos) && IsStable(newPos, pos, horizontal, vertical + 1))
                return true;

            Vector2i? leftCollapse = null;
            Vector2i? rightCollapse = null;

            newPos = pos;
            newPos.X -= 1;
            if (!newPos.EqualTo(ignorePos) && IsStable(newPos, pos, horizontal + 1, vertical, out leftCollapse))
                return true;

            newPos = pos;
            newPos.X += 1;
            if (!newPos.EqualTo(ignorePos) && IsStable(newPos, pos, horizontal + 1, vertical, out rightCollapse))
                return true;

            if (leftCollapse.HasValue)
                Collapse(leftCollapse.Value);

            if (rightCollapse.HasValue)
                Collapse(rightCollapse.Value);

            return false;
        }