Przeglądaj źródła

1.添加游戏结算页面

王鹏鹏 2 lat temu
rodzic
commit
afb27daecc

+ 94 - 1
game/src/main/java/com/yingyangfly/game/play/PlayGameActivity.kt

@@ -15,10 +15,12 @@ import android.webkit.WebViewClient
 import com.alibaba.android.arouter.facade.annotation.Route
 import com.alibaba.android.arouter.launcher.ARouter
 import com.bumptech.glide.Glide
+import com.yingyangfly.baselib.db.VoicePlayerBean
 import com.yingyangfly.baselib.ext.getEndAnimation
 import com.yingyangfly.baselib.ext.getScaleAnimation
 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.GsonUtil
 import com.yingyangfly.baselib.utils.LiveEventBusUtil
@@ -28,6 +30,7 @@ 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
@@ -50,6 +53,7 @@ class PlayGameActivity : BaseMVVMActivity<ActivityPlayGameBinding, PlayGameViewM
     private var gameBackgroundImage = ""
     private var gameShortDesn = ""
     private lateinit var webSettings: WebSettings
+    private var voicePlayer: VoicePlayer? = null
     private var gameResultDialog: GameResultDialog? = null
 
     override fun onCreate(savedInstanceState: Bundle?) {
@@ -64,6 +68,7 @@ class PlayGameActivity : BaseMVVMActivity<ActivityPlayGameBinding, PlayGameViewM
     }
 
     override fun initViews() {
+        voicePlayer = VoicePlayer.getInstance(mContext)
         if (TextUtils.isEmpty(url).not()) {
             initWebView(url)
         }
@@ -72,6 +77,7 @@ class PlayGameActivity : BaseMVVMActivity<ActivityPlayGameBinding, PlayGameViewM
         }
         if (TextUtils.isEmpty(gameShortDesn).not()) {
             binding.tvPlay.text = gameShortDesn
+            binding.tvIntroduce.text = gameShortDesn
         }
     }
 
@@ -298,10 +304,19 @@ class PlayGameActivity : BaseMVVMActivity<ActivityPlayGameBinding, PlayGameViewM
         }
     }
 
+    override fun onPause() {
+        super.onPause()
+        if (voicePlayer != null) {
+            if (voicePlayer!!.isPlaying) {
+                voicePlayer?.stop()
+            }
+        }
+    }
+
     /**
      * 游戏开始
      */
