package com.sencorsta.rabs.obj.ai.api;

import com.sencorsta.rabs.util.ResettableData;

import java.awt.AWTException;
import java.util.List;

/**
 * 场景接口
 *
 * @author ice
 */
public interface Scene {
    /**
     * 返回
     */
    void back() throws AWTException;

    /**
     * 打开
     */
    void open() throws AWTException;

    /**
     * 检查当前画面是否是此场景(通过唯一标识来判断)
     */
    boolean check() throws AWTException;

    /**
     * 思考
     */
    void think() throws Exception;

    /**
     * 是否完成
     *
     * @return bool
     */
    boolean isDone();

    /**
     * 是否开启
     * @return bool
     */
    boolean isOpen();

    /**
     * 获取上级场景
     *
     * @return 上级场景
     */
    Scene getParent();

    /**
     * 设置上级场景
     *
     * @return 上级场景
     */
    void setParent(Scene scene);

    /**
     * 获取下级场景
     *
     * @return 子场景列表
     */
    List<Scene> getChildren();

    /**
     * 返回持久化数据
     * @return 数据
     */
    String getData();

    /**
     * 加载持久化数据
     * @return
     */
    void loadData(String dataJson);

    /**
     * 优先级 越大的越优先
     */
    float getPriority();

    /**
     * 强制通过
     */
    void forcePass();

    /**
     * 进入前通用检查
     */
    void checkBeforeEnter() throws AWTException;
}
