All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.iohao.game.widget.light.room.flow.RoomCreateContext Maven / Gradle / Ivy

There is a newer version: 21.17
Show newest version
/*
 * ioGame
 * Copyright (C) 2021 - present  渔民小镇 ([email protected][email protected]) . All Rights Reserved.
 * # iohao.com . 渔民小镇
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General  License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General  License for more details.
 *
 * You should have received a copy of the GNU Affero General  License
 * along with this program.  If not, see .
 */
package com.iohao.game.widget.light.room.flow;

import com.iohao.game.action.skeleton.core.flow.FlowContext;
import com.iohao.game.common.kit.attr.AttrOption;
import com.iohao.game.common.kit.attr.AttrOptions;

/**
 * 上下文 - 创建房间信息(及玩法规则)
 *
 * @author 渔民小镇
 * @date 2022-03-31
 * @since 21.8
 */
public interface RoomCreateContext {
    /**
     * get 游戏 id
     *
     * @return 游戏 id
     */
    long getGameId();

    /**
     * setGameId
     *
     * @param gameId 游戏 id
     */
    RoomCreateContext setGameId(long gameId);

    /**
     * get 房间创建者
     *
     * @return 房间创建者
     */
    long getCreatorUserId();

    /**
     * get 房间空间大小
     *
     * @return 房间空间大小
     */
    int getSpaceSize();

    /**
     * get 开始游戏需要的最小人数
     *
     * @return 开始游戏需要的最小人数
     */
    int getStartGameMinSpaceSize();

    /**
     * 设置房间空间大小
     *
     * @param spaceSize 房间空间
     * @return this
     */
    default RoomCreateContext setSpaceSize(int spaceSize) {
        return setSpaceSize(spaceSize, spaceSize);
    }

    /**
     * 设置房间空间大小
     * 
     *     如 spaceSize = 10,表示房间最大可容纳 10 人,而开始游戏并不一定需要满足 10 人。
     *     而 startGameMinSpaceSize 则表示开始游戏的前提条件所需要的最小人数,
     *     当 startGameMinSpaceSize = 2 时,则表示当房间内有 2 个玩家时就能开始游戏。
     * 
* * @param spaceSize 房间空间 * @param startGameMinSpaceSize 开始游戏需要的最小人数 * @return this */ RoomCreateContext setSpaceSize(int spaceSize, int startGameMinSpaceSize); /** * 获取动态成员属性 * * @return 动态成员属性 */ AttrOptions getOptions(); /** * get 动态属性,获取选项值,如果选项不存在,返回默认值。 * * @param option 选项值 * @return 如果 option 不存在,则使用默认的 option 值。 */ default T option(AttrOption option) { return this.getOptions().option(option); } /** * 设置动态属性。设置一个具有特定值的新选项,使用 null 值删除前一个设置的 {@link AttrOption}。 * * @param option 选项值 * @param value 选项值, null 用于删除前一个 {@link AttrOption}. * @return this */ default RoomCreateContext option(AttrOption option, T value) { this.getOptions().option(option, value); return this; } /** * 创建一个 RoomCreateContext 对象,使用默认实现 * * @param creatorUserId creatorUserId 房间创建者 * @return default RoomCreateContext */ static RoomCreateContext of(long creatorUserId) { return new SimpleRoomCreateContext(creatorUserId); } /** * 创建一个 RoomCreateContext 对象,使用默认实现 * * @param flowContext flowContext 房间创建者 * @return default RoomCreateContext */ static RoomCreateContext of(FlowContext flowContext) { long userId = flowContext.getUserId(); return of(userId); } /** * 创建一个 RoomCreateContext 对象,使用默认实现 * * @return default RoomCreateContext */ static RoomCreateContext of() { return of(0); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy