Browse Source

1.添加游戏结算页面

王鹏鹏 2 năm trước cách đây
mục cha
commit
3e08b23f97

+ 1 - 1
.idea/misc.xml

@@ -502,7 +502,7 @@
         <entry key="..\:/workspace/hcp-pads/game/src/main/res/layout/activity_game_settlement.xml" value="0.4" />
         <entry key="..\:/workspace/hcp-pads/game/src/main/res/layout/activity_main.xml" value="0.23697916666666666" />
         <entry key="..\:/workspace/hcp-pads/game/src/main/res/layout/activity_play_game.xml" value="0.536" />
-        <entry key="..\:/workspace/hcp-pads/game/src/main/res/layout/dialog_count_down.xml" value="0.23697916666666666" />
+        <entry key="..\:/workspace/hcp-pads/game/src/main/res/layout/dialog_count_down.xml" value="0.4" />
         <entry key="..\:/workspace/hcp-pads/game/src/main/res/layout/dialog_exit_game.xml" value="0.22239583333333332" />
         <entry key="..\:/workspace/hcp-pads/game/src/main/res/layout/dialog_game_result.xml" value="0.536" />
         <entry key="..\:/workspace/hcp-pads/game/src/main/res/layout/item_game_result.xml" value="0.23697916666666666" />

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

@@ -54,4 +54,9 @@ object RxBusCodes {
      * 保存游戏进度
      */
     const val SAVEDATA = "saveData"
+
+    /**
+     * 游戏加载完成
+     */
+    const val LOADINGOVER = "loading:over"
 }

+ 18 - 1
game/src/main/java/com/yingyangfly/game/dialog/CountdownDialog.kt

@@ -4,9 +4,11 @@ import android.os.Bundle
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
+import androidx.appcompat.widget.AppCompatTextView
 import androidx.fragment.app.DialogFragment
 import com.gyf.immersionbar.BarHide
 import com.gyf.immersionbar.ktx.immersionBar
+import com.yingyangfly.baselib.utils.RxTimer
 import com.yingyangfly.baselib.utils.ViewTool
 import com.yingyangfly.game.R
 
@@ -15,6 +17,10 @@ import com.yingyangfly.game.R
  */
 class CountdownDialog : DialogFragment() {
 
+    private lateinit var rxTimer: RxTimer
+    private var tvCountdown: AppCompatTextView? = null
+    var onDialogClickListener: ((bean: String) -> Unit)? = null
+
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         isCancelable = false
@@ -48,10 +54,21 @@ class CountdownDialog : DialogFragment() {
     }
 
     private fun findId(rootView: View) {
-
+        tvCountdown = rootView.findViewById(R.id.tvCountdown)
     }
 
     private fun initData() {
+        rxTimer = RxTimer()
+        val m: Long = 1000
+        val time: Long = 3
+        rxTimer.interval(m) {
+            val date = time - it
+            tvCountdown!!.text = date.toString()
+            if (it == time) {
+                onDialogClickListener?.invoke("")
+                dismiss()
+            }
+        }
     }
 
 }

+ 7 - 1
game/src/main/java/com/yingyangfly/game/introduction/GameIntroductionActivity.kt

