王鹏鹏 2 лет назад
Родитель
Сommit
6c0ea49d72

+ 219 - 0
baselib/src/main/java/com/yingyangfly/baselib/bean/GameBean.java

@@ -0,0 +1,219 @@
+package com.yingyangfly.baselib.bean;
+
+import android.text.TextUtils;
+
+import java.io.Serializable;
+
+/**
+ * 游戏详情
+ */
+public class GameBean implements Serializable {
+
+    private String desn;
+    private String gameBackgroundImage;
+    private String gameCode;
+    private String gameCoverImage;
+    private String gameDifficulty;
+    private String gameDifficultyRate;
+    private String gameDuration;
+    private String gameId;
+    private String gameLevel;
+    private String gameMaxScore;
+    private String gameName;
+    private String gameTotalScore;
+    private String gameTotalTime;
+    private String gameType;
+    private String gameUrl;
+    private String gameVideoUrl;
+    private String patientId;
+    private String playClass;
+    private String totalNum;
+    private String gameInbetweenImage;
+    private String gameShortDesn;
+
+    public String getDesn() {
+        return desn;
+    }
+
+    public void setDesn(String desn) {
+        this.desn = desn;
+    }
+
+    public String getGameBackgroundImage() {
+        return gameBackgroundImage;
+    }
+
+    public void setGameBackgroundImage(String gameBackgroundImage) {
+        this.gameBackgroundImage = gameBackgroundImage;
+    }
+
+    public String getGameCode() {
+        return gameCode;
+    }
+
+    public void setGameCode(String gameCode) {
+        this.gameCode = gameCode;
+    }
+
+    public String getGameCoverImage() {
+        return gameCoverImage;
+    }
+
+    public void setGameCoverImage(String gameCoverImage) {
+        this.gameCoverImage = gameCoverImage;
+    }
+
+    public String getGameDifficulty() {
+        if (TextUtils.isEmpty(gameDifficulty)) {
+            return "";
+        }
+        return gameDifficulty;
+    }
+
+    public void setGameDifficulty(String gameDifficulty) {
+        this.gameDifficulty = gameDifficulty;
+    }
+
+    public String getGameDifficultyRate() {
+        return gameDifficultyRate;
+    }
+
+    public void setGameDifficultyRate(String gameDifficultyRate) {
+        this.gameDifficultyRate = gameDifficultyRate;
+    }
+
+    public String getGameDuration() {
+        if (!TextUtils.isEmpty(gameDuration)) {
+            long date = Long.parseLong(gameDuration);
+            Long time = date / 1000;
+            return String.valueOf(time);
+        }
+        return gameDuration;
+    }
+
+    public void setGameDuration(String gameDuration) {
+        this.gameDuration = gameDuration;
+    }
+
+    public String getGameId() {
+        return gameId;
+    }
+
+    public void setGameId(String gameId) {
+        this.gameId = gameId;
+    }
+
+    public String getGameLevel() {
+        return gameLevel;
+    }
+
+    public void setGameLevel(String gameLevel) {
+        this.gameLevel = gameLevel;
+    }
+
+    public String getGameMaxScore() {
+        return gameMaxScore;
+    }
+
+    public void setGameMaxScore(String gameMaxScore) {
+        this.gameMaxScore = gameMaxScore;
+    }
+
+    public String getGameName() {
+        return gameName;
+    }
+
+    public void setGameName(String gameName) {
+        this.gameName = gameName;
+    }
+
+    public String getGameTotalScore() {
+        return gameTotalScore;
+    }
+
+    public void setGameTotalScore(String gameTotalScore) {
+        this.gameTotalScore = gameTotalScore;
+    }
+
+    public String getGameTotalTime() {
+        return gameTotalTime;
+    }
+
+    public void setGameTotalTime(String gameTotalTime) {
+        this.gameTotalTime = gameTotalTime;
+    }
+
+    public String getGameType() {
+        return gameType;
+    }
+
+    public void setGameType(String gameType) {
+        this.gameType = gameType;
+    }
+
+    public String getGameUrl() {
+        return gameUrl;
+    }
+
+    public void setGameUrl(String gameUrl) {
+        this.gameUrl = gameUrl;
+    }
+
+    public String getGameVideoUrl() {
+        return gameVideoUrl;
+    }
+
+    public void setGameVideoUrl(String gameVideoUrl) {
+        this.gameVideoUrl = gameVideoUrl;
+    }
+
+    public String getPatientId() {
+        return patientId;
+    }
+
+    public void setPatientId(String patientId) {
+        this.patientId = patientId;
+    }
+
+    public String getPlayClass() {
+        return playClass;
+    }
+
+    public void setPlayClass(String playClass) {
+        this.playClass = playClass;
+    }
+
+    public String getTotalNum() {
+        return totalNum;
+    }
+
+    public void setTotalNum(String totalNum) {
+        this.totalNum = totalNum;
+    }
+
+    public String getGameInbetweenImage() {
+        return gameInbetweenImage;
+    }
+
+    public void setGameInbetweenImage(String gameInbetweenImage) {
+        this.gameInbetweenImage = gameInbetweenImage;
+    }
+
+    public String getGameShortDesn() {
+        return gameShortDesn;
+    }
+
+    public void setGameShortDesn(String gameShortDesn) {
+        this.gameShortDesn = gameShortDesn;
+    }
+
+    public String gameDifficultyInfo() {
+        if (TextUtils.equals("A", gameDifficulty)) {
+            return "简单";
+        } else if (TextUtils.equals("B", gameDifficulty)) {
+            return "中等";
+        } else {
+            return "困难";
+        }
+    }
+}

