package in.twizmwaz.cardinal.module.modules.regions; import in.twizmwaz.cardinal.GameHandler; import in.twizmwaz.cardinal.match.Match; import in.twizmwaz.cardinal.module.BuilderData; import in.twizmwaz.cardinal.module.ModuleBuilder; import in.twizmwaz.cardinal.module.ModuleCollection; import in.twizmwaz.cardinal.module.ModuleLoadTime; import in.twizmwaz.cardinal.module.modules.regions.parsers.*; import in.twizmwaz.cardinal.module.modules.regions.parsers.modifiers.CombinationParser; import in.twizmwaz.cardinal.module.modules.regions.parsers.modifiers.MirrorParser; import in.twizmwaz.cardinal.module.modules.regions.parsers.modifiers.TranslateParser; import in.twizmwaz.cardinal.module.modules.regions.type.*; import in.twizmwaz.cardinal.module.modules.regions.type.combinations.ComplementRegion; import in.twizmwaz.cardinal.module.modules.regions.type.combinations.IntersectRegion; import in.twizmwaz.cardinal.module.modules.regions.type.combinations.NegativeRegion; import in.twizmwaz.cardinal.module.modules.regions.type.combinations.UnionRegion; import in.twizmwaz.cardinal.module.modules.regions.type.modifications.MirroredRegion; import in.twizmwaz.cardinal.module.modules.regions.type.modifications.TranslatedRegion; import org.jdom2.Document; import org.jdom2.Element; @BuilderData(load = ModuleLoadTime.EARLIEST) public class RegionModuleBuilder implements ModuleBuilder { @Override public ModuleCollection load(Match match) { ModuleCollection results = new ModuleCollection(); for (Element element : match.getDocument().getRootElement().getChildren("regions")) { for (Element givenRegion : element.getChildren()) { for (Element givenChild : givenRegion.getChildren()) { for (Element givenSubChild : givenChild.getChildren()) { for (Element givenChildRegion : givenSubChild.getChildren()) { getRegion(givenChildRegion); } getRegion(givenSubChild); } getRegion(givenChild); } if (!givenRegion.getName().equals("apply")) { getRegion(givenRegion); } } } return results; } public static RegionModule getRegion(Element element, Document document) { RegionModule region; switch (element.getName().toLowerCase()) { case "block": region = new BlockRegion(new BlockParser(element)); if (region.getName() != null) GameHandler.getGameHandler().getMatch().getModules().add(region); return region; case "point": region = new PointRegion(new PointParser(element)); if (region.getName() != null) GameHandler.getGameHandler().getMatch().getModules().add(region); return region; case "circle": region = new CircleRegion(new CircleParser(element)); if (region.getName() != null) GameHandler.getGameHandler().getMatch().getModules().add(region); return region; case "cuboid": region = new CuboidRegion(new CuboidParser(element)); if (region.getName() != null) GameHandler.getGameHandler().getMatch().getModules().add(region); return region; case "cylinder": region = new CylinderRegion(new CylinderParser(element)); if (region.getName() != null) GameHandler.getGameHandler().getMatch().getModules().add(region); return region; case "empty": region = new EmptyRegion(new EmptyParser(element)); if (region.getName() != null) GameHandler.getGameHandler().getMatch().getModules().add(region); return region; case "rectangle": region = new RectangleRegion(new RectangleParser(element)); if (region.getName() != null) GameHandler.getGameHandler().getMatch().getModules().add(region); return region; case "sphere": region = new SphereRegion(new SphereParser(element)); if (region.getName() != null) GameHandler.getGameHandler().getMatch().getModules().add(region); return region; case "complement": region = new ComplementRegion(new CombinationParser(element, document)); if (region.getName() != null) GameHandler.getGameHandler().getMatch().getModules().add(region); return region; case "intersect": region = new IntersectRegion(new CombinationParser(element, document)); if (region.getName() != null) GameHandler.getGameHandler().getMatch().getModules().add(region); return region; case "negative": region = new NegativeRegion(new CombinationParser(element, document)); if (region.getName() != null) GameHandler.getGameHandler().getMatch().getModules().add(region); return region; case "union": case "regions": CombinationParser parser = new CombinationParser(element, document); for (RegionModule regionChild : parser.getRegions()) { GameHandler.getGameHandler().getMatch().getModules().add(regionChild); } region = new UnionRegion(parser); if (region.getName() != null) GameHandler.getGameHandler().getMatch().getModules().add(region); return region; case "translate": region = new TranslatedRegion(new TranslateParser(element)); if (region.getName() != null) GameHandler.getGameHandler().getMatch().getModules().add(region); return region; case "mirror": region = new MirroredRegion(new MirrorParser(element)); if (region.getName() != null) GameHandler.getGameHandler().getMatch().getModules().add(region); return region; default: if (element.getAttributeValue("name") != null) { for (RegionModule regionModule : GameHandler.getGameHandler().getMatch().getModules().getModules(RegionModule.class)) { if (element.getAttributeValue("name").equalsIgnoreCase(regionModule.getName())) { return regionModule; } } } else if (element.getAttributeValue("region") != null) { for (RegionModule regionModule : GameHandler.getGameHandler().getMatch().getModules().getModules(RegionModule.class)) { if (element.getAttributeValue("region").equalsIgnoreCase(regionModule.getName())) { return regionModule; } } } else { return getRegion(element.getChildren().get(0)); } return null; } } public static RegionModule getRegion(Element element) { return getRegion(element, GameHandler.getGameHandler().getMatch().getDocument()); } public static RegionModule getRegion(String string) { for (RegionModule regionModule : GameHandler.getGameHandler().getMatch().getModules().getModules(RegionModule.class)) { if (string.equalsIgnoreCase(regionModule.getName())) return regionModule; } return null; } }