diff --git a/common/src/main/java/com/yunbao/common/bean/BallClearanceTableJoinRoomBean.java b/common/src/main/java/com/yunbao/common/bean/BallClearanceTableJoinRoomBean.java new file mode 100644 index 000000000..dfb76fb9d --- /dev/null +++ b/common/src/main/java/com/yunbao/common/bean/BallClearanceTableJoinRoomBean.java @@ -0,0 +1,39 @@ +package com.yunbao.common.bean; + +import com.google.gson.annotations.SerializedName; + +public class BallClearanceTableJoinRoomBean extends BaseModel{ + @SerializedName("room_id") + private String room_id; + @SerializedName("room_name") + private String roomName; + @SerializedName("sud_game_id") + private String gameId; + + public BallClearanceTableJoinRoomBean() { + } + + public String getRoom_id() { + return room_id; + } + + public void setRoom_id(String room_id) { + this.room_id = room_id; + } + + public String getRoomName() { + return roomName; + } + + public void setRoomName(String roomName) { + this.roomName = roomName; + } + + public String getGameId() { + return gameId; + } + + public void setGameId(String gameId) { + this.gameId = gameId; + } +} diff --git a/common/src/main/java/com/yunbao/common/bean/SudGameAiInfo.java b/common/src/main/java/com/yunbao/common/bean/SudGameAiInfo.java new file mode 100644 index 000000000..cf00aadec --- /dev/null +++ b/common/src/main/java/com/yunbao/common/bean/SudGameAiInfo.java @@ -0,0 +1,24 @@ +package com.yunbao.common.bean; + +import com.google.gson.annotations.SerializedName; + +import java.util.ArrayList; +import java.util.List; + +public class SudGameAiInfo extends BaseModel{ + @SerializedName("uids") + private List uids; + + public SudGameAiInfo() { + } + + public List getUids() { + if(uids==null) + uids=new ArrayList<>(); + return uids; + } + + public void setUids(List uids) { + this.uids = uids; + } +} diff --git a/common/src/main/java/com/yunbao/common/bean/SudGameRoomInfoBean.java b/common/src/main/java/com/yunbao/common/bean/SudGameRoomInfoBean.java new file mode 100644 index 000000000..a889641c7 --- /dev/null +++ b/common/src/main/java/com/yunbao/common/bean/SudGameRoomInfoBean.java @@ -0,0 +1,117 @@ +package com.yunbao.common.bean; + +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +public class SudGameRoomInfoBean extends BaseModel{ + public static final String STATUS_WAITING = "WATING"; + public static final String STATUS_PLAYING = "PLAYING"; + @SerializedName("status") + private String status=""; + + @SerializedName("captain_uid") + private String captainUid; + + @SerializedName("player") + private List players; + + // 注意:这里没有getter和setter方法 + // 可以添加一个构造方法或其他方法来初始化对象(如果需要) + + public SudGameRoomInfoBean() { + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getCaptainUid() { + return captainUid; + } + + public void setCaptainUid(String captainUid) { + this.captainUid = captainUid; + } + + public List getPlayers() { + return players; + } + + public void setPlayers(List players) { + this.players = players; + } + + // 嵌套类来表示游戏位玩家 + public static class Player { + public static final String PLAYER_STATUS_READY = "READY"; + public static final String PLAYER_STATUS_IDLE = "IDLE"; + @SerializedName("uid") + private String uid; + + @SerializedName("seat_index") + private int seatIndex; + + @SerializedName("status") + private String status=""; + + @SerializedName("is_ai") + private int isAi; + + @SerializedName("ai_level") + private int aiLevel; + + // 同样,这里没有getter和setter方法 + + // 可以根据需要添加构造方法或其他方法 + + public Player() { + } + + public String getUid() { + return uid; + } + + public void setUid(String uid) { + this.uid = uid; + } + + public int getSeatIndex() { + return seatIndex; + } + + public void setSeatIndex(int seatIndex) { + this.seatIndex = seatIndex; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public int getIsAi() { + return isAi; + } + + public void setIsAi(int isAi) { + this.isAi = isAi; + } + + public int getAiLevel() { + return aiLevel; + } + + public void setAiLevel(int aiLevel) { + this.aiLevel = aiLevel; + } + } + + // 如果需要,可以添加其他方法来操作这些数据 +} diff --git a/common/src/main/java/com/yunbao/common/dialog/CreateSudGamePopup.java b/common/src/main/java/com/yunbao/common/dialog/CreateSudGamePopup.java index ed824ecec..4926c0665 100644 --- a/common/src/main/java/com/yunbao/common/dialog/CreateSudGamePopup.java +++ b/common/src/main/java/com/yunbao/common/dialog/CreateSudGamePopup.java @@ -255,7 +255,7 @@ public class CreateSudGamePopup extends BottomPopupView { return; } } - } else if(!TextUtils.equals(currencyType, "4")){ + } else if (!TextUtils.equals(currencyType, "4")) { if (sill.length() > 4) { if (IMLoginManager.get(getContext()).getLocaleLanguage() == Locale.SIMPLIFIED_CHINESE) { ToastUtil.show("貨幣數量区间为[10 - 1000]"); @@ -292,10 +292,10 @@ public class CreateSudGamePopup extends BottomPopupView { .createSudRoom(name, sill, currencyType, id, TextUtils.equals(currencyType, "4"), new HttpCallback() { @Override public void onSuccess(CreateSudRoomModel data) { - if(TextUtils.equals(currencyType, "4")){ - RandomSudGameManager.getManager().start(data,isHome); + if (TextUtils.equals(currencyType, "4")) { + RandomSudGameManager.getManager().start(data, isHome, false); dialog.dismiss(); - if(!isHome){ + if (!isHome) { Bus.get().post(new SudGameListDissMissEvent()); } return; @@ -303,7 +303,7 @@ public class CreateSudGamePopup extends BottomPopupView { if (isHome) { dialog.dismiss(); if (CommonAppConfig.getInstance().getConfig().isSw()) { - RouteUtil.forwardSwSudGameActivity(new Gson().toJson(data), false, isHome); + RouteUtil.forwardSwSudGameActivity(new Gson().toJson(data), false, false, isHome); } else { RouteUtil.forwardRySudGameActivity(new Gson().toJson(data), true, isHome); } @@ -396,7 +396,6 @@ public class CreateSudGamePopup extends BottomPopupView { } - private void closeAnimSudGameListEvent() { ObjectAnimator animator = ObjectAnimator.ofFloat(roomGameArrow, "rotation", 90f, 0f); animator.setDuration(animDuration); @@ -429,10 +428,10 @@ public class CreateSudGamePopup extends BottomPopupView { } else { gameSill.setHint(WordUtil.isNewZh() ? "請輸入貨幣數量" : "Please enter the amount of currency"); } - if(TextUtils.equals(currencyType,"4")){ + if (TextUtils.equals(currencyType, "4")) { gameSill.setText("1"); gameSill.setEnabled(false); - }else { + } else { gameSill.setEnabled(true); gameSill.setText(""); } diff --git a/common/src/main/java/com/yunbao/common/dialog/SudGameDoubleDialog.java b/common/src/main/java/com/yunbao/common/dialog/SudGameDoubleDialog.java index d24e2daf0..99495cc0a 100644 --- a/common/src/main/java/com/yunbao/common/dialog/SudGameDoubleDialog.java +++ b/common/src/main/java/com/yunbao/common/dialog/SudGameDoubleDialog.java @@ -96,7 +96,7 @@ public class SudGameDoubleDialog extends AbsDialogCenterPopupWindow { sub_leave.setOnClickListener(v -> destroyDialog()); sub_again.setOnClickListener(v -> { - Bus.get().post(new CheckRemainingBalanceEvent().setSudMGPMGState(SudMGPMGState.MG_COMMON_SELF_CLICK_GAME_SETTLE_AGAIN_BTN).setSubReady(false)); + Bus.get().post(new CheckRemainingBalanceEvent(null).setSudMGPMGState(SudMGPMGState.MG_COMMON_SELF_CLICK_GAME_SETTLE_AGAIN_BTN).setSubReady(false)); destroyDialog(); }); @@ -118,10 +118,10 @@ public class SudGameDoubleDialog extends AbsDialogCenterPopupWindow { LogUtils.e("isFirstMe:" + isFirstMe); if (containMe) { // 当前用户在游戏中 - // SudSettleBean winBean = isFirstMe ? sudSettleBean1 : sudSettleBean2; - // SudSettleBean lossBean = isFirstMe ? sudSettleBean2 : sudSettleBean1; - SudSettleBean winBean= sudSettleBean1; - SudSettleBean lossBean= sudSettleBean2; + // SudSettleBean winBean = isFirstMe ? sudSettleBean1 : sudSettleBean2; + // SudSettleBean lossBean = isFirstMe ? sudSettleBean2 : sudSettleBean1; + SudSettleBean winBean = sudSettleBean1; + SudSettleBean lossBean = sudSettleBean2; if (isActivityGame) { @@ -160,10 +160,16 @@ public class SudGameDoubleDialog extends AbsDialogCenterPopupWindow { ImgLoader.display(mContext, sudSettleBean2.getAvatar_url(), sub_loss_head); sub_win_name.setText(sudSettleBean1.getNick_name()); sub_loss_name.setText(sudSettleBean2.getNick_name()); - - sub_win_score.setText(sudSettleBean1.getWin_num() > 0 ? "+" + sudSettleBean1.getWin_num() : String.valueOf(sudSettleBean1.getWin_num())); - sub_loss_score.setText(String.valueOf(sudSettleBean2.getWin_num())); - + if (isActivityGame) { + Map map = showActivityGameScore(); + if (!map.isEmpty()) { + isDraw = map.get("win").intValue() == map.get("loss").intValue(); + } + findViewById(R.id.tips).setVisibility(View.INVISIBLE); + } else { + sub_win_score.setText(sudSettleBean1.getWin_num() > 0 ? "+" + sudSettleBean1.getWin_num() : String.valueOf(sudSettleBean1.getWin_num())); + sub_loss_score.setText(String.valueOf(sudSettleBean2.getWin_num())); + } if (isDraw) { // 平局 sub_title.setImageResource(isZh ? R.mipmap.sub_draw_zh : R.mipmap.sub_draw_en); @@ -242,6 +248,16 @@ public class SudGameDoubleDialog extends AbsDialogCenterPopupWindow { private void sortByWinNum(List list) { // 按照胜利数排序 settleBeans 列表 + if (isActivityGame) { + for (SudActivityGameInfoBean infoBean : gameSettle.activityGameInfoBean) { + for (SudSettleBean bean : list) { + if (bean.getUid().equals(infoBean.getUid() + "")) { + bean.setWin_num(infoBean.getScore()); + break; + } + } + } + } Collections.sort(list, (bean1, bean2) -> { return Integer.compare(bean2.getWin_num(), bean1.getWin_num()); // 从大到小排序 }); diff --git a/common/src/main/java/com/yunbao/common/dialog/SudGameMultipleDialog.java b/common/src/main/java/com/yunbao/common/dialog/SudGameMultipleDialog.java index d4426e0be..80340d344 100644 --- a/common/src/main/java/com/yunbao/common/dialog/SudGameMultipleDialog.java +++ b/common/src/main/java/com/yunbao/common/dialog/SudGameMultipleDialog.java @@ -65,7 +65,7 @@ public class SudGameMultipleDialog extends AbsDialogCenterPopupWindow{ sub_leave.setOnClickListener(v-> destroyDialog()); sub_again.setOnClickListener(v-> { - Bus.get().post(new CheckRemainingBalanceEvent().setSudMGPMGState(SudMGPMGState.MG_COMMON_SELF_CLICK_GAME_SETTLE_AGAIN_BTN).setSubReady(false)); + Bus.get().post(new CheckRemainingBalanceEvent(null).setSudMGPMGState(SudMGPMGState.MG_COMMON_SELF_CLICK_GAME_SETTLE_AGAIN_BTN).setSubReady(false)); destroyDialog(); }); diff --git a/common/src/main/java/com/yunbao/common/dialog/SudLoadDialog.java b/common/src/main/java/com/yunbao/common/dialog/SudLoadDialog.java index d0e074dcc..5a02e5b8b 100644 --- a/common/src/main/java/com/yunbao/common/dialog/SudLoadDialog.java +++ b/common/src/main/java/com/yunbao/common/dialog/SudLoadDialog.java @@ -1,24 +1,28 @@ package com.yunbao.common.dialog; import android.content.Context; +import android.os.Handler; +import android.os.Looper; import android.view.View; import android.widget.ProgressBar; + import androidx.annotation.NonNull; import androidx.appcompat.widget.AppCompatImageView; import androidx.appcompat.widget.LinearLayoutCompat; import androidx.core.content.ContextCompat; + import com.lxj.xpopup.XPopup; import com.yunbao.common.R; import com.yunbao.common.utils.WordUtil; -public class SudLoadDialog extends AbsDialogCenterPopupWindow{ +public class SudLoadDialog extends AbsDialogCenterPopupWindow { public SudLoadDialog(@NonNull Context context) { super(context); } private LinearLayoutCompat sud_load_bg; - private AppCompatImageView sud_load,sud_load_skip,sud_load_again; - private ProgressBar sud_load_bar_double,sud_load_bar_multiple; + private AppCompatImageView sud_load, sud_load_skip, sud_load_again; + private ProgressBar sud_load_bar_double, sud_load_bar_multiple; private int isDouble = 0;//游戏模式 1:双人对战 2:多人游戏 private int clickStatus = 0;//0:什么都不点击 1:点击跳过 2:点击再来一局 @@ -50,36 +54,39 @@ public class SudLoadDialog extends AbsDialogCenterPopupWindow{ sud_load_bar_double = findViewById(R.id.sud_load_bar_double); sud_load_bar_multiple = findViewById(R.id.sud_load_bar_multiple); - if (WordUtil.isNewZh()){ + if (WordUtil.isNewZh()) { sud_load.setImageResource(R.mipmap.sud_load_zh); sud_load_skip.setImageResource(R.mipmap.sud_load_skip_zh); sud_load_again.setImageResource(R.mipmap.sub_again_zh); - }else { + } else { sud_load.setImageResource(R.mipmap.sud_load_en); sud_load_skip.setImageResource(R.mipmap.sud_load_skip_en); sud_load_again.setImageResource(R.mipmap.sub_again_en); } - sud_load_skip.setOnClickListener(v->{ + sud_load_skip.setOnClickListener(v -> { clickStatus = 1; dismiss(); }); - sud_load_again.setOnClickListener(v->{ + sud_load_again.setOnClickListener(v -> { clickStatus = 2; dismiss(); }); } - + Handler activityGameTipsHandler = null; + Runnable activityGameTipsRunnable = () -> { + findViewById(R.id.sud_activity_tips_text).setVisibility(View.VISIBLE); + }; @Override protected void onShow() { super.onShow(); - if (isDouble == 1){ - sud_load_bg.setBackground(ContextCompat.getDrawable(mContext,R.mipmap.sud_load_bg_double)); + if (isDouble == 1) { + sud_load_bg.setBackground(ContextCompat.getDrawable(mContext, R.mipmap.sud_load_bg_double)); sud_load_bar_double.setVisibility(View.VISIBLE); sud_load_bar_multiple.setVisibility(View.GONE); - }else { - sud_load_bg.setBackground(ContextCompat.getDrawable(mContext,R.mipmap.sud_load_bg_multiple)); + } else { + sud_load_bg.setBackground(ContextCompat.getDrawable(mContext, R.mipmap.sud_load_bg_multiple)); sud_load_bar_double.setVisibility(View.GONE); sud_load_bar_multiple.setVisibility(View.VISIBLE); } @@ -88,9 +95,25 @@ public class SudLoadDialog extends AbsDialogCenterPopupWindow{ // dismiss(); // } // },10000); + activityGameTipsHandler=new Handler(Looper.getMainLooper()); + activityGameTipsHandler.postDelayed(activityGameTipsRunnable,5000); } - public void setDouble(int isDouble){ + public void setDouble(int isDouble) { this.isDouble = isDouble; } + + private boolean isActivityGame = false; + + public void setActivityGame() { + isActivityGame = true; + } + + @Override + protected void onDismiss() { + super.onDismiss(); + if(activityGameTipsHandler!=null){ + activityGameTipsHandler.removeCallbacks(activityGameTipsRunnable); + } + } } diff --git a/common/src/main/java/com/yunbao/common/event/CheckRemainingBalanceEvent.java b/common/src/main/java/com/yunbao/common/event/CheckRemainingBalanceEvent.java index 85721687a..0bb365a89 100644 --- a/common/src/main/java/com/yunbao/common/event/CheckRemainingBalanceEvent.java +++ b/common/src/main/java/com/yunbao/common/event/CheckRemainingBalanceEvent.java @@ -12,6 +12,9 @@ public class CheckRemainingBalanceEvent extends BaseModel { private boolean subReady = false;//是否直接自动准备 private SudMGPMGState.MGCommonGameSettle mgCommonGameSettle;//结算数据 private boolean isActivityGame; + private SudMGPMGState.MGCommonPlayerIn playerIn; + private String uid; + private Object object; public boolean isSubReady() { return subReady; @@ -21,6 +24,30 @@ public class CheckRemainingBalanceEvent extends BaseModel { return isActivityGame; } + public Object getObject() { + return object; + } + + public String getUid() { + return uid; + } + + public CheckRemainingBalanceEvent(String uid) { + this.uid = uid; + } + + public void setObject(Object object) { + this.object = object; + } + + public com.yunbao.common.sud.state.SudMGPMGState.MGCommonPlayerIn getPlayerIn() { + return playerIn; + } + + public CheckRemainingBalanceEvent setPlayerIn(com.yunbao.common.sud.state.SudMGPMGState.MGCommonPlayerIn playerIn) { + this.playerIn = playerIn; + return this; + } public CheckRemainingBalanceEvent setActivityGame(boolean activityGame) { isActivityGame = activityGame; @@ -67,4 +94,15 @@ public class CheckRemainingBalanceEvent extends BaseModel { public boolean getSubReady() { return subReady; } + + @Override + public String toString() { + return "CheckRemainingBalanceEvent{" + + "seatIndex=" + seatIndex + + ", SudMGPMGState='" + SudMGPMGState + '\'' + + ", subReady=" + subReady + + ", mgCommonGameSettle=" + mgCommonGameSettle + + ", isActivityGame=" + isActivityGame + + '}'; + } } diff --git a/common/src/main/java/com/yunbao/common/http/PDLiveApi.java b/common/src/main/java/com/yunbao/common/http/PDLiveApi.java index 9ed625233..0a745c642 100644 --- a/common/src/main/java/com/yunbao/common/http/PDLiveApi.java +++ b/common/src/main/java/com/yunbao/common/http/PDLiveApi.java @@ -5,6 +5,7 @@ import com.yunbao.common.bean.ActiveModel; import com.yunbao.common.bean.AnchorRecommendItemModel; import com.yunbao.common.bean.AnchorRecommendModel; import com.yunbao.common.bean.AvatarBean; +import com.yunbao.common.bean.BallClearanceTableJoinRoomBean; import com.yunbao.common.bean.BaseModel; import com.yunbao.common.bean.BattlePassPoints; import com.yunbao.common.bean.BattlePassTask; @@ -75,7 +76,9 @@ import com.yunbao.common.bean.SetAttentsModel; import com.yunbao.common.bean.SlideInBannerModel; import com.yunbao.common.bean.StarChallengeStatusModel; import com.yunbao.common.bean.SudActivityGameInfoBean; +import com.yunbao.common.bean.SudGameAiInfo; import com.yunbao.common.bean.SudGameInfoBean; +import com.yunbao.common.bean.SudGameRoomInfoBean; import com.yunbao.common.bean.SudGameScoreBean; import com.yunbao.common.bean.SudGameUserModel; import com.yunbao.common.bean.SudRoomListModel; @@ -1354,4 +1357,15 @@ public interface PDLiveApi { Observable>> ballClearanceTableGetResultScore( @Query("room_id")String roomId ); + @GET("/api/public/?service=Sudgameserver.ballClearanceTableAiAdd") + Observable> ballClearanceTableAiAdd( + @Query("room_id")String roomId + ); + @GET("/api/public/?service=Sudgameserver.ballClearanceTableGetRoomInfo") + Observable> ballClearanceTableGetRoomInfo( + @Query("room_id")String roomId + ); + @GET("/api/public/?service=Sudgameserver.ballClearanceTableJoinRoom") + Observable> ballClearanceTableJoinRoom ( + ); } diff --git a/common/src/main/java/com/yunbao/common/http/live/LiveNetManager.java b/common/src/main/java/com/yunbao/common/http/live/LiveNetManager.java index d494b716c..328c862f7 100644 --- a/common/src/main/java/com/yunbao/common/http/live/LiveNetManager.java +++ b/common/src/main/java/com/yunbao/common/http/live/LiveNetManager.java @@ -10,6 +10,7 @@ import com.yunbao.common.Constants; import com.yunbao.common.R; import com.yunbao.common.bean.ActiveModel; import com.yunbao.common.bean.AvatarBean; +import com.yunbao.common.bean.BallClearanceTableJoinRoomBean; import com.yunbao.common.bean.BaseModel; import com.yunbao.common.bean.BattlePassPoints; import com.yunbao.common.bean.BattlePassTask; @@ -73,7 +74,9 @@ import com.yunbao.common.bean.SendMoneyLongModel; import com.yunbao.common.bean.SetAttentsModel; import com.yunbao.common.bean.StarChallengeStatusModel; import com.yunbao.common.bean.SudActivityGameInfoBean; +import com.yunbao.common.bean.SudGameAiInfo; import com.yunbao.common.bean.SudGameInfoBean; +import com.yunbao.common.bean.SudGameRoomInfoBean; import com.yunbao.common.bean.SudGameScoreBean; import com.yunbao.common.bean.SudGameUserModel; import com.yunbao.common.bean.SudRoomListModel; @@ -3651,7 +3654,63 @@ public class LiveNetManager { } }).isDisposed(); } - + public void ballClearanceTableAiAdd( String roomId, HttpCallback callback) { + API.get().pdLiveApi(mContext) + .ballClearanceTableAiAdd(roomId) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(listResponseModel -> { + if (callback != null) { + callback.onSuccess(listResponseModel.getData().getInfo()); + } + }, new Consumer() { + @Override + public void accept(Throwable throwable) throws Exception { + throwable.printStackTrace(); + if (callback != null) { + callback.onError(mContext.getString(R.string.net_error)); + } + } + }).isDisposed(); + } + public void ballClearanceTableGetRoomInfo( String roomId, HttpCallback callback) { + API.get().pdLiveApi(mContext) + .ballClearanceTableGetRoomInfo(roomId) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(listResponseModel -> { + if (callback != null) { + callback.onSuccess(listResponseModel.getData().getInfo()); + } + }, new Consumer() { + @Override + public void accept(Throwable throwable) throws Exception { + throwable.printStackTrace(); + if (callback != null) { + callback.onError(mContext.getString(R.string.net_error)); + } + } + }).isDisposed(); + } + public void ballClearanceTableJoinRoom( HttpCallback callback) { + API.get().pdLiveApi(mContext) + .ballClearanceTableJoinRoom() + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(listResponseModel -> { + if (callback != null) { + callback.onSuccess(listResponseModel.getData().getInfo()); + } + }, new Consumer() { + @Override + public void accept(Throwable throwable) throws Exception { + throwable.printStackTrace(); + if (callback != null) { + callback.onError(mContext.getString(R.string.net_error)); + } + } + }).isDisposed(); + } private MultipartBody.Part createUploadFile(File file) { RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file); return MultipartBody.Part.createFormData("file", file.getName(), requestBody); diff --git a/common/src/main/java/com/yunbao/common/manager/RandomSudGameManager.java b/common/src/main/java/com/yunbao/common/manager/RandomSudGameManager.java index 75ffc3a61..26967c320 100644 --- a/common/src/main/java/com/yunbao/common/manager/RandomSudGameManager.java +++ b/common/src/main/java/com/yunbao/common/manager/RandomSudGameManager.java @@ -2,27 +2,40 @@ package com.yunbao.common.manager; import android.app.Dialog; import android.content.Context; +import android.os.Handler; +import android.os.Looper; import android.text.Spannable; import android.text.SpannableString; +import android.text.TextUtils; import android.text.style.ImageSpan; import android.view.View; import com.yunbao.common.R; +import com.yunbao.common.bean.BallClearanceTableJoinRoomBean; import com.yunbao.common.bean.CreateSudRoomModel; +import com.yunbao.common.bean.SudGameRoomInfoBean; import com.yunbao.common.event.CheckCurrencyModel; import com.yunbao.common.event.CheckRemainingBalanceEvent; import com.yunbao.common.http.base.HttpCallback; import com.yunbao.common.http.live.LiveNetManager; import com.yunbao.common.manager.game.AbsRandomGameManager; import com.yunbao.common.manager.game.BilliardsRandomManager; +import com.yunbao.common.sud.QuickStartGameViewModel; import com.yunbao.common.sud.state.SudMGPMGState; import com.yunbao.common.utils.AppManager; import com.yunbao.common.utils.DialogUitl; +import com.yunbao.common.utils.StringUtil; +import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.utils.WordUtil; +import java.util.Locale; + public class RandomSudGameManager { private static RandomSudGameManager manager; private AbsRandomGameManager gameManager; + private CreateSudRoomModel sudRoomModel; + private QuickStartGameViewModel gameViewModel; + private boolean isRandom=false; public static RandomSudGameManager getManager() { if (manager == null) { @@ -35,20 +48,24 @@ public class RandomSudGameManager { } - public void start(CreateSudRoomModel data, boolean isHome) { + public void start(CreateSudRoomModel data, boolean isHome, boolean isRandom) { //TODO 等待五秒调用接口获取可以匹配的玩家 //TODO 五秒内没有玩家就自己创建 - createRoom(data, isHome); + sudRoomModel = data; + this.isRandom = isRandom; + createRoom(data, isHome, isRandom); } - private void createRoom(CreateSudRoomModel data, boolean isHome) { + + private void createRoom(CreateSudRoomModel data, boolean isHome, boolean isRandom) { //TODO 创建房间五秒内没有其他玩家就上AI LiveNetManager.get(AppManager.getInstance().getMainActivity()) .checkCurrency(new HttpCallback() { @Override public void onSuccess(CheckCurrencyModel currencyModel) { gameManager = new BilliardsRandomManager(); - gameManager.onStart(currencyModel, data, isHome); + gameManager.setRandom(isRandom); + gameManager.onStart(currencyModel, data, isHome, isRandom); } @Override @@ -58,12 +75,40 @@ public class RandomSudGameManager { }); } + private void createRoom(Context mContext) { + //name = 三大风扇史蒂夫史蒂夫的房间 sill = 1 currencyType = 4 id = 24 isTicket = true + String userName = IMLoginManager.get(mContext).getUserInfo().getUserNicename(); + String name = WordUtil.isNewZh() ? userName + "的房间 " : userName + "‘s room"; + String sill = "1"; + String currencyType = "4"; + String id = "24"; + LiveNetManager.get(mContext).createSudRoom(name, sill, currencyType, id, true, new HttpCallback() { + @Override + public void onSuccess(CreateSudRoomModel data) { + start(data, true, true); + } + + @Override + public void onError(String error) { + + } + }); + } + public void reset() { if (gameManager != null) { gameManager.reset(); } } + public void destroy() { + if (gameManager != null) { + gameManager.destroy(); + gameManager = null; + } + sudRoomModel = null; + } + /** * 游戏结算 * @@ -133,10 +178,69 @@ public class RandomSudGameManager { public void onInitGame(CreateSudRoomModel mCreateSudRoomModel) { if (gameManager == null) { gameManager = new BilliardsRandomManager(); - gameManager.onStart(null, mCreateSudRoomModel, false); + gameManager.setRandom(isRandom); + gameManager.onStart(null, mCreateSudRoomModel, false, false); } + } public void onGameState(CheckRemainingBalanceEvent event) { + if (gameManager != null) { + gameManager.onGameState(event); + } + } + + public void random(Context mContext) { + LiveNetManager.get(mContext) + .ballClearanceTableJoinRoom(new HttpCallback<>() { + @Override + public void onSuccess(BallClearanceTableJoinRoomBean data) { + if (data != null) { + if ("0".equals(data.getRoom_id()) || StringUtil.isEmpty(data.getRoom_id())) { + createRoom(mContext); + return; + } + check(data); + } + } + + @Override + public void onError(String error) { + ToastUtil.show(error); + } + + private void check(BallClearanceTableJoinRoomBean data) { + LiveNetManager.get(mContext).checkRoomStatus(data.getRoom_id(), new HttpCallback<>() { + @Override + public void onSuccess(CreateSudRoomModel model) { + if (TextUtils.equals(model.getRoomStatus(), "0")) { + if (IMLoginManager.get(mContext).getLocaleLanguage() == Locale.SIMPLIFIED_CHINESE) { + ToastUtil.show("房间不存在"); + } else { + ToastUtil.show("The room does not exist"); + } + } else { + CreateSudRoomModel createSudRoomModel = new CreateSudRoomModel(); + createSudRoomModel.setSudGameId(data.getGameId()); + createSudRoomModel.setSudGameRoomId(data.getRoom_id()); + createSudRoomModel.setRoomName(data.getRoomName()); + start(createSudRoomModel, true, true); + } + } + + @Override + public void onError(String error) { + + } + }); + } + }); + } + + public void setGameViewModel(QuickStartGameViewModel gameViewModel) { + this.gameManager = gameManager; + if (gameManager != null) { + gameManager.setGameViewModel(gameViewModel); + } } } diff --git a/common/src/main/java/com/yunbao/common/manager/game/AbsRandomGameManager.java b/common/src/main/java/com/yunbao/common/manager/game/AbsRandomGameManager.java index 461f1a23c..5a6777457 100644 --- a/common/src/main/java/com/yunbao/common/manager/game/AbsRandomGameManager.java +++ b/common/src/main/java/com/yunbao/common/manager/game/AbsRandomGameManager.java @@ -1,13 +1,44 @@ package com.yunbao.common.manager.game; import com.yunbao.common.bean.CreateSudRoomModel; +import com.yunbao.common.bean.SudGameRoomInfoBean; import com.yunbao.common.event.CheckCurrencyModel; +import com.yunbao.common.event.CheckRemainingBalanceEvent; +import com.yunbao.common.sud.QuickStartGameViewModel; import com.yunbao.common.sud.state.SudMGPMGState; public abstract class AbsRandomGameManager { protected CreateSudRoomModel data; - public abstract void onStart(CheckCurrencyModel currencyModel, CreateSudRoomModel data, boolean isHome); + protected QuickStartGameViewModel gameViewModel; + protected boolean isRandom; + protected boolean isCaptain = false; + + public void setRandom(boolean random) { + isRandom = random; + } + + public void setGameViewModel(QuickStartGameViewModel gameViewModel) { + this.gameViewModel = gameViewModel; + } + + public abstract void onStart(CheckCurrencyModel currencyModel, CreateSudRoomModel data, boolean isHome, boolean isRandom); + public abstract void reset(); + public abstract void onGameMGCommonGameBilliardsHitState(SudMGPMGState.MGCommonGameBilliardsHitState model); - public abstract boolean onGameMGCommonGameSettle(SudMGPMGState.MGCommonGameSettle model) ; + + public abstract boolean onGameMGCommonGameSettle(SudMGPMGState.MGCommonGameSettle model); + + public void onGameState(CheckRemainingBalanceEvent event) { + if (event.getSudMGPMGState().equals(SudMGPMGState.MG_COMMON_PLAYER_CAPTAIN)) { + isCaptain = true; + } + } + + protected int getPlayerSize() { + if (gameViewModel == null) return 0; + return gameViewModel.getSudFSMMGCache().getPlayerInSet().size(); + } + + public abstract void destroy(); } diff --git a/common/src/main/java/com/yunbao/common/manager/game/BilliardsRandomManager.java b/common/src/main/java/com/yunbao/common/manager/game/BilliardsRandomManager.java index 03a490c4c..7bb160290 100644 --- a/common/src/main/java/com/yunbao/common/manager/game/BilliardsRandomManager.java +++ b/common/src/main/java/com/yunbao/common/manager/game/BilliardsRandomManager.java @@ -1,15 +1,28 @@ package com.yunbao.common.manager.game; +import android.os.Handler; +import android.os.Looper; +import android.view.View; +import android.widget.Button; + +import com.blankj.utilcode.util.LogUtils; import com.google.gson.Gson; +import com.lzf.easyfloat.enums.ShowPattern; import com.yunbao.common.R; import com.yunbao.common.bean.BaseModel; import com.yunbao.common.bean.CreateSudRoomModel; +import com.yunbao.common.bean.SudGameAiInfo; +import com.yunbao.common.bean.SudGameRoomInfoBean; +import com.yunbao.common.dialog.DebugDialog; import com.yunbao.common.event.CheckCurrencyModel; import com.yunbao.common.event.CheckRemainingBalanceEvent; import com.yunbao.common.event.LiveSudGamePopupShowOrHideEvent; import com.yunbao.common.http.base.HttpCallback; import com.yunbao.common.http.live.LiveNetManager; +import com.yunbao.common.interfaces.OnItemClickListener; import com.yunbao.common.manager.IMLoginManager; +import com.yunbao.common.manager.RandomSudGameManager; +import com.yunbao.common.sud.QuickStartGameViewModel; import com.yunbao.common.sud.state.SudMGPMGState; import com.yunbao.common.utils.AppManager; import com.yunbao.common.utils.Bus; @@ -22,16 +35,58 @@ public class BilliardsRandomManager extends AbsRandomGameManager { int isOneOverForOther = -1;//对方是否一杆清台 int comboNumberForMy = 0;//自己连杆数 int comboNumberForOther = 0;//对方连杆数 + private SudGameAiInfo aiInfo; + private boolean isAddRobot = true; + private OnItemClickListener onItemClickListener; + + + Handler autoJoinRobotHandler = null; + Runnable autoJoinRobotRunnable = () -> { + if (gameViewModel != null && gameViewModel.getSudFSMMGCache().getPlayerInSet().size() <= 2) { + if (isCaptain) { + onAddAiPlayer(); + } + } + }; + private boolean isInitDebug = true; @Override - public void onStart(CheckCurrencyModel currencyModel, CreateSudRoomModel data, boolean isHome) { + public void onStart(CheckCurrencyModel currencyModel, CreateSudRoomModel data, boolean isHome, boolean isRandom) { this.data = data; if (currencyModel == null) return; if (isHome) { - RouteUtil.forwardSwSudGameActivity(new Gson().toJson(data), true, true); + RouteUtil.forwardSwSudGameActivity(new Gson().toJson(data), true, isRandom, true); } else { Bus.get().post(new LiveSudGamePopupShowOrHideEvent().setType(0).setCreateSudRoomModel(data).setActivityGame(true)); } + if (isInitDebug) { + new Handler(Looper.getMainLooper()) + .postDelayed(() -> { + DebugDialog.getInstance(new DebugDialog.DebugDialogRunnable() { + @Override + public void run(DebugDialog dialog) { + dialog.setShowPattern(ShowPattern.ALL_TIME); + onItemClickListener = (bean, position) -> { + dialog.setParams("AI状态", isAddRobot + ""); + dialog.setParams("清杆状态", isOneOverForMy + ""); + dialog.setParams("连击", comboNumberForMy + ""); + + if (position == -1) { + dialog.setParams("参数", bean); + } + dialog.setView("关闭", new Button(AppManager.getInstance().getMainActivity()), new View.OnClickListener() { + @Override + public void onClick(View v) { + dialog.close(); + } + }); + }; + dialog.show(); + } + }); + }, 300); + } + } @Override @@ -40,13 +95,68 @@ public class BilliardsRandomManager extends AbsRandomGameManager { isOneOverForOther = -1; comboNumberForMy = 0; comboNumberForOther = 0; + if (autoJoinRobotHandler != null) { + autoJoinRobotHandler.removeCallbacks(autoJoinRobotRunnable); + autoJoinRobotHandler = null; + } + aiInfo = null; + if (onItemClickListener != null) + onItemClickListener.onItemClick("", 0); + } + + @Override + public void onGameState(CheckRemainingBalanceEvent event) { + super.onGameState(event); + if (event.getSudMGPMGState().equals(SudMGPMGState.MG_GAME_LOAD_OVER)) { + joinAiRobot(); + } + if (event.getSudMGPMGState().equals(SudMGPMGState.MG_COMMON_PLAYER_IN)) { + LogUtils.e("收到的回调: AI uid = " + getAiUid() + "| kickUid = " + event.getPlayerIn().kickUID); + if (event.getPlayerIn().reason == 1 && aiInfo != null) { + ToastUtil.show("踢掉了AI"); + reset(); + isAddRobot = false; + } else if (event.getPlayerIn().isIn && getPlayerSize() < 2) { + reset(); + joinAiRobot(); + } + } + } + + private String getAiUid() { + if (aiInfo == null) { + return ""; + } + if (aiInfo.getUids().isEmpty()) { + return ""; + } + try { + return aiInfo.getUids().get(0); + } catch (Exception e) { + e.printStackTrace(); + } + return ""; + } + + private void joinAiRobot() { + if (!isAddRobot) return; + if (!isRandom) return; + if(!isCaptain)return; + if (getPlayerSize() == 2) return; + if (autoJoinRobotHandler != null) { + autoJoinRobotHandler.removeCallbacks(autoJoinRobotRunnable); + } + autoJoinRobotHandler = new Handler(Looper.getMainLooper()); + autoJoinRobotHandler.postDelayed(autoJoinRobotRunnable, 5000); + ToastUtil.show("启动定时器准备AI"); } @Override public void onGameMGCommonGameBilliardsHitState(SudMGPMGState.MGCommonGameBilliardsHitState model) { - ToastUtil.show("台球状态:" + model.state); if (Integer.parseInt(model.uid) == IMLoginManager.get(AppManager.getInstance().getMainActivity()).getUserInfo().getId()) { - isOneOverForOther = 0; + if (isOneOverForOther == 1) { + isOneOverForOther = 0; + } if (isOneOverForMy == -1) { isOneOverForMy = 1; } @@ -57,11 +167,17 @@ public class BilliardsRandomManager extends AbsRandomGameManager { comboNumberForMy = model.state; } } + if (onItemClickListener != null) { + onItemClickListener.onItemClick(model.state + "", -1); + } } else { if (isOneOverForMy == 1) { + isOneOverForMy = 0; + } + if (isOneOverForMy == 0) { + isOneOverForMy = 2; onSendNotOneOver(); } - isOneOverForMy = 0; if (isOneOverForOther == -1) { isOneOverForOther = 1; } @@ -73,15 +189,17 @@ public class BilliardsRandomManager extends AbsRandomGameManager { } } } + ToastUtil.show("台球状态:" + model.state + "| uid = " + model.uid + " | " + isOneOverForMy); } @Override public boolean onGameMGCommonGameSettle(SudMGPMGState.MGCommonGameSettle model) { System.out.println("游戏结束 :" + isOneOverForMy + "|" + comboNumberForMy); if (isOneOverForMy == 1 && comboNumberForMy > 1) { - ToastUtil.show("一杆清"); + //ToastUtil.show("一杆清"); + model.achievement = WordUtil.getNewString(R.string.game_dialog_activity_achievements_0); } else if (comboNumberForMy > 0) { - ToastUtil.show("连杆:" + comboNumberForMy); + //ToastUtil.show("连杆:" + comboNumberForMy); switch (comboNumberForMy) { case 1: model.achievement = WordUtil.getNewString(R.string.game_dialog_activity_achievements_1); @@ -106,13 +224,39 @@ public class BilliardsRandomManager extends AbsRandomGameManager { break; } } - Bus.get().post(new CheckRemainingBalanceEvent() + Bus.get().post(new CheckRemainingBalanceEvent(null) .setSudMGPMGState(SudMGPMGState.MG_COMMON_GAME_SETTLE) .setActivityGame(true) .setMgCommonGameSettle(model)); return false; } + @Override + public void destroy() { + isAddRobot = true; + reset(); + } + + public void onAddAiPlayer() { + if (isAddRobot && getPlayerSize() == 1) { + ToastUtil.show("加入AI机器人"); + LiveNetManager.get(AppManager.getInstance().getMainActivity()) + .ballClearanceTableAiAdd(data.getSudGameRoomId(), new HttpCallback<>() { + @Override + public void onSuccess(SudGameAiInfo data) { + if (data != null) { + aiInfo = data; + } + } + + @Override + public void onError(String error) { + + } + }); + } + } + private void onSendNotOneOver() { LiveNetManager.get(AppManager.getInstance().getMainActivity()) .ballClearanceTableStatus(data.getSudGameRoomId(), new HttpCallback() { diff --git a/common/src/main/java/com/yunbao/common/sud/BaseGameViewModel.java b/common/src/main/java/com/yunbao/common/sud/BaseGameViewModel.java index fafae385f..843f4b563 100644 --- a/common/src/main/java/com/yunbao/common/sud/BaseGameViewModel.java +++ b/common/src/main/java/com/yunbao/common/sud/BaseGameViewModel.java @@ -496,7 +496,7 @@ public abstract class BaseGameViewModel implements SudFSMMGListener { public void onGameMGCommonGameSettle(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameSettle model) { LogUtils.e("yqw=====>"+model); if(RandomSudGameManager.getManager().onGameMGCommonGameSettle(model)){ - Bus.get().post(new CheckRemainingBalanceEvent().setSudMGPMGState(SudMGPMGState.MG_COMMON_GAME_SETTLE).setMgCommonGameSettle(model)); + Bus.get().post(new CheckRemainingBalanceEvent(null).setSudMGPMGState(SudMGPMGState.MG_COMMON_GAME_SETTLE).setMgCommonGameSettle(model)); } } diff --git a/common/src/main/java/com/yunbao/common/sud/decorator/SudFSMMGDecorator.java b/common/src/main/java/com/yunbao/common/sud/decorator/SudFSMMGDecorator.java index 2701b0fe8..77a6843cd 100644 --- a/common/src/main/java/com/yunbao/common/sud/decorator/SudFSMMGDecorator.java +++ b/common/src/main/java/com/yunbao/common/sud/decorator/SudFSMMGDecorator.java @@ -82,6 +82,9 @@ public class SudFSMMGDecorator implements ISudFSMMG { if (listener != null) { listener.onGameStarted(); } + Bus.get().post(new CheckRemainingBalanceEvent(null) + .setSudMGPMGState(SudMGPMGState.MG_GAME_LOAD_OVER) + ); } /** @@ -183,7 +186,7 @@ public class SudFSMMGDecorator implements ISudFSMMG { break; case SudMGPMGState.MG_COMMON_SELF_CLICK_JOIN_BTN: // 4. 加入游戏按钮点击状态 SudMGPMGState.MGCommonSelfClickJoinBtn mgCommonSelfClickJoinBtn = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonSelfClickJoinBtn.class); - Bus.get().post(new CheckRemainingBalanceEvent().setSeatIndex(mgCommonSelfClickJoinBtn.seatIndex).setSudMGPMGState(SudMGPMGState.MG_COMMON_SELF_CLICK_JOIN_BTN).setSubReady(false)); + Bus.get().post(new CheckRemainingBalanceEvent(null).setSeatIndex(mgCommonSelfClickJoinBtn.seatIndex).setSudMGPMGState(SudMGPMGState.MG_COMMON_SELF_CLICK_JOIN_BTN).setSubReady(false)); // if (listener == null) { // ISudFSMStateHandleUtils.handleSuccess(handle); // } else { @@ -223,7 +226,7 @@ public class SudFSMMGDecorator implements ISudFSMMG { RandomSudGameManager.getManager().reset(); } }); - Bus.get().post(new CheckRemainingBalanceEvent().setSudMGPMGState(SudMGPMGState.MG_COMMON_SELF_CLICK_START_BTN)); + Bus.get().post(new CheckRemainingBalanceEvent(null).setSudMGPMGState(SudMGPMGState.MG_COMMON_SELF_CLICK_START_BTN)); // if (listener == null) { // ISudFSMStateHandleUtils.handleSuccess(handle); // } else { @@ -243,7 +246,7 @@ public class SudFSMMGDecorator implements ISudFSMMG { SudMGPMGState.MGCommonGameState mgCommonGameState = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonGameState.class); sudFSMMGCache.onGameMGCommonGameState(mgCommonGameState); if (mgCommonGameState.gameState == 2) { - Bus.get().post(new CheckRemainingBalanceEvent().setSudMGPMGState(SudMGPMGState.MG_COMMON_GAME_STATE)); + Bus.get().post(new CheckRemainingBalanceEvent(null).setSudMGPMGState(SudMGPMGState.MG_COMMON_GAME_STATE)); } if (listener == null) { ISudFSMStateHandleUtils.handleSuccess(handle); @@ -266,7 +269,7 @@ public class SudFSMMGDecorator implements ISudFSMMG { // } else { // listener.onGameMGCommonSelfClickGameSettleAgainBtn(handle, mgCommonSelfClickGameSettleAgainBtn); // } - Bus.get().post(new CheckRemainingBalanceEvent().setSudMGPMGState(SudMGPMGState.MG_COMMON_SELF_CLICK_GAME_SETTLE_AGAIN_BTN).setSubReady(false)); + Bus.get().post(new CheckRemainingBalanceEvent(null).setSudMGPMGState(SudMGPMGState.MG_COMMON_SELF_CLICK_GAME_SETTLE_AGAIN_BTN).setSubReady(false)); break; case SudMGPMGState.MG_COMMON_GAME_SOUND_LIST: // 13. 游戏上报游戏中的声音列表(2021-12-30新增,现在只支持碰碰我最强) SudMGPMGState.MGCommonGameSoundList mgCommonGameSoundList = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonGameSoundList.class); @@ -979,6 +982,7 @@ public class SudFSMMGDecorator implements ISudFSMMG { } else { listener.onPlayerMGCommonPlayerIn(handle, userId, mgCommonPlayerIn); } + Bus.get().post(new CheckRemainingBalanceEvent(userId).setSudMGPMGState(SudMGPMGState.MG_COMMON_PLAYER_IN).setPlayerIn(mgCommonPlayerIn)); break; case SudMGPMGState.MG_COMMON_PLAYER_READY: // 2.准备状态(已修改) @@ -998,6 +1002,7 @@ public class SudFSMMGDecorator implements ISudFSMMG { } else { listener.onPlayerMGCommonPlayerCaptain(handle, userId, mgCommonPlayerCaptain); } + Bus.get().post(new CheckRemainingBalanceEvent(userId).setSudMGPMGState(SudMGPMGState.MG_COMMON_PLAYER_CAPTAIN)); break; case SudMGPMGState.MG_COMMON_PLAYER_PLAYING: // 4.游戏状态(已修改) SudMGPMGState.MGCommonPlayerPlaying mgCommonPlayerPlaying = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonPlayerPlaying.class); diff --git a/common/src/main/java/com/yunbao/common/sud/state/SudMGPMGState.java b/common/src/main/java/com/yunbao/common/sud/state/SudMGPMGState.java index 9a8bf0f3c..742f9e8bb 100644 --- a/common/src/main/java/com/yunbao/common/sud/state/SudMGPMGState.java +++ b/common/src/main/java/com/yunbao/common/sud/state/SudMGPMGState.java @@ -17,7 +17,10 @@ import java.util.List; * 参考文档:https://docs.sud.tech/zh-CN/app/Client/MGFSM/ */ public class SudMGPMGState implements Serializable { - + /** + * 自定义的,游戏加载完毕的通知 + */ + public static final String MG_GAME_LOAD_OVER="game_load_over"; // region MG状态机-通用状态-游戏 // 参考文档:https://docs.sud.tech/zh-CN/app/Client/MGFSM/CommonStateGame.html /** @@ -1012,6 +1015,16 @@ public class SudMGPMGState implements Serializable { // 当reason==1时有效;kickUID为踢人的用户uid;判断被踢的人是本人条件(onPlayerStateChange(userId==kickedUID == selfUID);(kickUID默认"",无意义便于处理) public String kickUID; + + @Override + public String toString() { + return "MGCommonPlayerIn{" + + "isIn=" + isIn + + ", teamId=" + teamId + + ", reason=" + reason + + ", kickUID='" + kickUID + '\'' + + '}'; + } } /** diff --git a/common/src/main/java/com/yunbao/common/utils/RouteUtil.java b/common/src/main/java/com/yunbao/common/utils/RouteUtil.java index f17f77096..848f50514 100644 --- a/common/src/main/java/com/yunbao/common/utils/RouteUtil.java +++ b/common/src/main/java/com/yunbao/common/utils/RouteUtil.java @@ -70,10 +70,11 @@ public class RouteUtil { .navigation(); } - public static void forwardSwSudGameActivity(String CreateSudRoom, boolean isActivityGame, boolean isHome) { + public static void forwardSwSudGameActivity(String CreateSudRoom, boolean isActivityGame,boolean isRandomRankUser, boolean isHome) { ARouter.getInstance().build(PATH_SudSwGameActivity) .withString("CreateSudRoom", CreateSudRoom) - .withBoolean("isRandom", isActivityGame) + .withBoolean("isActivity", isActivityGame) + .withBoolean("isRandomRankUser", isRandomRankUser) .withBoolean("CreateIsHome", isHome) .navigation(); } diff --git a/common/src/main/java/com/yunbao/common/views/LiveSudGamePopup.java b/common/src/main/java/com/yunbao/common/views/LiveSudGamePopup.java index 09ff270a1..fbab01fc3 100644 --- a/common/src/main/java/com/yunbao/common/views/LiveSudGamePopup.java +++ b/common/src/main/java/com/yunbao/common/views/LiveSudGamePopup.java @@ -221,7 +221,7 @@ public class LiveSudGamePopup extends BottomPopupView { //加载弹窗监听 sudLoadDialog.setOnDismissListener(() -> { if (sudLoadDialog.getClickStatus() == 2){ - Bus.get().post(new CheckRemainingBalanceEvent().setSudMGPMGState(SudMGPMGState.MG_COMMON_SELF_CLICK_GAME_SETTLE_AGAIN_BTN).setSubReady(false)); + Bus.get().post(new CheckRemainingBalanceEvent(null).setSudMGPMGState(SudMGPMGState.MG_COMMON_SELF_CLICK_GAME_SETTLE_AGAIN_BTN).setSubReady(false)); } }); } diff --git a/common/src/main/java/com/yunbao/common/views/SudGameListViewHolder.java b/common/src/main/java/com/yunbao/common/views/SudGameListViewHolder.java index d6d6a11c6..92af58b23 100644 --- a/common/src/main/java/com/yunbao/common/views/SudGameListViewHolder.java +++ b/common/src/main/java/com/yunbao/common/views/SudGameListViewHolder.java @@ -19,6 +19,7 @@ import com.yunbao.common.CommonAppConfig; import com.yunbao.common.R; import com.yunbao.common.bean.CreateSudRoomModel; import com.yunbao.common.bean.LiveBean; +import com.yunbao.common.bean.SudGameScoreBean; import com.yunbao.common.bean.SudRoomListModel; import com.yunbao.common.event.CheckCurrencyModel; import com.yunbao.common.event.LiveOpenSudRoomEvent; @@ -127,34 +128,34 @@ public class SudGameListViewHolder extends RecyclerView.ViewHolder { Bus.get().post(new SudGameListRefreshEvent()); } else { if (TextUtils.equals(model.getIsActivity(), "1")) { - LiveNetManager.get(itemView.getContext()) - .checkCurrency(new com.yunbao.common.http.base.HttpCallback() { - @Override - public void onSuccess(CheckCurrencyModel currencyModel) { - if (currencyModel.getZqTicketNumberInt() < 1) { - RandomSudGameManager.getManager().showNotActivityTicketDialog(itemView.getContext(), true, new DialogUitl.SimpleCallback2() { - @Override - public void onCancelClick() { - toGame(model, isHome, currencyModel,true); - } + LiveNetManager.get(mAvatar.getContext()) + .getScore(model.getSudGameRoomId(), new com.yunbao.common.http.base.HttpCallback() { + @Override + public void onSuccess(SudGameScoreBean data) { + if(data.getGolden_bean_remaining_balance()!=1){ + RandomSudGameManager.getManager().showNotActivityTicketDialog(itemView.getContext(), true, new DialogUitl.SimpleCallback2() { + @Override + public void onCancelClick() { + toGame(model, isHome, true); + } - @Override - public void onConfirmClick(Dialog dialog, String content) { + @Override + public void onConfirmClick(Dialog dialog, String content) { - } - }); - return; - } - toGame(model, isHome, currencyModel,true); - } + } + }); + return; + } + toGame(model, isHome, true); + } - @Override - public void onError(String error) { + @Override + public void onError(String error) { - } - }); + } + }); } else { - toGame(model, isHome, null,false); + toGame(model, isHome, false); } } } @@ -170,7 +171,7 @@ public class SudGameListViewHolder extends RecyclerView.ViewHolder { }); } - private void toGame(SudRoomListModel model, boolean isHome, CheckCurrencyModel currencyModel,boolean isActivity) { + private void toGame(SudRoomListModel model, boolean isHome,boolean isActivity) { CreateSudRoomModel createSudRoomModel = new CreateSudRoomModel(); @@ -182,7 +183,7 @@ public class SudGameListViewHolder extends RecyclerView.ViewHolder { if (isHome) { if (TextUtils.equals(model.getLiveUid(), "0")) { if (CommonAppConfig.getInstance().getConfig().isSw()) { - RouteUtil.forwardSwSudGameActivity(new Gson().toJson(createSudRoomModel), isActivity, isHome); + RouteUtil.forwardSwSudGameActivity(new Gson().toJson(createSudRoomModel), isActivity,false, isHome); } else { RouteUtil.forwardRySudGameActivity(new Gson().toJson(createSudRoomModel), true, isHome); } @@ -234,7 +235,7 @@ public class SudGameListViewHolder extends RecyclerView.ViewHolder { @Override public void onCancel() { if (CommonAppConfig.getInstance().getConfig().isSw()) { - RouteUtil.forwardSwSudGameActivity(new Gson().toJson(createSudRoomModel), true, isHome); + RouteUtil.forwardSwSudGameActivity(new Gson().toJson(createSudRoomModel), true,false, isHome); } else { RouteUtil.forwardRySudGameActivity(new Gson().toJson(createSudRoomModel), true, isHome); } diff --git a/common/src/main/res/layout/dialog_sub_double.xml b/common/src/main/res/layout/dialog_sub_double.xml index 5373e212f..bc1385037 100644 --- a/common/src/main/res/layout/dialog_sub_double.xml +++ b/common/src/main/res/layout/dialog_sub_double.xml @@ -222,6 +222,7 @@ + android:layout_height="wrap_content" + android:gravity="center_horizontal" + android:orientation="vertical"> + android:layout_marginTop="16dp" + android:src="@mipmap/sud_load_zh" /> + android:layout_height="100dp" + android:layout_marginTop="19dp"> + android:indeterminateDuration="500" + android:visibility="gone" /> + android:indeterminateDuration="500" /> + + android:gravity="center_vertical" + android:orientation="horizontal"> + android:src="@mipmap/sud_load_skip_zh" /> + android:src="@mipmap/sub_again_zh" /> diff --git a/common/src/main/res/values-zh/strings.xml b/common/src/main/res/values-zh/strings.xml index 2d5e7012b..5078aa0e2 100644 --- a/common/src/main/res/values-zh/strings.xml +++ b/common/src/main/res/values-zh/strings.xml @@ -1547,6 +1547,7 @@ 處罰時間: 門票 挑戰一桿清台,瓜分高額獎金 + 結算超時,請前往活動頁面查看本局結果 恭喜您本局完成 一桿清台 1連桿 diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index cb819fbf7..e8a7455d8 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -1556,6 +1556,7 @@ Penalty time: Ticket Challenge One-shot clearance Share high bonuses + Settlement timed out. Please check the result on the event page Your office has completed One-shotclearance 1 Combo diff --git a/live/src/main/java/com/yunbao/live/activity/SudRyGameActivity.java b/live/src/main/java/com/yunbao/live/activity/SudRyGameActivity.java index ce3a11f0e..a52fbae04 100644 --- a/live/src/main/java/com/yunbao/live/activity/SudRyGameActivity.java +++ b/live/src/main/java/com/yunbao/live/activity/SudRyGameActivity.java @@ -487,7 +487,7 @@ public class SudRyGameActivity extends AbsActivity implements GameRyMicManager.M //加载弹窗监听 sudLoadDialog.setOnDismissListener(() -> { if (sudLoadDialog.getClickStatus() == 2){ - Bus.get().post(new CheckRemainingBalanceEvent().setSudMGPMGState(SudMGPMGState.MG_COMMON_SELF_CLICK_GAME_SETTLE_AGAIN_BTN).setSubReady(false)); + Bus.get().post(new CheckRemainingBalanceEvent(null).setSudMGPMGState(SudMGPMGState.MG_COMMON_SELF_CLICK_GAME_SETTLE_AGAIN_BTN).setSubReady(false)); } }); } diff --git a/live/src/main/java/com/yunbao/live/activity/SudSwGameActivity.java b/live/src/main/java/com/yunbao/live/activity/SudSwGameActivity.java index 0fbd5ac34..5174ec1e5 100644 --- a/live/src/main/java/com/yunbao/live/activity/SudSwGameActivity.java +++ b/live/src/main/java/com/yunbao/live/activity/SudSwGameActivity.java @@ -265,16 +265,20 @@ public class SudSwGameActivity extends AbsActivity implements GameSwMicManager.M } private boolean isActivityGame; + private boolean isRandomRankUser; private void initView() { - isActivityGame = getIntent().getBooleanExtra("isRandom", false); + isActivityGame = getIntent().getBooleanExtra("isActivity", false); + isRandomRankUser = getIntent().getBooleanExtra("isRandomRankUser", false); String createSudRoomJson = getIntent().getStringExtra("CreateSudRoom"); mCreateSudRoomModel = new Gson().fromJson(createSudRoomJson, CreateSudRoomModel.class); mInteractionID = mCreateSudRoomModel.getLongSudGameId(); mLiveUid = mCreateSudRoomModel.getSudGameRoomId(); //第二次进入时,viewmodel数据丢失,所以初始化时直接获取 gameViewModel.getScore(mCreateSudRoomModel.getSudGameRoomId(), mContext); - + if(isActivityGame){ + RandomSudGameManager.getManager().setGameViewModel(gameViewModel); + } gameContainer = findViewById(R.id.game_container); roomName = findViewById(R.id.room_name); roomNumber = findViewById(R.id.room_number); @@ -525,6 +529,7 @@ public class SudSwGameActivity extends AbsActivity implements GameSwMicManager.M sudLoadDialog = new SudLoadDialog(this);//加载弹窗 if (isActivityGame) { sudGameDoubleDialog.setActivityGame(); + sudLoadDialog.setActivityGame(); } //游戏结算结束 gameViewModel.listMutableLiveData.observe(this, sudSettleBeans -> { @@ -546,7 +551,7 @@ public class SudSwGameActivity extends AbsActivity implements GameSwMicManager.M //加载弹窗消失监听,自动消失和点击跳过在这个监听中都不做处理 sudLoadDialog.setOnDismissListener(() -> { if (sudLoadDialog.getClickStatus() == 2) { - Bus.get().post(new CheckRemainingBalanceEvent().setSudMGPMGState(SudMGPMGState.MG_COMMON_SELF_CLICK_GAME_SETTLE_AGAIN_BTN).setSubReady(false)); + Bus.get().post(new CheckRemainingBalanceEvent(null).setSudMGPMGState(SudMGPMGState.MG_COMMON_SELF_CLICK_GAME_SETTLE_AGAIN_BTN).setSubReady(false)); } }); //通知活动游戏 @@ -557,6 +562,7 @@ public class SudSwGameActivity extends AbsActivity implements GameSwMicManager.M @Subscribe(threadMode = ThreadMode.MAIN) public void onCheckRemainingBalanceEvent(CheckRemainingBalanceEvent event) { + LogUtils.e("收到的回调:"+event.getSudMGPMGState()+"|"+event.getPlayerIn()); if (isActivityGame) { RandomSudGameManager.getManager().onGameState(event); } @@ -605,10 +611,10 @@ public class SudSwGameActivity extends AbsActivity implements GameSwMicManager.M @Override public void onSuccess(List infoBean) { if (!infoBean.isEmpty()) { - System.out.println("结算,是否为游戏活动:"+isActivityGame); - if(isActivityGame) { + System.out.println("结算,是否为游戏活动:" + isActivityGame); + if (isActivityGame) { loadScore(infoBean, 3); - }else{ + } else { gameViewModel.setSudGameInfoBeanList(infoBean); gameViewModel.sudGameRank(event.getMgCommonGameSettle(null));//结算游戏 } @@ -617,8 +623,8 @@ public class SudSwGameActivity extends AbsActivity implements GameSwMicManager.M } } - private void loadScore(List infoBean,int index) { - if(index==0){ + private void loadScore(List infoBean, int index) { + if (index == 0) { return; } LiveNetManager.get(mContext) @@ -627,7 +633,7 @@ public class SudSwGameActivity extends AbsActivity implements GameSwMicManager.M public void onSuccess(List data) { if (data.isEmpty()) { new Handler(Looper.getMainLooper()).postDelayed(() -> { - loadScore(infoBean,index-1); + loadScore(infoBean, index - 1); }, 300); return; } @@ -670,9 +676,16 @@ public class SudSwGameActivity extends AbsActivity implements GameSwMicManager.M case SudMGPMGState.MG_COMMON_GAME_STATE: LiveNetManager.get(mContext).deductMoney(mCreateSudRoomModel.getSudGameRoomId()); break; + case SudMGPMGState.MG_GAME_LOAD_OVER: + if(isActivityGame&&isRandomRankUser) { + gameViewModel.sudFSTAPPDecorator.notifyAPPCommonSelfIn(true, -1, true, 1); + gameViewModel.sudFSTAPPDecorator.notifyAPPCommonSelfReady(true); + } + break; } } + @Override public void onJoinRoomSuccess(RCRTCRoom rcrtcRoom) { LiveNetManager.get(mContext).getRoomMicData(mLiveUid, new HttpCallback>() { diff --git a/main/src/main/java/com/yunbao/main/views/MainHomeViewHolder.java b/main/src/main/java/com/yunbao/main/views/MainHomeViewHolder.java index 378690fe4..c4f01349f 100644 --- a/main/src/main/java/com/yunbao/main/views/MainHomeViewHolder.java +++ b/main/src/main/java/com/yunbao/main/views/MainHomeViewHolder.java @@ -15,6 +15,7 @@ import com.lxj.xpopup.XPopup; import com.lxj.xpopup.core.BottomPopupView; import com.yunbao.common.dialog.GiftWallDialog; import com.yunbao.common.manager.IMLoginManager; +import com.yunbao.common.manager.RandomSudGameManager; import com.yunbao.common.utils.AppManager; import com.yunbao.common.utils.MobclickAgent; import com.yunbao.common.activity.AbsActivity; @@ -71,7 +72,8 @@ public class MainHomeViewHolder extends AbsMainHomeParentViewHolder { /* new GiftWallDialog(mContext, IMLoginManager.get(mContext).getUserInfo().getId() + "", IMLoginManager.get(mContext).getUserInfo().getUserNicename(), null , false).setFullWindows(true).setTab2(true).showDialog();*/ - RouteUtil.forwardBattlePass(); + // RouteUtil.forwardBattlePass(); + RandomSudGameManager.getManager().random(mContext); } }); return true;