@@ -107,8 +107,14 @@ class GameIntroductionActivity :
                 } else if (v.id == R.id.btnStartGame) {
                     runOnUiThread {
                         isEnterGame = true
+                        val url = gameBean!!.gameUrl + "?startLv=" + gameBean!!.gameLevel + "&maxLv=" +
+                                    gameBean!!.totalNum + "&gameSetTime=" + gameBean!!.gameDuration +
+                                    "&difficultyRate=" + gameBean!!.gameDifficultyRate + "&totalTime=" +
+                                    gameBean!!.gameTotalTime + "&totalScore=" + gameBean!!.gameTotalScore
                         ARouter.getInstance().build(RouterUrlCommon.playGame)
-                            .withSerializable("bean", gameBean)
+                            .withString("gameCode", gameCode)
+                            .withString("playClass", playClass)
+                            .withString("url", url)
                             .withTransition(R.anim.leftin, R.anim.leftout)
                             .navigation(mContext)
                     }

+ 108 - 54
game/src/main/java/com/yingyangfly/game/play/PlayGameActivity.kt

@@ -25,6 +25,7 @@ import com.yingyangfly.baselib.utils.LiveEventBusUtil
 import com.yingyangfly.baselib.utils.RxBusCodes
 import com.yingyangfly.game.R
 import com.yingyangfly.game.databinding.ActivityPlayGameBinding
+import com.yingyangfly.game.dialog.CountdownDialog
 import com.yingyangfly.game.dialog.GameResultDialog
 import com.yingyangfly.game.entity.GameBean
 import com.yingyangfly.game.entity.GameDataBean
@@ -40,36 +41,25 @@ import gorden.rxbus2.ThreadMode
 class PlayGameActivity : BaseMVVMActivity<ActivityPlayGameBinding, PlayGameViewModel>(),
     View.OnTouchListener {
 
+    private var loadingOver = false
+    private var newStartGame = true
+    private var gameCode: String = ""
+    private var playClass: String = ""
+    private var url: String = ""
     private var gameBean: GameBean? = null
     private lateinit var webSettings: WebSettings
     private var gameResultDialog: GameResultDialog? = null
 
     override fun onCreate(savedInstanceState: Bundle?) {
-        gameBean = intent.getSerializableExtra("bean") as GameBean
+        gameCode = intent.getStringExtra("gameCode") ?: ""
+        playClass = intent.getStringExtra("playClass") ?: ""
+        url = intent.getStringExtra("url") ?: ""
         super.onCreate(savedInstanceState)
     }
 
-    override fun onNewIntent(intent: Intent?) {
-        super.onNewIntent(intent)
-        runOnUiThread {
-            binding.webView.evaluateJavascript(
-                "javascript:CallContinueGame()"
-            ) {
-
-            }
-        }
-    }
-
     override fun initViews() {
-        if (gameBean != null) {
-            val url = gameBean!!.gameUrl + "?startLv=" + gameBean!!.gameLevel + "&maxLv=" +
-                    gameBean!!.totalNum + "&gameSetTime=" + gameBean!!.gameDuration + "&difficultyRate=" +
-                    gameBean!!.gameDifficultyRate + "&totalTime=" + gameBean!!.gameTotalTime +
-                    "&totalScore=" + gameBean!!.gameTotalScore
-            Log.e("wpp", url)
+        if (TextUtils.isEmpty(url).not()) {
             initWebView(url)
-        } else {
-            "数据错误".toast()
         }
     }
 
@@ -86,40 +76,17 @@ class PlayGameActivity : BaseMVVMActivity<ActivityPlayGameBinding, PlayGameViewM
             .asGif()
             .load(R.drawable.fish)
             .into(binding.loadingImage)
-        //游戏时间
-        LiveEventBusUtil.observer<String>(this, RxBusCodes.SETTIME) {
-            binding.tvTime.post {
-                if (TextUtils.isEmpty(it).not()) {
-                    binding.tvTime.text = it
-                }
-            }
-        }
-        //分数
-        LiveEventBusUtil.observer<String>(this, RxBusCodes.SETSCORE) {
-            binding.tvScore.post {
-                if (TextUtils.isEmpty(it).not()) {
-                    binding.tvScore.text = it
-                }
-            }
-        }
-        //游戏关卡
-        LiveEventBusUtil.observer<String>(this, RxBusCodes.SETLEVEL) {
-            binding.tvGameLevel.post {
-                if (TextUtils.isEmpty(it).not()) {
-                    binding.tvGameLevel.text = "第" + it + "关"
-                }
-            }
-        }
-        //游戏进度
-        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)
-                    }
-                }
+        initLiveData()
+    }
+
+    override fun onNewIntent(intent: Intent?) {
+        super.onNewIntent(intent)
+        newStartGame = false
+        runOnUiThread {
+            binding.webView.evaluateJavascript(
+                "javascript:CallContinueGame()"
+            ) {
+
             }
         }
     }
@@ -252,6 +219,34 @@ class PlayGameActivity : BaseMVVMActivity<ActivityPlayGameBinding, PlayGameViewM
         return true
     }
 
