private Generator GetBaseGenerator(string genType, XmlNode genNode) { string var = ""; bool wrapX, wrapY; Func <string> GetAtt = () => GetAttribute(genNode, var), GetCh = () => GetChild(genNode, var).InnerText, GetAtt2, GetCh2; Generator ret; switch (genType) { case ("RDMaze"): ret = new RDMazeGen(); var = "sizeX"; int sizeX = Int32.Parse(GetCh()); var = "sizeY"; int sizeY = Int32.Parse(GetCh()); RDMazeGenSettings sett = new RDMazeGenSettings(new Location(sizeX, sizeY)); sett.FillPatterns.Clear(); var = "wrapX"; wrapX = Boolean.Parse(GetCh()); sett.WrapX = wrapX; var = "wrapY"; wrapY = Boolean.Parse(GetCh()); sett.WrapY = wrapY; XmlNode igRegNode = GetChild(genNode, "ignoreRegionChance"); GetAtt2 = () => GetAttribute(igRegNode, var); GetCh2 = () => GetChild(igRegNode, var).InnerText; var = "type"; string igType = GetAtt2(); sett.IgnoreRegionChance = GetIgnoreRegionChance(GetAtt2, GetCh2, igType, ref var); XmlNode splitDirNode = GetChild(genNode, "splitDirection"); GetAtt2 = () => GetAttribute(splitDirNode, var); GetCh2 = () => GetChild(splitDirNode, var).InnerText; var = "type"; string splDrType = GetAtt2(); sett.ShouldSplitHorizontally = GetSplitDir(GetAtt2, GetCh2, splDrType, ref var); XmlNode splitLocationNode = GetChild(genNode, "splitLocation"); GetAtt2 = () => GetAttribute(splitLocationNode, var); GetCh2 = () => GetChild(splitLocationNode, var).InnerText; var = "type"; string splLocType = GetAtt2(); sett.SplitLocation = GetSplitLocation(GetAtt2, GetCh2, splLocType, ref var); XmlNode numbHolesNode = GetChild(genNode, "numbHoles"); GetAtt2 = () => GetAttribute(numbHolesNode, var); GetCh2 = () => GetChild(numbHolesNode, var).InnerText; var = "type"; string getNumbType = GetAtt2(); sett.HolesInLine = GetHolesInLine(Math.Max(sizeX, sizeY), GetAtt2, GetCh2, getNumbType, ref var); ret.SetSettings(sett); return(ret); case ("Roguelike"): ret = new RoguelikeGen(); RoguelikeGenSettings set = new RoguelikeGenSettings(); set.FillPatterns.Clear(); var = "wrapX"; set.WrapAroundX = Boolean.Parse(GetCh()); var = "wrapY"; set.WrapAroundY = Boolean.Parse(GetCh()); var = "roomColumns"; int roomCols = Int32.Parse(GetCh()); var = "roomRows"; int roomRows = Int32.Parse(GetCh()); set.NumberOfNodes = new Location(roomCols, roomRows); var = "roomWidth"; int roomWidth = Int32.Parse(GetCh()); var = "roomHeight"; int roomHeight = Int32.Parse(GetCh()); set.RoomDimensions = new Location(roomWidth, roomHeight); var = "roomWidthVarianceMin"; int roomWidthVarianceMin = Int32.Parse(GetCh()); var = "roomWidthVarianceMax"; int roomWidthVarianceMax = Int32.Parse(GetCh()); set.RoomXVariance = new Interval(roomWidthVarianceMin, roomWidthVarianceMax, true, 0); var = "roomHeightVarianceMin"; int roomHeightVarianceMin = Int32.Parse(GetCh()); var = "roomHeightVarianceMax"; int roomHeightVarianceMax = Int32.Parse(GetCh()); set.RoomYVariance = new Interval(roomHeightVarianceMin, roomHeightVarianceMax, true, 0); var = "verticalTunnelThickness"; int verticalTunnelThickness = Int32.Parse(GetCh()); var = "horizontalTunnelThickness"; int horizontalTunnelThickness = Int32.Parse(GetCh()); set.TunnelThickness = new Location(horizontalTunnelThickness, verticalTunnelThickness); var = "verticalTunnelLength"; int verticalTunnelLength = Int32.Parse(GetCh()); var = "horizontalTunnelLength"; int horizontalTunnelLength = Int32.Parse(GetCh()); set.TunnelLength = new Location(horizontalTunnelLength, verticalTunnelLength); var = "roomChance"; set.PercentRooms = Single.Parse(GetCh()); ret.SetSettings(set); return(ret); default: throw new ArgumentException(); } }
public void SetSettings(GeneratorSettings s) { Settings = s as RoguelikeGenSettings; }