ソースを参照

1.添加游戏超时或失败记录只保存一次

王鹏鹏 2 年 前
コミット
1ea1958862

+ 5 - 0
baselib/src/main/java/com/yingyangfly/baselib/utils/RxBusCodes.kt

@@ -59,4 +59,9 @@ object RxBusCodes {
      * 游戏加载完成
      */
     const val LOADINGOVER = "loading:over"
+
+    /**
+     * 游戏超时退出
+     */
+    const val GAMEOVERTIME = "gameOvertime"
 }

+ 14 - 0
game/src/main/java/com/yingyangfly/game/introduction/GameIntroductionActivity.kt

@@ -19,6 +19,7 @@ import com.yingyangfly.baselib.ext.toast
 import com.yingyangfly.baselib.mvvm.BaseMVVMActivity
 import com.yingyangfly.baselib.player.VoicePlayer
 import com.yingyangfly.baselib.router.RouterUrlCommon
+import com.yingyangfly.baselib.utils.LiveEventBusUtil
 import com.yingyangfly.baselib.utils.RxBusCodes
 import com.yingyangfly.game.R
 import com.yingyangfly.game.databinding.ActivityGameIntroductionBinding
@@ -84,6 +85,7 @@ class GameIntroductionActivity :
             binding.playTxCloudView.showOrHideBackBtn(false)
             binding.playTxCloudView.playWithModelNeedLicence(model)
         }
+        initLiveData()
     }
 
     override fun onNewIntent(intent: Intent?) {
@@ -264,4 +266,16 @@ class GameIntroductionActivity :
             }
         })
     }
+
+    /**
+     * 游戏进度监听
+     */
+    private fun initLiveData() {
+        //游戏超时退出
+        LiveEventBusUtil.observer<String>(this, RxBusCodes.GAMEOVERTIME) {
+            runOnUiThread {
+                finish()
+            }
+        }
+    }
 }

+ 28 - 9
game/src/main/java/com/yingyangfly/game/play/PlayGameActivity.kt

@@ -30,11 +30,11 @@ import com.yingyangfly.game.databinding.ActivityPlayGameBinding
 import com.yingyangfly.game.dialog.CountdownDialog
 import com.yingyangfly.game.dialog.GameResultDialog
 import com.yingyangfly.game.entity.GameDataBean
-import com.yingyangfly.game.net.GAME_API
 import com.yingyangfly.game.utils.AndroidToJs
 import gorden.rxbus2.RxBus
 import gorden.rxbus2.Subscribe
 import gorden.rxbus2.ThreadMode
+import java.util.concurrent.ThreadFactory
 
 /**
  * 玩游戏页面
@@ -55,6 +55,7 @@ class PlayGameActivity : BaseMVVMActivity<ActivityPlayGameBinding, PlayGameViewM
     private lateinit var webSettings: WebSettings
     private var voicePlayer: VoicePlayer? = null
     private var gameResultDialog: GameResultDialog? = null
+    private var gameOvertime = false
 
     override fun onCreate(savedInstanceState: Bundle?) {
         gameCode = intent.getStringExtra("gameCode") ?: ""
@@ -112,15 +113,15 @@ class PlayGameActivity : BaseMVVMActivity<ActivityPlayGameBinding, PlayGameViewM
     /**
      * 保存游戏进度
      */
