package net.alcuria.umbracraft.engine.windows.message; import net.alcuria.umbracraft.engine.scripts.MessageScriptCommand.MessageEmotion; import net.alcuria.umbracraft.engine.scripts.MessageScriptCommand.MessageStyle; import net.alcuria.umbracraft.engine.windows.InputCode; import net.alcuria.umbracraft.engine.windows.Window; import net.alcuria.umbracraft.listeners.Listener; /** A {@link Window} that shows message boxes. * @author Andrew Keturi */ public class MessageWindow extends Window<MessageWindowLayout> { private Listener close; private final MessageEmotion emotion; private final String message, faceId, name; public MessageWindow(String message, String name, String faceId, MessageEmotion emotion, MessageStyle messageStyle) { super(new MessageWindowLayout(messageStyle)); this.message = message; this.name = name; this.faceId = faceId; this.emotion = emotion; } /** Adds a listener to invoke when the screen is closed */ public void addCloseListener(Listener close) { this.close = close; } private void advance() { boolean complete = layout.advance(); if (complete) { close(); } } @Override public boolean isTouchable() { return false; } @Override public void onClose() { if (close != null) { close.invoke(); } } @Override public void onKeyPressed(InputCode key) { if (key == InputCode.CONFIRM) { advance(); } } @Override public void onOpen() { // start the message and allow touch input to advance the messages layout.setFace(faceId, emotion); layout.setName(name); layout.setMessage(message, false); } }