use of pl.themolka.arcade.dom.Node in project Arcade2 by ShootGame.
the class FireworkEffectParser method parseTree.
@Override
protected ParserResult<FireworkEffect> parseTree(Node node, String name) throws ParserException {
FireworkEffect.Builder builder = FireworkEffect.builder().with(this.typeParser.parse(node.property("type", "of")).orDefault(FireworkEffect.Type.BALL)).flicker(this.flickerParser.parse(node.property("flicker")).orDefault(false)).trail(this.trailParser.parse(node.property("trail")).orDefault(false));
boolean colorsDefined = false;
for (Node color : node.children("color")) {
builder.withColor(this.colorParser.parse(color).orFail());
colorsDefined = true;
}
if (!colorsDefined) {
throw this.fail(node, name, null, "No colors defined");
}
for (Node fadeColor : node.children("fade-color", "fadecolor", "fade")) {
builder.withFade(this.fadeColorParser.parse(fadeColor).orFail());
}
return ParserResult.fine(node, name, builder.build());
}
use of pl.themolka.arcade.dom.Node in project Arcade2 by ShootGame.
the class ModulesInfoParser method parseTree.
@Override
protected ParserResult<ModulesInfo> parseTree(Node node, String name) throws ParserException {
List<IGameModuleConfig<?>> configs = new ArrayList<>();
for (GameModuleParser<?, ?> parser : this.moduleParsers) {
Node definedNode = parser.define(node);
if (definedNode != null) {
configs.add(parser.parse(definedNode).orFail());
}
}
ModulesInfo info = new ModulesInfo();
info.setConfigs(configs);
return ParserResult.fine(node, name, info);
}
use of pl.themolka.arcade.dom.Node in project Arcade2 by ShootGame.
the class OfflineMapParser method parseTree.
@Override
protected ParserResult<OfflineMap> parseTree(Node node, String name) throws ParserException {
Property fileVersionProperty = node.property("fileversion", "file-version", "ver", "version", "proto", "manifest");
MapFileVersion fileVersion = this.fileVersionParser.parse(fileVersionProperty).orDefault(MapFileVersions.NEWEST);
Node nameNode = node.firstChild("name");
Node versionNode = node.firstChild("version", "ver");
if (nameNode == null || versionNode == null) {
throw new ParserException(node, MISSING_NAME_VERSION);
}
String mapName = this.nameParser.parse(nameNode).orFail();
MapVersion version = this.versionParser.parse(versionNode).orFail();
String description = this.descriptionParser.parse(node.firstChild("description", "objective", "goal", "about")).orNull();
int mapNameLength = mapName.length();
if (mapNameLength < OfflineMap.NAME_MIN_LENGTH) {
throw this.fail(nameNode, nameNode.getName(), nameNode.getValue(), "Map name is shorter than " + OfflineMap.NAME_MIN_LENGTH + " characters");
} else if (mapNameLength > OfflineMap.NAME_MAX_LENGTH) {
throw this.fail(nameNode, nameNode.getName(), nameNode.getValue(), "Map name is longer than " + OfflineMap.NAME_MAX_LENGTH + " characters");
}
List<Author> authors = this.parseAuthors(node);
Node authorsNode = node.firstChild("authors", "contributors", "teams");
if (authorsNode != null) {
authors.addAll(this.parseAuthors(authorsNode));
}
List<Changelog> changelogs = new ArrayList<>();
Node changelogsNode = node.firstChild("changelog", "change-log", "changes");
if (changelogsNode != null) {
changelogs.addAll(this.parseChangelogs(changelogsNode));
}
return ParserResult.fine(node, name, new OfflineMap(fileVersion, mapName, version, description, authors, changelogs));
}
use of pl.themolka.arcade.dom.Node in project Arcade2 by ShootGame.
the class Settings method setDocument.
public void setDocument(Document document) throws ParserException, ParserNotSupportedException {
this.document = document;
Node root = document.getRoot();
if (root != null) {
this.setup(root);
}
}
use of pl.themolka.arcade.dom.Node in project Arcade2 by ShootGame.
the class ScoreGameParser method parseNode.
@Override
protected ParserResult<ScoreGame.Config> parseNode(Node node, String name, String value) throws ParserException {
Set<Score.Config> scores = new LinkedHashSet<>();
for (Node scoreNode : node.children("score")) {
scores.add(this.scoreParser.parse(scoreNode).orFail());
}
if (ParserUtils.ensureNotEmpty(scores)) {
throw this.fail(node, name, value, "No scores defined");
}
Set<ScoreBox.Config> scoreBoxes = new LinkedHashSet<>();
for (Node scoreBoxNode : node.children("score-box", "scorebox")) {
scoreBoxes.add(this.scoreBoxParser.parse(scoreBoxNode).orFail());
}
return ParserResult.fine(node, name, value, new ScoreGame.Config() {
public Ref<Set<Score.Config>> scores() {
return Ref.ofProvided(scores);
}
public Ref<Set<ScoreBox.Config>> scoreBoxes() {
return Ref.ofProvided(scoreBoxes);
}
});
}
Aggregations