+ 43 - 0
baselib/src/main/java/com/yingyangfly/baselib/bean/GameDataBean.java

@@ -0,0 +1,43 @@
+package com.yingyangfly.baselib.bean;
+
+/**
+ * 保存游戏进度
+ */
+public class GameDataBean {
+    private String curLevel;//当前关卡
+    private String curLevelScore;//当前关卡分数
+    private String curLevelTime;//当前关卡时间
+    private String isPass;//0成功 1失败 2退出 3通关结算 4超时失败
+
+    public String getCurLevel() {
+        return curLevel;
+    }
+
+    public void setCurLevel(String curLevel) {
+        this.curLevel = curLevel;
+    }
+
+    public String getCurLevelScore() {
+        return curLevelScore;
+    }
+
+    public void setCurLevelScore(String curLevelScore) {
+        this.curLevelScore = curLevelScore;
+    }
+
+    public String getCurLevelTime() {
+        return curLevelTime;
+    }
+
+    public void setCurLevelTime(String curLevelTime) {
+        this.curLevelTime = curLevelTime;
+    }
+
+    public String getIsPass() {
+        return isPass;
+    }
+
+    public void setIsPass(String isPass) {
+        this.isPass = isPass;
+    }
+}

+ 13 - 0
baselib/src/main/java/com/yingyangfly/baselib/bean/GetSaveGameRecordBean.kt

@@ -0,0 +1,13 @@
+package com.yingyangfly.baselib.bean
+
+/**
+ * 保存游戏进度bean
+ */
+class GetSaveGameRecordBean {
+    var duration: String = ""
+    var gameCode: String = ""
+    var gameLevel: String = ""
+    var gameScore: String = ""
+    var isPass: String = ""
+    var playClass: String = ""
+}

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

@@ -64,4 +64,9 @@ object RxBusCodes {
      * 游戏超时退出
      */
     const val GAMEOVERTIME = "gameOvertime"
+
+    /**
+     * 上报游戏记录
+     */
+    const val REPORTGAMERECORDS = "reportGameRecords"
 }

+ 9 - 10
game/src/main/java/com/yingyangfly/game/introduction/GameIntroductionActivity.kt