-    private fun saveData(gameDataBean: GameDataBean) {
+    private fun saveData(gameDataBean: GameDataBean, isPass: String) {
         viewModel.saveGameRecord(gameCode, playClass, gameDataBean, fail = {
             it.toast()
         }, success = {
             runOnUiThread {
-                if (TextUtils.equals("2", gameDataBean.isPass)) {
+                if (TextUtils.equals("2", isPass)) {
                     RxBus.get().send(RxBusCodes.QUITGAME)
                     finish()
-                } else if (TextUtils.equals("3", gameDataBean.isPass)) {
+                } else if (TextUtils.equals("3", isPass)) {
                     //游戏通关
                     ARouter.getInstance().build(RouterUrlCommon.gameSettlement)
                         .withString("gameCode", gameCode)
@@ -140,7 +141,13 @@ class PlayGameActivity : BaseMVVMActivity<ActivityPlayGameBinding, PlayGameViewM
                             gameDataBean.isPass
                         )
                         gameResultDialog?.onBackHomeDialogClickListener = {
-                            RxBus.get().send(RxBusCodes.CALLQUITGAME)
+                            if (gameOvertime) {
+                                Log.e("wpp", "--------------------------999")
+                                finish()
+                                LiveEventBusUtil.send(RxBusCodes.GAMEOVERTIME, "")
+                            } else {
+                                RxBus.get().send(RxBusCodes.CALLQUITGAME)
+                            }
                         }
                         gameResultDialog?.onGameDialogClickListener = {
                             loadJs(it)
@@ -329,6 +336,7 @@ class PlayGameActivity : BaseMVVMActivity<ActivityPlayGameBinding, PlayGameViewM
     /**
      * 游戏进度监听
      */
+    @SuppressLint("SetTextI18n")
     private fun initLiveData() {
         //游戏时间
         LiveEventBusUtil.observer<String>(this, RxBusCodes.SETTIME) {
@@ -358,10 +366,19 @@ class PlayGameActivity : BaseMVVMActivity<ActivityPlayGameBinding, PlayGameViewM
         LiveEventBusUtil.observer<String>(this, RxBusCodes.SAVEDATA) {
             binding.tvScore.post {
                 if (TextUtils.isEmpty(it).not()) {
-                    Log.e("wpp", it)
                     val gameDataBean = GsonUtil.GsonToBean(it, GameDataBean::class.java)
                     if (gameDataBean != null) {
-                        saveData(gameDataBean)
+                        gameOvertime = TextUtils.equals("4", gameDataBean.isPass) || TextUtils.equals(
+                            "1",
+                            gameDataBean.isPass
+                        )
+                        val isPass = gameDataBean.isPass
+                        if (TextUtils.equals("4", gameDataBean.isPass)) {
+                            gameDataBean.isPass = "1"
+                        } else if (TextUtils.equals("3", gameDataBean.isPass)) {
+                            gameDataBean.isPass = "0"
+                        }
+                        saveData(gameDataBean, isPass)
                     }
                 }
             }
@@ -370,7 +387,6 @@ class PlayGameActivity : BaseMVVMActivity<ActivityPlayGameBinding, PlayGameViewM
         LiveEventBusUtil.observer<String>(this, RxBusCodes.LOADINGOVER) {
             loadingOver = true
         }
-
         //播放语音
         LiveEventBusUtil.observer<String>(this, RxBusCodes.PLAYVOICE) {
             if (it.isNullOrEmpty().not()) {
@@ -380,7 +396,10 @@ class PlayGameActivity : BaseMVVMActivity<ActivityPlayGameBinding, PlayGameViewM
                     speak(msg[1])
                 }
             }
-
+        }
+        //游戏超时退出
+        LiveEventBusUtil.observer<String>(this, RxBusCodes.GAMEOVERTIME) {
+            finish()
         }
     }
 

+ 2 - 21
game/src/main/java/com/yingyangfly/game/play/PlayGameViewModel.kt

@@ -1,11 +1,11 @@
 package com.yingyangfly.game.play
 
+import android.util.Log
 import com.yingyangfly.baselib.mvvm.BaseViewModel
 import com.yingyangfly.baselib.net.XUtils
 import com.yingyangfly.baselib.utils.GsonUtil
 import com.yingyangfly.game.entity.GameBean
 import com.yingyangfly.game.entity.GameDataBean
-import com.yingyangfly.game.entity.GetGameDetailByCodeBean
 import com.yingyangfly.game.entity.GetSaveGameRecordBean
 import com.yingyangfly.game.net.GAME_API
 
@@ -14,26 +14,6 @@ import com.yingyangfly.game.net.GAME_API
  */
 class PlayGameViewModel : BaseViewModel() {
 
-    /**
-     * 获取游戏详情
-     */
-    fun getGameDetailByCode(
-        code: String,
-        playClasses: String,
-        fail: ((msg: String) -> Unit)? = null,
-        success: ((success: GameBean?) -> Unit)? = null,
-    ) = launchFlow(false) {
-        val requestBean = GetGameDetailByCodeBean().apply {
-            gameCode = code
-            playClass = playClasses
-        }
-        val body = XUtils.createJson(GsonUtil.GsonString(requestBean))
-        GAME_API.getGameDetailByCode(body)
-    }.runUI(
-        success,
-        fail
-    )
-
     /**
      * 获取游戏详情
      */
@@ -52,6 +32,7 @@ class PlayGameViewModel : BaseViewModel() {
             gameLevel = bean.curLevel
             gameScore = bean.curLevelScore
         }
+        Log.e("wpp", GsonUtil.GsonString(requestBean))
         val body = XUtils.createJson(GsonUtil.GsonString(requestBean))
         GAME_API.saveGameRecord(body)
     }.runUI(