初次提交,修改了头像不能展示

This commit is contained in:
2025-08-11 11:01:55 +08:00
commit 7e2dcad9c9
3841 changed files with 227903 additions and 0 deletions

1
SudMGPWrapper/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/build

View File

@@ -0,0 +1,39 @@
plugins {
id 'com.android.library'
}
android {
compileSdkVersion 32
defaultConfig {
minSdkVersion 21
targetSdkVersion 32
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles "consumer-rules.pro"
}
buildTypes {
release {
consumerProguardFiles 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
}
dependencies {
// 引入 SudMGPSDK
// api project(':SudMGPSDK')
api 'tech.sud.mgp:SudMGP:1.3.6.1181'
// gson
api 'com.google.code.gson:gson:2.8.6'
// 依赖okhttp
api 'com.squareup.okhttp3:okhttp:4.9.2'
}

View File

@@ -0,0 +1,2 @@
# SudMGPWrapper keep
-keep class tech.sud.mgp.SudMGPWrapper.** {*;}

21
SudMGPWrapper/proguard-rules.pro vendored Normal file
View File

@@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="tech.sud.mgp.SudMGPWrapper">
</manifest>

View File

@@ -0,0 +1,150 @@
/*
* Copyright © Sud.Tech
* https://sud.tech
*/
package tech.sud.mgp.SudMGPWrapper.decorator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Objects;
import tech.sud.mgp.SudMGPWrapper.state.SudMGPMGState;
/**
* 游戏回调数据缓存
*/
public class SudFSMMGCache {
private String captainUserId; // 记录当前队长的用户id
private SudMGPMGState.MGCommonGameState mgCommonGameStateModel; // 全局游戏状态
private boolean isHitBomb = false; // 是否数字炸弹
private final HashSet<String> playerInSet = new HashSet<>(); // 记录已经加入了游戏的玩家
private final HashSet<String> playerReadySet = new HashSet<>(); // 记录已经准备好的游戏玩家
private final HashMap<String, SudMGPMGState.MGCommonPlayerPlaying> playerPlayingMap = new HashMap<>(); // 记录玩家的游戏状态
// 队长状态 处理
public void onPlayerMGCommonPlayerCaptain(String userId, SudMGPMGState.MGCommonPlayerCaptain model) {
if (model != null) {
if (model.isCaptain) {
captainUserId = userId;
} else {
if (Objects.equals(captainUserId, userId)) {
captainUserId = null;
}
}
}
}
// 游戏状态 处理
public void onGameMGCommonGameState(SudMGPMGState.MGCommonGameState model) {
mgCommonGameStateModel = model;
}
// 玩家加入状态处理
public void onPlayerMGCommonPlayerIn(String userId, SudMGPMGState.MGCommonPlayerIn model) {
if (model != null) {
if (model.isIn) {
playerInSet.add(userId);
} else {
playerInSet.remove(userId);
playerReadySet.remove(userId);
}
}
}
// 玩家准备状态
public void onPlayerMGCommonPlayerReady(String userId, SudMGPMGState.MGCommonPlayerReady model) {
if (model != null) {
if (model.isReady) {
playerReadySet.add(userId);
} else {
playerReadySet.remove(userId);
}
}
}
// 玩家游戏状态
public void onPlayerMGCommonPlayerPlaying(String userId, SudMGPMGState.MGCommonPlayerPlaying model) {
if (model != null) {
playerPlayingMap.put(userId, model);
}
}
// 关键词状态
public void onGameMGCommonKeyWordToHit(SudMGPMGState.MGCommonKeyWordToHit model) {
if (model != null) {
isHitBomb = model.wordType.equals("number");
}
}
// 返回该玩家是否正在游戏中
public boolean playerIsPlaying(String userId) {
SudMGPMGState.MGCommonPlayerPlaying mgCommonPlayerPlaying = playerPlayingMap.get(userId);
if (mgCommonPlayerPlaying != null) {
return mgCommonPlayerPlaying.isPlaying;
}
return false;
}
// 返回该玩家是否已准备
public boolean playerIsReady(String userId) {
return playerReadySet.contains(userId);
}
// 返回该玩家是否已加入了游戏
public boolean playerIsIn(String userId) {
return playerInSet.contains(userId);
}
// 获取当前游戏中的人数
public int getPlayerInNumber() {
return playerInSet.size();
}
// 是否数字炸弹
public boolean isHitBomb() {
return isHitBomb;
}
// 销毁游戏
public void destroyMG() {
captainUserId = null;
mgCommonGameStateModel = null;
isHitBomb = false;
playerInSet.clear();
playerReadySet.clear();
playerPlayingMap.clear();
}
/** 获取队长userId */
public String getCaptainUserId() {
return captainUserId;
}
/** 获取当前已加入游戏的玩家集合 */
public HashSet<String> getPlayerInSet() {
return new HashSet<>(playerInSet);
}
/** 获取当前已准备的玩家集合 */
public HashSet<String> getPlayerReadySet() {
return new HashSet<>(playerReadySet);
}
/** 获取玩家游戏状态集合 */
public HashMap<String, SudMGPMGState.MGCommonPlayerPlaying> getPlayerPlayingMap() {
return new HashMap<>(playerPlayingMap);
}
/**
* 返回当前游戏的状态,数值参数{@link SudMGPMGState.MGCommonGameState}
*/
public int getGameState() {
if (mgCommonGameStateModel != null) {
return mgCommonGameStateModel.gameState;
}
return SudMGPMGState.MGCommonGameState.UNKNOW;
}
}

View File

@@ -0,0 +1,843 @@
/*
* Copyright © Sud.Tech
* https://sud.tech
*/
package tech.sud.mgp.SudMGPWrapper.decorator;
import tech.sud.mgp.SudMGPWrapper.state.SudMGPMGState;
import tech.sud.mgp.SudMGPWrapper.utils.ISudFSMStateHandleUtils;
import tech.sud.mgp.SudMGPWrapper.utils.SudJsonUtils;
import tech.sud.mgp.core.ISudFSMMG;
import tech.sud.mgp.core.ISudFSMStateHandle;
/**
* ISudFSMMG 游戏调APP回调装饰类
* 参考文档https://docs.sud.tech/zh-CN/app/Client/API/ISudFSMMG.html
*/
public class SudFSMMGDecorator implements ISudFSMMG {
// 回调
private SudFSMMGListener sudFSMMGListener;
// 数据状态封装
private final SudFSMMGCache sudFSMMGCache = new SudFSMMGCache();
/**
* 设置回调
*
* @param listener 监听器
*/
public void setSudFSMMGListener(SudFSMMGListener listener) {
sudFSMMGListener = listener;
}
/**
* 游戏日志
* 最低版本v1.1.30.xx
*/
@Override
public void onGameLog(String dataJson) {
SudFSMMGListener listener = sudFSMMGListener;
if (listener != null) {
listener.onGameLog(dataJson);
}
}
/**
* 游戏加载进度
*
* @param stage 阶段start=1,loading=2,end=3
* @param retCode 错误码0成功
* @param progress 进度:[0, 100]
*/
@Override
public void onGameLoadingProgress(int stage, int retCode, int progress) {
SudFSMMGListener listener = sudFSMMGListener;
if (listener != null) {
listener.onGameLoadingProgress(stage, retCode, progress);
}
}
/**
* 游戏开始
* 最低版本v1.1.30.xx
*/
@Override
public void onGameStarted() {
SudFSMMGListener listener = sudFSMMGListener;
if (listener != null) {
listener.onGameStarted();
}
}
/**
* 游戏销毁
* 最低版本v1.1.30.xx
*/
@Override
public void onGameDestroyed() {
SudFSMMGListener listener = sudFSMMGListener;
if (listener != null) {
listener.onGameDestroyed();
}
}
/**
* Code过期需要实现
* APP接入方需要调用handle.success或handle.fail
*
* @param dataJson {"code":"value"}
*/
@Override
public void onExpireCode(ISudFSMStateHandle handle, String dataJson) {
SudFSMMGListener listener = sudFSMMGListener;
if (listener != null) {
listener.onExpireCode(handle, dataJson);
}
}
/**
* 获取游戏View信息需要实现
* APP接入方需要调用handle.success或handle.fail
*
* @param handle 操作
* @param dataJson {}
*/
@Override
public void onGetGameViewInfo(ISudFSMStateHandle handle, String dataJson) {
SudFSMMGListener listener = sudFSMMGListener;
if (listener != null) {
listener.onGetGameViewInfo(handle, dataJson);
}
}
/**
* 获取游戏Config需要实现
* APP接入方需要调用handle.success或handle.fail
*
* @param handle 操作
* @param dataJson {}
* 最低版本v1.1.30.xx
*/
@Override
public void onGetGameCfg(ISudFSMStateHandle handle, String dataJson) {
SudFSMMGListener listener = sudFSMMGListener;
if (listener != null) {
listener.onGetGameCfg(handle, dataJson);
}
}
/**
* 游戏状态变化
* APP接入方需要调用handle.success或handle.fail
*
* @param handle 操作
* @param state 状态命令
* @param dataJson 状态值
*/
@Override
public void onGameStateChange(ISudFSMStateHandle handle, String state, String dataJson) {
SudFSMMGListener listener = sudFSMMGListener;
if (listener != null && listener.onGameStateChange(handle, state, dataJson)) {
return;
}
switch (state) {
case SudMGPMGState.MG_COMMON_PUBLIC_MESSAGE: // 1. 公屏消息
SudMGPMGState.MGCommonPublicMessage mgCommonPublicMessage = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonPublicMessage.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCommonPublicMessage(handle, mgCommonPublicMessage);
}
break;
case SudMGPMGState.MG_COMMON_KEY_WORD_TO_HIT: // 2. 关键词状态
SudMGPMGState.MGCommonKeyWordToHit mgCommonKeyWordToHit = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonKeyWordToHit.class);
sudFSMMGCache.onGameMGCommonKeyWordToHit(mgCommonKeyWordToHit);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCommonKeyWordToHit(handle, mgCommonKeyWordToHit);
}
break;
case SudMGPMGState.MG_COMMON_GAME_SETTLE: // 3. 游戏结算状态
SudMGPMGState.MGCommonGameSettle mgCommonGameSettle = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonGameSettle.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCommonGameSettle(handle, mgCommonGameSettle);
}
break;
case SudMGPMGState.MG_COMMON_SELF_CLICK_JOIN_BTN: // 4. 加入游戏按钮点击状态
SudMGPMGState.MGCommonSelfClickJoinBtn mgCommonSelfClickJoinBtn = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonSelfClickJoinBtn.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCommonSelfClickJoinBtn(handle, mgCommonSelfClickJoinBtn);
}
break;
case SudMGPMGState.MG_COMMON_SELF_CLICK_CANCEL_JOIN_BTN: // 5. 取消加入(退出)游戏按钮点击状态
SudMGPMGState.MGCommonSelfClickCancelJoinBtn selfClickCancelJoinBtn = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonSelfClickCancelJoinBtn.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCommonSelfClickCancelJoinBtn(handle, selfClickCancelJoinBtn);
}
break;
case SudMGPMGState.MG_COMMON_SELF_CLICK_READY_BTN: // 6. 准备按钮点击状态
SudMGPMGState.MGCommonSelfClickReadyBtn mgCommonSelfClickReadyBtn = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonSelfClickReadyBtn.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCommonSelfClickReadyBtn(handle, mgCommonSelfClickReadyBtn);
}
break;
case SudMGPMGState.MG_COMMON_SELF_CLICK_CANCEL_READY_BTN: // 7. 取消准备按钮点击状态
SudMGPMGState.MGCommonSelfClickCancelReadyBtn mgCommonSelfClickCancelReadyBtn = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonSelfClickCancelReadyBtn.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCommonSelfClickCancelReadyBtn(handle, mgCommonSelfClickCancelReadyBtn);
}
break;
case SudMGPMGState.MG_COMMON_SELF_CLICK_START_BTN: // 8. 开始游戏按钮点击状态
SudMGPMGState.MGCommonSelfClickStartBtn mgCommonSelfClickStartBtn = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonSelfClickStartBtn.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCommonSelfClickStartBtn(handle, mgCommonSelfClickStartBtn);
}
break;
case SudMGPMGState.MG_COMMON_SELF_CLICK_SHARE_BTN: // 9. 分享按钮点击状态
SudMGPMGState.MGCommonSelfClickShareBtn mgCommonSelfClickShareBtn = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonSelfClickShareBtn.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCommonSelfClickShareBtn(handle, mgCommonSelfClickShareBtn);
}
break;
case SudMGPMGState.MG_COMMON_GAME_STATE: // 10. 游戏状态
SudMGPMGState.MGCommonGameState mgCommonGameState = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonGameState.class);
sudFSMMGCache.onGameMGCommonGameState(mgCommonGameState);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCommonGameState(handle, mgCommonGameState);
}
break;
case SudMGPMGState.MG_COMMON_SELF_CLICK_GAME_SETTLE_CLOSE_BTN: // 11. 结算界面关闭按钮点击状态2021-12-27新增
SudMGPMGState.MGCommonSelfClickGameSettleCloseBtn mgCommonSelfClickGameSettleCloseBtn = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonSelfClickGameSettleCloseBtn.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCommonSelfClickGameSettleCloseBtn(handle, mgCommonSelfClickGameSettleCloseBtn);
}
break;
case SudMGPMGState.MG_COMMON_SELF_CLICK_GAME_SETTLE_AGAIN_BTN: // 12. 结算界面再来一局按钮点击状态2021-12-27新增
SudMGPMGState.MGCommonSelfClickGameSettleAgainBtn mgCommonSelfClickGameSettleAgainBtn = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonSelfClickGameSettleAgainBtn.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCommonSelfClickGameSettleAgainBtn(handle, mgCommonSelfClickGameSettleAgainBtn);
}
break;
case SudMGPMGState.MG_COMMON_GAME_SOUND_LIST: // 13. 游戏上报游戏中的声音列表2021-12-30新增现在只支持碰碰我最强
SudMGPMGState.MGCommonGameSoundList mgCommonGameSoundList = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonGameSoundList.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCommonGameSoundList(handle, mgCommonGameSoundList);
}
break;
case SudMGPMGState.MG_COMMON_GAME_SOUND: // 14. 游通知app层播放声音2021-12-30新增现在只支持碰碰我最强
SudMGPMGState.MGCommonGameSound mgCommonGameSound = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonGameSound.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCommonGameSound(handle, mgCommonGameSound);
}
break;
case SudMGPMGState.MG_COMMON_GAME_BG_MUSIC_STATE: // 15. 游戏通知app层播放背景音乐状态2022-01-07新增现在只支持碰碰我最强
SudMGPMGState.MGCommonGameBgMusicState mgCommonGameBgMusicState = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonGameBgMusicState.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCommonGameBgMusicState(handle, mgCommonGameBgMusicState);
}
break;
case SudMGPMGState.MG_COMMON_GAME_SOUND_STATE: // 16. 游戏通知app层播放音效的状态2022-01-07新增现在只支持碰碰我最强
SudMGPMGState.MGCommonGameSoundState mgCommonGameSoundState = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonGameSoundState.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCommonGameSoundState(handle, mgCommonGameSoundState);
}
break;
case SudMGPMGState.MG_COMMON_GAME_ASR: // 17. ASR状态(开启和关闭语音识别状态v1.1.45.xx 版本新增)
SudMGPMGState.MGCommonGameASR mgCommonGameASR = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonGameASR.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCommonGameASR(handle, mgCommonGameASR);
}
break;
case SudMGPMGState.MG_COMMON_SELF_MICROPHONE: // 18. 麦克风状态2022-02-08新增
SudMGPMGState.MGCommonSelfMicrophone mgCommonSelfMicrophone = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonSelfMicrophone.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCommonSelfMicrophone(handle, mgCommonSelfMicrophone);
}
break;
case SudMGPMGState.MG_COMMON_SELF_HEADPHONE: // 19. 耳机听筒扬声器状态2022-02-08新增
SudMGPMGState.MGCommonSelfHeadphone mgCommonSelfHeadphone = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonSelfHeadphone.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCommonSelfHeadphone(handle, mgCommonSelfHeadphone);
}
break;
case SudMGPMGState.MG_COMMON_APP_COMMON_SELF_X_RESP: // 20. App通用状态操作结果错误码2022-05-10新增
SudMGPMGState.MGCommonAPPCommonSelfXResp mgCommonAPPCommonSelfXResp = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonAPPCommonSelfXResp.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCommonAPPCommonSelfXResp(handle, mgCommonAPPCommonSelfXResp);
}
break;
case SudMGPMGState.MG_COMMON_GAME_ADD_AI_PLAYERS: // 21. 游戏通知app层添加陪玩机器人是否成功2022-05-17新增
SudMGPMGState.MGCommonGameAddAIPlayers mgCommonGameAddAIPlayers = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonGameAddAIPlayers.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCommonGameAddAIPlayers(handle, mgCommonGameAddAIPlayers);
}
break;
case SudMGPMGState.MG_COMMON_GAME_NETWORK_STATE: // 22. 游戏通知app层添当前网络连接状态2022-06-21新增
SudMGPMGState.MGCommonGameNetworkState mgCommonGameNetworkState = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonGameNetworkState.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCommonGameNetworkState(handle, mgCommonGameNetworkState);
}
break;
case SudMGPMGState.MG_COMMON_GAME_GET_SCORE: // 23. 游戏通知app获取积分
SudMGPMGState.MGCommonGameGetScore mgCommonGameScore = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonGameGetScore.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCommonGameGetScore(handle, mgCommonGameScore);
}
break;
case SudMGPMGState.MG_COMMON_GAME_SET_SCORE: // 24. 游戏通知app带入积分
SudMGPMGState.MGCommonGameSetScore mgCommonGameSetScore = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonGameSetScore.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCommonGameSetScore(handle, mgCommonGameSetScore);
}
break;
case SudMGPMGState.MG_COMMON_GAME_CREATE_ORDER: // 25. 创建订单
SudMGPMGState.MGCommonGameCreateOrder mgCommonGameCreateOrder = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonGameCreateOrder.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCommonGameCreateOrder(handle, mgCommonGameCreateOrder);
}
break;
case SudMGPMGState.MG_COMMON_PLAYER_ROLE_ID: // 26. 游戏通知app玩家角色(仅对狼人杀有效)
SudMGPMGState.MGCommonPlayerRoleId mgCommonPlayerRoleId = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonPlayerRoleId.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCommonPlayerRoleId(handle, mgCommonPlayerRoleId);
}
break;
case SudMGPMGState.MG_COMMON_GAME_DISCO_ACTION: // 1. 元宇宙砂砂舞指令回调
SudMGPMGState.MGCommonGameDiscoAction mgCommonGameDiscoAction = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonGameDiscoAction.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCommonGameDiscoAction(handle, mgCommonGameDiscoAction);
}
break;
case SudMGPMGState.MG_COMMON_GAME_DISCO_ACTION_END: // 2. 元宇宙砂砂舞指令动作结束通知
SudMGPMGState.MGCommonGameDiscoActionEnd mgCommonGameDiscoActionEnd = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonGameDiscoActionEnd.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCommonGameDiscoActionEnd(handle, mgCommonGameDiscoActionEnd);
}
break;
case SudMGPMGState.MG_CUSTOM_ROCKET_CONFIG: // 1. 礼物配置文件(火箭)
SudMGPMGState.MGCustomRocketConfig mgCustomRocketConfig = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCustomRocketConfig.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCustomRocketConfig(handle, mgCustomRocketConfig);
}
break;
case SudMGPMGState.MG_CUSTOM_ROCKET_MODEL_LIST: // 2. 拥有模型列表(火箭)
SudMGPMGState.MGCustomRocketModelList mgCustomRocketModelList = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCustomRocketModelList.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCustomRocketModelList(handle, mgCustomRocketModelList);
}
break;
case SudMGPMGState.MG_CUSTOM_ROCKET_COMPONENT_LIST: // 3. 拥有组件列表(火箭)
SudMGPMGState.MGCustomRocketComponentList mgCustomRocketComponentList = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCustomRocketComponentList.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCustomRocketComponentList(handle, mgCustomRocketComponentList);
}
break;
case SudMGPMGState.MG_CUSTOM_ROCKET_USER_INFO: // 4. 获取用户信息(火箭)
SudMGPMGState.MGCustomRocketUserInfo mgCustomRocketUserInfo = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCustomRocketUserInfo.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCustomRocketUserInfo(handle, mgCustomRocketUserInfo);
}
break;
case SudMGPMGState.MG_CUSTOM_ROCKET_ORDER_RECORD_LIST: // 5. 订单记录列表(火箭)
SudMGPMGState.MGCustomRocketOrderRecordList mgCustomRocketOrderRecordList = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCustomRocketOrderRecordList.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCustomRocketOrderRecordList(handle, mgCustomRocketOrderRecordList);
}
break;
case SudMGPMGState.MG_CUSTOM_ROCKET_ROOM_RECORD_LIST: // 6. 展馆内列表(火箭)
SudMGPMGState.MGCustomRocketRoomRecordList mgCustomRocketRoomRecordList = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCustomRocketRoomRecordList.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCustomRocketRoomRecordList(handle, mgCustomRocketRoomRecordList);
}
break;
case SudMGPMGState.MG_CUSTOM_ROCKET_USER_RECORD_LIST: // 7. 展馆内玩家送出记录(火箭)
SudMGPMGState.MGCustomRocketUserRecordList mgCustomRocketUserRecordList = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCustomRocketUserRecordList.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCustomRocketUserRecordList(handle, mgCustomRocketUserRecordList);
}
break;
case SudMGPMGState.MG_CUSTOM_ROCKET_SET_DEFAULT_MODEL: // 8. 设置默认模型(火箭)
SudMGPMGState.MGCustomRocketSetDefaultModel mgCustomRocketSetDefaultSeat = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCustomRocketSetDefaultModel.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCustomRocketSetDefaultModel(handle, mgCustomRocketSetDefaultSeat);
}
break;
case SudMGPMGState.MG_CUSTOM_ROCKET_DYNAMIC_FIRE_PRICE: // 9. 动态计算一键发送价格(火箭)
SudMGPMGState.MGCustomRocketDynamicFirePrice mgCustomRocketDynamicFirePrice = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCustomRocketDynamicFirePrice.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCustomRocketDynamicFirePrice(handle, mgCustomRocketDynamicFirePrice);
}
break;
case SudMGPMGState.MG_CUSTOM_ROCKET_FIRE_MODEL: // 10. 一键发送(火箭)
SudMGPMGState.MGCustomRocketFireModel mGCustomRocketFireModel = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCustomRocketFireModel.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCustomRocketFireModel(handle, mGCustomRocketFireModel);
}
break;
case SudMGPMGState.MG_CUSTOM_ROCKET_CREATE_MODEL: // 11. 新组装模型(火箭)
SudMGPMGState.MGCustomRocketCreateModel mgCustomRocketCreateModel = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCustomRocketCreateModel.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCustomRocketCreateModel(handle, mgCustomRocketCreateModel);
}
break;
case SudMGPMGState.MG_CUSTOM_ROCKET_REPLACE_COMPONENT: // 12. 模型更换组件(火箭)
SudMGPMGState.MGCustomRocketReplaceComponent mgCustomRocketReplaceComponent = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCustomRocketReplaceComponent.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCustomRocketReplaceComponent(handle, mgCustomRocketReplaceComponent);
}
break;
case SudMGPMGState.MG_CUSTOM_ROCKET_BUY_COMPONENT: // 13. 购买组件(火箭)
SudMGPMGState.MGCustomRocketBuyComponent mgCustomRocketBuyComponent = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCustomRocketBuyComponent.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCustomRocketBuyComponent(handle, mgCustomRocketBuyComponent);
}
break;
case SudMGPMGState.MG_CUSTOM_ROCKET_PLAY_EFFECT_START: // 14. 播放效果开始(火箭)
SudMGPMGState.MGCustomRocketPlayEffectStart mgCustomRocketPlayEffectStart = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCustomRocketPlayEffectStart.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCustomRocketPlayEffectStart(handle, mgCustomRocketPlayEffectStart);
}
break;
case SudMGPMGState.MG_CUSTOM_ROCKET_PLAY_EFFECT_FINISH: // 15. 播放效果完成(火箭)
SudMGPMGState.MGCustomRocketPlayEffectFinish mgCustomRocketPlayEffectFinish = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCustomRocketPlayEffectFinish.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCustomRocketPlayEffectFinish(handle, mgCustomRocketPlayEffectFinish);
}
break;
case SudMGPMGState.MG_CUSTOM_ROCKET_VERIFY_SIGN: // 16. 验证签名合规(火箭)
SudMGPMGState.MGCustomRocketVerifySign mgCustomRocketVerifySign = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCustomRocketVerifySign.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCustomRocketVerifySign(handle, mgCustomRocketVerifySign);
}
break;
case SudMGPMGState.MG_CUSTOM_ROCKET_UPLOAD_MODEL_ICON: // 17. 上传icon(火箭)
SudMGPMGState.MGCustomRocketUploadModelIcon mgCustomRocketUploadModelIcon = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCustomRocketUploadModelIcon.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCustomRocketUploadModelIcon(handle, mgCustomRocketUploadModelIcon);
}
break;
case SudMGPMGState.MG_CUSTOM_ROCKET_PREPARE_FINISH: // 18. 前期准备完成(火箭)
SudMGPMGState.MGCustomRocketPrepareFinish mgCustomRocketPrepareFinish = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCustomRocketPrepareFinish.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCustomRocketPrepareFinish(handle, mgCustomRocketPrepareFinish);
}
break;
case SudMGPMGState.MG_CUSTOM_ROCKET_SHOW_GAME_SCENE: // 19. 火箭主界面已显示(火箭)
SudMGPMGState.MGCustomRocketShowGameScene mgCustomRocketShowGameScene = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCustomRocketShowGameScene.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCustomRocketShowGameScene(handle, mgCustomRocketShowGameScene);
}
break;
case SudMGPMGState.MG_CUSTOM_ROCKET_HIDE_GAME_SCENE: // 20. 火箭主界面已隐藏(火箭)
SudMGPMGState.MGCustomRocketHideGameScene mgCustomRocketHideGameScene = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCustomRocketHideGameScene.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCustomRocketHideGameScene(handle, mgCustomRocketHideGameScene);
}
break;
case SudMGPMGState.MG_CUSTOM_ROCKET_CLICK_LOCK_COMPONENT: // 21. 点击锁住组件(火箭)
SudMGPMGState.MGCustomRocketClickLockComponent mgCustomRocketClickLockComponent = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCustomRocketClickLockComponent.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCustomRocketClickLockComponent(handle, mgCustomRocketClickLockComponent);
}
break;
case SudMGPMGState.MG_CUSTOM_ROCKET_FLY_CLICK: // 22. 火箭效果飞行点击(火箭)
SudMGPMGState.MGCustomRocketFlyClick mgCustomRocketFlyClick = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCustomRocketFlyClick.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCustomRocketFlyClick(handle, mgCustomRocketFlyClick);
}
break;
case SudMGPMGState.MG_CUSTOM_ROCKET_FLY_END: // 23. 火箭效果飞行结束(火箭)
SudMGPMGState.MGCustomRocketFlyEnd mgCustomRocketFlyEnd = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCustomRocketFlyEnd.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCustomRocketFlyEnd(handle, mgCustomRocketFlyEnd);
}
break;
case SudMGPMGState.MG_CUSTOM_ROCKET_SET_CLICK_RECT: // 24. 设置点击区域(火箭)
SudMGPMGState.MGCustomRocketSetClickRect mgCustomRocketSetClickRect = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCustomRocketSetClickRect.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGCustomRocketSetClickRect(handle, mgCustomRocketSetClickRect);
}
break;
case SudMGPMGState.MG_BASEBALL_RANKING: // 1. 查询排行榜数据(棒球)
SudMGPMGState.MGBaseballRanking mgBaseballRanking = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGBaseballRanking.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGBaseballRanking(handle, mgBaseballRanking);
}
break;
case SudMGPMGState.MG_BASEBALL_MY_RANKING: // 2. 查询我的排名(棒球)
SudMGPMGState.MGBaseballMyRanking mgBaseballMyRanking = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGBaseballMyRanking.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGBaseballMyRanking(handle, mgBaseballMyRanking);
}
break;
case SudMGPMGState.MG_BASEBALL_RANGE_INFO: // 3. 查询当前距离我的前后玩家数据(棒球)
SudMGPMGState.MGBaseballRangeInfo mgBaseballRangeInfo = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGBaseballRangeInfo.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGBaseballRangeInfo(handle, mgBaseballRangeInfo);
}
break;
case SudMGPMGState.MG_BASEBALL_SET_CLICK_RECT: // 4. 设置app提供给游戏可点击区域(棒球)
SudMGPMGState.MGBaseballSetClickRect mgBaseballSetClickRect = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGBaseballSetClickRect.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGBaseballSetClickRect(handle, mgBaseballSetClickRect);
}
break;
case SudMGPMGState.MG_BASEBALL_PREPARE_FINISH: // 5. 前期准备完成(棒球)
SudMGPMGState.MGBaseballPrepareFinish mgBaseballPrepareFinish = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGBaseballPrepareFinish.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGBaseballPrepareFinish(handle, mgBaseballPrepareFinish);
}
break;
case SudMGPMGState.MG_BASEBALL_SHOW_GAME_SCENE: // 6. 主界面已显示(棒球)
SudMGPMGState.MGBaseballShowGameScene mgBaseballShowGameScene = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGBaseballShowGameScene.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGBaseballShowGameScene(handle, mgBaseballShowGameScene);
}
break;
case SudMGPMGState.MG_BASEBALL_HIDE_GAME_SCENE: // 7. 主界面已隐藏(棒球)
SudMGPMGState.MGBaseballHideGameScene mgBaseballHideGameScene = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGBaseballHideGameScene.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGBaseballHideGameScene(handle, mgBaseballHideGameScene);
}
break;
case SudMGPMGState.MG_BASEBALL_TEXT_CONFIG: // 8. 获取文本配置数据(棒球)
SudMGPMGState.MGBaseballTextConfig mgBaseballTextConfig = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGBaseballTextConfig.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onGameMGBaseballTextConfig(handle, mgBaseballTextConfig);
}
break;
default:
ISudFSMStateHandleUtils.handleSuccess(handle);
break;
}
}
/**
* 游戏玩家状态变化
* APP接入方需要调用handle.success或handle.fail
*
* @param handle 操作
* @param userId 用户id
* @param state 状态命令
* @param dataJson 状态值
*/
@Override
public void onPlayerStateChange(ISudFSMStateHandle handle, String userId, String state, String dataJson) {
SudFSMMGListener listener = sudFSMMGListener;
if (listener != null && listener.onPlayerStateChange(handle, userId, state, dataJson)) {
return;
}
switch (state) {
case SudMGPMGState.MG_COMMON_PLAYER_IN: // 1.加入状态(已修改)
SudMGPMGState.MGCommonPlayerIn mgCommonPlayerIn = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonPlayerIn.class);
sudFSMMGCache.onPlayerMGCommonPlayerIn(userId, mgCommonPlayerIn);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onPlayerMGCommonPlayerIn(handle, userId, mgCommonPlayerIn);
}
break;
case SudMGPMGState.MG_COMMON_PLAYER_READY: // 2.准备状态(已修改)
SudMGPMGState.MGCommonPlayerReady mgCommonPlayerReady = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonPlayerReady.class);
sudFSMMGCache.onPlayerMGCommonPlayerReady(userId, mgCommonPlayerReady);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onPlayerMGCommonPlayerReady(handle, userId, mgCommonPlayerReady);
}
break;
case SudMGPMGState.MG_COMMON_PLAYER_CAPTAIN: // 3.队长状态(已修改)
SudMGPMGState.MGCommonPlayerCaptain mgCommonPlayerCaptain = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonPlayerCaptain.class);
sudFSMMGCache.onPlayerMGCommonPlayerCaptain(userId, mgCommonPlayerCaptain);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onPlayerMGCommonPlayerCaptain(handle, userId, mgCommonPlayerCaptain);
}
break;
case SudMGPMGState.MG_COMMON_PLAYER_PLAYING: // 4.游戏状态(已修改)
SudMGPMGState.MGCommonPlayerPlaying mgCommonPlayerPlaying = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonPlayerPlaying.class);
sudFSMMGCache.onPlayerMGCommonPlayerPlaying(userId, mgCommonPlayerPlaying);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onPlayerMGCommonPlayerPlaying(handle, userId, mgCommonPlayerPlaying);
}
break;
case SudMGPMGState.MG_COMMON_PLAYER_ONLINE: // 5.玩家在线状态
SudMGPMGState.MGCommonPlayerOnline mgCommonPlayerOnline = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonPlayerOnline.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onPlayerMGCommonPlayerOnline(handle, userId, mgCommonPlayerOnline);
}
break;
case SudMGPMGState.MG_COMMON_PLAYER_CHANGE_SEAT: // 6.玩家换游戏位状态
SudMGPMGState.MGCommonPlayerChangeSeat mgCommonPlayerChangeSeat = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonPlayerChangeSeat.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onPlayerMGCommonPlayerChangeSeat(handle, userId, mgCommonPlayerChangeSeat);
}
break;
case SudMGPMGState.MG_COMMON_SELF_CLICK_GAME_PLAYER_ICON: // 7. 游戏通知app点击玩家头像
SudMGPMGState.MGCommonSelfClickGamePlayerIcon mgCommonSelfClickGamePlayerIcon = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonSelfClickGamePlayerIcon.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onPlayerMGCommonSelfClickGamePlayerIcon(handle, userId, mgCommonSelfClickGamePlayerIcon);
}
break;
case SudMGPMGState.MG_COMMON_SELF_DIE_STATUS: // 8. 游戏通知app玩家死亡状态2022-04-24新增
SudMGPMGState.MGCommonSelfDieStatus mgCommonSelfDieStatus = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonSelfDieStatus.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onPlayerMGCommonSelfDieStatus(handle, userId, mgCommonSelfDieStatus);
}
break;
case SudMGPMGState.MG_COMMON_SELF_TURN_STATUS: // 9. 游戏通知app轮到玩家出手状态2022-04-24新增
SudMGPMGState.MGCommonSelfTurnStatus mgCommonSelfTurnStatus = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonSelfTurnStatus.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onPlayerMGCommonSelfTurnStatus(handle, userId, mgCommonSelfTurnStatus);
}
break;
case SudMGPMGState.MG_COMMON_SELF_SELECT_STATUS: // 10. 游戏通知app玩家选择状态2022-04-24新增
SudMGPMGState.MGCommonSelfSelectStatus mgCommonSelfSelectStatus = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonSelfSelectStatus.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onPlayerMGCommonSelfSelectStatus(handle, userId, mgCommonSelfSelectStatus);
}
break;
case SudMGPMGState.MG_COMMON_GAME_COUNTDOWN_TIME: // 11. 游戏通知app层当前游戏剩余时间2022-05-23新增目前UMO生效
SudMGPMGState.MGCommonGameCountdownTime mgCommonGameCountdownTime = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonGameCountdownTime.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onPlayerMGCommonGameCountdownTime(handle, userId, mgCommonGameCountdownTime);
}
break;
case SudMGPMGState.MG_COMMON_SELF_OB_STATUS: // 12. 游戏通知app层当前玩家死亡后变成ob视角2022-08-23新增目前狼人杀生效
SudMGPMGState.MGCommonSelfObStatus mgCommonSelfObStatus = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonSelfObStatus.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onPlayerMGCommonSelfObStatus(handle, userId, mgCommonSelfObStatus);
}
break;
case SudMGPMGState.MG_DG_SELECTING: // 1. 选词中状态(已修改)
SudMGPMGState.MGDGSelecting mgdgSelecting = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGDGSelecting.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onPlayerMGDGSelecting(handle, userId, mgdgSelecting);
}
break;
case SudMGPMGState.MG_DG_PAINTING: // 2. 作画中状态(已修改)
SudMGPMGState.MGDGPainting mgdgPainting = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGDGPainting.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onPlayerMGDGPainting(handle, userId, mgdgPainting);
}
break;
case SudMGPMGState.MG_DG_ERRORANSWER: // 3. 显示错误答案状态(已修改)
SudMGPMGState.MGDGErroranswer mgdgErroranswer = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGDGErroranswer.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onPlayerMGDGErroranswer(handle, userId, mgdgErroranswer);
}
break;
case SudMGPMGState.MG_DG_TOTALSCORE: // 4. 显示总积分状态(已修改)
SudMGPMGState.MGDGTotalscore mgdgTotalscore = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGDGTotalscore.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onPlayerMGDGTotalscore(handle, userId, mgdgTotalscore);
}
break;
case SudMGPMGState.MG_DG_SCORE: // 5. 本次获得积分状态(已修改)
SudMGPMGState.MGDGScore mgdgScore = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGDGScore.class);
if (listener == null) {
ISudFSMStateHandleUtils.handleSuccess(handle);
} else {
listener.onPlayerMGDGScore(handle, userId, mgdgScore);
}
break;
default:
ISudFSMStateHandleUtils.handleSuccess(handle);
break;
}
}
/** 获取队长userId */
public String getCaptainUserId() {
return sudFSMMGCache.getCaptainUserId();
}
// 返回该玩家是否正在游戏中
public boolean playerIsPlaying(String userId) {
return sudFSMMGCache.playerIsPlaying(userId);
}
// 返回该玩家是否已准备
public boolean playerIsReady(String userId) {
return sudFSMMGCache.playerIsReady(userId);
}
// 返回该玩家是否已加入了游戏
public boolean playerIsIn(String userId) {
return sudFSMMGCache.playerIsIn(userId);
}
// 获取当前游戏中的人数
public int getPlayerInNumber() {
return sudFSMMGCache.getPlayerInNumber();
}
// 是否数字炸弹
public boolean isHitBomb() {
return sudFSMMGCache.isHitBomb();
}
// 销毁游戏
public void destroyMG() {
sudFSMMGCache.destroyMG();
}
/**
* 返回当前游戏的状态,数值参数{@link SudMGPMGState.MGCommonGameState}
*/
public int getGameState() {
return sudFSMMGCache.getGameState();
}
/** 获取缓存的状态 */
public SudFSMMGCache getSudFSMMGCache() {
return sudFSMMGCache;
}
}