+    override fun onResume() {
+        super.onResume()
+        if (newStartGame) {
+            newStartGame = false
+            val countdownDialog = CountdownDialog()
+            countdownDialog.onDialogClickListener = {
+                if (loadingOver) {
+                    callStartGame()
+                }
+            }
+            countdownDialog.show(supportFragmentManager, "countdownDialog")
+            getGameDetailByCode()
+        }
+    }
+
+    /**
+     * 获取游戏数据
+     */
+    private fun getGameDetailByCode() {
+        viewModel.getGameDetailByCode(gameCode, playClass, fail = {
+
+        }, success = {
+            if (it != null) {
+                gameBean = it
+            }
+        })
+    }
+
     override fun onDestroy() {
         destoryWebView()
         super.onDestroy()
@@ -299,4 +294,63 @@ class PlayGameActivity : BaseMVVMActivity<ActivityPlayGameBinding, PlayGameViewM
             }
         }
     }
+
+    /**
+     * 游戏开始
+     */
+    fun callStartGame() {
+        runOnUiThread {
+            binding.webView.evaluateJavascript(
+                "javascript:CallStartGame()"
+            ) {
+
+            }
+        }
+    }
+
+    /**
+     * 游戏进度监听
+     */
+    private fun initLiveData() {
+        //游戏时间
+        LiveEventBusUtil.observer<String>(this, RxBusCodes.SETTIME) {
+            binding.tvTime.post {
+                if (TextUtils.isEmpty(it).not()) {
+                    binding.tvTime.text = it
+                }
+            }
+        }
+        //分数
+        LiveEventBusUtil.observer<String>(this, RxBusCodes.SETSCORE) {
+            binding.tvScore.post {
+                if (TextUtils.isEmpty(it).not()) {
+                    binding.tvScore.text = it
+                }
+            }
+        }
+        //游戏关卡
+        LiveEventBusUtil.observer<String>(this, RxBusCodes.SETLEVEL) {
+            binding.tvGameLevel.post {
+                if (TextUtils.isEmpty(it).not()) {
+                    binding.tvGameLevel.text = "第" + it + "关"
+                }
+            }
+        }
+        //游戏进度
+        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)
+                    }
+                }
+            }
+        }
+        //游戏加载完成
+        LiveEventBusUtil.observer<String>(this, RxBusCodes.LOADINGOVER) {
+            loadingOver = true
+        }
+    }
 }

+ 22 - 0
game/src/main/java/com/yingyangfly/game/play/PlayGameViewModel.kt

@@ -5,6 +5,7 @@ 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
 
@@ -12,6 +13,27 @@ import com.yingyangfly.game.net.GAME_API
  * @author 王鹏鹏
  */
 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
+    )
+
     /**
      * 获取游戏详情
      */

+ 2 - 0
game/src/main/java/com/yingyangfly/game/utils/AndroidToJs.kt

@@ -27,6 +27,8 @@ class AndroidToJs() : Any() {
             } else if (msg?.contains("saveData") == true) {
                 val data = msg.split("saveData:")
                 LiveEventBusUtil.send(RxBusCodes.SAVEDATA, data[1])
+            } else if (msg?.contains("loading:over") == true) {
+                LiveEventBusUtil.send(RxBusCodes.LOADINGOVER, "")
             }
         }
     }

+ 15 - 0
game/src/main/res/layout/dialog_count_down.xml

@@ -1,8 +1,23 @@
 <?xml version="1.0" encoding="utf-8"?>
 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
+    android:background="@drawable/bg_game_introduction"
     tools:ignore="ResourceName">
 
+    <androidx.appcompat.widget.AppCompatTextView
+        android:id="@+id/tvCountdown"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textColor="@android:color/white"
+        android:textSize="@dimen/divider_200px"
+        android:textStyle="bold"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        tools:text="3" />
+
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 1 - 0
game/src/main/res/values/colors.xml

@@ -23,4 +23,5 @@
     <color name="color_94DE442A" tools:ignore="ResourceName">#94DE442A</color>
     <color name="color_FFFA9579" tools:ignore="ResourceName">#FFFA9579</color>
     <color name="color_FF7988FA" tools:ignore="ResourceName">#FF7988FA</color>
+    <color name="color_FFFFBB62" tools:ignore="ResourceName">#FFFFBB62</color>
 </resources>