diff --git a/app/src/main/java/com/yizhuan/erban/avroom/adapter/GameMicroViewAdapter.kt b/app/src/main/java/com/yizhuan/erban/avroom/adapter/GameMicroViewAdapter.kt index 6a823c84d..0f432c12a 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/adapter/GameMicroViewAdapter.kt +++ b/app/src/main/java/com/yizhuan/erban/avroom/adapter/GameMicroViewAdapter.kt @@ -5,11 +5,14 @@ import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.TextView +import androidx.core.view.isVisible import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.yizhuan.erban.R import com.yizhuan.xchat_android_core.bean.RoomQueueInfo +import com.yizhuan.xchat_android_core.manager.AvRoomDataManager /** @@ -29,22 +32,46 @@ class GameMicroViewAdapter(context: Context?) : BaseMicroViewAdapter(context) { } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { - return GameMicroViewHolder( + return GameMicroViewHolder( LayoutInflater.from(parent.context) .inflate(R.layout.item_micro_game, parent, false) ) } - override fun microType() = MICRO_TYPE_DATING - - inner class GameMicroViewHolder constructor(itemView: View) : + inner class GameMicroViewHolder constructor(itemView: View) : GiftValueViewHolder(itemView) { + private val tvGameStatus: TextView = itemView.findViewById(R.id.tv_game_status) + @SuppressLint("SetTextI18n") public override fun bind(info: RoomQueueInfo, position: Int) { super.bind(info, position) + info.mChatRoomMember?.let { + if (it.gameStatus == 0 && !AvRoomDataManager.get().isRoomOwner) { + tvGameStatus.isVisible = false + } else { + tvGameStatus.isVisible = true + val bgRes = when { + AvRoomDataManager.get().isRoomOwner -> { + tvGameStatus.text = "房主" + R.drawable.bg_game_status_owner + } + it.gameStatus == 2 -> { + tvGameStatus.text = "已准备" + R.drawable.bg_game_status_ready + } + else -> { + tvGameStatus.text = "未准备" + R.drawable.bg_game_status_not_ready + } + } + tvGameStatus.setBackgroundResource(bgRes) + } + } ?: run { + tvGameStatus.isVisible = false + } } @@ -54,6 +81,4 @@ class GameMicroViewAdapter(context: Context?) : BaseMicroViewAdapter(context) { return 6 } - - } \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/avroom/fragment/GameRoomFragment.kt b/app/src/main/java/com/yizhuan/erban/avroom/fragment/GameRoomFragment.kt index 815229fae..d5c5cb061 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/fragment/GameRoomFragment.kt +++ b/app/src/main/java/com/yizhuan/erban/avroom/fragment/GameRoomFragment.kt @@ -44,6 +44,7 @@ import com.yizhuan.erban.avroom.dialog.DatingVipRuleDialog import com.yizhuan.erban.avroom.dialog.RoomOperationDialog import com.yizhuan.erban.avroom.firstcharge.FirstChargePrizeDialog import com.yizhuan.erban.avroom.game.GameDelegate +import com.yizhuan.erban.avroom.game.OnGameStatusChangeListener import com.yizhuan.erban.avroom.presenter.GameRoomPresenter import com.yizhuan.erban.avroom.redpackage.RedPackageSendDialog import com.yizhuan.erban.avroom.view.IGameRoomView @@ -129,7 +130,8 @@ import java.util.* */ @CreatePresenter(GameRoomPresenter::class) class GameRoomFragment() : BaseMvpFragment(), - View.OnClickListener, OnGiftDialogBtnClickListener, IGameRoomView, OnMicroItemClickListener { + View.OnClickListener, OnGiftDialogBtnClickListener, IGameRoomView, OnMicroItemClickListener, + OnGameStatusChangeListener { private var myUid: Long = 0 private lateinit var messageView: MessageView private lateinit var bottomView: BottomView @@ -201,6 +203,7 @@ class GameRoomFragment() : BaseMvpFragment() } gameDelegate = GameDelegate(requireActivity(), gameBinding.flGameContainer) + gameDelegate.setOnGameStatusChangeListener(this) } override fun onSetListener() { @@ -370,11 +373,13 @@ class GameRoomFragment() : BaseMvpFragment() ) } RoomEvent.DOWN_MIC -> { - addOrRemoveMatchPool() + if (AvRoomDataManager.get().isOwner(roomEvent.account)) { + //自己的消息 + gameDelegate.notifySelfInState(false) + } onDownMicro(roomEvent.micPosition) } RoomEvent.UP_MIC -> { - addOrRemoveMatchPool() onUpMicro(roomEvent.micPosition) } RoomEvent.INVITE_UP_MIC -> if (AvRoomDataManager.get().isOwner(roomEvent.account)) { @@ -814,7 +819,7 @@ class GameRoomFragment() : BaseMvpFragment() } } - fun onDownMicro(micPosition: Int) { + private fun onDownMicro(micPosition: Int) { showBottomViewForDifRole() updateMicBtn() gameBinding.microView.removeDragonBar(micPosition) @@ -823,23 +828,11 @@ class GameRoomFragment() : BaseMvpFragment() GiftValueMrg.get().updateRoomGiftValue(false) } - fun onQueueMicStateChange(micPosition: Int, micPosState: Int) { + private fun onQueueMicStateChange(micPosition: Int, micPosState: Int) { microView.adapter.notifyDataSetChanged() onMicStateChanged() } - private fun addOrRemoveMatchPool() { - if (AvRoomDataManager.get().isCpRoom && AvRoomDataManager.get().isRoomOwner) { - if (AvRoomDataManager.get().findFreePosition() > 0) { - AvRoomModel.get().removeIsomerism().subscribe() - } else if ((TextUtils.isEmpty(AvRoomDataManager.get().mCurrentRoomInfo?.limitType) - && TextUtils.isEmpty(AvRoomDataManager.get().mCurrentRoomInfo?.getRoomPwd())) - ) { - AvRoomModel.get().addIsomerism().subscribe() - } - } - } - override fun kickDownMicroPhoneSuccess() { updateMicBtn() toast(R.string.kick_mic) @@ -1338,4 +1331,12 @@ class GameRoomFragment() : BaseMvpFragment() return roomFragment } } + + override fun onGameStart() { + gameBinding.tvShowMiniMic.callOnClick() + } + + override fun onGameEnd() { + gameBinding.ivShowMic.callOnClick() + } } \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/avroom/game/GameCfg.kt b/app/src/main/java/com/yizhuan/erban/avroom/game/GameCfg.kt new file mode 100644 index 000000000..b6598d23c --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/avroom/game/GameCfg.kt @@ -0,0 +1,114 @@ +package com.yizhuan.erban.avroom.game + +/*** + * + * + */ +data class GameCfg( + val gameMode: Int = 0, + val ui: Ui = Ui() +) { + data class Ui( + val cancel_join_btn: CancelJoinBtn = CancelJoinBtn(), + val cancel_ready_btn: CancelReadyBtn = CancelReadyBtn(), + val gameSettle: GameSettle = GameSettle(), + val game_help_btn: GameHelpBtn = GameHelpBtn(), + val game_setting_btn: GameSettingBtn = GameSettingBtn(), + val join_btn: JoinBtn = JoinBtn(), + val level: Level = Level(), + val lobby_game_setting: LobbyGameSetting = LobbyGameSetting(), + val lobby_help_btn: LobbyHelpBtn = LobbyHelpBtn(), + val lobby_player_captain_icon: LobbyPlayerCaptainIcon = LobbyPlayerCaptainIcon(), + val lobby_player_kickout_icon: LobbyPlayerKickoutIcon = LobbyPlayerKickoutIcon(), + val lobby_players: LobbyPlayers = LobbyPlayers(), + val lobby_rule: LobbyRule = LobbyRule(), + val lobby_setting_btn: LobbySettingBtn = LobbySettingBtn(), + val ping: Ping = Ping(), + val ready_btn: ReadyBtn = ReadyBtn(), + val share_btn: ShareBtn = ShareBtn(), + val start_btn: StartBtn = StartBtn(), + val version: Version = Version() + ) { + data class CancelJoinBtn( + val custom: Boolean = false, + val hide: Boolean = false + ) + + data class CancelReadyBtn( + val custom: Boolean = false, + val hide: Boolean = false + ) + + data class GameSettle( + val hide: Boolean = false + ) + + data class GameHelpBtn( + val hide: Boolean = false + ) + + data class GameSettingBtn( + val hide: Boolean = false + ) + + data class JoinBtn( + val custom: Boolean = true, + val hide: Boolean = false + ) + + data class Level( + val hide: Boolean = true + ) + + data class LobbyGameSetting( + val hide: Boolean = false + ) + + data class LobbyHelpBtn( + val hide: Boolean = false + ) + + data class LobbyPlayerCaptainIcon( + val hide: Boolean = true + ) + + data class LobbyPlayerKickoutIcon( + val hide: Boolean = true + ) + + data class LobbyPlayers( + val hide: Boolean = false + ) + + data class LobbyRule( + val hide: Boolean = false + ) + + data class LobbySettingBtn( + val hide: Boolean = false + ) + + data class Ping( + val hide: Boolean = false + ) + + data class ReadyBtn( + val custom: Boolean = false, + val hide: Boolean = false + ) + + data class ShareBtn( + val custom: Boolean = false, + val hide: Boolean = true + ) + + data class StartBtn( + val custom: Boolean = false, + val hide: Boolean = false + ) + + data class Version( + val hide: Boolean = false + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/avroom/game/GameDelegate.kt b/app/src/main/java/com/yizhuan/erban/avroom/game/GameDelegate.kt index faf1b24a2..2540bc6de 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/game/GameDelegate.kt +++ b/app/src/main/java/com/yizhuan/erban/avroom/game/GameDelegate.kt @@ -10,16 +10,20 @@ import android.util.Log import android.view.View import android.view.ViewTreeObserver.OnGlobalLayoutListener import android.widget.FrameLayout +import com.google.gson.Gson import com.yizhuan.xchat_android_core.auth.AuthModel +import com.yizhuan.xchat_android_core.manager.AvRoomDataManager import com.yizhuan.xchat_android_core.room.game.GameModel +import com.yizhuan.xchat_android_core.room.model.HomePartyModel +import com.yizhuan.xchat_android_core.user.UserModel import com.yizhuan.xchat_android_core.utils.LogUtils import com.yizhuan.xchat_android_core.utils.net.RxHelper +import com.yizhuan.xchat_android_library.net.rxnet.callback.CallBack import com.yizhuan.xchat_android_library.utils.SingleToastUtil import okhttp3.* import org.json.JSONException import org.json.JSONObject import tech.sud.mgp.core.* -import java.io.IOException import java.util.* class GameDelegate(val activity: Activity, val container: FrameLayout) { @@ -33,22 +37,24 @@ class GameDelegate(val activity: Activity, val container: FrameLayout) { const val MG_ID_GO_BANG = 1461297734886621238L //游戏ID:五子棋 + const val STATUS_NOT_JOIN = 0 + const val STATUS_NOT_READY = 1 + const val STATUS_READY = 2 + } private val TAG = "GameActivity" private var APP_CODE = "" - private val mRoomID = "9009" //房间ID,同一个房间ID可对战 + private val mRoomID = AvRoomDataManager.get().roomUid.toString() private val mLanguage = "zh-CN" //语言 - - private val mCurrentSeat = 1 //当前用户需要上几号麦位 - //调用游戏SDK的接口,成功加载游戏后可用: private var iSudFSTAPP: ISudFSTAPP? = null + private val gson = Gson() //小游戏ID private var mMGID = MG_ID_BUMPER_CAR @@ -57,6 +63,14 @@ class GameDelegate(val activity: Activity, val container: FrameLayout) { private var mKeyWord: String? = null private val mUid = AuthModel.get().currentUid.toString() + private val homePartyModel = HomePartyModel() + + private var onGameStatusChangeListener: OnGameStatusChangeListener? = null + + fun setOnGameStatusChangeListener(onGameStatusChangeListener: OnGameStatusChangeListener) { + this.onGameStatusChangeListener = onGameStatusChangeListener + } + private val loginCallback: AppLoginListener = object : AppLoginListener { override fun onLoginFailure(err: String?) { @@ -152,7 +166,7 @@ class GameDelegate(val activity: Activity, val container: FrameLayout) { container.addView(gameView) } - private fun showToast(content: String) { + private fun showToast(content: String?) { SingleToastUtil.showToast(content) } @@ -271,8 +285,8 @@ class GameDelegate(val activity: Activity, val container: FrameLayout) { }) } - override fun onGetGameCfg(p0: ISudFSMStateHandle?, p1: String?) { - + override fun onGetGameCfg(handle: ISudFSMStateHandle?, p1: String?) { + handle?.success(gson.toJson(GameCfg())) } /** @@ -300,9 +314,9 @@ class GameDelegate(val activity: Activity, val container: FrameLayout) { //游戏安全操作区域 val viewGameRect = JSONObject() viewGameRect.put("left", 0) - viewGameRect.put("top", 600) + viewGameRect.put("top", 500) viewGameRect.put("right", 0) - viewGameRect.put("bottom", 600) + viewGameRect.put("bottom", 400) jsonObject.put("view_game_rect", viewGameRect) //通知游戏 @@ -346,6 +360,12 @@ class GameDelegate(val activity: Activity, val container: FrameLayout) { } } } + SudMGPMGState.APP_COMMON_SELF_CLICK_JOIN_BTN -> { + updateMyMicQueue(STATUS_NOT_READY, true) + } + SudMGPMGState.APP_COMMON_SELF_CLICK_START_BTN -> { + notifySelfPlayingState(true) + } } } @@ -373,6 +393,7 @@ class GameDelegate(val activity: Activity, val container: FrameLayout) { } private fun handlePlayerIn(userId: String, dataJson: String) { + if (userId != mUid) return try { val jsonObject = JSONObject(dataJson) val retCode = jsonObject.getInt("retCode") @@ -390,17 +411,17 @@ class GameDelegate(val activity: Activity, val container: FrameLayout) { if (jsonObject.has("teamId")) { teamId = jsonObject.getInt("teamId") } - showToast("加入游戏分组:$teamId") + //showToast("加入游戏分组:$teamId") } else { // 未加入 var reason = 0 if (jsonObject.has("reason")) { reason = jsonObject.getInt("reason") } if (reason == 0) { - showToast("主动退出游戏") + updateMyMicQueue(STATUS_NOT_JOIN) } else if (reason == 1) { - val userid = jsonObject.getString("kickUID") - showToast(userid + "将我踢出游戏") + updateMyMicQueue(STATUS_NOT_JOIN) + showToast("被踢出游戏") } } } catch (e: Exception) { @@ -408,20 +429,50 @@ class GameDelegate(val activity: Activity, val container: FrameLayout) { } } + private fun updateMyMicQueue(gameStatus: Int, isJoin: Boolean = false) { + UserModel.get().cacheLoginUserInfo?.gameStatus = gameStatus + val position = AvRoomDataManager.get().getMicPosition(mUid) + if (position != AvRoomDataManager.POSITON_NOT_ON_MIC) { + if (isJoin) notifySelfInState(true) + homePartyModel.updateMyMicQueue( + position, + AvRoomDataManager.get().roomId.toString(), + UserModel.get().cacheLoginUserInfo + ).subscribe() + } else if (isJoin) { + val upPosition = AvRoomDataManager.get().findFreePosition() + if (upPosition == Int.MIN_VALUE) { + showToast("当前游戏人数已满!") + } else { + UserModel.get().cacheLoginUserInfo?.gameStatus = 1 + homePartyModel.upMicroPhone(upPosition, + mUid, + AvRoomDataManager.get().roomId.toString(), + false, object : CallBack { + override fun onSuccess(data: String?) { + notifySelfInState(true) + } + + override fun onFail(code: Int, error: String?) { + showToast(error) + } + + }) + } + } + } + private fun handlePlayerReady(userId: String, dataJson: String) { + if (userId != mUid) return try { val jsonObject = JSONObject(dataJson) val retCode = jsonObject.getInt("retCode") val isReady = jsonObject.getBoolean("isReady") if (retCode != 0) { - showToast("mg_common_player_ready 操作失败, 错误码:$retCode") + showToast("mg_common_player_ready操作失败, 错误码:$retCode") return } - if (isReady) { // 已准备 - - } else { // 未准备 - - } + updateMyMicQueue(if (isReady) STATUS_READY else STATUS_NOT_READY) } catch (e: Exception) { e.printStackTrace() } @@ -443,36 +494,50 @@ class GameDelegate(val activity: Activity, val container: FrameLayout) { } private fun handlePlayerPlaying(userId: String, dataJson: String) { + if (userId != mUid) return try { val jsonObject = JSONObject(dataJson) val retCode = jsonObject.getInt("retCode") if (retCode != 0) { - if (retCode == 100503) { - showToast("100503: 有人未准备") - } else if (retCode == 100504) { - showToast("100504: 开始游戏的人数不足") - } else { - showToast("mg_common_player_playing 操作失败, 错误码:$retCode") + when (retCode) { + 100503 -> { + showToast("100503: 有人未准备") + } + 100504 -> { + showToast("100504: 开始游戏的人数不足") + } + else -> { + showToast("mg_common_player_playing 操作失败, 错误码:$retCode") + } } return } val isPlaying = jsonObject.getBoolean("isPlaying") - if (!isPlaying) { // 未在游戏中 + AvRoomDataManager.get().isGamePlaying = isPlaying + if (isPlaying) { + onGameStatusChangeListener?.onGameStart() + } else { + onGameStatusChangeListener?.onGameEnd() var reason = 0 if (jsonObject.has("reason")) { reason = jsonObject.getInt("reason") } - - if (reason == 0) { - showToast("正常结束") - } else if (reason == 1) { - showToast("提前结束(自己不玩了)") - } else if (reason == 2) { - showToast("无真人可以提前结束(无真人,只有机器人)") - } else if (reason == 3) { - showToast("所有人都提前结束") - } else { - showToast("未在游戏中, reason = $reason") + when (reason) { + 0 -> { + showToast("正常结束") + } + 1 -> { + showToast("提前结束(自己不玩了)") + } + 2 -> { + showToast("无真人可以提前结束(无真人,只有机器人)") + } + 3 -> { + showToast("所有人都提前结束") + } + else -> { + showToast("未在游戏中, reason = $reason") + } } } } catch (e: Exception) { @@ -480,6 +545,110 @@ class GameDelegate(val activity: Activity, val container: FrameLayout) { } } + fun notifySelfInState(isIn: Boolean) { + try { + if (!isIn) { + notifySelfReadyState(false) + } + //状态名称 + val state = SudMGPAPPState.APP_COMMON_SELF_IN + //状态数据 + val jsonObject = JSONObject() + jsonObject.put("isIn", isIn) // true 加入游戏,false 退出游戏 + jsonObject.put("teamId", 1) //哪一队伍(2v2,4v4) + val dataJson = jsonObject.toString() + + //调用接口 + iSudFSTAPP?.notifyStateChange(state, dataJson, null) + } catch (e: Exception) { + e.printStackTrace() + } + } + + private fun notifySelfReadyState(isReady: Boolean) { + try { + //状态名称 + val state = SudMGPAPPState.APP_COMMON_SELF_READY + + //状态数据 + val jsonObject = JSONObject() + jsonObject.put("isReady", isReady) // true 准备,false 取消准备 + val dataJson = jsonObject.toString() + + //调用接口 + iSudFSTAPP?.notifyStateChange(state, dataJson, null) + } catch (e: Exception) { + e.printStackTrace() + } + } + + private fun notifySelfPlayingState(isPlaying: Boolean) { + try { + //状态名称 + val state = SudMGPAPPState.APP_COMMON_SELF_PLAYING + + //状态数据 + val jsonObject = JSONObject() + jsonObject.put("isPlaying", isPlaying) // true 开始游戏,false 结束游戏 + val dataJson = jsonObject.toString() + + //调用接口 + iSudFSTAPP?.notifyStateChange(state, dataJson, null) + } catch (e: Exception) { + e.printStackTrace() + } + } + + private fun notifySelfCaptainState(uid: String) { + try { + //状态名称 + val state = SudMGPAPPState.APP_COMMON_SELF_CAPTAIN + + //状态数据 + val jsonObject = JSONObject() + jsonObject.put("curCaptainUID", uid) // 必填,指定队长uid + val dataJson = jsonObject.toString() + + //调用接口 + iSudFSTAPP?.notifyStateChange(state, dataJson, null) + } catch (e: Exception) { + e.printStackTrace() + } + } + + private fun notifySelfKickState(uid: String) { + try { + //状态名称 + val state = SudMGPAPPState.APP_COMMON_SELF_KICK + + //状态数据 + val jsonObject = JSONObject() + jsonObject.put("kickedUID", uid) // 被踢用户uid + val dataJson = jsonObject.toString() + + //调用接口 + iSudFSTAPP?.notifyStateChange(state, dataJson, null) + } catch (e: Exception) { + e.printStackTrace() + } + } + + private fun notifySelfEndState() { + try { + //状态名称 + val state = SudMGPAPPState.APP_COMMON_SELF_END + + //状态数据 + val jsonObject = JSONObject() + val dataJson = jsonObject.toString() + + //调用接口 + iSudFSTAPP?.notifyStateChange(state, dataJson, null) + } catch (e: Exception) { + e.printStackTrace() + } + } + fun onStart() { iSudFSTAPP?.startMG() //启动游戏 diff --git a/app/src/main/java/com/yizhuan/erban/avroom/game/OnGameStatusChangeListener.kt b/app/src/main/java/com/yizhuan/erban/avroom/game/OnGameStatusChangeListener.kt new file mode 100644 index 000000000..9314bd771 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/avroom/game/OnGameStatusChangeListener.kt @@ -0,0 +1,13 @@ +package com.yizhuan.erban.avroom.game + + interface OnGameStatusChangeListener { + /** + * 游戏开始 + */ + fun onGameStart() + + /** + * 游戏结束 + */ + fun onGameEnd() +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/avroom/game/SudMGPAPPState.java b/app/src/main/java/com/yizhuan/erban/avroom/game/SudMGPAPPState.java index 477598de1..65a47b0c3 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/game/SudMGPAPPState.java +++ b/app/src/main/java/com/yizhuan/erban/avroom/game/SudMGPAPPState.java @@ -48,16 +48,6 @@ public class SudMGPAPPState { */ public static final String APP_COMMON_SELF_END = "app_common_self_end"; - /** - * 房间状态, (depreated 已废弃v1.1.30.xx) - */ - public static final String APP_COMMON_SELF_ROOM = "app_common_self_room"; - - /** - * 麦位状态, (depreated 已废弃v1.1.30.xx) - */ - public static final String APP_COMMON_SELF_SEAT = "app_common_self_seat"; - /** * 麦克风状态 */ @@ -68,15 +58,4 @@ public class SudMGPAPPState { */ public static final String APP_COMMON_SELF_TEXT_HIT = "app_common_self_text_hit"; - // endregion 通用状态 - - // region 碰碰我最强 - // endregion 碰碰我最强 - - // region 飞刀达人 - // endregion 飞刀达人 - - // region 你画我猜 - // endregion 你画我猜 - } diff --git a/app/src/main/java/com/yizhuan/erban/avroom/game/SudMGPMGState.java b/app/src/main/java/com/yizhuan/erban/avroom/game/SudMGPMGState.java index a9651bd06..95fbf9973 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/game/SudMGPMGState.java +++ b/app/src/main/java/com/yizhuan/erban/avroom/game/SudMGPMGState.java @@ -90,4 +90,30 @@ public class SudMGPMGState { // endregion 你画我猜 + + /** + * 加入游戏按钮点击状态 + */ + public static final String APP_COMMON_SELF_CLICK_JOIN_BTN = "mg_common_self_click_join_btn"; + /** + * 取消加入游戏按钮点击状态 + */ + public static final String APP_COMMON_SELF_CLICK_CANCEL_JOIN_BTN = "mg_common_self_click_cancel_join_btn"; + /** + * 准备按钮点击状态 + */ + public static final String APP_COMMON_SELF_CLICK_READY_BTN = "mg_common_self_click_ready_btn"; + /** + * 取消准备按钮点击状态 + */ + public static final String APP_COMMON_SELF_CLICK_CANCEL_READY_BTN = "mg_common_self_click_cancel_ready_btn"; + /** + * 开始游戏按钮点击状态 + */ + public static final String APP_COMMON_SELF_CLICK_START_BTN = "mg_common_self_click_start_btn"; + /** + * 分享按钮点击状态 + */ + public static final String APP_COMMON_SELF_CLICK_SHARE_BTN = "mg_common_self_click_share_btn"; + } diff --git a/app/src/main/res/drawable/bg_game_status_not_ready.xml b/app/src/main/res/drawable/bg_game_status_not_ready.xml new file mode 100644 index 000000000..20c6b266d --- /dev/null +++ b/app/src/main/res/drawable/bg_game_status_not_ready.xml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/app/src/main/res/drawable/bg_game_status_owner.xml b/app/src/main/res/drawable/bg_game_status_owner.xml new file mode 100644 index 000000000..eb760b706 --- /dev/null +++ b/app/src/main/res/drawable/bg_game_status_owner.xml @@ -0,0 +1,9 @@ + + + + + + diff --git a/app/src/main/res/drawable/bg_game_status_ready.xml b/app/src/main/res/drawable/bg_game_status_ready.xml new file mode 100644 index 000000000..c0126cc81 --- /dev/null +++ b/app/src/main/res/drawable/bg_game_status_ready.xml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/app/src/main/res/drawable/selector_game_status_bg.xml b/app/src/main/res/drawable/selector_game_status_bg.xml new file mode 100644 index 000000000..78748e170 --- /dev/null +++ b/app/src/main/res/drawable/selector_game_status_bg.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_micro_game.xml b/app/src/main/res/layout/item_micro_game.xml index ba153f172..2c7b2906c 100644 --- a/app/src/main/res/layout/item_micro_game.xml +++ b/app/src/main/res/layout/item_micro_game.xml @@ -42,14 +42,6 @@ android:visibility="invisible" tools:visibility="gone" /> - - @@ -178,10 +170,10 @@ android:id="@+id/ll_charm_click" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_marginEnd="5dp" android:orientation="horizontal" android:paddingTop="@dimen/dp_5" android:paddingBottom="@dimen/dp_5" - android:layout_marginEnd="5dp" app:layout_constraintBottom_toBottomOf="@id/view_center_of_charm" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="@id/view_center_of_charm"> diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/manager/AvRoomDataManager.java b/core/src/main/java/com/yizhuan/xchat_android_core/manager/AvRoomDataManager.java index 3ff714520..d53540650 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/manager/AvRoomDataManager.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/manager/AvRoomDataManager.java @@ -182,6 +182,8 @@ public final class AvRoomDataManager { public final MutableLiveData roomPkLiveData = new MutableLiveData<>(); + public boolean isGamePlaying; + private static final class Helper { private static final AvRoomDataManager INSTANCE = new AvRoomDataManager(); diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/room/game/GameModel.kt b/core/src/main/java/com/yizhuan/xchat_android_core/room/game/GameModel.kt index ef8212fba..7548da61d 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/room/game/GameModel.kt +++ b/core/src/main/java/com/yizhuan/xchat_android_core/room/game/GameModel.kt @@ -18,7 +18,7 @@ object GameModel : BaseModel() { fun getGameCode(): Single { return api.getGameCode(AuthModel.get().currentUid) - //.compose(RxHelper.handleBeanData()) + .compose(RxHelper.handleBeanData()) .compose(RxHelper.handleSchAndExce()) } @@ -45,7 +45,7 @@ object GameModel : BaseModel() { @POST("/miniGame/getCode") fun getGameCode( @Field("uid") uid: Long - ): Single + ): Single> /** * 首页Banner diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/room/model/RoomBaseModel.java b/core/src/main/java/com/yizhuan/xchat_android_core/room/model/RoomBaseModel.java index 244e19b5c..4e5e0ec7f 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/room/model/RoomBaseModel.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/room/model/RoomBaseModel.java @@ -604,6 +604,7 @@ public class RoomBaseModel extends BaseModel implements IRoomBaseModel { contentJsonObj.put("avatar", userInfo.getAvatar()); contentJsonObj.put("gender", userInfo.getGender()); contentJsonObj.put("groupType", userInfo.getGroupType()); + contentJsonObj.put("gameStatus", userInfo.getGameStatus()); HeadWearInfo headWearInfo = userInfo.getUserHeadwear(); if (headWearInfo != null) { String headWearUrl = headWearInfo.getEffect() != null ? headWearInfo.getEffect() : headWearInfo.getPic(); @@ -614,6 +615,7 @@ public class RoomBaseModel extends BaseModel implements IRoomBaseModel { if (AvRoomDataManager.get().isDatingVip(userInfo.getUid())) { contentJsonObj.put("vipMic", true); } + NIMChatRoomSDK.getChatRoomService() .updateQueueEx(roomId, String.valueOf(micPosition), contentJsonObj.toJSONString(), true) .setCallback(new RequestCallback() { diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/room/queue/bean/MicMemberInfo.java b/core/src/main/java/com/yizhuan/xchat_android_core/room/queue/bean/MicMemberInfo.java index 9ca23872a..5fb8a3322 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/room/queue/bean/MicMemberInfo.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/room/queue/bean/MicMemberInfo.java @@ -46,6 +46,13 @@ public class MicMemberInfo { */ private int groupType; + /** + * 游戏模式使用 + * 0 未加入游戏 + * 1 加入游戏未准备 + * 2 加入游戏已准备 + */ + private int gameStatus; public MicMemberInfo() { diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/user/bean/UserInfo.java b/core/src/main/java/com/yizhuan/xchat_android_core/user/bean/UserInfo.java index c00830369..387ded866 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/user/bean/UserInfo.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/user/bean/UserInfo.java @@ -199,6 +199,10 @@ public class UserInfo implements Serializable { @Setter private boolean isFirstCharge; + @Getter + @Setter + private int gameStatus; + public Location getUserExpand() { return userExpand; }