コード例 #1
0
        static public float MakeRectUntil(ref Rectangle rect, ref AreaMap new_map, ref AreaMapType template, int max_fails)
        {
            int   tries     = 0;
            int   fails     = 0;
            float fail_rate = 0f;

            Sizes r_size  = Sizes.NULL;
            Point r_sizep = Point.Zero;

            while (fails < max_fails)
            {
                tries++;

                r_size = GetRndRmSize(ref template, template.currRoomTypeIndex);
                template.currRoomSize = r_size;
                r_sizep = new Point(Globals.sizeRanges[(int)r_size], Globals.sizeRanges[(int)r_size + 1]);

                MakeRect(ref rect, ref new_map, ref template, ref r_sizep);

                if (!new_map.ChkRectForAllFlagged(ref new_map, ref rect, MSFlag.BL, MSFlagIndex.BL_ST) ||
                    !new_map.ChkRectForAllFlagged(ref new_map, ref rect, MSFlag.MAKE_OK, MSFlagIndex.CAN_MAKE))
                {
                    Globals.roomFail = true;
                }
                else
                {
                    Globals.roomFail = false;
                }

                if (Globals.roomFail)
                {
                    fails++;
                }
                else
                {
                    break;
                }
            }

            fail_rate = (float)tries / (float)fails;
            return(fail_rate);
        }