Selaa lähdekoodia

1.添加游戏结算页面

王鹏鹏 2 vuotta sitten
vanhempi
commit
fac82baa72

+ 68 - 2
game/src/main/java/com/yingyangfly/game/introduction/GameIntroductionActivity.kt

@@ -11,11 +11,13 @@ import com.alibaba.android.arouter.facade.annotation.Route
 import com.alibaba.android.arouter.launcher.ARouter
 import com.tencent.liteav.demo.superplayer.SuperPlayerModel
 import com.yingyangfly.baselib.config.AccountConfig
+import com.yingyangfly.baselib.db.VoicePlayerBean
 import com.yingyangfly.baselib.ext.getEndAnimation
 import com.yingyangfly.baselib.ext.getScaleAnimation
 import com.yingyangfly.baselib.ext.show
 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.RxBusCodes
 import com.yingyangfly.game.R
@@ -34,6 +36,7 @@ class GameIntroductionActivity :
     BaseMVVMActivity<ActivityGameIntroductionBinding, GameIntroductionViewModel>(),
     View.OnTouchListener {
 
+    private var desn = ""
     private var videoUrl = ""
     private var isEnterGame = false
     private var gameCode: String = ""
@@ -42,7 +45,13 @@ class GameIntroductionActivity :
     private var gameBackgroundImage: String = ""
     private var gameBean: GameBean? = null
 
+    /**
+     * 语音合成
+     */
+    private var voicePlayer: VoicePlayer? = null
+
     override fun onCreate(savedInstanceState: Bundle?) {
+        desn = intent.getStringExtra("desn") ?: ""
         gameCode = intent.getStringExtra("gameCode") ?: ""
         playClass = intent.getStringExtra("playClass") ?: ""
         videoUrl = intent.getStringExtra("videoUrl") ?: ""
@@ -52,6 +61,7 @@ class GameIntroductionActivity :
     }
 
     override fun initViews() {
+        voicePlayer = VoicePlayer.getInstance(mContext)
         if (TextUtils.isEmpty(gameInbetweenImage).not()) {
             binding.image = gameInbetweenImage
         }
@@ -84,6 +94,9 @@ class GameIntroductionActivity :
 
     override fun onResume() {
         super.onResume()
+        if (isEnterGame.not()) {
+            speak()
+        }
         getGameDetailByCode()
     }
 
@@ -94,6 +107,11 @@ class GameIntroductionActivity :
 
     override fun onPause() {
         binding.playTxCloudView.onPause()
+        if (voicePlayer != null) {
+            if (voicePlayer!!.isPlaying) {
+                voicePlayer?.stop()
+            }
+        }
         super.onPause()
     }
 
@@ -193,7 +211,55 @@ class GameIntroductionActivity :
         finish()
     }
 
-    override fun finish() {
-        super.finish()
+    /**
+     * 语音合成
+     */
+    private fun speak() {
+        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) {
+
+                        }
+                    }
+                } 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) {
+
+                    }
+                }
+            }
+        })
     }
 }

+ 13 - 1
game/src/main/java/com/yingyangfly/game/introduction/GameIntroductionViewModel.kt

@@ -32,5 +32,17 @@ class GameIntroductionViewModel : BaseViewModel() {
         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
+    )
 }

+ 3 - 0
game/src/main/java/com/yingyangfly/game/loading/GameLoadingActivity.kt

@@ -23,6 +23,7 @@ class GameLoadingActivity : BaseActivity<ActivityGameLoadingBinding>() {
     private var time: Long = 3
     private var gameInbetweenImage = ""
     private var gameBackgroundImage = ""
+    private var desn = ""
 
     override fun onCreate(savedInstanceState: Bundle?) {
         gameCode = intent.getStringExtra("gameCode") ?: ""
@@ -30,6 +31,7 @@ class GameLoadingActivity : BaseActivity<ActivityGameLoadingBinding>() {
         videoUrl = intent.getStringExtra("videoUrl") ?: ""
         gameInbetweenImage = intent.getStringExtra("gameInbetweenImage") ?: ""
         gameBackgroundImage = intent.getStringExtra("gameBackgroundImage") ?: ""
+        desn = intent.getStringExtra("desn") ?: ""
         super.onCreate(savedInstanceState)
     }
 
@@ -57,6 +59,7 @@ class GameLoadingActivity : BaseActivity<ActivityGameLoadingBinding>() {
                     .withString("videoUrl", videoUrl)
                     .withString("gameInbetweenImage", gameInbetweenImage)
                     .withString("gameBackgroundImage", gameBackgroundImage)
+                    .withString("desn", desn)
                     .withTransition(R.anim.leftin, R.anim.leftout)
                     .navigation(mContext)
                 finish()

+ 9 - 0
game/src/main/java/com/yingyangfly/game/net/GameApiService.kt

@@ -6,6 +6,7 @@ import com.yingyangfly.game.entity.GameResultBean
 import okhttp3.RequestBody
 import retrofit2.http.Body
 import retrofit2.http.POST
+import retrofit2.http.Query
 
 interface GameApiService {
 
@@ -26,4 +27,12 @@ interface GameApiService {
      */
     @POST("game/play/record/showResult")
     suspend fun showGameResult(@Body requestBody: RequestBody): BaseResp<GameResultBean>
+
+    /**
+     * 获取声音url
+     */
+    @POST("app/video/getVoiceUrl")
+    suspend fun getVoiceUrl(
+        @Query("voiceMsg") voiceMsg: String
+    ): BaseResp<String>
 }

+ 1 - 1
game/src/main/res/layout/activity_game_introduction.xml

@@ -141,7 +141,7 @@
                                     android:layout_marginTop="@dimen/divider_29px"
                                     android:background="@drawable/bg_scientific_principle"
                                     android:gravity="center"
-                                    android:text="@string/scientific_principle"
+                                    android:text="@string/game_introduction"
                                     android:textColor="@color/color_FFA54A0B"
                                     android:textSize="@dimen/divider_28px"
                                     android:textStyle="bold"

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

@@ -9,4 +9,5 @@
     <string name="game_back" tools:ignore="MissingTranslation">返回</string>
     <string name="scientific_principle" tools:ignore="ResourceName">科学原理</string>
     <string name="training_skill" tools:ignore="ResourceName">训练技能</string>
+    <string name="game_introduction" tools:ignore="ResourceName">游戏简介</string>
 </resources>

+ 1 - 0
workbenches/src/main/java/com/yingyang/workbenches/freetraining/FreeTrainActivity.kt

@@ -79,6 +79,7 @@ class FreeTrainActivity : BaseMVVMActivity<ActivityFreeTrainBinding, FreeTrainVi
                     .withString("videoUrl", bean.gameVideoUrl)
                     .withString("gameInbetweenImage", bean.gameInbetweenImage)
                     .withString("gameBackgroundImage", bean.gameBackgroundImage)
+                    .withString("desn", bean.desn)
                     .withTransition(R.anim.leftin, R.anim.leftout)
                     .navigation(mContext)
             }