-    fun callStartGame() {
+    private fun callStartGame() {
         runOnUiThread {
             binding.webView.evaluateJavascript(
                 "javascript:CallStartGame()"
@@ -355,5 +370,83 @@ class PlayGameActivity : BaseMVVMActivity<ActivityPlayGameBinding, PlayGameViewM
         LiveEventBusUtil.observer<String>(this, RxBusCodes.LOADINGOVER) {
             loadingOver = true
         }
+
+        //播放语音
+        LiveEventBusUtil.observer<String>(this, RxBusCodes.PLAYVOICE) {
+            if (it.isNullOrEmpty().not()) {
+                val msg = it.split("voice:")
+                if (msg.isNullOrEmpty().not()) {
+                    binding.tvIntroduce.text = msg[1]
+                    speak(msg[1])
+                }
+            }
+
+        }
+    }
+
+    /**
+     * 语音合成
+     */
+    private fun speak(desn: String) {
+        if (db != null) {
+            val voicePlayerDao = db?.getVoicePlayerDao()
+            if (voicePlayerDao != null) {
+                val voicePlayerBean = voicePlayerDao.getVoicePlayerBean(desn)
+                if (voicePlayerBean != null) {
+                    if (voicePlayer != null) {
+                        voicePlayer?.play(voicePlayerBean.url) {
+                            binding.tvIntroduce.text = gameShortDesn
+                            callPlayBgMusic()
+                        }
+                    }
+                } else {
+                    getVoiceUrl(desn)
+                }
+            } else {
+                getVoiceUrl(desn)
+            }
+        } else {
+            getVoiceUrl(desn)
+        }
+    }
+
+    /**
+     * 获取声音url
+     */
+    private fun getVoiceUrl(taskDesn: String) {
+        viewModel.getVoiceUrl(taskDesn, fail = {
+            it.toast()
+        }, success = {
+            if (TextUtils.isEmpty(it).not()) {
+                if (db != null) {
+                    val voicePlayerDao = db?.getVoicePlayerDao()
+                    if (voicePlayerDao != null) {
+                        val voicePlayerBean = VoicePlayerBean().apply {
+                            url = it
+                            words = taskDesn
+                        }
+                        voicePlayerDao.insert(voicePlayerBean)
+                    }
+                }
+                if (voicePlayer != null) {
+                    voicePlayer?.play(it) {
+
+                    }
+                }
+            }
+        })
+    }
+
+    /**
+     * 开启游戏音乐
+     */
+    private fun callPlayBgMusic() {
+        runOnUiThread {
+            binding.webView.evaluateJavascript(
+                "javascript:CallPlayBgMusic()"
+            ) {
+
+            }
+        }
     }
 }

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

@@ -58,4 +58,18 @@ class PlayGameViewModel : BaseViewModel() {
         success,
         fail
     )
+
+    /**
+     * 获取声音url
+     */
+    fun getVoiceUrl(
+        msg: String,
+        fail: ((msg: String) -> Unit)? = null,
+        success: ((success: String?) -> Unit)? = null,
+    ) = launchFlow(false) {
+        GAME_API.getVoiceUrl(msg)
+    }.runUI(
+        success,
+        fail
+    )
 }

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

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

+ 27 - 1
game/src/main/res/layout/activity_play_game.xml

@@ -45,6 +45,32 @@
                 app:layout_constraintStart_toStartOf="parent"
                 app:layout_constraintTop_toTopOf="parent" />
 
+            <FrameLayout
+                android:layout_width="@dimen/divider_189px"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="@dimen/divider_14px"
+                android:minHeight="@dimen/divider_246px"
+                app:layout_constraintBottom_toTopOf="@+id/loadingImage"
+                app:layout_constraintStart_toStartOf="parent">
+
+                <androidx.appcompat.widget.AppCompatImageView
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:background="@mipmap/icon_game_dialog"
+                    android:scaleType="fitXY" />
+
+                <androidx.appcompat.widget.AppCompatTextView
+                    android:id="@+id/tvIntroduce"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="@dimen/divider_33px"
+                    android:layout_marginTop="@dimen/divider_28px"
+                    android:layout_marginEnd="@dimen/divider_31px"
+                    android:textColor="@color/color_FFA94A09"
+                    android:textSize="@dimen/divider_25px"
+                    android:textStyle="bold" />
+            </FrameLayout>
+
             <androidx.appcompat.widget.AppCompatImageView
                 android:id="@+id/loadingImage"
                 android:layout_width="@dimen/divider_176px"
@@ -73,7 +99,7 @@
                 android:id="@+id/gameLayout"
                 android:layout_width="0dp"
                 android:layout_height="match_parent"
-                android:layout_marginStart="@dimen/divider_8px"
+                android:layout_marginStart="@dimen/divider_31px"
                 android:layout_marginTop="@dimen/divider_104px"
                 android:layout_marginEnd="@dimen/divider_12px"
                 android:layout_marginBottom="@dimen/divider_62px"

BIN
game/src/main/res/mipmap-xxhdpi/icon_game_dialog.png


+ 2 - 0
game/src/main/res/values/dimens.xml

@@ -77,6 +77,7 @@
     <dimen name="divider_250px" tools:ignore="ResourceName">250px</dimen>
     <dimen name="divider_249px" tools:ignore="ResourceName">249px</dimen>
     <dimen name="divider_248px" tools:ignore="ResourceName">248px</dimen>
+    <dimen name="divider_246px" tools:ignore="ResourceName">246px</dimen>
     <dimen name="divider_245px" tools:ignore="ResourceName">245px</dimen>
     <dimen name="divider_243px" tools:ignore="ResourceName">243px</dimen>
     <dimen name="divider_240px" tools:ignore="ResourceName">240px</dimen>
@@ -99,6 +100,7 @@
     <dimen name="divider_196px" tools:ignore="ResourceName">196px</dimen>
     <dimen name="divider_195px" tools:ignore="ResourceName">195px</dimen>
     <dimen name="divider_190px" tools:ignore="ResourceName">190px</dimen>
+    <dimen name="divider_189px" tools:ignore="ResourceName">189px</dimen>
     <dimen name="divider_188px" tools:ignore="ResourceName">188px</dimen>
     <dimen name="divider_186px" tools:ignore="ResourceName">186px</dimen>
     <dimen name="divider_184px" tools:ignore="ResourceName">184px</dimen>