View File

@@ -0,0 +1,740 @@
/*
* Copyright © Sud.Tech
* https://sud.tech
*/
package tech.sud.mgp.SudMGPWrapper.decorator;
import tech.sud.mgp.SudMGPWrapper.state.SudMGPMGState;
import tech.sud.mgp.SudMGPWrapper.utils.ISudFSMStateHandleUtils;
import tech.sud.mgp.core.ISudFSMStateHandle;
/**
* {@link SudFSMMGDecorator} 回调定义
*/
public interface SudFSMMGListener {
/**
* 游戏日志
* 最低版本v1.1.30.xx
*/
default void onGameLog(String str) {
}
/**
* 游戏加载进度
*
* @param stage 阶段start=1,loading=2,end=3
* @param retCode 错误码0成功
* @param progress 进度:[0, 100]
*/
default void onGameLoadingProgress(int stage, int retCode, int progress) {
}
/**
* 游戏开始,需要实现
* 最低版本v1.1.30.xx
*/
void onGameStarted();
/**
* 游戏销毁,需要实现
* 最低版本v1.1.30.xx
*/
void onGameDestroyed();
/**
* Code过期需要实现
* APP接入方需要调用handle.success或handle.fail
*
* @param dataJson {"code":"value"}
*/
void onExpireCode(ISudFSMStateHandle handle, String dataJson);
/**
* 获取游戏View信息需要实现
* APP接入方需要调用handle.success或handle.fail
*
* @param handle
* @param dataJson {}
*/
void onGetGameViewInfo(ISudFSMStateHandle handle, String dataJson);
/**
* 获取游戏Config需要实现
* APP接入方需要调用handle.success或handle.fail
*
* @param handle
* @param dataJson {}
* 最低版本v1.1.30.xx
*/
void onGetGameCfg(ISudFSMStateHandle handle, String dataJson);
// region 游戏回调APP 通用状态
// 参考文档https://github.com/SudTechnology/sud-mgp-doc/blob/main/Client/MG%20FSM/%E9%80%9A%E7%94%A8%E7%8A%B6%E6%80%81-%E7%8E%A9%E5%AE%B6.md
/**
* 1.游戏公屏消息
* mg_common_public_message
*/
default void onGameMGCommonPublicMessage(ISudFSMStateHandle handle, SudMGPMGState.MGCommonPublicMessage model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 2. 关键词状态
* mg_common_key_word_to_hit
*/
default void onGameMGCommonKeyWordToHit(ISudFSMStateHandle handle, SudMGPMGState.MGCommonKeyWordToHit model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 3. 游戏结算状态
* mg_common_game_settle
*/
default void onGameMGCommonGameSettle(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameSettle model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 4. 加入游戏按钮点击状态
* mg_common_self_click_join_btn
*/
default void onGameMGCommonSelfClickJoinBtn(ISudFSMStateHandle handle, SudMGPMGState.MGCommonSelfClickJoinBtn model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 5. 取消加入(退出)游戏按钮点击状态
* mg_common_self_click_cancel_join_btn
*/
default void onGameMGCommonSelfClickCancelJoinBtn(ISudFSMStateHandle handle, SudMGPMGState.MGCommonSelfClickCancelJoinBtn model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 6. 准备按钮点击状态
* mg_common_self_click_ready_btn
*/
default void onGameMGCommonSelfClickReadyBtn(ISudFSMStateHandle handle, SudMGPMGState.MGCommonSelfClickReadyBtn model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 7. 取消准备按钮点击状态
* mg_common_self_click_cancel_ready_btn
*/
default void onGameMGCommonSelfClickCancelReadyBtn(ISudFSMStateHandle handle, SudMGPMGState.MGCommonSelfClickCancelReadyBtn model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 8. 开始游戏按钮点击状态
* mg_common_self_click_start_btn
*/
default void onGameMGCommonSelfClickStartBtn(ISudFSMStateHandle handle, SudMGPMGState.MGCommonSelfClickStartBtn model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 9. 分享按钮点击状态
* mg_common_self_click_share_btn
*/
default void onGameMGCommonSelfClickShareBtn(ISudFSMStateHandle handle, SudMGPMGState.MGCommonSelfClickShareBtn model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 10. 游戏状态
* mg_common_game_state
*/
default void onGameMGCommonGameState(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameState model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 11. 结算界面关闭按钮点击状态2021-12-27新增
* mg_common_self_click_game_settle_close_btn
*/
default void onGameMGCommonSelfClickGameSettleCloseBtn(ISudFSMStateHandle handle, SudMGPMGState.MGCommonSelfClickGameSettleCloseBtn model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 12. 结算界面再来一局按钮点击状态2021-12-27新增
* mg_common_self_click_game_settle_again_btn
*/
default void onGameMGCommonSelfClickGameSettleAgainBtn(ISudFSMStateHandle handle, SudMGPMGState.MGCommonSelfClickGameSettleAgainBtn model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 13. 游戏上报游戏中的声音列表2021-12-30新增现在只支持碰碰我最强
* mg_common_game_sound_list
*/
default void onGameMGCommonGameSoundList(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameSoundList model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 14. 游通知app层播放声音2021-12-30新增现在只支持碰碰我最强
* mg_common_game_sound
*/
default void onGameMGCommonGameSound(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameSound model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 15. 游戏通知app层播放背景音乐状态2022-01-07新增现在只支持碰碰我最强
* mg_common_game_bg_music_state
*/
default void onGameMGCommonGameBgMusicState(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameBgMusicState model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 16. 游戏通知app层播放音效的状态2022-01-07新增现在只支持碰碰我最强
* mg_common_game_sound_state
*/
default void onGameMGCommonGameSoundState(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameSoundState model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 17. ASR状态(开启和关闭语音识别状态v1.1.45.xx 版本新增)
* mg_common_game_asr
*/
default void onGameMGCommonGameASR(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameASR model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 18. 麦克风状态2022-02-08新增
* mg_common_self_microphone
*/
default void onGameMGCommonSelfMicrophone(ISudFSMStateHandle handle, SudMGPMGState.MGCommonSelfMicrophone model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 19. 耳机听筒扬声器状态2022-02-08新增
* mg_common_self_headphone
*/
default void onGameMGCommonSelfHeadphone(ISudFSMStateHandle handle, SudMGPMGState.MGCommonSelfHeadphone model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 20. App通用状态操作结果错误码2022-05-10新增
* mg_common_app_common_self_x_resp
*/
default void onGameMGCommonAPPCommonSelfXResp(ISudFSMStateHandle handle, SudMGPMGState.MGCommonAPPCommonSelfXResp model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 21. 游戏通知app层添加陪玩机器人是否成功2022-05-17新增
* mg_common_game_add_ai_players
*/
default void onGameMGCommonGameAddAIPlayers(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameAddAIPlayers model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 22. 游戏通知app层添当前网络连接状态2022-06-21新增
* mg_common_game_network_state
*/
default void onGameMGCommonGameNetworkState(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameNetworkState model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 23. 游戏通知app获取积分
* mg_common_game_score
*/
default void onGameMGCommonGameGetScore(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameGetScore model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 24. 游戏通知app带入积分
* mg_common_game_set_score
*/
default void onGameMGCommonGameSetScore(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameSetScore model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 25. 创建订单
* mg_common_game_create_order
*/
default void onGameMGCommonGameCreateOrder(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameCreateOrder model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 26. 游戏通知app玩家角色(仅对狼人杀有效)
* mg_common_player_role_id
*/
default void onGameMGCommonPlayerRoleId(ISudFSMStateHandle handle, SudMGPMGState.MGCommonPlayerRoleId model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
// endregion 游戏回调APP 通用状态
// region 游戏回调APP 玩家状态
/**
* 1.加入状态(已修改)
* mg_common_player_in
*/
default void onPlayerMGCommonPlayerIn(ISudFSMStateHandle handle, String userId, SudMGPMGState.MGCommonPlayerIn model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 2.准备状态(已修改)
* mg_common_player_ready
*/
default void onPlayerMGCommonPlayerReady(ISudFSMStateHandle handle, String userId, SudMGPMGState.MGCommonPlayerReady model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 3.队长状态(已修改)
* mg_common_player_captain
*/
default void onPlayerMGCommonPlayerCaptain(ISudFSMStateHandle handle, String userId, SudMGPMGState.MGCommonPlayerCaptain model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 4.游戏状态(已修改)
* mg_common_player_playing
*/
default void onPlayerMGCommonPlayerPlaying(ISudFSMStateHandle handle, String userId, SudMGPMGState.MGCommonPlayerPlaying model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 5.玩家在线状态
* mg_common_player_online
*/
default void onPlayerMGCommonPlayerOnline(ISudFSMStateHandle handle, String userId, SudMGPMGState.MGCommonPlayerOnline model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 6.玩家换游戏位状态
* mg_common_player_change_seat
*/
default void onPlayerMGCommonPlayerChangeSeat(ISudFSMStateHandle handle, String userId, SudMGPMGState.MGCommonPlayerChangeSeat model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 7. 游戏通知app点击玩家头像
* mg_common_self_click_game_player_icon
*/
default void onPlayerMGCommonSelfClickGamePlayerIcon(ISudFSMStateHandle handle, String userId, SudMGPMGState.MGCommonSelfClickGamePlayerIcon model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 8. 游戏通知app玩家死亡状态2022-04-24新增
* mg_common_self_die_status
*/
default void onPlayerMGCommonSelfDieStatus(ISudFSMStateHandle handle, String userId, SudMGPMGState.MGCommonSelfDieStatus model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 9. 游戏通知app轮到玩家出手状态2022-04-24新增
* mg_common_self_turn_status
*/
default void onPlayerMGCommonSelfTurnStatus(ISudFSMStateHandle handle, String userId, SudMGPMGState.MGCommonSelfTurnStatus model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 10. 游戏通知app玩家选择状态2022-04-24新增
* mg_common_self_select_status
*/
default void onPlayerMGCommonSelfSelectStatus(ISudFSMStateHandle handle, String userId, SudMGPMGState.MGCommonSelfSelectStatus model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 11. 游戏通知app层当前游戏剩余时间2022-05-23新增目前UMO生效
* mg_common_game_countdown_time
*/
default void onPlayerMGCommonGameCountdownTime(ISudFSMStateHandle handle, String userId, SudMGPMGState.MGCommonGameCountdownTime model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 12. 游戏通知app层当前玩家死亡后变成ob视角2022-08-23新增目前狼人杀生效
* mg_common_self_ob_status
*/
default void onPlayerMGCommonSelfObStatus(ISudFSMStateHandle handle, String userId, SudMGPMGState.MGCommonSelfObStatus model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
// endregion 游戏回调APP 玩家状态
// region 游戏回调APP 玩家状态 你画我猜
// 参考文档https://github.com/SudTechnology/sud-mgp-doc/blob/main/Client/MG%20FSM/%E4%BD%A0%E7%94%BB%E6%88%91%E7%8C%9C.md
/**
* 1. 选词中状态(已修改)
* mg_dg_selecting
*/
default void onPlayerMGDGSelecting(ISudFSMStateHandle handle, String userId, SudMGPMGState.MGDGSelecting model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 2. 作画中状态(已修改)
* mg_dg_painting
*/
default void onPlayerMGDGPainting(ISudFSMStateHandle handle, String userId, SudMGPMGState.MGDGPainting model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 3. 显示错误答案状态(已修改)
* mg_dg_erroranswer
*/
default void onPlayerMGDGErroranswer(ISudFSMStateHandle handle, String userId, SudMGPMGState.MGDGErroranswer model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 4. 显示总积分状态(已修改)
* mg_dg_totalscore
*/
default void onPlayerMGDGTotalscore(ISudFSMStateHandle handle, String userId, SudMGPMGState.MGDGTotalscore model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 5. 本次获得积分状态(已修改)
* mg_dg_score
*/
default void onPlayerMGDGScore(ISudFSMStateHandle handle, String userId, SudMGPMGState.MGDGScore model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
// endregion 游戏回调APP 玩家状态 你画我猜
// region 游戏回调APP 通用状态 元宇宙砂砂舞
/**
* 1. 元宇宙砂砂舞指令回调
* mg_common_game_disco_action
*/
default void onGameMGCommonGameDiscoAction(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameDiscoAction model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 2. 元宇宙砂砂舞指令动作结束通知
* mg_common_game_disco_action_end
*/
default void onGameMGCommonGameDiscoActionEnd(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameDiscoActionEnd model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
// endregion 游戏回调APP 通用状态 元宇宙砂砂舞
// region 游戏回调APP 通用状态 定制火箭
/**
* 1. 礼物配置文件(火箭)
* mg_custom_rocket_config
*/
default void onGameMGCustomRocketConfig(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketConfig model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 2. 拥有模型列表(火箭)
* mg_custom_rocket_model_list
*/
default void onGameMGCustomRocketModelList(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketModelList model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 3. 拥有组件列表(火箭)
* mg_custom_rocket_component_list
*/
default void onGameMGCustomRocketComponentList(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketComponentList model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 4. 获取用户信息(火箭)
* mg_custom_rocket_user_info
*/
default void onGameMGCustomRocketUserInfo(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketUserInfo model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 5. 订单记录列表(火箭)
* mg_custom_rocket_order_record_list
*/
default void onGameMGCustomRocketOrderRecordList(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketOrderRecordList model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 6. 展馆内列表(火箭)
* mg_custom_rocket_room_record_list
*/
default void onGameMGCustomRocketRoomRecordList(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketRoomRecordList model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 7. 展馆内玩家送出记录(火箭)
* mg_custom_rocket_user_record_list
*/
default void onGameMGCustomRocketUserRecordList(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketUserRecordList model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 8. 设置默认模型(火箭)
* mg_custom_rocket_set_default_model
*/
default void onGameMGCustomRocketSetDefaultModel(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketSetDefaultModel model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 9. 动态计算一键发送价格(火箭)
* mg_custom_rocket_dynamic_fire_price
*/
default void onGameMGCustomRocketDynamicFirePrice(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketDynamicFirePrice model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 10. 一键发送(火箭)
* mg_custom_rocket_fire_model
*/
default void onGameMGCustomRocketFireModel(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketFireModel model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 11. 新组装模型(火箭)
* mg_custom_rocket_create_model
*/
default void onGameMGCustomRocketCreateModel(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketCreateModel model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 12. 模型更换组件(火箭)
* mg_custom_rocket_replace_component
*/
default void onGameMGCustomRocketReplaceComponent(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketReplaceComponent model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 13. 购买组件(火箭)
* mg_custom_rocket_buy_component
*/
default void onGameMGCustomRocketBuyComponent(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketBuyComponent model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 14. 播放效果开始(火箭)
* mg_custom_rocket_play_effect_start
*/
default void onGameMGCustomRocketPlayEffectStart(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketPlayEffectStart model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 15. 播放效果完成(火箭)
* mg_custom_rocket_play_effect_finish
*/
default void onGameMGCustomRocketPlayEffectFinish(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketPlayEffectFinish model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 16. 验证签名合规(火箭)
* mg_custom_rocket_verify_sign
*/
default void onGameMGCustomRocketVerifySign(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketVerifySign model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 17. 上传icon(火箭)
* mg_custom_rocket_upload_model_icon
*/
default void onGameMGCustomRocketUploadModelIcon(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketUploadModelIcon model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 18. 前期准备完成(火箭)
* mg_custom_rocket_prepare_finish
*/
default void onGameMGCustomRocketPrepareFinish(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketPrepareFinish model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 19. 火箭主界面已显示(火箭)
* mg_custom_rocket_show_game_scene
*/
default void onGameMGCustomRocketShowGameScene(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketShowGameScene model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 20. 火箭主界面已隐藏(火箭)
* mg_custom_rocket_hide_game_scene
*/
default void onGameMGCustomRocketHideGameScene(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketHideGameScene model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 21. 点击锁住组件(火箭)
* mg_custom_rocket_click_lock_component
*/
default void onGameMGCustomRocketClickLockComponent(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketClickLockComponent model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 22. 火箭效果飞行点击(火箭)
* mg_custom_rocket_fly_click
*/
default void onGameMGCustomRocketFlyClick(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketFlyClick model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 23. 火箭效果飞行结束(火箭)
* mg_custom_rocket_fly_end
*/
default void onGameMGCustomRocketFlyEnd(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketFlyEnd model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 24. 设置点击区域(火箭)
* mg_custom_rocket_set_click_rect
*/
default void onGameMGCustomRocketSetClickRect(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketSetClickRect model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
// endregion 游戏回调APP 通用状态 定制火箭
// region 游戏回调APP 通用状态 棒球
/**
* 1. 查询排行榜数据(棒球)
* mg_baseball_ranking
*/
default void onGameMGBaseballRanking(ISudFSMStateHandle handle, SudMGPMGState.MGBaseballRanking model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 2. 查询我的排名(棒球)
* mg_baseball_my_ranking
*/
default void onGameMGBaseballMyRanking(ISudFSMStateHandle handle, SudMGPMGState.MGBaseballMyRanking model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 3. 查询当前距离我的前后玩家数据(棒球)
* mg_baseball_range_info
*/
default void onGameMGBaseballRangeInfo(ISudFSMStateHandle handle, SudMGPMGState.MGBaseballRangeInfo model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 4. 设置app提供给游戏可点击区域(棒球)
* mg_baseball_set_click_rect
*/
default void onGameMGBaseballSetClickRect(ISudFSMStateHandle handle, SudMGPMGState.MGBaseballSetClickRect model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 5. 前期准备完成(棒球)
* mg_baseball_prepare_finish
*/
default void onGameMGBaseballPrepareFinish(ISudFSMStateHandle handle, SudMGPMGState.MGBaseballPrepareFinish model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 6. 主界面已显示(棒球)
* mg_baseball_show_game_scene
*/
default void onGameMGBaseballShowGameScene(ISudFSMStateHandle handle, SudMGPMGState.MGBaseballShowGameScene model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 7. 主界面已隐藏(棒球)
* mg_baseball_hide_game_scene
*/
default void onGameMGBaseballHideGameScene(ISudFSMStateHandle handle, SudMGPMGState.MGBaseballHideGameScene model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
/**
* 8. 获取文本配置数据(棒球)
* mg_baseball_text_config
*/
default void onGameMGBaseballTextConfig(ISudFSMStateHandle handle, SudMGPMGState.MGBaseballTextConfig model) {
ISudFSMStateHandleUtils.handleSuccess(handle);
}
// endregion 游戏回调APP 通用状态 棒球
/**
* 游戏状态变化
* 透传游戏向App发送的游戏通用状态消息
* **********使用此方法可先看下此方法的使用逻辑*************
*
* @param handle 回调操作
* @param state 状态命令
* @param dataJson 状态值
* @return 返回true表示由此方法接管该状态处理此时需注意调用ISudFSMStateHandleUtils.handleSuccess(handle);
*/
default boolean onGameStateChange(ISudFSMStateHandle handle, String state, String dataJson) {
return false;
}
/**
* 游戏玩家状态变化
* 透传游戏向App发送的玩家状态变化
* **********使用此方法可先看下此方法的使用逻辑*************
*
* @param handle 回调操作
* @param userId 用户Id
* @param state 状态命令
* @param dataJson 状态值
* @return 返回true表示由此方法接管该状态处理此时需注意调用ISudFSMStateHandleUtils.handleSuccess(handle);
*/
default boolean onPlayerStateChange(ISudFSMStateHandle handle, String userId, String state, String dataJson) {
return false;
}
}

View File

@@ -0,0 +1,446 @@
/*
* Copyright © Sud.Tech
* https://sud.tech
*/
package tech.sud.mgp.SudMGPWrapper.decorator;
import java.nio.ByteBuffer;
import java.util.List;
import tech.sud.mgp.SudMGPWrapper.state.SudMGPAPPState;
import tech.sud.mgp.SudMGPWrapper.utils.SudJsonUtils;
import tech.sud.mgp.core.ISudFSTAPP;
import tech.sud.mgp.core.ISudListenerNotifyStateChange;
/**
* ISudFSTAPP的装饰类接近于业务
* 参考文档https://docs.sud.tech/zh-CN/app/Client/API/ISudFSTAPP.html
* 注意:
* 1向游戏侧发送状态之后不能立即调用destroyMG()方法也不能立即finish Activity。例如{@link SudFSTAPPDecorator#notifyAPPCommonSelfEnd()}
*/
public class SudFSTAPPDecorator {
/**
* APP调用游戏的接口
*/
private ISudFSTAPP iSudFSTAPP;
/**
* 设置app调用sdk的对象
*
* @param iSudFSTAPP
*/
public void setISudFSTAPP(ISudFSTAPP iSudFSTAPP) {
this.iSudFSTAPP = iSudFSTAPP;
}
// region 状态通知ISudFSTAPP.notifyStateChange
/**
* 发送
* 1. 加入状态
*
* @param isIn true 加入游戏false 退出游戏
* @param seatIndex 加入的游戏位(座位号) 默认传seatIndex = -1 随机加入seatIndex 从0开始不可大于座位数
* @param isSeatRandom 默认为ture, 带有游戏位(座位号)的时候,如果游戏位(座位号)已经被占用,是否随机分配一个空位坐下 isSeatRandom=true 随机分配空位坐下isSeatRandom=false 不随机分配
* @param teamId 不支持分队的游戏数值填1支持分队的游戏数值填1或2两支队伍
*/
public void notifyAPPCommonSelfIn(boolean isIn, int seatIndex, boolean isSeatRandom, int teamId) {
ISudFSTAPP iSudFSTAPP = this.iSudFSTAPP;
if (iSudFSTAPP != null) {
SudMGPAPPState.APPCommonSelfIn state = new SudMGPAPPState.APPCommonSelfIn();
state.isIn = isIn;
state.seatIndex = seatIndex;
state.isSeatRandom = isSeatRandom;
state.teamId = teamId;
iSudFSTAPP.notifyStateChange(SudMGPAPPState.APP_COMMON_SELF_IN, SudJsonUtils.toJson(state), null);
}
}
/**
* 发送
* 2. 准备状态
* 用户(本人)准备/取消准备
*
* @param isReady true 准备false 取消准备
*/
public void notifyAPPCommonSelfReady(boolean isReady) {
ISudFSTAPP iSudFSTAPP = this.iSudFSTAPP;
if (iSudFSTAPP != null) {
SudMGPAPPState.APPCommonSelfReady state = new SudMGPAPPState.APPCommonSelfReady();
state.isReady = isReady;
iSudFSTAPP.notifyStateChange(SudMGPAPPState.APP_COMMON_SELF_READY, SudJsonUtils.toJson(state), null);
}
}
/**
* 发送
* 3. 游戏状态 模型
* 用户游戏状态,如果用户在游戏中,建议:
* a.空出屏幕中心区:
* 关闭全屏礼物特效;
* b.部分强操作类小游戏spaceMax为true尽量收缩原生UI给游戏留出尽量大的操作空间
* 收缩公屏;
* 收缩麦位;
* 如果不在游戏中,则恢复。
*
* @param isPlaying true 开始游戏false 结束游戏
* @param reportGameInfoExtras string类型Https服务回调report_game_info参数最大长度1024字节超过则截断2022-01-21
*/
public void notifyAPPCommonSelfPlaying(boolean isPlaying, String reportGameInfoExtras, String reportGameInfoKey) {
ISudFSTAPP iSudFSTAPP = this.iSudFSTAPP;
if (iSudFSTAPP != null) {
SudMGPAPPState.APPCommonSelfPlaying state = new SudMGPAPPState.APPCommonSelfPlaying();
state.isPlaying = isPlaying;
state.reportGameInfoExtras = reportGameInfoExtras;
state.reportGameInfoKey = reportGameInfoKey;
iSudFSTAPP.notifyStateChange(SudMGPAPPState.APP_COMMON_SELF_PLAYING, SudJsonUtils.toJson(state), null);
}
}
/**
* 发送
* 4. 队长状态
* 用户是否为队长,队长在游戏中会有开始游戏的权利。
* 发送此状态后,会把队长身份转移到另一名用户身上。
* 注意:必须是队长发送才有效果。可通过{@link SudFSMMGDecorator#getCaptainUserId()}拿到当前队长id
*
* @param curCaptainUID 必填指定队长uid
*/
public void notifyAPPCommonSelfCaptain(String curCaptainUID) {
ISudFSTAPP iSudFSTAPP = this.iSudFSTAPP;
if (iSudFSTAPP != null) {
SudMGPAPPState.APPCommonSelfCaptain state = new SudMGPAPPState.APPCommonSelfCaptain();
state.curCaptainUID = curCaptainUID;
iSudFSTAPP.notifyStateChange(SudMGPAPPState.APP_COMMON_SELF_CAPTAIN, SudJsonUtils.toJson(state), null);
}
}
/**
* 发送
* 5. 踢人
* 用户(本人,队长)踢其他玩家;
* 队长才能踢人;
*
* @param kickedUID 被踢用户uid
*/
public void notifyAPPCommonSelfKick(String kickedUID) {
ISudFSTAPP iSudFSTAPP = this.iSudFSTAPP;
if (iSudFSTAPP != null) {
SudMGPAPPState.APPCommonSelfKick state = new SudMGPAPPState.APPCommonSelfKick();
state.kickedUID = kickedUID;
iSudFSTAPP.notifyStateChange(SudMGPAPPState.APP_COMMON_SELF_KICK, SudJsonUtils.toJson(state), null);
}
}
/**
* 发送
* 6. 结束游戏
* 用户(本人,队长)结束(本局)游戏
* 注意:必须是队长发送才有效果。可通过{@link SudFSMMGDecorator#getCaptainUserId()}拿到当前队长id
*/
public void notifyAPPCommonSelfEnd() {
ISudFSTAPP iSudFSTAPP = this.iSudFSTAPP;
if (iSudFSTAPP != null) {
SudMGPAPPState.APPCommonSelfEnd state = new SudMGPAPPState.APPCommonSelfEnd();
// 使用iSudFSTAPP.notifyStateChange方法向游戏侧发送状态时因为大部分状态都需要通过网络向后端发送状态指令
// 所以如果发送状态后马上就销毁游戏或者Activity那么状态指令大概率会不生效
// *** 如果要确保指令能到达后端那么发送指令后不要立即destroyMG()或finish Activity可在发送后delay一定时间(如300 or 500 ms)再销毁
// *** 如果不在乎指令是否能成功到达可忽略delay
iSudFSTAPP.notifyStateChange(SudMGPAPPState.APP_COMMON_SELF_END, SudJsonUtils.toJson(state), null);
}
}
/**
* 发送
* 9. 麦克风状态
* 用户(本人)麦克风状态,建议:
* 进入房间后初始通知一次;
* 每次变更(开麦/闭麦/禁麦/解麦)通知一次;
*
* @param isOn true 开麦false 闭麦
* @param isDisabled true 被禁麦false 未被禁麦
*/
public void notifyAPPCommonSelfMicrophone(boolean isOn, boolean isDisabled) {
ISudFSTAPP iSudFSTAPP = this.iSudFSTAPP;
if (iSudFSTAPP != null) {
SudMGPAPPState.APPCommonSelfMicrophone state = new SudMGPAPPState.APPCommonSelfMicrophone();
state.isOn = isOn;
state.isDisabled = isDisabled;
iSudFSTAPP.notifyStateChange(SudMGPAPPState.APP_COMMON_SELF_MICROPHONE, SudJsonUtils.toJson(state), null);
}
}
/**
* 发送
* 10. 文字命中状态
* 用户(本人)聊天信息命中关键词状态,建议:
* 精确匹配;
* 首次聊天内容命中关键词之后,后续聊天内容不翻转成未命中;
* 直至小游戏侧关键词更新,再将状态翻转为未命中;
*
* @param isHit true 命中false 未命中
* @param keyWord 单个关键词, 兼容老版本
* @param text 返回转写文本
* @param wordType text:文本包含匹配; number:数字等于匹配
* @param keyWordList 命中关键词,可以包含多个关键词
* @param numberList 在number模式下才有返回转写的多个数字
*/
public void notifyAPPCommonSelfTextHitState(boolean isHit, String keyWord, String text,
String wordType, List<String> keyWordList, List<Integer> numberList) {
ISudFSTAPP iSudFSTAPP = this.iSudFSTAPP;
if (iSudFSTAPP != null) {
SudMGPAPPState.APPCommonSelfTextHitState state = new SudMGPAPPState.APPCommonSelfTextHitState();
state.isHit = isHit;
state.keyWord = keyWord;
state.text = text;
state.wordType = wordType;
state.keyWordList = keyWordList;
state.numberList = numberList;
iSudFSTAPP.notifyStateChange(SudMGPAPPState.APP_COMMON_SELF_TEXT_HIT, SudJsonUtils.toJson(state), null);
}
}
/**
* 发送
* 11. 打开或关闭背景音乐2021-12-27新增
*
* @param isOpen true 打开背景音乐false 关闭背景音乐
*/
public void notifyAPPCommonOpenBgMusic(boolean isOpen) {
ISudFSTAPP iSudFSTAPP = this.iSudFSTAPP;
if (iSudFSTAPP != null) {
SudMGPAPPState.APPCommonOpenBgMusic state = new SudMGPAPPState.APPCommonOpenBgMusic();
state.isOpen = isOpen;
iSudFSTAPP.notifyStateChange(SudMGPAPPState.APP_COMMON_OPEN_BG_MUSIC, SudJsonUtils.toJson(state), null);
}
}
/**
* 发送
* 12. 打开或关闭音效2021-12-27新增
*
* @param isOpen true 打开音效false 关闭音效
*/
public void notifyAPPCommonOpenSound(boolean isOpen) {
ISudFSTAPP iSudFSTAPP = this.iSudFSTAPP;
if (iSudFSTAPP != null) {
SudMGPAPPState.APPCommonOpenSound state = new SudMGPAPPState.APPCommonOpenSound();
state.isOpen = isOpen;
iSudFSTAPP.notifyStateChange(SudMGPAPPState.APP_COMMON_OPEN_SOUND, SudJsonUtils.toJson(state), null);
}
}
/**
* 发送
* 13. 打开或关闭游戏中的振动效果2021-12-27新增
*
* @param isOpen 打开振动效果false 关闭振动效果
*/
public void notifyAPPCommonOpenVibrate(boolean isOpen) {
ISudFSTAPP iSudFSTAPP = this.iSudFSTAPP;
if (iSudFSTAPP != null) {
SudMGPAPPState.APPCommonOpenVibrate state = new SudMGPAPPState.APPCommonOpenVibrate();
state.isOpen = isOpen;
iSudFSTAPP.notifyStateChange(SudMGPAPPState.APP_COMMON_OPEN_VIBRATE, SudJsonUtils.toJson(state), null);
}
}
/**
* 发送
* 14. 设置游戏的音量大小2021-12-31新增
*
* @param volume 音量大小 0 到 100
*/
public void notifyAPPCommonGameSoundVolume(int volume) {
ISudFSTAPP iSudFSTAPP = this.iSudFSTAPP;
if (iSudFSTAPP != null) {
SudMGPAPPState.APPCommonGameSoundVolume state = new SudMGPAPPState.APPCommonGameSoundVolume();
state.volume = volume;
iSudFSTAPP.notifyStateChange(SudMGPAPPState.APP_COMMON_GAME_SOUND_VOLUME, SudJsonUtils.toJson(state), null);
}
}
/**
* 发送
* 15. 设置游戏玩法选项2022-05-10新增
*
* @param ludo ludo游戏
*/
public void notifyAPPCommonGameSettingSelectInfo(SudMGPAPPState.Ludo ludo) {
ISudFSTAPP iSudFSTAPP = this.iSudFSTAPP;
if (iSudFSTAPP != null) {
SudMGPAPPState.APPCommonGameSettingSelectInfo state = new SudMGPAPPState.APPCommonGameSettingSelectInfo();
state.ludo = ludo;
iSudFSTAPP.notifyStateChange(SudMGPAPPState.APP_COMMON_GAME_SETTING_SELECT_INFO, SudJsonUtils.toJson(state), null);
}
}
/**
* 发送
* 16. 设置游戏中的AI玩家2022-05-11新增
* 队长设置才有效
*
* @param aiPlayers AI玩家
* @param isReady 机器人加入后是否自动准备 1自动准备0不自动准备 默认为1
*/
public void notifyAPPCommonGameAddAIPlayers(List<SudMGPAPPState.AIPlayers> aiPlayers, int isReady) {
ISudFSTAPP iSudFSTAPP = this.iSudFSTAPP;
if (iSudFSTAPP != null) {
SudMGPAPPState.APPCommonGameAddAIPlayers state = new SudMGPAPPState.APPCommonGameAddAIPlayers();
state.aiPlayers = aiPlayers;
state.isReady = isReady;
iSudFSTAPP.notifyStateChange(SudMGPAPPState.APP_COMMON_GAME_ADD_AI_PLAYERS, SudJsonUtils.toJson(state), null);
}
}
/**
* 发送
* 17. app在收到游戏断开连接通知后通知游戏重试连接2022-06-21新增暂时支持ludo
*/
public void notifyAPPCommonGameReconnect() {
ISudFSTAPP iSudFSTAPP = this.iSudFSTAPP;
if (iSudFSTAPP != null) {
SudMGPAPPState.APPCommonGameReconnect state = new SudMGPAPPState.APPCommonGameReconnect();
iSudFSTAPP.notifyStateChange(SudMGPAPPState.APP_COMMON_GAME_RECONNECT, SudJsonUtils.toJson(state), null);
}
}
/**
* 发送
* 18. app返回玩家当前积分
*/
public void notifyAPPCommonGameScore(long score) {
ISudFSTAPP iSudFSTAPP = this.iSudFSTAPP;
if (iSudFSTAPP != null) {
SudMGPAPPState.APPCommonGameScore state = new SudMGPAPPState.APPCommonGameScore();
state.score = score;
iSudFSTAPP.notifyStateChange(SudMGPAPPState.APP_COMMON_GAME_SCORE, SudJsonUtils.toJson(state), null);
}
}
// endregion 状态通知ISudFSTAPP.notifyStateChange
// region 生命周期
public void startMG() {
ISudFSTAPP iSudFSTAPP = this.iSudFSTAPP;
if (iSudFSTAPP != null) {
iSudFSTAPP.startMG();
}
}
public void pauseMG() {
ISudFSTAPP iSudFSTAPP = this.iSudFSTAPP;
if (iSudFSTAPP != null) {
iSudFSTAPP.pauseMG();
}
}
public void playMG() {
ISudFSTAPP iSudFSTAPP = this.iSudFSTAPP;
if (iSudFSTAPP != null) {
iSudFSTAPP.playMG();
}
}
public void stopMG() {
ISudFSTAPP iSudFSTAPP = this.iSudFSTAPP;
if (iSudFSTAPP != null) {
iSudFSTAPP.stopMG();
}
}
public void destroyMG() {
ISudFSTAPP iSudFSTAPP = this.iSudFSTAPP;
if (iSudFSTAPP != null) {
iSudFSTAPP.destroyMG();
}
}
// endregion 生命周期
/**
* 更新code
*
* @param code
* @param listener
*/
public void updateCode(String code, ISudListenerNotifyStateChange listener) {
ISudFSTAPP iSudFSTAPP = this.iSudFSTAPP;
if (iSudFSTAPP != null) {
iSudFSTAPP.updateCode(code, listener);
}
}
/**
* 音频流数据
*/
public void pushAudio(ByteBuffer buffer, int bufferLength) {
ISudFSTAPP iSudFSTAPP = this.iSudFSTAPP;
if (iSudFSTAPP != null) {
iSudFSTAPP.pushAudio(buffer, bufferLength);
}
}
// region 元宇宙砂砂舞
/**
* 发送
* 1. 元宇宙砂砂舞相关设置
* 参考文档https://docs.sud.tech/zh-CN/app/Client/APPFST/CommonStateForDisco.html
*
* @param actionId 必传的参数,用于指定类型的序号,不同序号用于区分游戏内的不同功能,不传则会判断为无效指令,具体序号代表的功能见下表
* @param cooldown 持续时间,单位秒,部分功能有持续时间就需要传对应的数值,不传或传错则会按各自功能的默认值处理(见下表)
* @param isTop 是否置顶针对部分功能可排队置顶false不置顶true置顶默认为false
* @param field1 额外参数1针对部分功能有具体的意义
* @param field2 额外参数2针对部分功能有具体的意义
*/
public void notifyAppCommonGameDiscoAction(int actionId, Integer cooldown, Boolean isTop, String field1, String field2) {
ISudFSTAPP iSudFSTAPP = this.iSudFSTAPP;
if (iSudFSTAPP != null) {
SudMGPAPPState.AppCommonGameDiscoAction state = new SudMGPAPPState.AppCommonGameDiscoAction();
state.actionId = actionId;
state.cooldown = cooldown;
state.isTop = isTop;
state.field1 = field1;
state.field2 = field2;
iSudFSTAPP.notifyStateChange(SudMGPAPPState.APP_COMMON_GAME_DISCO_ACTION, SudJsonUtils.toJson(state), null);
}
}
// endregion 元宇宙砂砂舞
/**
* APP状态通知给小游戏
*
* @param state 状态标识
* @param dataJson 数据
* @param listener 回调监听
*/
public void notifyStateChange(String state, String dataJson, ISudListenerNotifyStateChange listener) {
ISudFSTAPP iSudFSTAPP = this.iSudFSTAPP;
if (iSudFSTAPP != null) {
iSudFSTAPP.notifyStateChange(state, dataJson, listener);
}
}
/**
* APP状态通知给小游戏
*
* @param state 状态标识
* @param dataJson 数据
*/
public void notifyStateChange(String state, String dataJson) {
notifyStateChange(state, dataJson, null);
}
/**
* APP状态通知给小游戏
*
* @param state 状态标识
* @param obj 数据
*/
public void notifyStateChange(String state, Object obj) {
notifyStateChange(state, SudJsonUtils.toJson(obj), null);
}
}

View File

@@ -0,0 +1,256 @@
/*
* Copyright © Sud.Tech
* https://sud.tech
*/
package tech.sud.mgp.SudMGPWrapper.model;
import java.io.Serializable;
/**
* 游戏配置模型
* 参考文档https://docs.sud.tech/zh-CN/app/Client/API/ISudFSMMG/onGetGameCfg.html
*/
public class GameConfigModel implements Serializable {
public int gameMode = 1; // 游戏模式每个游戏默认模式是1不填是1
public int gameCPU = 0; // 游戏CPU值为0和10CPU正常功耗1CPU低功耗默认是0CPU正常功耗
public int gameSoundControl = 0; // 游戏中声音的播放是否被app层接管值为0和10游戏播放声音1app层播放声音游戏中不播放任何声音默认是0
public int gameSoundVolume = 100; // 游戏中音量的大小值为0到100默认是100
public GameUi ui = new GameUi(); // 对游戏ui界面的配置可定制ui界面的显示与不显示
// 游戏配置中ui部分
public static class GameUi implements Serializable {
public GameSettle gameSettle = new GameSettle(); // 结算界面
public GamePing ping = new GamePing(); // 界面中的ping值
public GameVersion version = new GameVersion(); // 界面中的版本信息值
public GameLevel level = new GameLevel(); // 大厅中的段位信息
public GameLobbySettingBtn lobby_setting_btn = new GameLobbySettingBtn(); // 大厅的设置按钮
public GameLobbyHelpBtn lobby_help_btn = new GameLobbyHelpBtn(); // 大厅的帮助按钮
public GameLobbyPlayers lobby_players = new GameLobbyPlayers(); // 大厅玩家展示位
public GameLobbyPlayerCaptainIcon lobby_player_captain_icon = new GameLobbyPlayerCaptainIcon(); // 大厅玩家展示位上队长标识
public GameLobbyPlayerKickoutIcon lobby_player_kickout_icon = new GameLobbyPlayerKickoutIcon(); // 大厅玩家展示位上踢人标识
public GameLobbyRule lobby_rule = new GameLobbyRule(); // 大厅的玩法规则描述文字
public GameLobbyGameSetting lobby_game_setting = new GameLobbyGameSetting(); // 玩法设置
public GameJoinBtn join_btn = new GameJoinBtn(); // 加入按钮
public GameCancelJoinBtn cancel_join_btn = new GameCancelJoinBtn(); // 取消加入按钮
public GameReadyBtn ready_btn = new GameReadyBtn(); // 准备按钮
public GameCancelReadyBtn cancel_ready_btn = new GameCancelReadyBtn(); // 取消准备按钮
public GameStartBtn start_btn = new GameStartBtn(); // 开始按钮
public GameShareBtn share_btn = new GameShareBtn(); // 分享
public GameSttingBtn game_setting_btn = new GameSttingBtn(); // 游戏场景中的设置按钮
public GameHelpBtn game_help_btn = new GameHelpBtn(); // 游戏场景中的帮助按钮
public GameSettleCloseBtn game_settle_close_btn = new GameSettleCloseBtn(); // 游戏结算界面中的关闭按钮
public GameSettleAgainBtn game_settle_again_btn = new GameSettleAgainBtn(); // 游戏结算界面中的再来一局按钮
public GameBg game_bg = new GameBg();// 是否隐藏背景图,包括大厅和战斗
public BlockChangeSeat block_change_seat = new BlockChangeSeat(); // 自定义阻止换座位
public GameSettingSelectPnl game_setting_select_pnl = new GameSettingSelectPnl(); // 大厅中的玩法选择设置面板
public GameManagedImage game_managed_image = new GameManagedImage(); // 游戏中的托管图标
public GameTableImage game_table_image = new GameTableImage(); // 游戏中牌桌背景图 (注:只对某些带牌桌类游戏有作用)
public GameCountdownTime game_countdown_time = new GameCountdownTime(); // 游戏中游戏倒计时显示 现在只针对umo生效
public GameSelectedTips game_selected_tips = new GameSelectedTips(); // 游戏中所选择的玩法提示文字 现在只针对ludo生效
public NFTAvatar nft_avatar = new NFTAvatar(); // 控制NFT头像的开关
public GameOpening game_opening = new GameOpening(); // 控制开场动画的开关
public GameMvp game_mvp = new GameMvp(); // 游戏结算前的mvp动画
public UmoIcon umo_icon = new UmoIcon(); // 游戏中动画和头像右上角的UMO图标
public Logo logo = new Logo(); // 大厅中的logo
public GamePlayers game_players = new GamePlayers(); // 游戏中的游戏位
}
// 结算界面
public static class GameSettle implements Serializable {
public boolean hide = false; // 是否隐藏结算界面false: 显示; true: 隐藏,默认为 false
}
// 界面中的ping值
public static class GamePing implements Serializable {
public boolean hide = false; // 是否隐藏ping值false: 显示true: 隐藏默认为false
}
// 界面中的版本信息值
public static class GameVersion implements Serializable {
public boolean hide = false; // 是否隐藏版本信息false: 显示; true: 隐藏默认为false
}
// 大厅中的段位信息
public static class GameLevel implements Serializable {
public boolean hide = false; // 是否隐藏段位信息false: 显示; true: 隐藏默认为false
}
// 大厅的设置按钮
public static class GameLobbySettingBtn implements Serializable {
public boolean hide = false; // 是否隐藏大厅的设置按钮false: 显示; true: 隐藏默认为false
}
// 大厅的帮助按钮
public static class GameLobbyHelpBtn implements Serializable {
public boolean hide = false; // 是否隐藏大厅的帮助按钮false: 显示; true: 隐藏默认为false
}
// 大厅玩家展示位
public static class GameLobbyPlayers implements Serializable {
public boolean custom = false; // 大厅玩家展示位头像点击加入false: 游戏处理逻辑; true: 游戏只通知按钮点击事件不处理默认为false
public boolean hide = false; // 是否隐藏大厅玩家展示位false: 显示; true: 隐藏默认为false
}
// 大厅玩家展示位上队长标识
public static class GameLobbyPlayerCaptainIcon implements Serializable {
public boolean hide = false; // 是否隐藏大厅玩家展示位上队长标识false: 显示; true: 隐藏默认为false
}
// 大厅玩家展示位上踢人标识
public static class GameLobbyPlayerKickoutIcon implements Serializable {
public boolean hide = false; // 是否隐藏大厅玩家展示位上踢人标识false: 显示; true: 隐藏默认为false
}
// 大厅的玩法规则描述文字
public static class GameLobbyRule implements Serializable {
public boolean hide = false; // 是否隐藏大厅的玩法规则描述文字false: 显示; true: 隐藏默认为false
}
// 玩法设置
public static class GameLobbyGameSetting implements Serializable {
public boolean hide = false; // 是否隐藏玩法设置false: 显示; true: 隐藏默认为false
}
// 加入按钮
public static class GameJoinBtn implements Serializable {
public boolean custom = false; // 加入按钮false: 游戏处理逻辑; true: 游戏只通知按钮点击事件不处理默认为false
public boolean hide = false; // 是否隐藏加入按钮false: 显示; true: 隐藏默认为false
}
// 取消加入按钮
public static class GameCancelJoinBtn implements Serializable {
public boolean custom = false; // 取消加入按钮false: 游戏处理逻辑; true: 游戏只通知按钮点击事件不处理默认为false
public boolean hide = false; // 是否隐藏取消加入按钮false: 显示; true: 隐藏默认为false
}
// 准备按钮
public static class GameReadyBtn implements Serializable {
public boolean custom = false; // 准备按钮false: 游戏处理逻辑; true: 游戏只通知按钮点击事件不处理默认为false
public boolean hide = false; // 是否隐藏准备按钮false: 显示; true: 隐藏默认为false
}
// 取消准备按钮
public static class GameCancelReadyBtn implements Serializable {
public boolean custom = false; // 取消准备按钮false: 游戏处理逻辑; true: 游戏只通知按钮点击事件不处理默认为false
public boolean hide = false; // 是否隐藏取消准备按钮false: 显示; true: 隐藏默认为false
}
// 开始游戏按钮
public static class GameStartBtn implements Serializable {
public boolean custom = false; // 开始游戏按钮false: 游戏处理逻辑; true: 游戏只通知按钮点击事件不处理默认为false
public boolean hide = false; // 是否隐藏开始游戏按钮false: 显示; true: 隐藏默认为false
}
// 分享按钮
public static class GameShareBtn implements Serializable {
public boolean custom = false; // 分享按钮false: 游戏处理逻辑; true: 游戏只通知按钮点击事件不处理默认为false
public boolean hide = true; // 是否隐藏分享按钮false: 显示; true: 隐藏默认为true
}
// 游戏场景中的设置按钮
public static class GameSttingBtn implements Serializable {
public boolean hide = false; // 是否隐藏游戏场景中的设置按钮false: 显示; true: 隐藏默认为false
}
// 游戏场景中的帮助按钮
public static class GameHelpBtn implements Serializable {
public boolean hide = false; // 是否隐藏游戏场景中的帮助按钮false: 显示; true: 隐藏默认为false
}
// 游戏结算界面中的关闭按钮
public static class GameSettleCloseBtn implements Serializable {
public boolean custom = false; // 游戏结算界面中的关闭按钮false: 关闭结算界面返回大厅; true: 游戏通知按钮点击事件并关闭结算界面返回大厅默认为false
}
// 游戏结算界面中的再来一局按钮
public static class GameSettleAgainBtn implements Serializable {
// 游戏结算界面中的再来一局按钮
// false: 关闭结算界面返回大厅并将玩家设置为准备状态; true: 游戏通知按钮点击事件并关闭结算界面返回大厅不将玩家设置为准备状态默认为false
public boolean custom = false;
// 是否隐藏结算界面中的『再来一局』按钮false: 显示; true: 隐藏默认为false
public boolean hide = false;
}
// 是否隐藏背景图,包括大厅和战斗
// !!!这里只隐藏加载完成后的背景图,加载中背景图如需隐藏则调用:{SudMGP.getCfg().setShowLoadingGameBg(false); }
public static class GameBg implements Serializable {
//false: 显示; true: 隐藏默认为false
public boolean hide = false;
}
// 自定义阻止换座位
public static class BlockChangeSeat implements Serializable {
//false: 可以换座位; true: 不可以换座位默认为false
public boolean custom = false;
}
// 大厅中的玩法选择设置面板
public static class GameSettingSelectPnl implements Serializable {
// 是否隐藏大厅中的玩法选择设置面板false: 显示; true: 隐藏默认为false
public boolean hide = false;
}
// 游戏中的托管图标
public static class GameManagedImage implements Serializable {
// 是否隐藏游戏中的托管图标false: 显示; true: 隐藏默认为false
public boolean hide = false;
}
// 游戏中牌桌背景图 (注:只对某些带牌桌类游戏有作用)
public static class GameTableImage implements Serializable {
// 是否隐藏游戏牌桌背景图false: 显示; true: 隐藏默认为false
public boolean hide = false;
}
// 游戏中游戏倒计时显示 现在只针对umo生效
public static class GameCountdownTime implements Serializable {
// 是否隐藏游戏中游戏倒计时显示false: 显示; true: 隐藏默认为false
public boolean hide = false;
}
// 游戏中所选择的玩法提示文字 现在只针对ludo生效
public static class GameSelectedTips implements Serializable {
// 是否隐藏游戏中所选择的玩法提示文字显示false: 显示; true: 隐藏默认为false
public boolean hide = false;
}
// 控制NFT头像的开关
public static class NFTAvatar implements Serializable {
// true隐藏 false显示
public boolean hide = true;
}
// 控制开场动画的开关
public static class GameOpening implements Serializable {
// true隐藏 false显示
public boolean hide = true;
}
// 游戏结算前的mvp动画
public static class GameMvp implements Serializable {
// true隐藏 false显示
public boolean hide = true;
}
// 游戏中动画和头像右上角的UMO图标
public static class UmoIcon implements Serializable {
// 是否隐藏游戏中动画和头像右上角的UMO图标并改为UNOfalse: 不隐藏依然显示UMO true: 隐藏改为显示UNO默认为false
public boolean hide = false;
}
// 大厅中的logo
public static class Logo implements Serializable {
// 是否隐藏大厅中的logofalse: 不隐藏; true: 隐藏默认为false
public boolean hide = false;
}
// 游戏中的游戏位
public static class GamePlayers implements Serializable {
// 是否隐藏游戏中的游戏位false: 不隐藏; true: 隐藏默认为false暂时只支持你画我猜
public boolean hide = false;
}
}

View File

@@ -0,0 +1,44 @@
/*
* Copyright © Sud.Tech
* https://sud.tech
*/
package tech.sud.mgp.SudMGPWrapper.model;
/**
* 游戏视图
* 参考文档https://docs.sud.tech/zh-CN/app/Client/API/ISudFSMMG/onGetGameViewInfo.html
*/
public class GameViewInfoModel {
// 返回码
public int ret_code;
// 返回消息
public String ret_msg;
// 游戏View的大小
public GameViewSizeModel view_size = new GameViewSizeModel();
// 游戏安全操作区域
public GameViewRectModel view_game_rect = new GameViewRectModel();
public static class GameViewSizeModel {
// 游戏View的宽 (单位像素)
public int width;
// 游戏View的高 (单位像素)
public int height;
}
public static class GameViewRectModel {
// 相对于view_size左边框偏移单位像素
public int left;
// 相对于view_size上边框偏移单位像素
public int top;
// 相对于view_size右边框偏移单位像素
public int right;
// 相对于view_size下边框偏移单位像素
public int bottom;
}
}

View File

@@ -0,0 +1,18 @@
/*
* Copyright © Sud.Tech
* https://sud.tech
*/
package tech.sud.mgp.SudMGPWrapper.state;
/**
* mg2app状态响应
*/
public class MGStateResponse {
// 返回码,成功
public static final int SUCCESS = 0;
public int ret_code; // 返回码
public String ret_msg; // 返回消息
}

View File

@@ -0,0 +1,845 @@
/*
* Copyright © Sud.Tech
* https://sud.tech
*/
package tech.sud.mgp.SudMGPWrapper.state;
import java.io.Serializable;
import java.util.List;
/**
* APP to MG 的通用状态定义
* 参考文档https://docs.sud.tech/zh-CN/app/Client/APPFST/
*/
public class SudMGPAPPState implements Serializable {
// region 通用状态
/**
* 1. 加入状态
* 最低版本: v1.1.30.xx
*/
public static final String APP_COMMON_SELF_IN = "app_common_self_in";
/**
* 1. 加入状态 模型
* 用户(本人)加入游戏/退出游戏
* 正确流程:
* 1.isIn=true: 加入游戏=>准备游戏=>开始游戏;
* 2.isIn=false: 结束=>取消准备=>退出游戏;
*/
public static class APPCommonSelfIn implements Serializable {
// rue 加入游戏false 退出游戏
public boolean isIn;
// 加入的游戏位(座位号) 默认传seatIndex = -1 随机加入seatIndex 从0开始不可大于座位数
public int seatIndex;
// 默认为ture, 带有游戏位(座位号)的时候,如果游戏位(座位号)已经被占用,是否随机分配一个空位坐下 isSeatRandom=true 随机分配空位坐下isSeatRandom=false 不随机分配
public boolean isSeatRandom;
// 不支持分队的游戏数值填1支持分队的游戏数值填1或2两支队伍
public int teamId;
}
/**
* 2. 准备状态
* 最低版本: v1.1.30.xx
*/
public static final String APP_COMMON_SELF_READY = "app_common_self_ready";
/**
* 2. 准备状态 模型
* 用户(本人)准备/取消准备
*/
public static class APPCommonSelfReady implements Serializable {
// true 准备false 取消准备
public boolean isReady;
}
/**
* 3. 游戏状态
* 最低版本: v1.1.30.xx
*/
public static final String APP_COMMON_SELF_PLAYING = "app_common_self_playing";
/**
* 3. 游戏状态 模型
* 用户游戏状态,如果用户在游戏中,建议:
* a.空出屏幕中心区:
* 关闭全屏礼物特效;
* b.部分强操作类小游戏spaceMax为true尽量收缩原生UI给游戏留出尽量大的操作空间
* 收缩公屏;
* 收缩麦位;
* 如果不在游戏中,则恢复。
*/
public static class APPCommonSelfPlaying implements Serializable {
// true 开始游戏false 结束游戏
public boolean isPlaying;
// string类型Https服务回调report_game_info参数最大长度1024字节超过则截断2022-01-21
public String reportGameInfoExtras;
// string类型最大长度64字节接入方服务端可以根据这个字段来查询一局游戏的数据
public String reportGameInfoKey;
}
/**
* 4. 队长状态
* 最低版本: v1.1.30.xx
*/
public static final String APP_COMMON_SELF_CAPTAIN = "app_common_self_captain";
/**
* 4. 队长状态 模型
* 用户是否为队长,队长在游戏中会有开始游戏的权利。
*/
public static class APPCommonSelfCaptain implements Serializable {
// 必填指定队长uid
public String curCaptainUID;
}
/**
* 5. 踢人
* v1.1.30.xx
*/
public static final String APP_COMMON_SELF_KICK = "app_common_self_kick";
/**
* 5. 踢人 模型
* 用户(本人,队长)踢其他玩家;
* 队长才能踢人;
*/
public static class APPCommonSelfKick implements Serializable {
// 被踢用户uid
public String kickedUID;
}
/**
* 6. 结束游戏
* v1.1.30.xx
*/
public static final String APP_COMMON_SELF_END = "app_common_self_end";
/**
* 6. 结束游戏 模型
* 用户(本人,队长)结束(本局)游戏
*/
public static class APPCommonSelfEnd implements Serializable {
// 当前不需要传参
}
/**
* 7. 房间状态depreated 已废弃v1.1.30.xx
*/
public static final String APP_COMMON_SELF_ROOM = "app_common_self_room";
/**
* 8. 麦位状态depreated 已废弃v1.1.30.xx
*/
public static final String APP_COMMON_SELF_SEAT = "app_common_self_seat";
/**
* 9. 麦克风状态
*/
public static final String APP_COMMON_SELF_MICROPHONE = "app_common_self_microphone";
/**
* 9. 麦克风状态 模型
* 用户(本人)麦克风状态,建议:
* 进入房间后初始通知一次;
* 每次变更(开麦/闭麦/禁麦/解麦)通知一次;
*/
public static class APPCommonSelfMicrophone implements Serializable {
// true 开麦false 闭麦
public boolean isOn;
// true 被禁麦false 未被禁麦
public boolean isDisabled;
}
/**
* 10. 文字命中状态
*/
public static final String APP_COMMON_SELF_TEXT_HIT = "app_common_self_text_hit";
/**
* 10. 文字命中状态 模型
* 用户(本人)聊天信息命中关键词状态,建议:
* 精确匹配;
* 首次聊天内容命中关键词之后,后续聊天内容不翻转成未命中;
* 直至小游戏侧关键词更新,再将状态翻转为未命中;
*/
public static class APPCommonSelfTextHitState implements Serializable {
// true 命中false 未命中
public boolean isHit;
// 单个关键词, 兼容老版本
public String keyWord;
// 返回转写文本
public String text;
// text:文本包含匹配; number:数字等于匹配
public String wordType;
// 命中关键词,可以包含多个关键词
public List<String> keyWordList;
// 在number模式下才有返回转写的多个数字
public List<Integer> numberList;
}
/**
* 11. 打开或关闭背景音乐2021-12-27新增
*/
public static final String APP_COMMON_OPEN_BG_MUSIC = "app_common_open_bg_music";
/**
* 11. 打开或关闭背景音乐2021-12-27新增 模型
*/
public static class APPCommonOpenBgMusic implements Serializable {
// true 打开背景音乐false 关闭背景音乐
public boolean isOpen;
}
/**
* 12. 打开或关闭音效2021-12-27新增
*/
public static final String APP_COMMON_OPEN_SOUND = "app_common_open_sound";
/**
* 12. 打开或关闭音效2021-12-27新增 模型
*/
public static class APPCommonOpenSound implements Serializable {
// true 打开音效false 关闭音效
public boolean isOpen;
}
/**
* 13. 打开或关闭游戏中的振动效果2021-12-27新增
*/
public static final String APP_COMMON_OPEN_VIBRATE = "app_common_open_vibrate";
/**
* 13. 打开或关闭游戏中的振动效果2021-12-27新增模型
*/
public static class APPCommonOpenVibrate implements Serializable {
// true 打开振动效果false 关闭振动效果
public boolean isOpen;
}
/**
* 14. 设置游戏的音量大小2021-12-31新增
*/
public static final String APP_COMMON_GAME_SOUND_VOLUME = "app_common_game_sound_volume";
/**
* 14. 设置游戏的音量大小2021-12-31新增模型
*/
public static class APPCommonGameSoundVolume implements Serializable {
// 音量大小 0 到 100
public int volume;
}
/**
* 15. 设置游戏玩法选项2022-05-10新增
*/
public static final String APP_COMMON_GAME_SETTING_SELECT_INFO = "app_common_game_setting_select_info";
/**
* 15. 设置游戏玩法选项2022-05-10新增 模型
*/
public static class APPCommonGameSettingSelectInfo implements Serializable {
public Ludo ludo; // 游戏名称
}
public static class Ludo implements Serializable {
public int mode; // mode: 默认赛制0: 快速, 1: 经典;
public int chessNum; // chessNum: 默认棋子数量, 2: 对应2颗棋子; 4: 对应4颗棋子;
public int item; // item: 默认道具, 1: 有道具, 0: 没有道具
}
/**
* 16. 设置游戏中的AI玩家2022-05-11新增
*/
public static final String APP_COMMON_GAME_ADD_AI_PLAYERS = "app_common_game_add_ai_players";
/**
* 16. 设置游戏中的AI玩家2022-05-11新增 模型
*/
public static class APPCommonGameAddAIPlayers implements Serializable {
public List<AIPlayers> aiPlayers; // AI玩家
public int isReady = 1; // 机器人加入后是否自动准备 1自动准备0不自动准备 默认为1
}
public static class AIPlayers implements Serializable {
public String userId; // 玩家id
public String avatar; // 头像url
public String name; // 名字
public String gender; // 性别 malefemale
}
/**
* 17. app在收到游戏断开连接通知后通知游戏重试连接2022-06-21新增暂时支持ludo
*/
public static final String APP_COMMON_GAME_RECONNECT = "app_common_game_reconnect";
/**
* 17. app在收到游戏断开连接通知后通知游戏重试连接2022-06-21新增暂时支持ludo 模型
*/
public static class APPCommonGameReconnect implements Serializable {
}
/**
* 18. app返回玩家当前积分
*/
public static final String APP_COMMON_GAME_SCORE = "app_common_game_score";
/**
* 18. app返回玩家当前积分
*/
public static class APPCommonGameScore implements Serializable {
public long score; // 玩家当前积分
}
// endregion 通用状态
// region 元宇宙砂砂舞
/**
* 1. 元宇宙砂砂舞相关设置
* 参考文档https://docs.sud.tech/zh-CN/app/Client/APPFST/CommonStateForDisco.html
*/
public static final String APP_COMMON_GAME_DISCO_ACTION = "app_common_game_disco_action";
/**
* 1. 元宇宙砂砂舞相关设置 模型
*/
public static class AppCommonGameDiscoAction implements Serializable {
public int actionId; // 必传的参数,用于指定类型的序号,不同序号用于区分游戏内的不同功能,不传则会判断为无效指令,具体序号代表的功能见下表
public Integer cooldown; // 持续时间,单位秒,部分功能有持续时间就需要传对应的数值,不传或传错则会按各自功能的默认值处理(见下表)
public Boolean isTop; // 是否置顶针对部分功能可排队置顶false不置顶true置顶默认为false
public String field1; // 额外参数1针对部分功能有具体的意义
public String field2; // 额外参数2针对部分功能有具体的意义
}
// endregion 元宇宙砂砂舞
// region 定制火箭
/**
* 1. 礼物配置文件回调
*/
public static final String APP_CUSTOM_ROCKET_CONFIG = "app_custom_rocket_config";
/**
* 1. 礼物配置文件回调 模型
*/
public static class AppCustomRocketConfig implements Serializable {
public int maxSeat; // 最大机位
public double firePrice; // 发射的静态价格
public int isDynamicPrice; // 发射价格是否动态开关 0:静态 1动态
public String gameIntroduce; // 玩法介绍
public String monetaryUnit; // 货币的单位
public long serverTime; // 服务器时间戳,单位秒
public List<String> filterModel; // 过滤不显示的模块(默认是为空)
public List<String> filterLayer; // 过滤不显示的页面(默认是为空)
public List<ComponentModel> componentList; // 组件列表 1套装2主仓3尾翼4头像5签名6颜色
public List<HeadModel> headList; // 组件列表
public List<ExtraModel> extraList; // 专属配置
public static class ComponentModel {
public String componentId; // 组件的ID
public int type; // 1套装2主仓3尾翼
public String name; // 显示名称(商城+装配间+购买记录+...)
public double price; // 价格
public int isForever; // 永久0非永久 1永久
public long validTime; // 有效期:单位是秒
public String imageId; // 图片ID
public int isLock; // 锁0不锁 1锁
public int isShow; // 展示0不展示 1展示
}
public static class HeadModel {
public String componentId; // 组件的ID
public int type; // 4头像(商城+装配间+购买记录+...)
public String name; // 显示名称
public double price; // 价格 暂时不考虑小数
public int isForever; // 永久0非永久 1永久
public long validTime; // 有效期:单位是秒
public String userId; // 用户的userId
public String nickname; // 昵称
public int sex; // 性别 0:男 1:女
public String url; // 头像URL
}
public static class ExtraModel {
public String componentId; // 组件的ID
public int type; // 5签名6颜色
public String name; // 显示名称(商城+装配间+购买记录+...)
public double price; // 价格
public int isForever; // 永久0非永久 1永久
public long validTime; // 有效期:单位是秒
public String desc; // 描述
}
}
/**
* 2. 拥有模型列表回调(火箭)
*/
public static final String APP_CUSTOM_ROCKET_MODEL_LIST = "app_custom_rocket_model_list";
/**
* 2. 拥有模型列表回调(火箭) 模型
*/
public static class AppCustomRocketModelList implements Serializable {
public String defaultModelId; // 默认模型
public int isScreenshot; // 截图0不截图 1截图(app上传失败或者过期时,被动截图)
public List<Model> list;
public static class Model {
public String modelId; // 模型Id
public int isAvatar; // 可以换装0不可以 1可以
public String serviceFlag; // 服务标识
public List<ComponentModel> componentList; // 列表
public static class ComponentModel {
public String itemId; // 唯一标识
public int type; // 类型
public String value; // 值
public int isForever; // 永久0非永久 1永久
public long validTime; // 有效期时间戳:单位是秒
}
}
}
/**
* 3. 拥有组件列表回调(火箭)
*/
public static final String APP_CUSTOM_ROCKET_COMPONENT_LIST = "app_custom_rocket_component_list";
/**
* 3. 拥有组件列表回调(火箭) 模型
*/
public static class AppCustomRocketComponentList implements Serializable {
public List<ComponentModel> defaultList; // 默认组件列表
public List<ComponentModel> list; // 组件列表
public static class ComponentModel {
public String itemId; // 唯一标识
public int type; // 类型
public String value; // 值
public int isForever; // 永久0非永久 1永久
public long validTime; // 有效期时间戳:单位是秒
public long date; // 购买时间1970年1月1日开始。时间戳单位是秒
}
}
/**
* 4. 获取用户信息回调(火箭)
*/
public static final String APP_CUSTOM_ROCKET_USER_INFO = "app_custom_rocket_user_info";
/**
* 4. 获取用户信息回调(火箭) 模型
*/
public static class AppCustomRocketUserInfo implements Serializable {
public int resultCode; // 0: 请求成功1请求失败
public String error; // 错误描述
public List<CustomRocketUserInfoModel> userList; // 用户信息列表
}
/**
* 5. 订单记录列表回调
*/
public static final String APP_CUSTOM_ROCKET_ORDER_RECORD_LIST = "app_custom_rocket_order_record_list";
/**
* 5. 订单记录列表回调 模型
*/
public static class AppCustomRocketOrderRecordList implements Serializable {
public int pageIndex; // 第几页
public int pageCount; // 总页数
public List<ComponentModel> list; // 列表
/**
* 定制火箭,订单组件 模型
*/
public static class ComponentModel {
public int type; // 类型
public String value; // 值
public int isForever; // 永久0非永久 1永久
public long validTime; // 有效期时间戳:单位是秒
public long date; // 有效期时间戳:单位是秒
}
}
/**
* 6. 展馆内列表回调
*/
public static final String APP_CUSTOM_ROCKET_ROOM_RECORD_LIST = "app_custom_rocket_room_record_list";
/**
* 6. 展馆内列表回调 模型
*/
public static class AppCustomRocketRoomRecordList implements Serializable {
public int pageIndex; // 第几页
public int pageCount; // 总页数
public List<RoomRecordModel> list; // 列表
public static class RoomRecordModel {
public CustomRocketUserInfoModel fromUser; // 送礼人
public int number; // 火箭数量
}
}
/**
* 7. 展馆内玩家送出记录回调
*/
public static final String APP_CUSTOM_ROCKET_USER_RECORD_LIST = "app_custom_rocket_user_record_list";
/**
* 7. 展馆内玩家送出记录回调 模型
*/
public static class AppCustomRocketUserRecordList implements Serializable {
public int pageIndex; // 第几页
public int pageCount; // 总页数
public CustomRocketUserInfoModel fromUser; // 送礼人
public List<UserRecordModel> list; // 列表
public static class UserRecordModel {
public long date; // 订单时间戳: 单位是秒
public int number; // 个数
public CustomRocketUserInfoModel toUser; // 收礼人
public List<ComponentModel> componentList; // 列表
public static class ComponentModel {
public int type; // 类型
public String value; // 值
public int isForever; // 永久0非永久 1永久
public long validTime; // 有效期时间戳:单位是秒
}
}
}
/**
* 8. 设置默认模型(火箭)
*/
public static final String APP_CUSTOM_ROCKET_SET_DEFAULT_MODEL = "app_custom_rocket_set_default_model";
/**
* 8. 设置默认模型(火箭) 模型
*/
public static class AppCustomRocketSetDefaultModel implements Serializable {
public int resultCode; // 0: 请求成功1请求失败
public String error; // 错误描述
public Data data; // 数据
public static class Data {
public String modelId; // 默认模型
}
}
/**
* 9. 动态计算一键发送价格回调
*/
public static final String APP_CUSTOM_ROCKET_DYNAMIC_FIRE_PRICE = "app_custom_rocket_dynamic_fire_price";
/**
* 9. 动态计算一键发送价格回调 模型
*/
public static class AppCustomRocketDynamicFirePrice implements Serializable {
public int resultCode; // 0: 请求成功1请求失败
public String error; // 错误描述
public Data data; // 数据
public static class Data {
public double price; // 发送的价格
}
}
/**
* 10. 一键发送回调
*/
public static final String APP_CUSTOM_ROCKET_FIRE_MODEL = "app_custom_rocket_fire_model";
/**
* 10. 一键发送回调 模型
*/
public static class AppCustomRocketFireModel implements Serializable {
public int resultCode; // 0: 请求成功1请求失败
public String error; // 错误描述
}
/**
* 11. 新组装模型 回调
*/
public static final String APP_CUSTOM_ROCKET_CREATE_MODEL = "app_custom_rocket_create_model";
/**
* 11. 新组装模型 回调 模型
*/
public static class AppCustomRocketCreateModel implements Serializable {
public int resultCode; // 0: 请求成功1请求失败
public String error; // 错误描述
public Data data;
public static class Data {
public String modelId; // 模型Id
public int isAvatar; // 可以换装0不可以 1可以
public String serviceFlag; // 服务标识
public List<ComponentModel> componentList;
public static class ComponentModel {
public String itemId; // 模型Id
}
}
}
/**
* 12. 更换组件 回调
*/
public static final String APP_CUSTOM_ROCKET_REPLACE_COMPONENT = "app_custom_rocket_replace_component";
/**
* 12. 更换组件 回调 模型
*/
public static class AppCustomRocketReplaceComponent implements Serializable {
public int resultCode; // 0: 请求成功1请求失败
public String error; // 错误描述
public Data data;
public static class Data {
public String modelId; // 模型Id
public List<ComponentModel> componentList;
public static class ComponentModel {
public String itemId;
}
}
}
/**
* 13. 购买组件 回调
*/
public static final String APP_CUSTOM_ROCKET_BUY_COMPONENT = "app_custom_rocket_buy_component";
/**
* 13. 购买组件 回调 模型
*/
public static class AppCustomRocketBuyComponent implements Serializable {
public int resultCode; // 0: 请求成功1请求失败
public String error; // 错误描述
public Data data;
public static class Data {
public List<ComponentModel> componentList;
public static class ComponentModel {
public String itemId; // 唯一标识
public int type; // 类型
public String value; // 值
public int isForever; // 永久0非永久 1永久
public long validTime; // 有效期时间戳:单位是秒
public long date; // 有效期时间戳:单位是秒
}
}
}
/**
* 14. app播放火箭发射动效(火箭)
*/
public static final String APP_CUSTOM_ROCKET_PLAY_MODEL_LIST = "app_custom_rocket_play_model_list";
/**
* 14. app播放火箭发射动效(火箭) 模型
*/
public static class AppCustomRocketPlayModelList implements Serializable {
public String orderId; // 订单号
public List<ComponentModel> componentList; // 组件列表
public static class ComponentModel {
public int type; // 类型
public String value; // 值
}
}
/**
* 15. app推送主播信息(火箭)
*/
public static final String APP_CUSTOM_ROCKET_NEW_USER_INFO = "app_custom_rocket_new_user_info";
/**
* 15. app推送主播信息(火箭) 模型
*/
public static class AppCustomRocketNewUserInfo implements Serializable {
public List<CustomRocketUserInfoModel> userList; // 用户信息列表
}
/**
* 16. 验证签名合规(火箭)
*/
public static final String APP_CUSTOM_ROCKET_VERIFY_SIGN = "app_custom_rocket_verify_sign";
/**
* 16. 验证签名合规(火箭) 回调 模型
*/
public static class AppCustomRocketVerifySign implements Serializable {
public int resultCode; // 0: 请求成功1请求失败
public String error; // 错误描述
public Data data;
public static class Data {
public String sign; // 验证的签名
}
}
/**
* 17. app主动调起火箭主界面(火箭)
*/
public static final String APP_CUSTOM_ROCKET_SHOW_GAME_SCENE = "app_custom_rocket_show_game_scene";
/**
* 17. app主动调起火箭主界面(火箭) 模型
*/
public static class AppCustomRocketShowGameScene implements Serializable {
}
/**
* 18. app主动隐藏火箭主界面(火箭)
*/
public static final String APP_CUSTOM_ROCKET_HIDE_GAME_SCENE = "app_custom_rocket_hide_game_scene";
/**
* 18. app主动隐藏火箭主界面(火箭) 模型
*/
public static class AppCustomRocketHideGameScene implements Serializable {
}
/**
* 19. app推送解锁组件(火箭)
*/
public static final String APP_CUSTOM_ROCKET_UNLOCK_COMPONENT = "app_custom_rocket_unlock_component";
/**
* 19. app推送解锁组件(火箭) 模型
*/
public static class AppCustomRocketUnlockComponent implements Serializable {
public int type; // 组件类型
public String componentId; // 组件ID
}
/**
* 20. app推送火箭效果飞行点击(火箭)
*/
public static final String APP_CUSTOM_ROCKET_FLY_CLICK = "app_custom_rocket_fly_click";
/**
* 20. app推送火箭效果飞行点击(火箭) 模型
*/
public static class AppCustomRocketFlyClick implements Serializable {
}
/**
* 21. app推送关闭火箭播放效果(火箭)
*/
public static final String APP_CUSTOM_ROCKET_CLOSE_PLAY_EFFECT = "app_custom_rocket_close_play_effect";
/**
* 21. app推送关闭火箭播放效果(火箭) 模型
*/
public static class AppCustomRocketClosePlayEffect implements Serializable {
}
/**
* 定制火箭,用户信息 模型
*/
public static class CustomRocketUserInfoModel {
public String userId; // 用户的userId
public String nickname; // 昵称
public int sex; // 性别 0:男 1:女
public String url; // 头像URL
}
// endregion 定制火箭
// region 棒球
/**
* 1. 下发游戏客户端查询排行榜数据(棒球)
*/
public static final String APP_BASEBALL_RANKING = "app_baseball_ranking";
/**
* 1. 下发游戏客户端查询排行榜数据(棒球) 模型
*/
public static class AppBaseballRanking implements Serializable {
public List<AppBaseballPlayerInfo> data;
}
/**
* 2. 下发游戏客户端查询我的排名数据(棒球)
*/
public static final String APP_BASEBALL_MY_RANKING = "app_baseball_my_ranking";
/**
* 2. 下发游戏客户端查询我的排名数据(棒球) 模型
*/
public static class AppBaseballMyRanking implements Serializable {
public AppBaseballPlayerInfo data;
}
/**
* 3. 下发游戏客户端查询排在自己前后的玩家数据(棒球)
*/
public static final String APP_BASEBALL_RANGE_INFO = "app_baseball_range_info";
/**
* 3. 下发游戏客户端查询排在自己前后的玩家数据(棒球) 模型
*/
public static class AppBaseballRangeInfo implements Serializable {
public AppBaseballPlayerInfo before; // 前一名
public AppBaseballPlayerInfo after; // 后一名
}
/**
* 4. app主动调起主界面(棒球)
*/
public static final String APP_BASEBALL_SHOW_GAME_SCENE = "app_baseball_show_game_scene";
/**
* 4. app主动调起主界面(棒球) 模型
*/
public static class AppBaseballShowGameScene implements Serializable {
}
/**
* 5. app主动隐藏主界面(棒球)
*/
public static final String APP_BASEBALL_HIDE_GAME_SCENE = "app_baseball_hide_game_scene";
/**
* 5. app主动隐藏主界面(棒球) 模型
*/
public static class AppBaseballHideGameScene implements Serializable {
}
/**
* 6. app推送需要的文本数据(棒球)
*/
public static final String APP_BASEBALL_TEXT_CONFIG = "app_baseball_text_config";
/**
* 6. app推送需要的文本数据(棒球) 模型
*/
public static class AppBaseballTextConfig implements Serializable {
public String mode1;
public String mode2;
public String mode3;
}
public static class AppBaseballPlayerInfo implements Serializable {
public String playerId; // 玩家Id
public String name; // 玩家昵称
public String avatar; // 头像
public long distance; // 距离
public int rank; // 排名
}
// endregion 棒球
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,124 @@
/*
* Copyright © Sud.Tech
* https://sud.tech
*/
package tech.sud.mgp.SudMGPWrapper.utils;
import android.text.TextUtils;
import tech.sud.mgp.SudMGPWrapper.state.SudMGPMGState;
/**
* 游戏通用状态工具类
*/
public class GameCommonStateUtils {
/**
* 解析公屏消息
*
* @param publicMessage
* @return
*/
public static String parseMGCommonPublicMessage(SudMGPMGState.MGCommonPublicMessage publicMessage, String languageCode) {
if (publicMessage == null || publicMessage.msg == null || publicMessage.msg.size() == 0) {
return null;
}
StringBuilder sb = new StringBuilder();
for (SudMGPMGState.MGCommonPublicMessage.MGCommonPublicMessageMsg msgModel : publicMessage.msg) {
switch (msgModel.phrase) {
case 1:
String text = parseI18nText(languageCode, msgModel.text);
if (text != null) {
sb.append(text);
}
break;
case 2:
if (msgModel.user != null && msgModel.user.name != null) {
sb.append(msgModel.user.name);
}
break;
}
}
return sb.toString();
}
/**
* 根据当前的语言码,选择对应语言的文字
*
* @param languageCode 语言代码
* @param model 游戏发过来的文本对象
* @return 返回选择的字符串
*/
public static String parseI18nText(String languageCode, SudMGPMGState.MGCommonPublicMessage.MGCommonPublicMessageMsgText model) {
if (model == null) return null;
if (languageCode == null) return model.defaultStr;
// 精准匹配
String text = i18nPrecise(languageCode, model);
if (TextUtils.isEmpty(text)) {
// 如果未匹配到,则尝试模糊匹配
if (isMatchLanguage(languageCode, "zh")) {
return model.zh_CN;
}
return model.en_US;
} else {
return text;
}
}
/** 精准匹配 */
private static String i18nPrecise(String languageCode, SudMGPMGState.MGCommonPublicMessage.MGCommonPublicMessageMsgText model) {
switch (languageCode) {
case "zh-CN":
return model.zh_CN;
case "zh-HK":
return model.zh_HK;
case "zh-MO":
return model.zh_MO;
case "zh-SG":
return model.zh_SG;
case "zh-TW":
return model.zh_TW;
case "en-US":
return model.en_US;
case "en-GB":
return model.en_GB;
case "ms-BN":
return model.ms_BN;
case "ms-MY":
return model.ms_MY;
case "vi-VN":
return model.vi_VN;
case "id-ID":
return model.id_ID;
case "es-ES":
return model.es_ES;
case "ja-JP":
return model.ja_JP;
case "ko-KR":
return model.ko_KR;
case "th-TH":
return model.th_TH;
case "ar-SA":
return model.ar_SA;
case "ur-PK":
return model.ur_PK;
case "tr-TR":
return model.tr_TR;
}
return null;
}
/**
* 判断是否是该语言
*/
private static boolean isMatchLanguage(String languageCode, String matchLanguageCode) {
if (languageCode != null && matchLanguageCode != null) {
return matchLanguageCode.equals(languageCode) || languageCode.startsWith(matchLanguageCode + "-");
}
return false;
}
}

View File

@@ -0,0 +1,25 @@
/*
* Copyright © Sud.Tech
* https://sud.tech
*/
package tech.sud.mgp.SudMGPWrapper.utils;
import tech.sud.mgp.core.ISudFSMStateHandle;
import tech.sud.mgp.SudMGPWrapper.state.MGStateResponse;
public class ISudFSMStateHandleUtils {
/**
* 回调游戏,成功
*
* @param handle
*/
public static void handleSuccess(ISudFSMStateHandle handle) {
MGStateResponse response = new MGStateResponse();
response.ret_code = MGStateResponse.SUCCESS;
response.ret_msg = "success";
handle.success(SudJsonUtils.toJson(response));
}
}

View File

@@ -0,0 +1,43 @@
package tech.sud.mgp.SudMGPWrapper.utils;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
/**
* json解析工具
*/
public class SudJsonUtils {
/**
* 解析json
*
* @return 如果解析出错,则返回空对象
*/
public static <T> T fromJson(final String json, final Class<T> type) {
try {
return getGson().fromJson(json, type);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 对象解析成json
*
* @param object
* @return
*/
public static String toJson(final Object object) {
return getGson().toJson(object);
}
public static Gson getGson() {
return InnerClass.gson;
}
public static class InnerClass {
public static Gson gson = new GsonBuilder().serializeNulls().disableHtmlEscaping().create();
}
}