package com.github.czyzby.lml.parser.impl.tag.actor;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.Group;
import com.github.czyzby.lml.parser.LmlParser;
import com.github.czyzby.lml.parser.impl.tag.AbstractActorLmlTag;
import com.github.czyzby.lml.parser.tag.LmlActorBuilder;
import com.github.czyzby.lml.parser.tag.LmlTag;
/** Simple actor tag parser. If the tag is parental, {@link Group} is created instead of {@code Actor} to handle
* children tags and plain text. This widget is advised to be used only as a child when, for example, a cell in a table
* needs to be filled with a mock-up actor. Text between tags is added to the group as a label. Mapped to "actor",
* "group".
*
* @author MJ */
public class ActorLmlTag extends AbstractActorLmlTag {
public ActorLmlTag(final LmlParser parser, final LmlTag parentTag, final StringBuilder rawTagData) {
super(parser, parentTag, rawTagData);
}
@Override
protected Actor getNewInstanceOfActor(final LmlActorBuilder builder) {
return isParent() ? new Group() : new Actor();
}
@Override
protected void handleValidChild(final LmlTag childTag) {
validateActor();
((Group) getActor()).addActor(childTag.getActor());
}
private void validateActor() {
if (!(getActor() instanceof Group)) {
getParser().throwError("Fatal. Simple actor child tag used as a parent. Invalid parser implementation.");
}
}
@Override
protected void handlePlainTextLine(final String plainTextLine) {
validateActor();
((Group) getActor()).addActor(toLabel(plainTextLine));
}
}