001package com.ericlam.mc.minigames.core.manager;
002
003import com.ericlam.mc.minigames.core.exception.task.TaskAlreadyRunningException;
004import com.ericlam.mc.minigames.core.game.InGameState;
005
006import javax.annotation.Nullable;
007
008/**
009 * 排程管理器
010 */
011public interface ScheduleManager {
012
013    /**
014     * 運行初始程序 (大堂倒數)
015     *
016     * @param forceStart 是否為強制開始 (無法取消 + 倒數只有十秒)
017     */
018    void startFirst(boolean forceStart);
019
020    /**
021     * 開始該場地狀態的程序
022     *
023     * @param state 場地狀態
024     * @throws TaskAlreadyRunningException 該程序已在運行時
025     */
026    void start(InGameState state) throws TaskAlreadyRunningException;
027
028    /**
029     * 該程序是否運行中
030     *
031     * @param state 遊戲狀態
032     * @return 是否運行中
033     */
034    boolean isRunning(InGameState state);
035
036    /**
037     * 取消目前程序
038     */
039    void cancelCurrent();
040
041    /**
042     * 強制完成目前程序
043     */
044    void finishCurrent();
045
046    /**
047     * 跳到某程序
048     *
049     * @param state  遊戲狀態
050     * @param cancel 強制取消, 否則強制完成
051     */
052    void jumpInto(InGameState state, boolean cancel);
053
054    /**
055     * 返回目前場地狀態
056     *
057     * @return 目前場地狀態
058     */
059    @Nullable
060    InGameState getCurrentGameState();
061
062}