@@ -86,9 +86,9 @@ class GameIntroductionActivity :
 
     override fun onResume() {
         super.onResume()
-        val gameLoadingDialog = GameLoadingDialog()
-        gameLoadingDialog.show(supportFragmentManager, "gameLoadingDialog")
         if (isEnterGame.not()) {
+            val gameLoadingDialog = GameLoadingDialog()
+            gameLoadingDialog.show(supportFragmentManager, "gameLoadingDialog")
             speak()
         }
         getGameDetailByCode()
@@ -175,13 +175,12 @@ 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 +
-//                                    "&playClass=" + playClass
-                        val url = "http://192.168.0.114:7456"
+                        val url =
+                            gameBean!!.gameUrl + "?startLv=" + gameBean!!.gameLevel + "&maxLv=" +
+                                    gameBean!!.totalNum + "&gameSetTime=" + gameBean!!.gameDuration +
+                                    "&difficultyRate=" + gameBean!!.gameDifficultyRate + "&totalTime=" +
+                                    gameBean!!.gameTotalTime + "&totalScore=" + gameBean!!.gameTotalScore +
+                                    "&playClass=" + playClass
                         ARouter.getInstance().build(RouterUrlCommon.playGame)
                             .withString("gameCode", gameCode)
                             .withString("playClass", playClass)
@@ -239,7 +238,7 @@ class GameIntroductionActivity :
      */
     private fun getVoiceUrl(taskDesn: String) {
         viewModel.getVoiceUrl(taskDesn, fail = {
-            it.toast()
+
         }, success = {
             if (TextUtils.isEmpty(it).not()) {
                 if (db != null) {

+ 4 - 3
game/src/main/java/com/yingyangfly/game/play/PlayGameActivity.kt

@@ -85,6 +85,7 @@ class PlayGameActivity : BaseMVVMActivity<ActivityPlayGameBinding, PlayGameViewM
     override fun initListener() {
         binding {
             tvPause.setOnTouchListener(this@PlayGameActivity)
+            tvPauses.setOnTouchListener(this@PlayGameActivity)
             tvFullScreen.setOnSingleClickListener {
                 binding.webView.post {
                     val params = FrameLayout.LayoutParams(
@@ -195,13 +196,13 @@ class PlayGameActivity : BaseMVVMActivity<ActivityPlayGameBinding, PlayGameViewM
     override fun onTouch(v: View, event: MotionEvent): Boolean {
         when (event.action) {
             MotionEvent.ACTION_DOWN -> {
-                if (v.id == R.id.tvPause) {
+                if (v.id == R.id.tvPause || v.id == R.id.tvPauses) {
                     v.startAnimation(getScaleAnimation())
                 }
             }
             MotionEvent.ACTION_UP -> {
                 v.startAnimation(getEndAnimation())
-                if (v.id == R.id.tvPause) {
+                if (v.id == R.id.tvPause || v.id == R.id.tvPauses) {
                     runOnUiThread {
                         binding.webView.evaluateJavascript(
                             "javascript:CallPauseGame()"
@@ -216,7 +217,7 @@ class PlayGameActivity : BaseMVVMActivity<ActivityPlayGameBinding, PlayGameViewM
                 }
             }
             MotionEvent.ACTION_CANCEL -> {
-                if (v.id == R.id.tvPause) {
+                if (v.id == R.id.tvPause || v.id == R.id.tvPauses) {
                     v.startAnimation(getEndAnimation())
                 }
             }

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

@@ -145,6 +145,21 @@
                         android:layout_height="match_parent"
                         android:visibility="gone">
 
+                        <androidx.appcompat.widget.AppCompatTextView
+                            android:id="@+id/tvPauses"
+                            android:layout_width="@dimen/divider_169px"
+                            android:layout_height="@dimen/divider_65px"
+                            android:layout_marginStart="@dimen/divider_32px"
+                            android:layout_marginTop="@dimen/divider_32px"
+                            android:background="@drawable/bg_game_pause"
+                            android:gravity="center"
+                            android:text="@string/pause_help"
+                            android:textColor="@color/color_FFFFA916"
+                            android:textSize="@dimen/divider_28px"
+                            android:textStyle="bold"
+                            app:layout_constraintStart_toStartOf="parent"
+                            app:layout_constraintTop_toTopOf="parent" />
+
                         <FrameLayout
                             android:layout_width="@dimen/divider_189px"
                             android:layout_height="wrap_content"

+ 22 - 4
home/src/main/java/com/yingyangfly/home/activity/HomeActivity.kt

@@ -12,6 +12,8 @@ import com.tencent.imsdk.v2.V2TIMCallback
 import com.tencent.imsdk.v2.V2TIMManager
 import com.yingyang.home.R
 import com.yingyang.home.databinding.ActivityHomeBinding
+import com.yingyangfly.baselib.bean.GameDataBean
+import com.yingyangfly.baselib.bean.GetSaveGameRecordBean
 import com.yingyangfly.baselib.bean.Record
 import com.yingyangfly.baselib.dialog.TaskFragment
 import com.yingyangfly.baselib.dialog.TipsDialog
@@ -23,9 +25,7 @@ import com.yingyangfly.baselib.guideview.Guide
 import com.yingyangfly.baselib.guideview.GuideBuilder
 import com.yingyangfly.baselib.mvvm.BaseMVVMActivity
 import com.yingyangfly.baselib.router.RouterUrlCommon
-import com.yingyangfly.baselib.utils.AppUtil
-import com.yingyangfly.baselib.utils.JumpUtil
-import com.yingyangfly.baselib.utils.User
+import com.yingyangfly.baselib.utils.*
 import com.yingyangfly.home.adapter.GameAdapter
 import com.yingyangfly.home.component.ShowFunTimeViewComponent
 import com.yingyangfly.home.component.ShowHealthCounselingViewComponent
@@ -114,7 +114,7 @@ class HomeActivity : BaseMVVMActivity<ActivityHomeBinding, HomeViewModel>(),
     }
 
     override fun initData() {
-
+        initLiveData()
     }
 
     override fun onResume() {
@@ -620,4 +620,22 @@ class HomeActivity : BaseMVVMActivity<ActivityHomeBinding, HomeViewModel>(),
             .withTransition(R.anim.leftin, R.anim.leftout)
             .navigation(mContext)
     }
+
+    private fun initLiveData() {
+        //上报游戏进度
+        LiveEventBusUtil.observer<GetSaveGameRecordBean>(this, RxBusCodes.REPORTGAMERECORDS) {
+            if (it != null) {
+                saveData(it)
+            }
+        }
+    }
+
+    /**
+     * 保存游戏进度
+     */
+    private fun saveData(bean: GetSaveGameRecordBean) {
+        viewModel.saveGameRecord(bean, fail = {
+        }, success = {
+        })
+    }
 }

+ 21 - 0
home/src/main/java/com/yingyangfly/home/activity/HomeViewModel.kt

@@ -1,7 +1,13 @@
 package com.yingyangfly.home.activity
 
+import android.util.Log
+import com.yingyangfly.baselib.bean.GameBean
+import com.yingyangfly.baselib.bean.GameDataBean
+import com.yingyangfly.baselib.bean.GetSaveGameRecordBean
 import com.yingyangfly.baselib.bean.Record
 import com.yingyangfly.baselib.mvvm.BaseViewModel
+import com.yingyangfly.baselib.net.XUtils
+import com.yingyangfly.baselib.utils.GsonUtil
 import com.yingyangfly.home.entity.*
 import com.yingyangfly.home.net.HOME_API
 
@@ -133,4 +139,19 @@ class HomeViewModel : BaseViewModel() {
         fail
     )
 
+    /**
+     * 获取游戏详情
+     */
+    fun saveGameRecord(
+        requestBean: GetSaveGameRecordBean,
+        fail: ((msg: String) -> Unit)? = null,
+        success: ((success: GameBean?) -> Unit)? = null,
+    ) = launchFlow(false) {
+        val body = XUtils.createJson(GsonUtil.GsonString(requestBean))
+        HOME_API.saveGameRecord(body)
+    }.runUI(
+        success,
+        fail
+    )
+
 }

+ 7 - 0
home/src/main/java/com/yingyangfly/home/net/HomeApiService.kt

@@ -1,5 +1,6 @@
 package com.yingyangfly.home.net
 
+import com.yingyangfly.baselib.bean.GameBean
 import com.yingyangfly.baselib.bean.UserInfoBean
 import com.yingyangfly.baselib.bean.Record
 import com.yingyangfly.baselib.db.QuestionsBean
@@ -91,4 +92,10 @@ interface HomeApiService {
     @POST("im/user_sign")
     suspend fun getUserSign(@Query("userId") userId: String): BaseResp<String>
 
+    /**
+     * 保存游戏进度
+     */
+    @POST("game/play/record/save")
+    suspend fun saveGameRecord(@Body requestBody: RequestBody): BaseResp<GameBean>
+
 }