コード例 #1
0
    public RDMazeGenSettings(Location worldSize)
        : base()
    {
        Size = worldSize;

        FillPatterns.Add(new BlankRegionPattern());

        FillPatterns.Add(new SteppedHallwayPattern(new PlateauFixedNumbAndSpace(4, 2, 2), 0.3f));
        FillPatterns.Add(new SteppedHallwayPattern(new PlateauFixedWidthAndSpace(2, 2, 2), 0.3f));
        FillPatterns.Add(new SteppedHallwayPattern(new PlateauFixedWidthAndSpace(5, 1, 2), 0.3f));

        FillPatterns.Add(new ThickHurdlePattern(new PlateauFixedNumbAndSpace(4, 2, 2), 0.6f, 0.3f));
        FillPatterns.Add(new ThickHurdlePattern(new PlateauFixedWidthAndSpace(2, 2, 2), 0.1f, 0.0f));
        FillPatterns.Add(new ThickHurdlePattern(new PlateauFixedWidthAndSpace(5, 1, 2), 0.8f, 0.15f));

        FillPatterns.Add(new CarvedPlusPattern());

        FillPatterns.Add(new XPattern(new Interval(0.46f, 2.174f, true, 3)));

        FillPatterns.Add(new CirclePattern(2));
        FillPatterns.Add(new CirclePattern(3));

        PlatformsPattern temp = new PlatformsPattern(2, 2, 0.3f, 15, new Interval(0.8f, 1.25f, true, 3));

        temp.MaxSuitability = Suitability.Little;
        FillPatterns.Add(temp);

        temp = new PlatformsPattern(2, 1, 0.2f, 15, new Interval(0.8f, 1.25f, true, 3));
        temp.MaxSuitability = Suitability.Little;
        FillPatterns.Add(temp);

        FillPatterns.Add(new ConcentricSquaresPattern());

        FillPatterns.Add(new LinePattern());

        FillPatterns.Add(new AlternatingStepsPattern());
    }
コード例 #2
0
    private FillPattern GetFillPattern(string fillType, XmlNode pattNode)
    {
        string        var    = "";
        Func <string> GetCh  = () => GetChild(pattNode, var).InnerText,
                      GetAtt = () => GetAttribute(pattNode, var);

        string maxSuitability = "very";

        if (GetAttribute(pattNode, "maxSuitability") != null)
        {
            maxSuitability = GetAttribute(pattNode, "maxSuitability");
        }
        Suitability maxSuit;

        switch (maxSuitability)
        {
        case ("little"):
            maxSuit = Suitability.Little;
            break;

        case ("moderate"):
            maxSuit = Suitability.Moderate;
            break;

        case ("very"):
            maxSuit = Suitability.Very;
            break;

        default: throw new ArgumentException("Not a valid max suitability for the " + fillType + " fill pattern.");
        }

        switch (fillType)
        {
        case ("blank"):
            BlankRegionPattern brp = new BlankRegionPattern();
            brp.MaxSuitability = maxSuit;
            return(brp);

        case ("carvedPlus"):
            CarvedPlusPattern cpp = new CarvedPlusPattern();
            cpp.MaxSuitability = maxSuit;
            return(cpp);

        case ("concentricSquares"):
            ConcentricSquaresPattern csp = new ConcentricSquaresPattern();
            csp.MaxSuitability = maxSuit;
            return(csp);

        case ("line"):
            LinePattern lp = new LinePattern();
            lp.MaxSuitability = maxSuit;
            return(lp);

        case ("alternatingSteps"):
            AlternatingStepsPattern asp = new AlternatingStepsPattern();
            asp.MaxSuitability = maxSuit;
            return(asp);

        case ("x"):

            var = "minXToYRatio";
            float min = Single.Parse(GetCh());
            var = "maxXToYRatio";
            float max = Single.Parse(GetCh());

            XPattern xp = new XPattern(new Interval(min, max, true, 2));
            xp.MaxSuitability = maxSuit;
            return(xp);

        case ("circle"):

            var = "radius";
            int radius = Int32.Parse(GetCh());

            CirclePattern cp = new CirclePattern(radius);
            cp.MaxSuitability = maxSuit;
            return(cp);

        case ("platforms"):

            var = "spaceBetween";
            int spaceBetween = Int32.Parse(GetCh());

            var = "border";
            int border = Int32.Parse(GetCh());

            var = "proportionHoles";
            float proportionHoles = Single.Parse(GetCh());

            var = "minArea";
            int minArea = Int32.Parse(GetCh());

            var = "minAcceptableXToYRatio";
            float minRatio = Single.Parse(GetCh());
            var = "maxAcceptableXToYRatio";
            float maxRatio = Single.Parse(GetCh());

            PlatformsPattern pp = new PlatformsPattern(spaceBetween, border, proportionHoles, minArea, new Interval(minRatio, maxRatio, true, 3));
            pp.MaxSuitability = maxSuit;
            return(pp);

        case ("steppedHallway"):

            var = "relativeHeight";
            float relHeight = Single.Parse(GetCh());

            return(new SteppedHallwayPattern(GetPlateauGen(GetChild(pattNode, "plateau")), relHeight));

        case ("thickHurdle"):

            var = "averageRelativeHeight";
            float avRelHeight = Single.Parse(GetCh());

            var = "relativeHeightVariance";
            float relheightVariance = Single.Parse(GetCh());

            return(new ThickHurdlePattern(GetPlateauGen(GetChild(pattNode, "plateau")), avRelHeight, relheightVariance));

        default: throw new ArgumentException("Not a valid fill pattern.");
        }
    }