package com.github.czyzby.lml.parser.impl.attribute; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.Touchable; import com.github.czyzby.kiwi.util.common.Exceptions; import com.github.czyzby.lml.parser.LmlParser; import com.github.czyzby.lml.parser.tag.LmlAttribute; import com.github.czyzby.lml.parser.tag.LmlTag; /** Allows to choose touchable status. Expects a string matching Touchable enum name. By default, mapped to "touchable" * attribute name. * * @author MJ */ public class TouchableLmlAttribute implements LmlAttribute<Actor> { @Override public Class<Actor> getHandledType() { return Actor.class; } @Override public void process(final LmlParser parser, final LmlTag tag, final Actor actor, final String rawAttributeData) { actor.setTouchable(getTouchable(parser.parseString(rawAttributeData, actor), parser)); } private static Touchable getTouchable(final String touchableName, final LmlParser parser) { try { final Touchable touchable = Touchable.valueOf(touchableName); if (touchable != null) { return touchable; } } catch (final Exception exception) { Exceptions.ignore(exception); // Somewhat expected. Might still match ignoring case. } for (final Touchable touchable : Touchable.values()) { if (touchable.name().equalsIgnoreCase(touchableName)) { return touchable; } } parser.throwErrorIfStrict("Invalid touchable enum name: " + touchableName); return Touchable.enabled; } }