diff --git a/common/src/main/java/com/yunbao/common/bean/IMLoginModel.java b/common/src/main/java/com/yunbao/common/bean/IMLoginModel.java index c011a5a67..5d170c276 100644 --- a/common/src/main/java/com/yunbao/common/bean/IMLoginModel.java +++ b/common/src/main/java/com/yunbao/common/bean/IMLoginModel.java @@ -493,6 +493,9 @@ public class IMLoginModel extends BaseModel { public long getId() { return id; } + public String getUid(){ + return id+""; + } public IMLoginModel setId(long id) { this.id = id; diff --git a/common/src/main/java/com/yunbao/common/bean/SudActivityGameInfoBean.java b/common/src/main/java/com/yunbao/common/bean/SudActivityGameInfoBean.java new file mode 100644 index 000000000..a3e3324d4 --- /dev/null +++ b/common/src/main/java/com/yunbao/common/bean/SudActivityGameInfoBean.java @@ -0,0 +1,58 @@ +package com.yunbao.common.bean; + +public class SudActivityGameInfoBean extends BaseModel { + private int id; + private int uid;//用户id + private int userType;//用户类型 1.主播 2.用户 + private int score;//对局获得的积分 + private int hot_num;//对局获得的热度 + private int is_win;//对局结果 0.无结果 1.输 2.赢 3.平局 + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public int getUid() { + return uid; + } + + public void setUid(int uid) { + this.uid = uid; + } + + public int getUserType() { + return userType; + } + + public void setUserType(int userType) { + this.userType = userType; + } + + public int getScore() { + return score; + } + + public void setScore(int score) { + this.score = score; + } + + public int getHot_num() { + return hot_num; + } + + public void setHot_num(int hot_num) { + this.hot_num = hot_num; + } + + public int getIs_win() { + return is_win; + } + + public void setIs_win(int is_win) { + this.is_win = is_win; + } +} diff --git a/common/src/main/java/com/yunbao/common/bean/SudRoomListModel.java b/common/src/main/java/com/yunbao/common/bean/SudRoomListModel.java index 5960592e5..1ce36dc9d 100644 --- a/common/src/main/java/com/yunbao/common/bean/SudRoomListModel.java +++ b/common/src/main/java/com/yunbao/common/bean/SudRoomListModel.java @@ -44,6 +44,16 @@ public class SudRoomListModel extends BaseModel { private String sudgameicon; @SerializedName("currency_type") private String currencyType; + @SerializedName("is_activity") + private String isActivity; + + public String getIsActivity() { + return isActivity; + } + + public void setIsActivity(String isActivity) { + this.isActivity = isActivity; + } public String getCurrencyType() { return currencyType; 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 d4abdd05e..ed824ecec 100644 --- a/common/src/main/java/com/yunbao/common/dialog/CreateSudGamePopup.java +++ b/common/src/main/java/com/yunbao/common/dialog/CreateSudGamePopup.java @@ -3,11 +3,16 @@ package com.yunbao.common.dialog; import static androidx.core.content.ContextCompat.getSystemService; import android.animation.ObjectAnimator; +import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.os.Handler; +import android.text.Spannable; +import android.text.SpannableString; import android.text.TextUtils; +import android.text.style.ImageSpan; +import android.view.View; import android.view.animation.LinearInterpolator; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; @@ -32,7 +37,9 @@ import com.yunbao.common.event.SudGameListDissMissEvent; import com.yunbao.common.http.base.HttpCallback; import com.yunbao.common.http.live.LiveNetManager; import com.yunbao.common.manager.IMLoginManager; +import com.yunbao.common.manager.RandomSudGameManager; import com.yunbao.common.utils.Bus; +import com.yunbao.common.utils.DialogUitl; import com.yunbao.common.utils.RouteUtil; import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.utils.WordUtil; @@ -95,6 +102,7 @@ public class CreateSudGamePopup extends BottomPopupView { private String userName; private boolean isYuanbao; + private CheckCurrencyModel currencyModel; private void initDate() { currencyTypeName = getContext().getString(R.string.golden_bean); @@ -108,6 +116,7 @@ public class CreateSudGamePopup extends BottomPopupView { @Override public void onSuccess(CheckCurrencyModel data) { isYuanbao = TextUtils.equals(data.getIsYuanbao(), "1") || TextUtils.equals(data.getIsYuanbao(), "true"); + currencyModel = data; } @Override @@ -213,7 +222,8 @@ public class CreateSudGamePopup extends BottomPopupView { ToastUtil.show("貨幣數量区间为[10 - 1000]"); } else { ToastUtil.show("Currency quantity range [10-1000]"); - } } + } + } return; } @@ -245,7 +255,7 @@ public class CreateSudGamePopup extends BottomPopupView { return; } } - } else { + } else if(!TextUtils.equals(currencyType, "4")){ if (sill.length() > 4) { if (IMLoginManager.get(getContext()).getLocaleLanguage() == Locale.SIMPLIFIED_CHINESE) { ToastUtil.show("貨幣數量区间为[10 - 1000]"); @@ -274,17 +284,28 @@ public class CreateSudGamePopup extends BottomPopupView { } } - + if (TextUtils.equals(currencyType, "4") && currencyModel.getZqTicketNumberInt() < 1) { + RandomSudGameManager.getManager().showNotActivityTicketDialog(getContext()); + return; + } LiveNetManager.get(getContext()) - .createSudRoom(name, sill, currencyType, id, new HttpCallback() { + .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); + dialog.dismiss(); + if(!isHome){ + Bus.get().post(new SudGameListDissMissEvent()); + } + return; + } if (isHome) { dialog.dismiss(); - if(CommonAppConfig.getInstance().getConfig().isSw()){ - RouteUtil.forwardSwSudGameActivity(new Gson().toJson(data),true,isHome); - }else{ - RouteUtil.forwardRySudGameActivity(new Gson().toJson(data),true,isHome); + if (CommonAppConfig.getInstance().getConfig().isSw()) { + RouteUtil.forwardSwSudGameActivity(new Gson().toJson(data), false, isHome); + } else { + RouteUtil.forwardRySudGameActivity(new Gson().toJson(data), true, isHome); } } else { Bus.get().post(new LiveSudGamePopupShowOrHideEvent().setType(0).setCreateSudRoomModel(data)); @@ -299,6 +320,15 @@ public class CreateSudGamePopup extends BottomPopupView { public void onError(String error) { ToastUtil.show(error); } + + @Override + public void onError(String error, int code) { + if (code != 501) { + super.onError(error, code); + } else { + RandomSudGameManager.getManager().showNotActivityTicketDialog(getContext()); + } + } }); } }); @@ -332,7 +362,7 @@ public class CreateSudGamePopup extends BottomPopupView { .isDestroyOnDismiss(true) .isLightStatusBar(false) .popupPosition(PopupPosition.Bottom) - .asCustom(new SudGameListSelectPopup(getContext(), 5, currencyTypeName,isYuanbao) + .asCustom(new SudGameListSelectPopup(getContext(), 5, currencyTypeName, isYuanbao, id, currencyModel) .setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { @@ -343,13 +373,13 @@ public class CreateSudGamePopup extends BottomPopupView { .show(); } }, 500); - }else { + } else { XPopup.Builder builder = new XPopup.Builder(getContext()).atView(findViewById(R.id.currency_type)); builder.hasShadowBg(false) .isDestroyOnDismiss(true) .isLightStatusBar(false) .popupPosition(PopupPosition.Bottom) - .asCustom(new SudGameListSelectPopup(getContext(), 5, currencyTypeName,isYuanbao) + .asCustom(new SudGameListSelectPopup(getContext(), 5, currencyTypeName, isYuanbao, id, currencyModel) .setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { @@ -361,11 +391,12 @@ public class CreateSudGamePopup extends BottomPopupView { } - } }); } + + private void closeAnimSudGameListEvent() { ObjectAnimator animator = ObjectAnimator.ofFloat(roomGameArrow, "rotation", 90f, 0f); animator.setDuration(animDuration); @@ -384,7 +415,8 @@ public class CreateSudGamePopup extends BottomPopupView { interactionID = event.getInteractionID(); createGameType.setText(event.getTitle()); id = event.getId(); - + gameSill.setEnabled(true); + gameSill.setText(""); } @Subscribe(threadMode = ThreadMode.MAIN) @@ -397,5 +429,12 @@ public class CreateSudGamePopup extends BottomPopupView { } else { gameSill.setHint(WordUtil.isNewZh() ? "請輸入貨幣數量" : "Please enter the amount of currency"); } + if(TextUtils.equals(currencyType,"4")){ + gameSill.setText("1"); + gameSill.setEnabled(false); + }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 e79374df3..d24e2daf0 100644 --- a/common/src/main/java/com/yunbao/common/dialog/SudGameDoubleDialog.java +++ b/common/src/main/java/com/yunbao/common/dialog/SudGameDoubleDialog.java @@ -2,8 +2,14 @@ package com.yunbao.common.dialog; import android.annotation.SuppressLint; import android.content.Context; +import android.graphics.Color; import android.os.CountDownTimer; +import android.text.SpannableString; +import android.text.Spanned; +import android.text.style.ForegroundColorSpan; import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.widget.AppCompatImageView; @@ -14,36 +20,46 @@ import com.lxj.xpopup.XPopup; import com.makeramen.roundedimageview.RoundedImageView; import com.yunbao.common.CommonAppConfig; import com.yunbao.common.R; +import com.yunbao.common.bean.SudActivityGameInfoBean; import com.yunbao.common.bean.SudSettleBean; import com.yunbao.common.event.CheckRemainingBalanceEvent; import com.yunbao.common.glide.ImgLoader; +import com.yunbao.common.manager.IMLoginManager; import com.yunbao.common.sud.state.SudMGPMGState; import com.yunbao.common.utils.Bus; +import com.yunbao.common.utils.StringUtil; +import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.utils.WordUtil; import java.util.ArrayList; import java.util.Collections; -import java.util.Comparator; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Objects; /** * 双人小游戏结算弹窗 */ -public class SudGameDoubleDialog extends AbsDialogCenterPopupWindow{ +public class SudGameDoubleDialog extends AbsDialogCenterPopupWindow { public SudGameDoubleDialog(@NonNull Context context) { super(context); } + @Override public int bindLayoutId() { return R.layout.dialog_sub_double; } - private AppCompatImageView sub_win_hat,sub_leave,sub_again,sub_title; - private RoundedImageView sub_win_head,sub_loss_head; - private AppCompatTextView sub_win_name,sub_win_score,sub_loss_name,sub_loss_score,sub_time; + private AppCompatImageView sub_win_hat, sub_leave, sub_again, sub_title; + private RoundedImageView sub_win_head, sub_loss_head; + private AppCompatTextView sub_win_name, sub_win_score, sub_loss_name, sub_loss_score, sub_time; private CountDownTimer countDownTimer; + private TextView activityGameAchievement; + private ImageView lossActivityIcon, winActivityIcon; private List settleBeans = new ArrayList<>(); private boolean containMe; + private boolean isActivityGame; @Override public void buildDialog(XPopup.Builder builder) { @@ -64,20 +80,22 @@ public class SudGameDoubleDialog extends AbsDialogCenterPopupWindow{ sub_loss_name = findViewById(R.id.sub_loss_name);//失败方昵称 sub_loss_score = findViewById(R.id.sub_loss_score);//失败方分数 sub_time = findViewById(R.id.sub_time);//关闭倒计时 - + lossActivityIcon = findViewById(R.id.lossActivityIcon); + winActivityIcon = findViewById(R.id.winActivityIcon); + activityGameAchievement = findViewById(R.id.activityGameAchievement); initData(); - if (WordUtil.isNewZh()){ + if (WordUtil.isNewZh()) { sub_leave.setImageResource(R.mipmap.sub_leave_zh); sub_again.setImageResource(R.mipmap.sub_again_zh); - }else { + } else { sub_leave.setImageResource(R.mipmap.sub_leave_en); sub_again.setImageResource(R.mipmap.sub_again_en); } - sub_leave.setOnClickListener(v-> destroyDialog()); - sub_again.setOnClickListener(v-> { + 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)); destroyDialog(); }); @@ -86,30 +104,47 @@ public class SudGameDoubleDialog extends AbsDialogCenterPopupWindow{ @SuppressLint("SetTextI18n") private void initData() { - if (settleBeans.size() == 2){ + if (settleBeans.size() == 2) { sortByWinNum(settleBeans); SudSettleBean sudSettleBean1 = settleBeans.get(0); // 第一名 SudSettleBean sudSettleBean2 = settleBeans.get(1); // 第二名 - checkMe(sudSettleBean1.getUid(),sudSettleBean2.getUid());//判断这场对局是不是包含自己 - + checkMe(sudSettleBean1.getUid(), sudSettleBean2.getUid());//判断这场对局是不是包含自己 + LogUtils.e("第一名:" + sudSettleBean1.getNick_name()); + LogUtils.e("第二名:" + sudSettleBean2.getNick_name()); // 检查是否是当前用户 boolean isFirstMe = CommonAppConfig.getInstance().getUid().equals(sudSettleBean1.getUid()); boolean isDraw = sudSettleBean1.getWin_num() == sudSettleBean2.getWin_num(); boolean isZh = WordUtil.isNewZh(); - + LogUtils.e("isFirstMe:" + isFirstMe); if (containMe) { // 当前用户在游戏中 - SudSettleBean winBean = isFirstMe ? sudSettleBean1 : sudSettleBean2; - SudSettleBean lossBean = isFirstMe ? sudSettleBean2 : sudSettleBean1; + // SudSettleBean winBean = isFirstMe ? sudSettleBean1 : sudSettleBean2; + // SudSettleBean lossBean = isFirstMe ? sudSettleBean2 : sudSettleBean1; + SudSettleBean winBean= sudSettleBean1; + SudSettleBean lossBean= sudSettleBean2; + + if (isActivityGame) { + Map map = showActivityGameScore(); + if (!map.isEmpty()) { + isDraw = map.get("win").intValue() == map.get("loss").intValue(); + isFirstMe = IMLoginManager.get(mContext).getUserInfo().getUid().equals(String.valueOf(map.get("win_uid"))); + if (lossBean.getUid().equals(map.get("win_uid").toString())) { + SudSettleBean tmp = lossBean; + lossBean = winBean; + winBean = tmp; + } + } + ToastUtil.show("结算:" + isDraw + " | " + isFirstMe + "|"); + } else { + sub_win_score.setText(winBean.getWin_num() > 0 ? "+" + winBean.getWin_num() : String.valueOf(winBean.getWin_num())); + sub_loss_score.setText(String.valueOf(lossBean.getWin_num())); + System.out.println("胜者名字:" + winBean.getNick_name() + "|败者名字:" + lossBean.getNick_name()); + } ImgLoader.display(mContext, winBean.getAvatar_url(), sub_win_head); ImgLoader.display(mContext, lossBean.getAvatar_url(), sub_loss_head); sub_win_name.setText(winBean.getNick_name()); sub_loss_name.setText(lossBean.getNick_name()); - - sub_win_score.setText(winBean.getWin_num() > 0 ? "+" + winBean.getWin_num() : String.valueOf(winBean.getWin_num())); - sub_loss_score.setText(String.valueOf(lossBean.getWin_num())); - if (isDraw) { // 平局 sub_title.setImageResource(isZh ? R.mipmap.sub_draw_zh : R.mipmap.sub_draw_en); @@ -140,9 +175,40 @@ public class SudGameDoubleDialog extends AbsDialogCenterPopupWindow{ } } } + System.out.println("是否为活动游戏" + isActivityGame + " 成就内容:" + gameSettle.achievement); + if (isActivityGame) { + //TODO 败者没显示成就 + if (!StringUtil.isEmpty(gameSettle.achievement)) { + String activityGameAchievementText = WordUtil.getNewString(R.string.game_dialog_activity_achievements_title); + String activityGameAchievementContent = gameSettle.achievement; + activityGameAchievement.setVisibility(View.VISIBLE); + SpannableString ss = new SpannableString(activityGameAchievementText + activityGameAchievementContent); + ss.setSpan(new ForegroundColorSpan(Color.parseColor("#FFBA6A")), activityGameAchievementText.length(), ss.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + activityGameAchievement.setText(ss); + } + lossActivityIcon.setVisibility(View.VISIBLE); + winActivityIcon.setVisibility(View.VISIBLE); + } } - private void checkMe(String id1,String id2){ + @SuppressLint("SetTextI18n") + private Map showActivityGameScore() { + Map map = new HashMap<>(); + if (gameSettle.activityGameInfoBean == null) return map; + for (SudActivityGameInfoBean infoBean : gameSettle.activityGameInfoBean) { + if (infoBean.getIs_win() == 1) { + sub_loss_score.setText("+" + infoBean.getScore()); + map.put("loss", infoBean.getScore()); + } else if (infoBean.getIs_win() == 2) { + sub_win_score.setText("+" + infoBean.getScore()); + map.put("win", infoBean.getScore()); + map.put("win_uid", infoBean.getUid()); + } + } + return map; + } + + private void checkMe(String id1, String id2) { containMe = CommonAppConfig.getInstance().getUid().equals(id1) || CommonAppConfig.getInstance().getUid().equals(id2); } @@ -150,11 +216,11 @@ public class SudGameDoubleDialog extends AbsDialogCenterPopupWindow{ protected void onShow() { super.onShow(); //关闭倒计时 - countDownTimer = new CountDownTimer(10000, 1000){ + countDownTimer = new CountDownTimer(140000, 1000) { @Override public void onTick(long l) { - sub_time.setText(String.valueOf((l+500)/1000)); + sub_time.setText(String.valueOf((l + 500) / 1000)); } @Override @@ -165,23 +231,30 @@ public class SudGameDoubleDialog extends AbsDialogCenterPopupWindow{ initData(); } - public void setSudSettleList(List data){ + SudMGPMGState.MGCommonGameSettle gameSettle; + + public void setSudSettleList(SudMGPMGState.MGCommonGameSettle data) { + gameSettle = data; settleBeans.clear(); - settleBeans.addAll(data); - LogUtils.e("yqw=====>"+settleBeans); + settleBeans.addAll(data.sudSettleBeans); + LogUtils.e("yqw=====>" + settleBeans); } - private void sortByWinNum(List list){ + private void sortByWinNum(List list) { // 按照胜利数排序 settleBeans 列表 Collections.sort(list, (bean1, bean2) -> { return Integer.compare(bean2.getWin_num(), bean1.getWin_num()); // 从大到小排序 }); + LogUtils.e("排序后=====>" + settleBeans); } - private void destroyDialog(){ + private void destroyDialog() { dismiss(); countDownTimer.cancel(); countDownTimer = null; } + public void setActivityGame() { + isActivityGame = true; + } } diff --git a/common/src/main/java/com/yunbao/common/dialog/SudGameListSelectPopup.java b/common/src/main/java/com/yunbao/common/dialog/SudGameListSelectPopup.java index fbca07bed..076400c04 100644 --- a/common/src/main/java/com/yunbao/common/dialog/SudGameListSelectPopup.java +++ b/common/src/main/java/com/yunbao/common/dialog/SudGameListSelectPopup.java @@ -13,6 +13,7 @@ import com.lxj.xpopup.core.AttachPopupView; import com.yunbao.common.R; import com.yunbao.common.adapter.SudTitleSelectAdapter; import com.yunbao.common.bean.CustomSidebarChildModel; +import com.yunbao.common.event.CheckCurrencyModel; import com.yunbao.common.event.CreateSudGameEvent; import com.yunbao.common.event.CurrencyTypeEvent; import com.yunbao.common.event.LiveSudGameHistoryEvent; @@ -21,6 +22,7 @@ import com.yunbao.common.event.SudGameListEvent; import com.yunbao.common.event.SudGameListSillEvent; import com.yunbao.common.manager.IMLoginManager; import com.yunbao.common.utils.Bus; +import com.yunbao.common.utils.WordUtil; import com.yunbao.common.views.weight.ViewClicksAntiShake; import java.util.ArrayList; @@ -42,6 +44,8 @@ public class SudGameListSelectPopup extends AttachPopupView { private DialogInterface.OnDismissListener onDismissListener; private String mSill; private boolean isYuanbao; + private String gameId = null; + private CheckCurrencyModel currencyModel = null; public SudGameListSelectPopup(@NonNull Context context, int type, List child, long interactionID) { super(context); @@ -68,6 +72,15 @@ public class SudGameListSelectPopup extends AttachPopupView { this.isYuanbao = isYuanbao; } + public SudGameListSelectPopup(@NonNull Context context, int mType, String sill, boolean isYuanbao, String gameId, CheckCurrencyModel data) { + super(context); + this.mType = mType; + mSill = sill; + this.isYuanbao = isYuanbao; + this.gameId = gameId; + this.currencyModel = data; + } + public SudGameListSelectPopup(@NonNull Context context, String sill, List child) { super(context); this.mType = 8; @@ -160,7 +173,8 @@ public class SudGameListSelectPopup extends AttachPopupView { dialog.dismiss(); } }); - } else if (mType == 2) { + } + else if (mType == 2) { selectString.add(getContext().getString(R.string.interactive_game_create_unlimited)); selectString.add(getContext().getString(R.string.live_anchor)); selectString.add(getContext().getString(R.string.interactive_game_player)); @@ -195,6 +209,10 @@ public class SudGameListSelectPopup extends AttachPopupView { if (isYuanbao) { selectSill.put(getContext().getString(R.string.coins), "2"); } + if (currencyModel != null && currencyModel.isActivityGame(gameId)) { + selectString.add(WordUtil.getNewString(R.string.game_create_coid_ticket)); + selectSill.put(WordUtil.getNewString(R.string.game_create_coid_ticket), "4"); + } index = 0; for (int i = 0; i < selectString.size(); i++) { @@ -247,7 +265,8 @@ public class SudGameListSelectPopup extends AttachPopupView { } } }); - } else if (mType == 7) { + } + else if (mType == 7) { selectString.add(getContext().getString(R.string.interactive_game_create_unlimited)); selectString.add(getContext().getString(R.string.sud_in_game_game_game_peer_today)); selectString.add(getContext().getString(R.string.sud_in_game_game_game_peer_today_7)); @@ -278,7 +297,8 @@ public class SudGameListSelectPopup extends AttachPopupView { } } }); - } else if (mType == 8) { + } + else if (mType == 8) { selectString.add(getContext().getString(R.string.interactive_game_create_unlimited)); selectSill.put(getContext().getString(R.string.interactive_game_create_unlimited), "0"); for (int i = 0; i < customSidebarChildModels.size(); i++) { 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 3ad4d68db..d4426e0be 100644 --- a/common/src/main/java/com/yunbao/common/dialog/SudGameMultipleDialog.java +++ b/common/src/main/java/com/yunbao/common/dialog/SudGameMultipleDialog.java @@ -97,9 +97,9 @@ public class SudGameMultipleDialog extends AbsDialogCenterPopupWindow{ // limitItem(); } - public void setSudSettleList(List data){ + public void setSudSettleList(SudMGPMGState.MGCommonGameSettle data){ settleBeans.clear(); - settleBeans.addAll(data); + settleBeans.addAll(data.sudSettleBeans); } //设置最多显示的高度 diff --git a/common/src/main/java/com/yunbao/common/event/CheckCurrencyModel.java b/common/src/main/java/com/yunbao/common/event/CheckCurrencyModel.java index 846001b91..238a53aab 100644 --- a/common/src/main/java/com/yunbao/common/event/CheckCurrencyModel.java +++ b/common/src/main/java/com/yunbao/common/event/CheckCurrencyModel.java @@ -1,12 +1,42 @@ package com.yunbao.common.event; +import android.text.TextUtils; + import com.google.gson.annotations.SerializedName; import com.yunbao.common.bean.BaseModel; +import com.yunbao.common.utils.StringUtil; +import com.yunbao.common.utils.ToastUtil; + +import java.util.ArrayList; +import java.util.List; public class CheckCurrencyModel extends BaseModel { @SerializedName("is_yuanbao") - private String isYuanbao; + private String isYuanbao;//是否开启星币 0.否 1.是 + + @SerializedName("zq_game_status") + private String zqGameStatus="1";//一杆清台活动开启状态 0.未开启 1.开启 + + @SerializedName("zq_ticket_number") + private String zqTicketNumber;//一杆清台活动门票余额 + + private List activityList;//活动列表 **本地注册,接口本身没这个字段 + + public CheckCurrencyModel() { + activityList = new ArrayList<>(); + activityList.add("24");//测试服-台球 + } + + public List getActivityList() { + return activityList; + } + + public boolean isActivityGame(String gameId){ + if(StringUtil.isEmpty(gameId))return false; + if(TextUtils.equals(zqGameStatus,"0")) return false; + return activityList.contains(gameId); + } public String getIsYuanbao() { return isYuanbao; @@ -16,4 +46,27 @@ public class CheckCurrencyModel extends BaseModel { this.isYuanbao = isYuanbao; return this; } + + public String getZqGameStatus() { + return zqGameStatus; + } + + public void setZqGameStatus(String zqGameStatus) { + this.zqGameStatus = zqGameStatus; + } + + public String getZqTicketNumber() { + return zqTicketNumber; + } + public int getZqTicketNumberInt() { + try { + return Integer.parseInt(zqTicketNumber); + }catch (Exception e){ + return 0; + } + } + + public void setZqTicketNumber(String zqTicketNumber) { + this.zqTicketNumber = zqTicketNumber; + } } 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 928b1e46a..85721687a 100644 --- a/common/src/main/java/com/yunbao/common/event/CheckRemainingBalanceEvent.java +++ b/common/src/main/java/com/yunbao/common/event/CheckRemainingBalanceEvent.java @@ -1,18 +1,41 @@ package com.yunbao.common.event; import com.yunbao.common.bean.BaseModel; +import com.yunbao.common.bean.SudActivityGameInfoBean; import com.yunbao.common.sud.state.SudMGPMGState; +import java.util.List; + public class CheckRemainingBalanceEvent extends BaseModel { - public int seatIndex=0; + public int seatIndex = 0; private String SudMGPMGState; private boolean subReady = false;//是否直接自动准备 private SudMGPMGState.MGCommonGameSettle mgCommonGameSettle;//结算数据 + private boolean isActivityGame; + + public boolean isSubReady() { + return subReady; + } + + public boolean isActivityGame() { + return isActivityGame; + } + + + public CheckRemainingBalanceEvent setActivityGame(boolean activityGame) { + isActivityGame = activityGame; + return this; + } public SudMGPMGState.MGCommonGameSettle getMgCommonGameSettle() { return mgCommonGameSettle; } + public SudMGPMGState.MGCommonGameSettle getMgCommonGameSettle(List data) { + mgCommonGameSettle.activityGameInfoBean = data; + return mgCommonGameSettle; + } + public CheckRemainingBalanceEvent setMgCommonGameSettle(SudMGPMGState.MGCommonGameSettle mgCommonGameSettle) { this.mgCommonGameSettle = mgCommonGameSettle; return this; @@ -36,12 +59,12 @@ public class CheckRemainingBalanceEvent extends BaseModel { return this; } - public CheckRemainingBalanceEvent setSubReady(boolean subReady){ + public CheckRemainingBalanceEvent setSubReady(boolean subReady) { this.subReady = subReady; return this; } - public boolean getSubReady(){ + public boolean getSubReady() { return subReady; } } diff --git a/common/src/main/java/com/yunbao/common/event/LiveSudGamePopupShowOrHideEvent.java b/common/src/main/java/com/yunbao/common/event/LiveSudGamePopupShowOrHideEvent.java index 2479fc6de..54dfa2897 100644 --- a/common/src/main/java/com/yunbao/common/event/LiveSudGamePopupShowOrHideEvent.java +++ b/common/src/main/java/com/yunbao/common/event/LiveSudGamePopupShowOrHideEvent.java @@ -5,6 +5,16 @@ import com.yunbao.common.bean.CreateSudRoomModel; public class LiveSudGamePopupShowOrHideEvent { private int type = 0;//0展示,1hide隱藏,2dismiss關閉 private CreateSudRoomModel createSudRoomModel; + private boolean isActivityGame; + + public boolean isActivityGame() { + return isActivityGame; + } + + public LiveSudGamePopupShowOrHideEvent setActivityGame(boolean activityGame) { + isActivityGame = activityGame; + return this; + } public CreateSudRoomModel getCreateSudRoomModel() { return createSudRoomModel; 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 b85878b8f..9ed625233 100644 --- a/common/src/main/java/com/yunbao/common/http/PDLiveApi.java +++ b/common/src/main/java/com/yunbao/common/http/PDLiveApi.java @@ -74,6 +74,7 @@ import com.yunbao.common.bean.SendMoneyLongModel; 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.SudGameInfoBean; import com.yunbao.common.bean.SudGameScoreBean; import com.yunbao.common.bean.SudGameUserModel; @@ -1054,6 +1055,7 @@ public interface PDLiveApi { @Query("room_name") String roomName, @Query("golden_bean_number") String goldenBeanNumber, @Query("currency_type") String currencyType, + @Query("activity_game") String isActivity, @Query("game_id") String gameId); /** @@ -1344,4 +1346,12 @@ public interface PDLiveApi { @Query("gift_id")String giftId, @Query("live_uid")String liveUid ); + @GET("/api/public/?service=Sudgameserver.ballClearanceTableStatus") + Observable> ballClearanceTableStatus( + @Query("room_id")String roomId + ); + @GET("/api/public/?service=Sudgameserver.ballClearanceTableGetResultScore") + Observable>> ballClearanceTableGetResultScore( + @Query("room_id")String roomId + ); } diff --git a/common/src/main/java/com/yunbao/common/http/base/HttpCallback.java b/common/src/main/java/com/yunbao/common/http/base/HttpCallback.java index aca443bdd..fd35383a3 100644 --- a/common/src/main/java/com/yunbao/common/http/base/HttpCallback.java +++ b/common/src/main/java/com/yunbao/common/http/base/HttpCallback.java @@ -3,18 +3,21 @@ package com.yunbao.common.http.base; /** * maim的请求回调接口 */ -public interface HttpCallback { +public abstract class HttpCallback { /** * 请求成功 * * @param data */ - void onSuccess(T data); + public abstract void onSuccess(T data); /** * 请求失败 * * @param error */ - void onError(String error); + public abstract void onError(String error); + public void onError(String error,int code){ + onError(error); + } } 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 5e5e61785..d494b716c 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 @@ -72,6 +72,7 @@ import com.yunbao.common.bean.RoomMicStatusModel; 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.SudGameInfoBean; import com.yunbao.common.bean.SudGameScoreBean; import com.yunbao.common.bean.SudGameUserModel; @@ -2301,20 +2302,21 @@ public class LiveNetManager { /** * 获取房间金豆门槛和赢家获得的金豆 + * * @param roomId * @param callback */ - public void getScore(String roomId,HttpCallback callback){ + public void getScore(String roomId, HttpCallback callback) { API.get().pdLiveApi(mContext) .getScore(roomId) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(sudGameScoreBeanResponseModel -> { - if (callback != null){ + if (callback != null) { callback.onSuccess(sudGameScoreBeanResponseModel.getData().getInfo()); } }, throwable -> { - if (callback != null){ + if (callback != null) { callback.onError(mContext.getString(R.string.net_error)); } }).isDisposed(); @@ -2322,28 +2324,43 @@ public class LiveNetManager { /** * 获取游戏中所有玩家的信息 + * * @param roomId * @param callback */ - public void getSudGameInfo(String roomId,HttpCallback> callback){ + public void getSudGameInfo(String roomId, HttpCallback> callback) { API.get().pdLiveApi(mContext) .getSudGameInfo(roomId) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(infoModel->{ - if (callback != null){ + .subscribe(infoModel -> { + if (callback != null) { callback.onSuccess(infoModel.getData().getInfo()); } - },throwable -> { - if (callback != null){ + }, throwable -> { + if (callback != null) { callback.onError(mContext.getString(R.string.net_error)); } }).isDisposed(); } public void createSudRoom(String roomName, String goldenBeanNumber, String currencyType, String gameId, HttpCallback callback) { + createSudRoom(roomName, goldenBeanNumber, currencyType, gameId, false, callback); + } + + /** + * 创建游戏房 + * + * @param roomName 房间名称 + * @param goldenBeanNumber 游戏豆数量 + * @param currencyType 货币类型 + * @param gameId 游戏ID + * @param isActivityGame 是否是活动游戏 + * @param callback 回调 + */ + public void createSudRoom(String roomName, String goldenBeanNumber, String currencyType, String gameId, boolean isActivityGame, HttpCallback callback) { API.get().pdLiveApi(mContext) - .createSudRoom(roomName, goldenBeanNumber, currencyType, gameId) + .createSudRoom(roomName, goldenBeanNumber, currencyType, isActivityGame ? "1" : "0", gameId) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer>() { @@ -2353,7 +2370,7 @@ public class LiveNetManager { if (createSudRoomModelResponseModel.getData().getCode() == 0) { callback.onSuccess(createSudRoomModelResponseModel.getData().getInfo()); } else { - callback.onError(createSudRoomModelResponseModel.getData().getMsg()); + callback.onError(createSudRoomModelResponseModel.getData().getMsg(), createSudRoomModelResponseModel.getData().getCode()); } } @@ -3061,9 +3078,9 @@ public class LiveNetManager { } - public void openGuard(String liveUid, String guardType, String priceKey, String stream,String coupon_type,String couponId, HttpCallback callback) { + public void openGuard(String liveUid, String guardType, String priceKey, String stream, String coupon_type, String couponId, HttpCallback callback) { API.get().pdLiveApi(mContext) - .openGuard(liveUid, guardType, priceKey, stream,coupon_type,couponId) + .openGuard(liveUid, guardType, priceKey, stream, coupon_type, couponId) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer>() { @@ -3572,9 +3589,9 @@ public class LiveNetManager { }).isDisposed(); } - public void userUseDress( String usersDressId, HttpCallback callback) { + public void userUseDress(String usersDressId, HttpCallback callback) { API.get().pdLiveApi(mContext) - .userUseDress(usersDressId,3) + .userUseDress(usersDressId, 3) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer>>() { @@ -3596,6 +3613,44 @@ public class LiveNetManager { } }).isDisposed(); } + public void ballClearanceTableStatus( String roomId, HttpCallback callback) { + API.get().pdLiveApi(mContext) + .ballClearanceTableStatus(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 ballClearanceTableGetResultScore( String roomId, HttpCallback> callback) { + API.get().pdLiveApi(mContext) + .ballClearanceTableGetResultScore(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(); + } private MultipartBody.Part createUploadFile(File file) { RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file); diff --git a/common/src/main/java/com/yunbao/common/manager/RandomSudGameManager.java b/common/src/main/java/com/yunbao/common/manager/RandomSudGameManager.java new file mode 100644 index 000000000..75ffc3a61 --- /dev/null +++ b/common/src/main/java/com/yunbao/common/manager/RandomSudGameManager.java @@ -0,0 +1,142 @@ +package com.yunbao.common.manager; + +import android.app.Dialog; +import android.content.Context; +import android.text.Spannable; +import android.text.SpannableString; +import android.text.style.ImageSpan; +import android.view.View; + +import com.yunbao.common.R; +import com.yunbao.common.bean.CreateSudRoomModel; +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.state.SudMGPMGState; +import com.yunbao.common.utils.AppManager; +import com.yunbao.common.utils.DialogUitl; +import com.yunbao.common.utils.WordUtil; + +public class RandomSudGameManager { + private static RandomSudGameManager manager; + private AbsRandomGameManager gameManager; + + public static RandomSudGameManager getManager() { + if (manager == null) { + manager = new RandomSudGameManager(); + } + return manager; + } + + private RandomSudGameManager() { + + } + + public void start(CreateSudRoomModel data, boolean isHome) { + //TODO 等待五秒调用接口获取可以匹配的玩家 + //TODO 五秒内没有玩家就自己创建 + createRoom(data, isHome); + } + + private void createRoom(CreateSudRoomModel data, boolean isHome) { + //TODO 创建房间五秒内没有其他玩家就上AI + LiveNetManager.get(AppManager.getInstance().getMainActivity()) + .checkCurrency(new HttpCallback() { + @Override + public void onSuccess(CheckCurrencyModel currencyModel) { + gameManager = new BilliardsRandomManager(); + gameManager.onStart(currencyModel, data, isHome); + } + + @Override + public void onError(String error) { + + } + }); + } + + public void reset() { + if (gameManager != null) { + gameManager.reset(); + } + } + + /** + * 游戏结算 + * + * @return 返回true则用默认的结算弹框 + */ + public boolean onGameMGCommonGameSettle(SudMGPMGState.MGCommonGameSettle model) { + if (gameManager == null) return true; + return gameManager.onGameMGCommonGameSettle(model); + } + + + /** + * 台球状态 + */ + public void onGameMGCommonGameBilliardsHitState(SudMGPMGState.MGCommonGameBilliardsHitState model) { + if (gameManager != null) { + gameManager.onGameMGCommonGameBilliardsHitState(model); + } + } + + public void showNotActivityTicketDialog(Context mContext) { + showNotActivityTicketDialog(mContext, false, null); + } + + public void showNotActivityTicketDialog(Context mContext, boolean isAudience, DialogUitl.SimpleCallback2 simpleCallback) { + String text = WordUtil.isNewZh() ? "您的$不足,快去獲取門票吧~" : "Your$is not enough, go and get tickets~"; + SpannableString ss = new SpannableString(text); + ImageSpan image = new ImageSpan(mContext, R.mipmap.ic_game_ticket); + ss.setSpan(image, text.indexOf("$"), text.indexOf("$") + 1, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); + DialogUitl.Builder builder = new DialogUitl.Builder(mContext) + .setTitle(WordUtil.isNewZh() ? "提示" : "Hint") + .setHtmlCode(ss) + .setShowConfirmButton(true) + .setShowCancelButton(true); + if (isAudience) { + builder.setCancelString(WordUtil.isNewZh() ? "僅觀戰" : "Watch the game"); + } + builder.setConfirmString(WordUtil.isNewZh() ? "獲取" : "Obtain"); + builder.setSimpleCallbackView(new DialogUitl.SimpleCallbackView() { + + @Override + public void onShow(Dialog dialog, View title, View context, View confirmBtn, View cancelBtn) { + + } + + @Override + public void onConfirmClick(Dialog dialog, View title, View context, View confirmBtn, View cancelBtn) { + dialog.dismiss(); + if (simpleCallback != null) { + simpleCallback.onConfirmClick(dialog, ""); + } + } + + @Override + public void onCancel(Dialog dialog, View title, View context, View confirmBtn, View cancelBtn) { + dialog.dismiss(); + if (simpleCallback != null) { + simpleCallback.onCancelClick(); + } + } + }) + .build() + .show(); + } + + + public void onInitGame(CreateSudRoomModel mCreateSudRoomModel) { + if (gameManager == null) { + gameManager = new BilliardsRandomManager(); + gameManager.onStart(null, mCreateSudRoomModel, false); + } + } + + public void onGameState(CheckRemainingBalanceEvent event) { + } +} 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 new file mode 100644 index 000000000..461f1a23c --- /dev/null +++ b/common/src/main/java/com/yunbao/common/manager/game/AbsRandomGameManager.java @@ -0,0 +1,13 @@ +package com.yunbao.common.manager.game; + +import com.yunbao.common.bean.CreateSudRoomModel; +import com.yunbao.common.event.CheckCurrencyModel; +import com.yunbao.common.sud.state.SudMGPMGState; + +public abstract class AbsRandomGameManager { + protected CreateSudRoomModel data; + public abstract void onStart(CheckCurrencyModel currencyModel, CreateSudRoomModel data, boolean isHome); + public abstract void reset(); + public abstract void onGameMGCommonGameBilliardsHitState(SudMGPMGState.MGCommonGameBilliardsHitState model); + public abstract boolean onGameMGCommonGameSettle(SudMGPMGState.MGCommonGameSettle model) ; +} 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 new file mode 100644 index 000000000..03a490c4c --- /dev/null +++ b/common/src/main/java/com/yunbao/common/manager/game/BilliardsRandomManager.java @@ -0,0 +1,130 @@ +package com.yunbao.common.manager.game; + +import com.google.gson.Gson; +import com.yunbao.common.R; +import com.yunbao.common.bean.BaseModel; +import com.yunbao.common.bean.CreateSudRoomModel; +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.manager.IMLoginManager; +import com.yunbao.common.sud.state.SudMGPMGState; +import com.yunbao.common.utils.AppManager; +import com.yunbao.common.utils.Bus; +import com.yunbao.common.utils.RouteUtil; +import com.yunbao.common.utils.ToastUtil; +import com.yunbao.common.utils.WordUtil; + +public class BilliardsRandomManager extends AbsRandomGameManager { + int isOneOverForMy = -1;//自己是否一杆清台 + int isOneOverForOther = -1;//对方是否一杆清台 + int comboNumberForMy = 0;//自己连杆数 + int comboNumberForOther = 0;//对方连杆数 + + @Override + public void onStart(CheckCurrencyModel currencyModel, CreateSudRoomModel data, boolean isHome) { + this.data = data; + if (currencyModel == null) return; + if (isHome) { + RouteUtil.forwardSwSudGameActivity(new Gson().toJson(data), true, true); + } else { + Bus.get().post(new LiveSudGamePopupShowOrHideEvent().setType(0).setCreateSudRoomModel(data).setActivityGame(true)); + } + } + + @Override + public void reset() { + isOneOverForMy = -1; + isOneOverForOther = -1; + comboNumberForMy = 0; + comboNumberForOther = 0; + } + + @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 (isOneOverForMy == -1) { + isOneOverForMy = 1; + } + if (model.state == 13 && comboNumberForMy == 0) { + comboNumberForMy = 1; + } else if (model.state >= 2 && model.state <= 7) { + if (model.state > comboNumberForMy) { + comboNumberForMy = model.state; + } + } + } else { + if (isOneOverForMy == 1) { + onSendNotOneOver(); + } + isOneOverForMy = 0; + if (isOneOverForOther == -1) { + isOneOverForOther = 1; + } + if (model.state == 13 && comboNumberForOther == 0) { + comboNumberForOther = 1; + } else if (model.state >= 2 && model.state <= 7) { + if (model.state > comboNumberForOther) { + comboNumberForOther = model.state; + } + } + } + } + + @Override + public boolean onGameMGCommonGameSettle(SudMGPMGState.MGCommonGameSettle model) { + System.out.println("游戏结束 :" + isOneOverForMy + "|" + comboNumberForMy); + if (isOneOverForMy == 1 && comboNumberForMy > 1) { + ToastUtil.show("一杆清"); + } else if (comboNumberForMy > 0) { + ToastUtil.show("连杆:" + comboNumberForMy); + switch (comboNumberForMy) { + case 1: + model.achievement = WordUtil.getNewString(R.string.game_dialog_activity_achievements_1); + break; + case 2: + model.achievement = WordUtil.getNewString(R.string.game_dialog_activity_achievements_2); + break; + case 3: + model.achievement = WordUtil.getNewString(R.string.game_dialog_activity_achievements_3); + break; + case 4: + model.achievement = WordUtil.getNewString(R.string.game_dialog_activity_achievements_4); + break; + case 5: + model.achievement = WordUtil.getNewString(R.string.game_dialog_activity_achievements_5); + break; + case 6: + model.achievement = WordUtil.getNewString(R.string.game_dialog_activity_achievements_6); + break; + case 7: + model.achievement = WordUtil.getNewString(R.string.game_dialog_activity_achievements_7); + break; + } + } + Bus.get().post(new CheckRemainingBalanceEvent() + .setSudMGPMGState(SudMGPMGState.MG_COMMON_GAME_SETTLE) + .setActivityGame(true) + .setMgCommonGameSettle(model)); + return false; + } + + private void onSendNotOneOver() { + LiveNetManager.get(AppManager.getInstance().getMainActivity()) + .ballClearanceTableStatus(data.getSudGameRoomId(), new HttpCallback() { + @Override + public void onSuccess(BaseModel data) { + + } + + @Override + public void onError(String error) { + + } + }); + } +} 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 046b7cb80..fafae385f 100644 --- a/common/src/main/java/com/yunbao/common/sud/BaseGameViewModel.java +++ b/common/src/main/java/com/yunbao/common/sud/BaseGameViewModel.java @@ -11,6 +11,8 @@ import android.widget.Toast; import com.alibaba.fastjson.JSONObject; import com.yunbao.common.BuildConfig; +import com.yunbao.common.event.CheckRemainingBalanceEvent; +import com.yunbao.common.manager.RandomSudGameManager; import com.yunbao.common.sud.decorator.SudFSMMGCache; import com.yunbao.common.sud.decorator.SudFSMMGDecorator; import com.yunbao.common.sud.decorator.SudFSMMGListener; @@ -19,6 +21,7 @@ import com.yunbao.common.sud.model.GameConfigModel; import com.yunbao.common.sud.model.GameViewInfoModel; import com.yunbao.common.sud.state.MGStateResponse; import com.yunbao.common.sud.state.SudMGPMGState; +import com.yunbao.common.utils.Bus; import com.yunbao.common.utils.StringUtil; import com.yunbao.common.utils.SudJsonUtils; import com.yunbao.common.utils.ToastUtil; @@ -127,7 +130,8 @@ public abstract class BaseGameViewModel implements SudFSMMGListener { public void onFailure(int errCode, String errMsg) { // TODO: 2022/6/13 下面toast可以根据业务需要决定是否保留 if (isTestEnv()) { - Toast.makeText(activity, "initSDK onFailure:" + errMsg + "(" + errCode + ")", Toast.LENGTH_LONG).show(); + //Toast.makeText(activity, "initSDK onFailure:" + errMsg + "(" + errCode + ")", Toast.LENGTH_LONG).show(); + ToastUtil.show("initSDK onFailure:" + errMsg + "(" + errCode + ")"); } delayLoadGame(activity, gameId); @@ -491,7 +495,17 @@ public abstract class BaseGameViewModel implements SudFSMMGListener { @Override 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)); + } } - + /** + * 台球回调 + */ + @Override + public void onGameMGCommonGameBilliardsHitState(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameBilliardsHitState model) { + SudFSMMGListener.super.onGameMGCommonGameBilliardsHitState(handle, model); + RandomSudGameManager.getManager().onGameMGCommonGameBilliardsHitState(model); + } } diff --git a/common/src/main/java/com/yunbao/common/sud/QuickStartGameViewModel.java b/common/src/main/java/com/yunbao/common/sud/QuickStartGameViewModel.java index 6a36e2c1b..528876795 100644 --- a/common/src/main/java/com/yunbao/common/sud/QuickStartGameViewModel.java +++ b/common/src/main/java/com/yunbao/common/sud/QuickStartGameViewModel.java @@ -21,6 +21,7 @@ import com.yunbao.common.sud.model.GameConfigModel; import com.yunbao.common.sud.model.GameViewInfoModel; import com.yunbao.common.sud.state.SudMGPMGState; import com.yunbao.common.utils.ToastUtil; +import com.yunbao.common.utils.WordUtil; import java.util.ArrayList; import java.util.Collections; @@ -74,7 +75,7 @@ public class QuickStartGameViewModel extends BaseGameViewModel { public final MutableLiveData gameViewLiveData = new MutableLiveData<>(); // 游戏View回调 private SudGameScoreBean sudGameScoreBean;//房间金豆的门槛和赢家奖励 private List sudGameInfoBeanList = new ArrayList<>();//玩家信息 - public final MutableLiveData> listMutableLiveData = new MutableLiveData<>();//玩家排名信息 + public final MutableLiveData listMutableLiveData = new MutableLiveData<>();//玩家排名信息 public void setSudGameInfoBeanList(List sudGameInfoBeanList) { this.sudGameInfoBeanList = sudGameInfoBeanList; @@ -94,7 +95,7 @@ public class QuickStartGameViewModel extends BaseGameViewModel { */ @Override protected void getCode(Activity activity, String userId, String appId, GameGetCodeListener listener) { - if (IMLoginManager.get(activity).getLocaleLanguage() == Locale.SIMPLIFIED_CHINESE) { + if (WordUtil.isNewZh()) { languageCode = "zh-TW"; } else { languageCode = "en-US"; @@ -203,27 +204,29 @@ public class QuickStartGameViewModel extends BaseGameViewModel { String uid = playerResult.uid; int rank = playerResult.rank; SudGameInfoBean sudGameInfoBean = findGameInfoBean(uid); + System.out.println("查找游戏信息" + sudGameInfoBean); if (sudGameInfoBean == null) return; if (sudGameScoreBean.getGame_mode() == 1) { //双人游戏 - if (winnerNUm == 1){ + if (winnerNUm == 1) { winNum = (rank == 1) ? (int) (sudGameScoreBean.getRoom_sill() * 0.8) : -sudGameScoreBean.getRoom_sill(); - }else { + } else { winNum = -sudGameScoreBean.getRoom_ticket(); } } else { //多人游戏 - if (rank == 1){ - winNum = (playerNum*sudGameScoreBean.getRoom_win_num()-winnerNUm*sudGameScoreBean.getRoom_sill())/winnerNUm; - }else { + if (rank == 1) { + winNum = (playerNum * sudGameScoreBean.getRoom_win_num() - winnerNUm * sudGameScoreBean.getRoom_sill()) / winnerNUm; + } else { winNum = -sudGameScoreBean.getRoom_sill(); } } - settleBeans.add(new SudSettleBean(uid,sudGameInfoBean.getNick_name(),sudGameInfoBean.getAvatar_url(),rank,winNum)); + settleBeans.add(new SudSettleBean(uid, sudGameInfoBean.getNick_name(), sudGameInfoBean.getAvatar_url(), rank, winNum)); } + mgCommonGameSettle.sudSettleBeans = settleBeans; // 更新LiveData - listMutableLiveData.setValue(settleBeans); + listMutableLiveData.setValue(mgCommonGameSettle); } // 统计第一名的玩家数量 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 43d0d5807..2701b0fe8 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 @@ -10,7 +10,9 @@ import android.util.Log; import com.blankj.utilcode.util.LogUtils; import com.yunbao.common.event.CheckRemainingBalanceEvent; +import com.yunbao.common.manager.RandomSudGameManager; import com.yunbao.common.sud.state.SudMGPMGState; +import com.yunbao.common.utils.AppManager; import com.yunbao.common.utils.Bus; import com.yunbao.common.utils.ISudFSMStateHandleUtils; import com.yunbao.common.utils.SudJsonUtils; @@ -178,7 +180,6 @@ public class SudFSMMGDecorator implements ISudFSMMG { } else { listener.onGameMGCommonGameSettle(handle, mgCommonGameSettle); } - Bus.get().post(new CheckRemainingBalanceEvent().setSudMGPMGState(SudMGPMGState.MG_COMMON_GAME_SETTLE).setMgCommonGameSettle(mgCommonGameSettle)); break; case SudMGPMGState.MG_COMMON_SELF_CLICK_JOIN_BTN: // 4. 加入游戏按钮点击状态 SudMGPMGState.MGCommonSelfClickJoinBtn mgCommonSelfClickJoinBtn = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonSelfClickJoinBtn.class); @@ -216,6 +217,12 @@ public class SudFSMMGDecorator implements ISudFSMMG { break; case SudMGPMGState.MG_COMMON_SELF_CLICK_START_BTN: // 8. 开始游戏按钮点击状态 SudMGPMGState.MGCommonSelfClickStartBtn mgCommonSelfClickStartBtn = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonSelfClickStartBtn.class); + AppManager.runDebugCode(new Runnable() { + @Override + public void run() { + RandomSudGameManager.getManager().reset(); + } + }); Bus.get().post(new CheckRemainingBalanceEvent().setSudMGPMGState(SudMGPMGState.MG_COMMON_SELF_CLICK_START_BTN)); // if (listener == null) { // ISudFSMStateHandleUtils.handleSuccess(handle); @@ -533,6 +540,102 @@ public class SudFSMMGDecorator implements ISudFSMMG { listener.onGameMGCommonHideGameScene(handle, mgCommonHideGameScene); } break; + case SudMGPMGState.MG_COMMON_SELF_CLICK_GOLD_BTN: // 46. 通知app点击了游戏的金币按钮(赛车) + SudMGPMGState.MGCommonSelfClickGoldBtn mgCommonSelfClickGoldBtn = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonSelfClickGoldBtn.class); + if (listener == null) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } else { + listener.onGameMGCommonSelfClickGoldBtn(handle, mgCommonSelfClickGoldBtn); + } + break; + case SudMGPMGState.MG_COMMON_GAME_PIECE_ARRIVE_END: // 47. 通知app棋子到达终点(ludo) + SudMGPMGState.MGCommonGamePieceArriveEnd mgCommonGamePieceArriveEnd = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonGamePieceArriveEnd.class); + if (listener == null) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } else { + listener.onGameMGCommonGamePieceArriveEnd(handle, mgCommonGamePieceArriveEnd); + } + break; + case SudMGPMGState.MG_COMMON_GAME_PLAYER_MANAGED_STATE: // 48. 通知app玩家是否托管 + SudMGPMGState.MGCommonGamePlayerManagedState mgCommonGamePlayerManagedState = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonGamePlayerManagedState.class); + if (listener == null) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } else { + listener.onGameMGCommonGamePlayerManagedState(handle, mgCommonGamePlayerManagedState); + } + break; + case SudMGPMGState.MG_COMMON_GAME_SEND_BURST_WORD: // 49. 游戏向app发送爆词 + SudMGPMGState.MGCommonGameSendBurstWord mgCommonGameSendBurstWord = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonGameSendBurstWord.class); + if (listener == null) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } else { + listener.onGameMGCommonGameSendBurstWord(handle, mgCommonGameSendBurstWord); + } + break; + case SudMGPMGState.MG_COMMON_GAME_PLAYER_RANKS: // 50. 游戏向app发送玩家实时排名(只支持怪物消消乐) + SudMGPMGState.MGCommonGamePlayerRanks mgCommonGamePlayerRanks = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonGamePlayerRanks.class); + if (listener == null) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } else { + listener.onGameMGCommonGamePlayerRanks(handle, mgCommonGamePlayerRanks); + } + break; + case SudMGPMGState.MG_COMMON_GAME_PLAYER_PAIR_SINGULAR: // 51. 游戏向app发送玩家即时变化的单双牌(只支持okey101) + SudMGPMGState.MGCommonGamePlayerPairSingular mgCommonGamePlayerPairSingular = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonGamePlayerPairSingular.class); + if (listener == null) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } else { + listener.onGameMGCommonGamePlayerPairSingular(handle, mgCommonGamePlayerPairSingular); + } + break; + case SudMGPMGState.MG_COMMON_GAME_PLAYER_MONOPOLY_CARDS: // 52. 游戏向app发送获取玩家持有的道具卡(只支持大富翁) + SudMGPMGState.MGCommonGamePlayerMonopolyCards mgCommonGamePlayerMonopolyCards = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonGamePlayerMonopolyCards.class); + if (listener == null) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } else { + listener.onGameMGCommonGamePlayerMonopolyCards(handle, mgCommonGamePlayerMonopolyCards); + } + break; + case SudMGPMGState.MG_COMMON_GAME_PLAYER_SCORES: // 53. 游戏向app发送玩家实时积分(只支持怪物消消乐) + SudMGPMGState.MGCommonGamePlayerScores mgCommonGamePlayerScores = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonGamePlayerScores.class); + if (listener == null) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } else { + listener.onGameMGCommonGamePlayerScores(handle, mgCommonGamePlayerScores); + } + break; + case SudMGPMGState.MG_COMMON_DESTROY_GAME_SCENE: // 54. 游戏通知app销毁游戏(只支持部分概率类游戏) + SudMGPMGState.MGCommonDestroyGameScene mgCommonDestroyGameScene = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonDestroyGameScene.class); + if (listener == null) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } else { + listener.onGameMGCommonDestroyGameScene(handle, mgCommonDestroyGameScene); + } + break; + case SudMGPMGState.MG_COMMON_GAME_BILLIARDS_HIT_STATE: // 55. 游戏通知app击球状态(只支持桌球) + SudMGPMGState.MGCommonGameBilliardsHitState mgCommonGameBilliardsHitState = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonGameBilliardsHitState.class); + if (listener == null) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } else { + listener.onGameMGCommonGameBilliardsHitState(handle, mgCommonGameBilliardsHitState); + } + break; + case SudMGPMGState.MG_COMMON_GAME_PLAYER_PROPS_CARDS: // 56. 游戏向app发送获取玩家持有的指定点数道具卡(只支持飞行棋) + SudMGPMGState.MGCommonGamePlayerPropsCards mgCommonGamePlayerPropsCards = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonGamePlayerPropsCards.class); + if (listener == null) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } else { + listener.onGameMGCommonGamePlayerPropsCards(handle, mgCommonGamePlayerPropsCards); + } + break; + case SudMGPMGState.MG_COMMON_GAME_INFO_X: // 57. 游戏向app发送获游戏通用数据 + SudMGPMGState.MGCommonGameInfoX mgCommonGameInfoX = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonGameInfoX.class); + if (listener == null) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } else { + listener.onGameMGCommonGameInfoX(handle, mgCommonGameInfoX); + } + break; case SudMGPMGState.MG_COMMON_GAME_DISCO_ACTION: // 1. 元宇宙砂砂舞指令回调 SudMGPMGState.MGCommonGameDiscoAction mgCommonGameDiscoAction = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonGameDiscoAction.class); if (listener == null) { @@ -749,39 +852,15 @@ public class SudFSMMGDecorator implements ISudFSMMG { listener.onGameMGCustomRocketSaveSignColor(handle, mgCustomRocketSaveSignColor); } break; - case SudMGPMGState.MG_BASEBALL_RANKING: // 1. 查询排行榜数据(棒球) - SudMGPMGState.MGBaseballRanking mgBaseballRanking = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGBaseballRanking.class); + case SudMGPMGState.MG_BASEBALL_DEFUALT_STATE: // 1. 设置界面默认状态(棒球) + SudMGPMGState.MGBaseballDefaultState mgBaseballDefaultState = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGBaseballDefaultState.class); if (listener == null) { ISudFSMStateHandleUtils.handleSuccess(handle); } else { - listener.onGameMGBaseballRanking(handle, mgBaseballRanking); + listener.onGameMGBaseballDefaultState(handle, mgBaseballDefaultState); } break; - case SudMGPMGState.MG_BASEBALL_MY_RANKING: // 2. 查询我的排名(棒球) - SudMGPMGState.MGBaseballMyRanking mgBaseballMyRanking = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGBaseballMyRanking.class); - if (listener == null) { - ISudFSMStateHandleUtils.handleSuccess(handle); - } else { - listener.onGameMGBaseballMyRanking(handle, mgBaseballMyRanking); - } - break; - case SudMGPMGState.MG_BASEBALL_RANGE_INFO: // 3. 查询当前距离我的前后玩家数据(棒球) - SudMGPMGState.MGBaseballRangeInfo mgBaseballRangeInfo = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGBaseballRangeInfo.class); - if (listener == null) { - ISudFSMStateHandleUtils.handleSuccess(handle); - } else { - listener.onGameMGBaseballRangeInfo(handle, mgBaseballRangeInfo); - } - break; - case SudMGPMGState.MG_BASEBALL_SET_CLICK_RECT: // 4. 设置app提供给游戏可点击区域(棒球) - SudMGPMGState.MGBaseballSetClickRect mgBaseballSetClickRect = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGBaseballSetClickRect.class); - if (listener == null) { - ISudFSMStateHandleUtils.handleSuccess(handle); - } else { - listener.onGameMGBaseballSetClickRect(handle, mgBaseballSetClickRect); - } - break; - case SudMGPMGState.MG_BASEBALL_PREPARE_FINISH: // 5. 前期准备完成(棒球) + case SudMGPMGState.MG_BASEBALL_PREPARE_FINISH: // 2. 前期准备完成(棒球) SudMGPMGState.MGBaseballPrepareFinish mgBaseballPrepareFinish = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGBaseballPrepareFinish.class); if (listener == null) { ISudFSMStateHandleUtils.handleSuccess(handle); @@ -789,7 +868,7 @@ public class SudFSMMGDecorator implements ISudFSMMG { listener.onGameMGBaseballPrepareFinish(handle, mgBaseballPrepareFinish); } break; - case SudMGPMGState.MG_BASEBALL_SHOW_GAME_SCENE: // 6. 主界面已显示(棒球) + case SudMGPMGState.MG_BASEBALL_SHOW_GAME_SCENE: // 3. 主界面已显示(棒球) SudMGPMGState.MGBaseballShowGameScene mgBaseballShowGameScene = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGBaseballShowGameScene.class); if (listener == null) { ISudFSMStateHandleUtils.handleSuccess(handle); @@ -797,7 +876,7 @@ public class SudFSMMGDecorator implements ISudFSMMG { listener.onGameMGBaseballShowGameScene(handle, mgBaseballShowGameScene); } break; - case SudMGPMGState.MG_BASEBALL_HIDE_GAME_SCENE: // 7. 主界面已隐藏(棒球) + case SudMGPMGState.MG_BASEBALL_HIDE_GAME_SCENE: // 4. 主界面已隐藏(棒球) SudMGPMGState.MGBaseballHideGameScene mgBaseballHideGameScene = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGBaseballHideGameScene.class); if (listener == null) { ISudFSMStateHandleUtils.handleSuccess(handle); @@ -805,7 +884,39 @@ public class SudFSMMGDecorator implements ISudFSMMG { listener.onGameMGBaseballHideGameScene(handle, mgBaseballHideGameScene); } break; - case SudMGPMGState.MG_BASEBALL_TEXT_CONFIG: // 8. 获取文本配置数据(棒球) + case SudMGPMGState.MG_BASEBALL_RANKING: // 5. 查询排行榜数据(棒球) + SudMGPMGState.MGBaseballRanking mgBaseballRanking = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGBaseballRanking.class); + if (listener == null) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } else { + listener.onGameMGBaseballRanking(handle, mgBaseballRanking); + } + break; + case SudMGPMGState.MG_BASEBALL_MY_RANKING: // 6. 查询我的排名(棒球) + SudMGPMGState.MGBaseballMyRanking mgBaseballMyRanking = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGBaseballMyRanking.class); + if (listener == null) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } else { + listener.onGameMGBaseballMyRanking(handle, mgBaseballMyRanking); + } + break; + case SudMGPMGState.MG_BASEBALL_RANGE_INFO: // 7. 查询当前距离我的前后玩家数据(棒球) + SudMGPMGState.MGBaseballRangeInfo mgBaseballRangeInfo = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGBaseballRangeInfo.class); + if (listener == null) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } else { + listener.onGameMGBaseballRangeInfo(handle, mgBaseballRangeInfo); + } + break; + case SudMGPMGState.MG_BASEBALL_SET_CLICK_RECT: // 8. 设置app提供给游戏可点击区域(棒球) + SudMGPMGState.MGBaseballSetClickRect mgBaseballSetClickRect = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGBaseballSetClickRect.class); + if (listener == null) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } else { + listener.onGameMGBaseballSetClickRect(handle, mgBaseballSetClickRect); + } + break; + case SudMGPMGState.MG_BASEBALL_TEXT_CONFIG: // 9. 获取文本配置数据(棒球) SudMGPMGState.MGBaseballTextConfig mgBaseballTextConfig = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGBaseballTextConfig.class); if (listener == null) { ISudFSMStateHandleUtils.handleSuccess(handle); @@ -813,6 +924,30 @@ public class SudFSMMGDecorator implements ISudFSMMG { listener.onGameMGBaseballTextConfig(handle, mgBaseballTextConfig); } break; + case SudMGPMGState.MG_BASEBALL_SEND_DISTANCE: // 10. 球落地, 通知距离(棒球) + SudMGPMGState.MGBaseballSendDistance mgBaseballSendDistance = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGBaseballSendDistance.class); + if (listener == null) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } else { + listener.onGameMGBaseballSendDistance(handle, mgBaseballSendDistance); + } + break; + case SudMGPMGState.MG_CUSTOM_CR_ROOM_INIT_DATA: // 1. 请求房间数据 + SudMGPMGState.MGCustomCrRoomInitData mgCustomCrRoomInitData = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCustomCrRoomInitData.class); + if (listener == null) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } else { + listener.onGameMGCustomCrRoomInitData(handle, mgCustomCrRoomInitData); + } + break; + case SudMGPMGState.MG_CUSTOM_CR_CLICK_SEAT: // 2. 点击主播位或老板位通知 + SudMGPMGState.MGCustomCrClickSeat mgCustomCrClickSeat = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCustomCrClickSeat.class); + if (listener == null) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } else { + listener.onGameMGCustomCrClickSeat(handle, mgCustomCrClickSeat); + } + break; default: ISudFSMStateHandleUtils.handleSuccess(handle); break; diff --git a/common/src/main/java/com/yunbao/common/sud/decorator/SudFSMMGListener.java b/common/src/main/java/com/yunbao/common/sud/decorator/SudFSMMGListener.java index 2bc23c6e9..06e87c8f0 100644 --- a/common/src/main/java/com/yunbao/common/sud/decorator/SudFSMMGListener.java +++ b/common/src/main/java/com/yunbao/common/sud/decorator/SudFSMMGListener.java @@ -13,70 +13,88 @@ import tech.sud.mgp.core.ISudFSMStateHandle; /** * {@link SudFSMMGDecorator} 回调定义 + * {@link SudFSMMGDecorator} Callback definition. */ public interface SudFSMMGListener { /** - * 游戏日志 + * 游戏日志回调 * 最低版本:v1.1.30.xx + *

+ * Game log + * Minimum version: v1.1.30.xx */ default void onGameLog(String str) { } /** - * 游戏加载进度 + * 游戏加载进度回调 + * Game loading progress * * @param stage 阶段:start=1,loading=2,end=3 + * Stage: start=1, loading=2, end=3 * @param retCode 错误码:0成功 + * Error code: 0 for success * @param progress 进度:[0, 100] + * Progress: [0, 100] */ default void onGameLoadingProgress(int stage, int retCode, int progress) { } /** - * 游戏开始,需要实现 + * 游戏开始的回调 * 最低版本:v1.1.30.xx + *

+ * Callback for game start + * Minimum version: v1.1.30.xx */ void onGameStarted(); /** - * 游戏销毁,需要实现 + * 游戏销毁的回调 * 最低版本:v1.1.30.xx + *

+ * Callback for game destruction + * Minimum version: v1.1.30.xx */ void onGameDestroyed(); /** - * Code过期,需要实现 + * Code过期的回调 * APP接入方需要调用handle.success或handle.fail + *

+ * Callback for expired code + * The APP integration partner needs to call handle.success or handle.fail * * @param dataJson {"code":"value"} */ void onExpireCode(ISudFSMStateHandle handle, String dataJson); /** - * 获取游戏View信息,需要实现 + * 获取游戏View信息的回调 * APP接入方需要调用handle.success或handle.fail - * - * @param handle - * @param dataJson {} + *

+ * Callback for obtaining game View information + * The APP integration partner needs to call handle.success or handle.fail */ void onGetGameViewInfo(ISudFSMStateHandle handle, String dataJson); /** - * 获取游戏Config,需要实现 + * 获取游戏配置的回调 * APP接入方需要调用handle.success或handle.fail - * - * @param handle - * @param dataJson {} - * 最低版本:v1.1.30.xx + *

+ * Callback for obtaining game configuration + * The APP integration partner needs to call handle.success or handle.fail */ void onGetGameCfg(ISudFSMStateHandle handle, String dataJson); - // region 游戏回调APP 通用状态 - // 参考文档:https://github.com/SudTechnology/sud-mgp-doc/blob/main/Client/MG%20FSM/%E9%80%9A%E7%94%A8%E7%8A%B6%E6%80%81-%E7%8E%A9%E5%AE%B6.md + // region 游戏回调APP 通用状态 English: Game callback to APP for general state. + // 参考文档:https://docs.sud.tech/zh-CN/app/Client/MGFSM/CommonStateGame.html + // Reference documentation:https://docs.sud.tech/en-US/app/Client/MGFSM/CommonStateGame.html /** * 1.游戏公屏消息 + * 1. Public screen messages (modified) * mg_common_public_message */ default void onGameMGCommonPublicMessage(ISudFSMStateHandle handle, SudMGPMGState.MGCommonPublicMessage model) { @@ -85,6 +103,7 @@ public interface SudFSMMGListener { /** * 2. 关键词状态 + * 2. Keyword * mg_common_key_word_to_hit */ default void onGameMGCommonKeyWordToHit(ISudFSMStateHandle handle, SudMGPMGState.MGCommonKeyWordToHit model) { @@ -93,6 +112,7 @@ public interface SudFSMMGListener { /** * 3. 游戏结算状态 + * 3. Post-game * mg_common_game_settle */ default void onGameMGCommonGameSettle(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameSettle model) { @@ -101,6 +121,7 @@ public interface SudFSMMGListener { /** * 4. 加入游戏按钮点击状态 + * 4. Tapping the Join button * mg_common_self_click_join_btn */ default void onGameMGCommonSelfClickJoinBtn(ISudFSMStateHandle handle, SudMGPMGState.MGCommonSelfClickJoinBtn model) { @@ -109,6 +130,7 @@ public interface SudFSMMGListener { /** * 5. 取消加入(退出)游戏按钮点击状态 + * 5. Tapping the Cancel Join button * mg_common_self_click_cancel_join_btn */ default void onGameMGCommonSelfClickCancelJoinBtn(ISudFSMStateHandle handle, SudMGPMGState.MGCommonSelfClickCancelJoinBtn model) { @@ -117,6 +139,7 @@ public interface SudFSMMGListener { /** * 6. 准备按钮点击状态 + * 6. Tapping the Ready button * mg_common_self_click_ready_btn */ default void onGameMGCommonSelfClickReadyBtn(ISudFSMStateHandle handle, SudMGPMGState.MGCommonSelfClickReadyBtn model) { @@ -125,6 +148,7 @@ public interface SudFSMMGListener { /** * 7. 取消准备按钮点击状态 + * 7. Tapping the Cancel Ready button * mg_common_self_click_cancel_ready_btn */ default void onGameMGCommonSelfClickCancelReadyBtn(ISudFSMStateHandle handle, SudMGPMGState.MGCommonSelfClickCancelReadyBtn model) { @@ -133,6 +157,7 @@ public interface SudFSMMGListener { /** * 8. 开始游戏按钮点击状态 + * 8. Tapping the Start button * mg_common_self_click_start_btn */ default void onGameMGCommonSelfClickStartBtn(ISudFSMStateHandle handle, SudMGPMGState.MGCommonSelfClickStartBtn model) { @@ -141,6 +166,7 @@ public interface SudFSMMGListener { /** * 9. 分享按钮点击状态 + * 9. Tapping the Share button * mg_common_self_click_share_btn */ default void onGameMGCommonSelfClickShareBtn(ISudFSMStateHandle handle, SudMGPMGState.MGCommonSelfClickShareBtn model) { @@ -149,6 +175,7 @@ public interface SudFSMMGListener { /** * 10. 游戏状态 + * 10. Gaming * mg_common_game_state */ default void onGameMGCommonGameState(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameState model) { @@ -157,6 +184,7 @@ public interface SudFSMMGListener { /** * 11. 结算界面关闭按钮点击状态(2021-12-27新增) + * 11. Tapping the Close button on the post-game screen (added on December 27, 2021) * mg_common_self_click_game_settle_close_btn */ default void onGameMGCommonSelfClickGameSettleCloseBtn(ISudFSMStateHandle handle, SudMGPMGState.MGCommonSelfClickGameSettleCloseBtn model) { @@ -165,6 +193,7 @@ public interface SudFSMMGListener { /** * 12. 结算界面再来一局按钮点击状态(2021-12-27新增) + * 12. Tapping the Play Again button on the post-game screen (added on December 27, 2021) * mg_common_self_click_game_settle_again_btn */ default void onGameMGCommonSelfClickGameSettleAgainBtn(ISudFSMStateHandle handle, SudMGPMGState.MGCommonSelfClickGameSettleAgainBtn model) { @@ -173,6 +202,7 @@ public interface SudFSMMGListener { /** * 13. 游戏上报游戏中的声音列表(2021-12-30新增,现在只支持碰碰我最强) + * 13. Reporting the sound list in a game (added on December 30, 2021) * mg_common_game_sound_list */ default void onGameMGCommonGameSoundList(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameSoundList model) { @@ -181,6 +211,7 @@ public interface SudFSMMGListener { /** * 14. 游通知app层播放声音(2021-12-30新增,现在只支持碰碰我最强) + * 14. Notifying the app layer of playing sound (added on December 30, 2021) * mg_common_game_sound */ default void onGameMGCommonGameSound(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameSound model) { @@ -189,6 +220,7 @@ public interface SudFSMMGListener { /** * 15. 游戏通知app层播放背景音乐状态(2022-01-07新增,现在只支持碰碰我最强) + * 15. Notifying the app layer of playing background music (added on January 7, 2022) * mg_common_game_bg_music_state */ default void onGameMGCommonGameBgMusicState(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameBgMusicState model) { @@ -197,6 +229,7 @@ public interface SudFSMMGListener { /** * 16. 游戏通知app层播放音效的状态(2022-01-07新增,现在只支持碰碰我最强) + * 16. Notifying the app layer of playing sound effect (added on January 7, 2022) * mg_common_game_sound_state */ default void onGameMGCommonGameSoundState(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameSoundState model) { @@ -205,6 +238,7 @@ public interface SudFSMMGListener { /** * 17. ASR状态(开启和关闭语音识别状态,v1.1.45.xx 版本新增) + * 17. ASR (enabling/disabling voice recognition, added in SudMGP V1.1.45.xx) * mg_common_game_asr */ default void onGameMGCommonGameASR(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameASR model) { @@ -213,6 +247,7 @@ public interface SudFSMMGListener { /** * 18. 麦克风状态(2022-02-08新增) + * 18. Microphone (added on March 4, 2022) * mg_common_self_microphone */ default void onGameMGCommonSelfMicrophone(ISudFSMStateHandle handle, SudMGPMGState.MGCommonSelfMicrophone model) { @@ -221,6 +256,7 @@ public interface SudFSMMGListener { /** * 19. 耳机(听筒,扬声器)状态(2022-02-08新增) + * 19. Headphone (receiver and speaker) (added on March 4, 2022) * mg_common_self_headphone */ default void onGameMGCommonSelfHeadphone(ISudFSMStateHandle handle, SudMGPMGState.MGCommonSelfHeadphone model) { @@ -229,6 +265,7 @@ public interface SudFSMMGListener { /** * 20. App通用状态操作结果错误码(2022-05-10新增) + * 20. app_common_self_x response error code(added on May 10, 2022) * mg_common_app_common_self_x_resp */ default void onGameMGCommonAPPCommonSelfXResp(ISudFSMStateHandle handle, SudMGPMGState.MGCommonAPPCommonSelfXResp model) { @@ -237,6 +274,7 @@ public interface SudFSMMGListener { /** * 21. 游戏通知app层添加陪玩机器人是否成功(2022-05-17新增) + * 21. Whether the game notifies the app layer of the success of adding the robot players (added on May 17, 2022) * mg_common_game_add_ai_players */ default void onGameMGCommonGameAddAIPlayers(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameAddAIPlayers model) { @@ -245,6 +283,7 @@ public interface SudFSMMGListener { /** * 22. 游戏通知app层添当前网络连接状态(2022-06-21新增) + * 22. The game notifies the app layer to add the current network connection status (added on June 21, 2022) * mg_common_game_network_state */ default void onGameMGCommonGameNetworkState(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameNetworkState model) { @@ -253,6 +292,7 @@ public interface SudFSMMGListener { /** * 23. 游戏通知app获取积分 + * 23. Game notification app to get score * mg_common_game_score */ default void onGameMGCommonGameGetScore(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameGetScore model) { @@ -261,6 +301,7 @@ public interface SudFSMMGListener { /** * 24. 游戏通知app带入积分 + * 24. score brought in by game notification app * mg_common_game_set_score */ default void onGameMGCommonGameSetScore(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameSetScore model) { @@ -269,20 +310,16 @@ public interface SudFSMMGListener { /** * 25. 创建订单 + * 25. create order in game * mg_common_game_create_order */ default void onGameMGCommonGameCreateOrder(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameCreateOrder model) { - if ("addHeart".equals(model.cmd)) { - JumpEvent.addHeart(model); - } else if ("hit".equals(model.cmd)) { - JumpEvent.hit(model); - } else { - ISudFSMStateHandleUtils.handleSuccess(handle); - } + ISudFSMStateHandleUtils.handleSuccess(handle); } /** * 26. 游戏通知app玩家角色(仅对狼人杀有效) + * 26. Game notification app player role (only valid for werewolf killing) * mg_common_player_role_id */ default void onGameMGCommonPlayerRoleId(ISudFSMStateHandle handle, SudMGPMGState.MGCommonPlayerRoleId model) { @@ -291,6 +328,7 @@ public interface SudFSMMGListener { /** * 27. 游戏通知app玩家被扔便便(你画我猜,你说我猜,友尽闯关有效) + * 27. The game notifies app players that they are thrown poop (only valid for you to draw, I guess) * mg_common_self_click_poop */ default void onGameMGCommonSelfClickPoop(ISudFSMStateHandle handle, SudMGPMGState.MGCommonSelfClickPoop model) { @@ -299,6 +337,7 @@ public interface SudFSMMGListener { /** * 28. 游戏通知app玩家被点赞(你画我猜,你说我猜,友尽闯关有效) + * 28. The game notifies app players that they are liked (only valid for you to draw and guess) * mg_common_self_click_good */ default void onGameMGCommonSelfClickGood(ISudFSMStateHandle handle, SudMGPMGState.MGCommonSelfClickGood model) { @@ -307,6 +346,7 @@ public interface SudFSMMGListener { /** * 29. 游戏通知app游戏FPS(仅对碰碰,多米诺骨牌,飞镖达人生效) + * 29. Game Notification App Game FPS (Only effective for bumper, Dominoes, and knifeMasters) * mg_common_game_fps */ default void onGameMGCommonGameFps(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameFps model) { @@ -315,6 +355,7 @@ public interface SudFSMMGListener { /** * 30. 游戏通知app游戏弹框 + * 30. Game Notification App Game Pop-up * mg_common_alert */ default void onGameMGCommonAlert(ISudFSMStateHandle handle, SudMGPMGState.MGCommonAlert model) { @@ -323,6 +364,7 @@ public interface SudFSMMGListener { /** * 31. 游戏通知app最坑队友(只支持友尽闯关) + * 31. Game Notification App: Most Annoying Teammate (Supports only pickpark) * mg_common_worst_teammate */ default void onGameMGCommonWorstTeammate(ISudFSMStateHandle handle, SudMGPMGState.MGCommonWorstTeammate model) { @@ -331,6 +373,7 @@ public interface SudFSMMGListener { /** * 32. 游戏通知app因玩家逃跑导致游戏结束(只支持友尽闯关) + * 32. Game Notification App: Game Ended Due to Player Quitting(Supports only pickpark) * mg_common_game_over_tip */ default void onGameMGCommonGameOverTip(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameOverTip model) { @@ -339,6 +382,7 @@ public interface SudFSMMGListener { /** * 33. 游戏通知app玩家颜色(只支持友尽闯关) + * 33. Game Notification App: Player Color(Supports pickpark and ludo) * mg_common_game_player_color */ default void onGameMGCommonGamePlayerColor(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGamePlayerColor model) { @@ -347,6 +391,7 @@ public interface SudFSMMGListener { /** * 34. 游戏通知app玩家头像的坐标(只支持ludo) + * 34. Game Notification App: Player Avatar Coordinates (ludo, knife, umo, dominos, teenpatti, texasholdem, drawAndGuess) * mg_common_game_player_icon_position */ default void onGameMGCommonGamePlayerIconPosition(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGamePlayerIconPosition model) { @@ -355,6 +400,7 @@ public interface SudFSMMGListener { /** * 35. 游戏通知app退出游戏(只支持teenpattipro 与 德州pro) + * 35. Game Notification App: click exit game button (Only supports Teen Patti Pro and Texas Hold'em Pro) * mg_common_self_click_exit_game_btn */ default void onGameMGCommonSelfClickExitGameBtn(ISudFSMStateHandle handle, SudMGPMGState.MGCommonSelfClickExitGameBtn model) { @@ -363,6 +409,7 @@ public interface SudFSMMGListener { /** * 36. 游戏通知app是否要开启带入积分(只支持teenpattipro 与 德州pro) + * 36. Game Notification App: Enable Buy-in Points (Only supports Teen Patti Pro and Texas Hold'em Pro) * mg_common_game_is_app_chip */ default void onGameMGCommonGameIsAppChip(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameIsAppChip model) { @@ -371,6 +418,7 @@ public interface SudFSMMGListener { /** * 37. 游戏通知app当前游戏的设置信息(只支持德州pro,teenpatti pro) + * 37. Game Notification App: Current Game Settings Information (Only supports Texas Hold'em Pro and Teen Patti Pro) * mg_common_game_rule */ default void onGameMGCommonGameRule(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameRule model) { @@ -379,6 +427,7 @@ public interface SudFSMMGListener { /** * 38. 游戏通知app进行玩法设置(只支持德州pro,teenpatti pro) + * 38. Game Notification App: Game Mode Settings (Only supports Texas Hold'em Pro and Teen Patti Pro) * mg_common_game_settings */ default void onGameMGCommonGameSettings(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameSettings model) { @@ -387,6 +436,7 @@ public interface SudFSMMGListener { /** * 39. 游戏通知app钱币不足(只支持德州pro,teenpatti pro) + * 39. Game Notification App: Insufficient Coins (Only supports Texas Hold'em Pro and Teen Patti Pro) * mg_common_game_money_not_enough */ default void onGameMGCommonGameMoneyNotEnough(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameMoneyNotEnough model) { @@ -395,6 +445,7 @@ public interface SudFSMMGListener { /** * 40. 游戏通知app下发定制ui配置表(只支持ludo) + * 40. Game Notification App: Send Custom UI Configuration Table (supports Ludo, fir) * mg_common_game_ui_custom_config */ default void onGameMGCommonGameUiCustomConfig(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameUiCustomConfig model) { @@ -403,6 +454,7 @@ public interface SudFSMMGListener { /** * 41. 设置app提供给游戏可点击区域(赛车) + * 41. Set clickable areas provided by the app for the game (crazyracing) * mg_common_set_click_rect */ default void onGameMGCommonSetClickRect(ISudFSMStateHandle handle, SudMGPMGState.MGCommonSetClickRect model) { @@ -411,6 +463,7 @@ public interface SudFSMMGListener { /** * 42. 通知app提供对应uids列表玩家的数据(赛车) + * 42. Notify the app to provide data for the corresponding list of UIDs' players (crazyracing). * mg_common_users_info */ default void onGameMGCommonUsersInfo(ISudFSMStateHandle handle, SudMGPMGState.MGCommonUsersInfo model) { @@ -419,6 +472,7 @@ public interface SudFSMMGListener { /** * 43. 通知app游戏前期准备完成(赛车) + * 43. Notify the app that the game's preliminary preparations are complete.(crazyracing) * mg_common_game_prepare_finish */ default void onGameMGCommonGamePrepareFinish(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGamePrepareFinish model) { @@ -427,6 +481,7 @@ public interface SudFSMMGListener { /** * 44. 通知app游戏主界面已显示(赛车) + * 44. Notify the app that the game's main interface has been displayed.(crazyracing) * mg_common_show_game_scene */ default void onGameMGCommonShowGameScene(ISudFSMStateHandle handle, SudMGPMGState.MGCommonShowGameScene model) { @@ -435,17 +490,129 @@ public interface SudFSMMGListener { /** * 45. 通知app游戏主界面已隐藏(赛车) + * 45. Notify the app that the game's main interface has been hidden.(crazyracing) * mg_common_hide_game_scene */ default void onGameMGCommonHideGameScene(ISudFSMStateHandle handle, SudMGPMGState.MGCommonHideGameScene model) { ISudFSMStateHandleUtils.handleSuccess(handle); } - // endregion 游戏回调APP 通用状态 - // region 游戏回调APP 玩家状态 + /** + * 46. 通知app点击了游戏的金币按钮(赛车) + * 46. Notify the app that the game's coin button has been clicked.(crazyracing) + * mg_common_self_click_gold_btn + */ + default void onGameMGCommonSelfClickGoldBtn(ISudFSMStateHandle handle, SudMGPMGState.MGCommonSelfClickGoldBtn model) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } + + /** + * 47. 通知app棋子到达终点(ludo) + * 47. Notify app reaches the destination (ludo) + * mg_common_game_piece_arrive_end + */ + default void onGameMGCommonGamePieceArriveEnd(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGamePieceArriveEnd model) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } + + /** + * 48. 通知app玩家是否托管 + * 48. Notify App the player is auto Managed + * mg_common_game_player_managed_state + */ + default void onGameMGCommonGamePlayerManagedState(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGamePlayerManagedState model) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } + + /** + * 49. 游戏向app发送爆词 + * 49. Notify App the baochi (whoisspy) + * mg_common_game_send_burst_word + */ + default void onGameMGCommonGameSendBurstWord(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameSendBurstWord model) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } + + /** + * 50. 游戏向app发送玩家实时排名(只支持怪物消消乐) + * 50. Game sends real-time player rankings to the app (only supported in Monster Smash). + * mg_common_game_player_ranks + */ + default void onGameMGCommonGamePlayerRanks(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGamePlayerRanks model) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } + + /** + * 51. 游戏向app发送玩家即时变化的单双牌(只支持okey101) + * 51. Game sends real-time changes of odd and even cards to the app (only supported in Okey101). + * mg_common_game_player_pair_singular + */ + default void onGameMGCommonGamePlayerPairSingular(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGamePlayerPairSingular model) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } + + /** + * 52. 游戏向app发送获取玩家持有的道具卡(只支持大富翁) + * 52. Game sends the app a request for obtaining the player's held property cards (only supported in Monopoly). + * mg_common_game_player_monopoly_cards + */ + default void onGameMGCommonGamePlayerMonopolyCards(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGamePlayerMonopolyCards model) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } + + /** + * 53. 游戏向app发送玩家实时积分(只支持怪物消消乐) + * 53. Game sends real-time player scores to the app (only supported in Monster Smash). + * mg_common_game_player_scores + */ + default void onGameMGCommonGamePlayerScores(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGamePlayerScores model) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } + + /** + * 54. 游戏通知app销毁游戏(只支持部分概率类游戏) + * 54. The game informs the app to destroy the game + * mg_common_destroy_game_scene + */ + default void onGameMGCommonDestroyGameScene(ISudFSMStateHandle handle, SudMGPMGState.MGCommonDestroyGameScene model) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } + + /** + * 55. 游戏通知app击球状态(只支持桌球) + * 55. Game notification app Batting status (only table tennis is supported) + * mg_common_game_billiards_hit_state + */ + default void onGameMGCommonGameBilliardsHitState(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameBilliardsHitState model) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } + + /** + * 56. 游戏向app发送获取玩家持有的指定点数道具卡(只支持飞行棋) + * 56. The game sends the item card to the app to obtain the specified points held by the player (only flying chess is supported) + * mg_common_game_player_props_cards + */ + default void onGameMGCommonGamePlayerPropsCards(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGamePlayerPropsCards model) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } + + /** + * 57. 游戏向app发送获游戏通用数据 + * 57. The game sends general game data to the app. + */ + default void onGameMGCommonGameInfoX(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameInfoX model) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } + + // endregion 游戏回调APP 通用状态 English: Game callback to APP for general state. + + // region 游戏回调APP 玩家状态 English: Game callback to APP for player state. + // 参考文档:https://docs.sud.tech/zh-CN/app/Client/MGFSM/CommonStatePlayer.html + // Reference documentation:https://docs.sud.tech/en-US/app/Client/MGFSM/CommonStatePlayer.html /** * 1.加入状态(已修改) + * 1. Joining (modified) * mg_common_player_in */ default void onPlayerMGCommonPlayerIn(ISudFSMStateHandle handle, String userId, SudMGPMGState.MGCommonPlayerIn model) { @@ -454,6 +621,7 @@ public interface SudFSMMGListener { /** * 2.准备状态(已修改) + * 2. Ready (modified) * mg_common_player_ready */ default void onPlayerMGCommonPlayerReady(ISudFSMStateHandle handle, String userId, SudMGPMGState.MGCommonPlayerReady model) { @@ -462,6 +630,7 @@ public interface SudFSMMGListener { /** * 3.队长状态(已修改) + * 3. Captain (modified) * mg_common_player_captain */ default void onPlayerMGCommonPlayerCaptain(ISudFSMStateHandle handle, String userId, SudMGPMGState.MGCommonPlayerCaptain model) { @@ -470,6 +639,7 @@ public interface SudFSMMGListener { /** * 4.游戏状态(已修改) + * 4. Gaming (modified) * mg_common_player_playing */ default void onPlayerMGCommonPlayerPlaying(ISudFSMStateHandle handle, String userId, SudMGPMGState.MGCommonPlayerPlaying model) { @@ -478,6 +648,7 @@ public interface SudFSMMGListener { /** * 5.玩家在线状态 + * 5. Changing the game seat * mg_common_player_online */ default void onPlayerMGCommonPlayerOnline(ISudFSMStateHandle handle, String userId, SudMGPMGState.MGCommonPlayerOnline model) { @@ -486,6 +657,7 @@ public interface SudFSMMGListener { /** * 6.玩家换游戏位状态 + * 6. Notifying the app of tapping a player's avatar (Added on February 9, 2022. This state applies only to player avatars in game scenes.) * mg_common_player_change_seat */ default void onPlayerMGCommonPlayerChangeSeat(ISudFSMStateHandle handle, String userId, SudMGPMGState.MGCommonPlayerChangeSeat model) { @@ -494,6 +666,7 @@ public interface SudFSMMGListener { /** * 7. 游戏通知app点击玩家头像 + * 7. Click the player's Avatar on the game notification app * mg_common_self_click_game_player_icon */ default void onPlayerMGCommonSelfClickGamePlayerIcon(ISudFSMStateHandle handle, String userId, SudMGPMGState.MGCommonSelfClickGamePlayerIcon model) { @@ -502,6 +675,7 @@ public interface SudFSMMGListener { /** * 8. 游戏通知app玩家死亡状态(2022-04-24新增) + * 8. Game notification app player death status (added on April 24, 2022) * mg_common_self_die_status */ default void onPlayerMGCommonSelfDieStatus(ISudFSMStateHandle handle, String userId, SudMGPMGState.MGCommonSelfDieStatus model) { @@ -510,6 +684,7 @@ public interface SudFSMMGListener { /** * 9. 游戏通知app轮到玩家出手状态(2022-04-24新增) + * 9. Game notification app player's turn (added on April 24, 2022) * mg_common_self_turn_status */ default void onPlayerMGCommonSelfTurnStatus(ISudFSMStateHandle handle, String userId, SudMGPMGState.MGCommonSelfTurnStatus model) { @@ -518,6 +693,7 @@ public interface SudFSMMGListener { /** * 10. 游戏通知app玩家选择状态(2022-04-24新增) + * 10. Game notification app player selection status (added on April 24, 2022) * mg_common_self_select_status */ default void onPlayerMGCommonSelfSelectStatus(ISudFSMStateHandle handle, String userId, SudMGPMGState.MGCommonSelfSelectStatus model) { @@ -526,6 +702,7 @@ public interface SudFSMMGListener { /** * 11. 游戏通知app层当前游戏剩余时间(2022-05-23新增,目前UMO生效) + * 11. The game notifies the app layer of the remaining time of the current game (added on May 23, 2022, and UMO takes effect at present) * mg_common_game_countdown_time */ default void onPlayerMGCommonGameCountdownTime(ISudFSMStateHandle handle, String userId, SudMGPMGState.MGCommonGameCountdownTime model) { @@ -534,19 +711,22 @@ public interface SudFSMMGListener { /** * 12. 游戏通知app层当前玩家死亡后变成ob视角(2022-08-23新增,目前狼人杀生效) + * 12. The game notifies the app layer that the current player will become an OB perspective after death (added on August 23, 2022, and now the werewolf ) * mg_common_self_ob_status */ default void onPlayerMGCommonSelfObStatus(ISudFSMStateHandle handle, String userId, SudMGPMGState.MGCommonSelfObStatus model) { ISudFSMStateHandleUtils.handleSuccess(handle); } - // endregion 游戏回调APP 玩家状态 + // endregion 游戏回调APP 玩家状态 English: Game callback to APP for player state. - // region 游戏回调APP 玩家状态 你画我猜 - // 参考文档:https://github.com/SudTechnology/sud-mgp-doc/blob/main/Client/MG%20FSM/%E4%BD%A0%E7%94%BB%E6%88%91%E7%8C%9C.md + // region 游戏回调APP 玩家状态 你画我猜 English: Game callback to APP for player state in 'You Draw, I Guess'. + // 参考文档:https://docs.sud.tech/zh-CN/app/Client/MGFSM/DrawGuess.html + // Reference documentation:https://docs.sud.tech/en-US/app/Client/MGFSM/DrawGuess.html /** * 1. 选词中状态(已修改) + * 1. Selecting words (modified) * mg_dg_selecting */ default void onPlayerMGDGSelecting(ISudFSMStateHandle handle, String userId, SudMGPMGState.MGDGSelecting model) { @@ -555,6 +735,7 @@ public interface SudFSMMGListener { /** * 2. 作画中状态(已修改) + * 2. Drawing (modified) * mg_dg_painting */ default void onPlayerMGDGPainting(ISudFSMStateHandle handle, String userId, SudMGPMGState.MGDGPainting model) { @@ -563,6 +744,7 @@ public interface SudFSMMGListener { /** * 3. 显示错误答案状态(已修改) + * 3. Displaying incorrect answers (modified) * mg_dg_erroranswer */ default void onPlayerMGDGErroranswer(ISudFSMStateHandle handle, String userId, SudMGPMGState.MGDGErroranswer model) { @@ -571,6 +753,7 @@ public interface SudFSMMGListener { /** * 4. 显示总积分状态(已修改) + * 4. Displaying the total points (modified) * mg_dg_totalscore */ default void onPlayerMGDGTotalscore(ISudFSMStateHandle handle, String userId, SudMGPMGState.MGDGTotalscore model) { @@ -579,18 +762,20 @@ public interface SudFSMMGListener { /** * 5. 本次获得积分状态(已修改) + * 5. Displaying the points obtained from this round (modified) * mg_dg_score */ default void onPlayerMGDGScore(ISudFSMStateHandle handle, String userId, SudMGPMGState.MGDGScore model) { ISudFSMStateHandleUtils.handleSuccess(handle); } - // endregion 游戏回调APP 玩家状态 你画我猜 + // endregion 游戏回调APP 玩家状态 你画我猜 English: Game callback to APP for player state in 'You Draw, I Guess'. - // region 游戏回调APP 通用状态 元宇宙砂砂舞 + // region 游戏回调APP 通用状态 元宇宙砂砂舞 English: Game callback to APP for general state in Metaverse Sand Dance. /** * 1. 元宇宙砂砂舞指令回调 + * 1. Callback for instructions in the Metaverse Sand Dance game. * mg_common_game_disco_action */ default void onGameMGCommonGameDiscoAction(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameDiscoAction model) { @@ -599,17 +784,19 @@ public interface SudFSMMGListener { /** * 2. 元宇宙砂砂舞指令动作结束通知 + * 2. Notification for the completion of actions in the Metaverse Sand Dance game. * mg_common_game_disco_action_end */ default void onGameMGCommonGameDiscoActionEnd(ISudFSMStateHandle handle, SudMGPMGState.MGCommonGameDiscoActionEnd model) { ISudFSMStateHandleUtils.handleSuccess(handle); } - // endregion 游戏回调APP 通用状态 元宇宙砂砂舞 + // endregion 游戏回调APP 通用状态 元宇宙砂砂舞 English: Game callback to APP for general state in Metaverse Sand Dance. - // region 游戏回调APP 通用状态 定制火箭 + // region 游戏回调APP 通用状态 定制火箭 English: Game callback to APP for general state in Custom Rocket. /** * 1. 礼物配置文件(火箭) + * 1. Gift Configuration File (Rocket) * mg_custom_rocket_config */ default void onGameMGCustomRocketConfig(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketConfig model) { @@ -618,6 +805,7 @@ public interface SudFSMMGListener { /** * 2. 拥有模型列表(火箭) + * 2. List of Owned Models (Rocket) * mg_custom_rocket_model_list */ default void onGameMGCustomRocketModelList(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketModelList model) { @@ -626,6 +814,7 @@ public interface SudFSMMGListener { /** * 3. 拥有组件列表(火箭) + * 3. List of Owned Components (Rocket) * mg_custom_rocket_component_list */ default void onGameMGCustomRocketComponentList(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketComponentList model) { @@ -634,6 +823,7 @@ public interface SudFSMMGListener { /** * 4. 获取用户信息(火箭) + * 4. Get User Information (Rocket) * mg_custom_rocket_user_info */ default void onGameMGCustomRocketUserInfo(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketUserInfo model) { @@ -642,6 +832,7 @@ public interface SudFSMMGListener { /** * 5. 订单记录列表(火箭) + * 5. Order History List (Rocket) * mg_custom_rocket_order_record_list */ default void onGameMGCustomRocketOrderRecordList(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketOrderRecordList model) { @@ -650,6 +841,7 @@ public interface SudFSMMGListener { /** * 6. 展馆内列表(火箭) + * 6. Exhibition Hall List (Rocket) * mg_custom_rocket_room_record_list */ default void onGameMGCustomRocketRoomRecordList(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketRoomRecordList model) { @@ -658,6 +850,7 @@ public interface SudFSMMGListener { /** * 7. 展馆内玩家送出记录(火箭) + * 7. Game client notifies the app to fetch the player gifting records in the exhibition hall.(Rocket) * mg_custom_rocket_user_record_list */ default void onGameMGCustomRocketUserRecordList(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketUserRecordList model) { @@ -666,6 +859,7 @@ public interface SudFSMMGListener { /** * 8. 设置默认模型(火箭) + * 8. Set default model (Rocket) * mg_custom_rocket_set_default_model */ default void onGameMGCustomRocketSetDefaultModel(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketSetDefaultModel model) { @@ -674,6 +868,7 @@ public interface SudFSMMGListener { /** * 9. 动态计算一键发送价格(火箭) + * 9. Dynamic calculation of one-click sending price(Rocket) * mg_custom_rocket_dynamic_fire_price */ default void onGameMGCustomRocketDynamicFirePrice(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketDynamicFirePrice model) { @@ -682,6 +877,7 @@ public interface SudFSMMGListener { /** * 10. 一键发送(火箭) + * 10. One-click sending(Rocket) * mg_custom_rocket_fire_model */ default void onGameMGCustomRocketFireModel(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketFireModel model) { @@ -690,6 +886,7 @@ public interface SudFSMMGListener { /** * 11. 新组装模型(火箭) + * 11. Newly assembled model.(Rocket) * mg_custom_rocket_create_model */ default void onGameMGCustomRocketCreateModel(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketCreateModel model) { @@ -698,6 +895,7 @@ public interface SudFSMMGListener { /** * 12. 模型更换组件(火箭) + * 12. Model Component Replacement(Rocket) * mg_custom_rocket_replace_component */ default void onGameMGCustomRocketReplaceComponent(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketReplaceComponent model) { @@ -706,6 +904,7 @@ public interface SudFSMMGListener { /** * 13. 购买组件(火箭) + * 13. Buy component(Rocket) * mg_custom_rocket_buy_component */ default void onGameMGCustomRocketBuyComponent(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketBuyComponent model) { @@ -714,6 +913,7 @@ public interface SudFSMMGListener { /** * 14. 播放效果开始(火箭) + * 14. Play effect start(Rocket) * mg_custom_rocket_play_effect_start */ default void onGameMGCustomRocketPlayEffectStart(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketPlayEffectStart model) { @@ -722,6 +922,7 @@ public interface SudFSMMGListener { /** * 15. 播放效果完成(火箭) + * 15. Play effect finished(Rocket) * mg_custom_rocket_play_effect_finish */ default void onGameMGCustomRocketPlayEffectFinish(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketPlayEffectFinish model) { @@ -730,6 +931,7 @@ public interface SudFSMMGListener { /** * 16. 验证签名合规(火箭) + * 16. To verify the compliance of a signature(Rocket) * mg_custom_rocket_verify_sign */ default void onGameMGCustomRocketVerifySign(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketVerifySign model) { @@ -738,6 +940,7 @@ public interface SudFSMMGListener { /** * 17. 上传icon(火箭) + * 17. upload icon(Rocket) * mg_custom_rocket_upload_model_icon */ default void onGameMGCustomRocketUploadModelIcon(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketUploadModelIcon model) { @@ -746,6 +949,7 @@ public interface SudFSMMGListener { /** * 18. 前期准备完成(火箭) + * 18. Preparation is complete.(Rocket) * mg_custom_rocket_prepare_finish */ default void onGameMGCustomRocketPrepareFinish(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketPrepareFinish model) { @@ -754,6 +958,7 @@ public interface SudFSMMGListener { /** * 19. 火箭主界面已显示(火箭) + * 19. Rocket main interface has been displayed(Rocket) * mg_custom_rocket_show_game_scene */ default void onGameMGCustomRocketShowGameScene(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketShowGameScene model) { @@ -762,6 +967,7 @@ public interface SudFSMMGListener { /** * 20. 火箭主界面已隐藏(火箭) + * 20. The rocket main interface has been hidden(Rocket) * mg_custom_rocket_hide_game_scene */ default void onGameMGCustomRocketHideGameScene(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketHideGameScene model) { @@ -770,6 +976,7 @@ public interface SudFSMMGListener { /** * 21. 点击锁住组件(火箭) + * 21. Click to lock the component(Rocket) * mg_custom_rocket_click_lock_component */ default void onGameMGCustomRocketClickLockComponent(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketClickLockComponent model) { @@ -778,6 +985,7 @@ public interface SudFSMMGListener { /** * 22. 火箭效果飞行点击(火箭) + * 22. Rocket effect fly click(Rocket) * mg_custom_rocket_fly_click */ default void onGameMGCustomRocketFlyClick(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketFlyClick model) { @@ -786,6 +994,7 @@ public interface SudFSMMGListener { /** * 23. 火箭效果飞行结束(火箭) + * 23. Rocket effect fly finished(Rocket) * mg_custom_rocket_fly_end */ default void onGameMGCustomRocketFlyEnd(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketFlyEnd model) { @@ -794,6 +1003,7 @@ public interface SudFSMMGListener { /** * 24. 设置点击区域(火箭) + * 24. Set clickable area provided by the app for the game(Rocket) * mg_custom_rocket_set_click_rect */ default void onGameMGCustomRocketSetClickRect(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketSetClickRect model) { @@ -802,49 +1012,28 @@ public interface SudFSMMGListener { /** * 25. 颜色和签名自定义改到装配间的模式,保存颜色或签名 + * 25. Save rocket signature or color.(Rocket) * mg_custom_rocket_save_sign_color */ default void onGameMGCustomRocketSaveSignColor(ISudFSMStateHandle handle, SudMGPMGState.MGCustomRocketSaveSignColor model) { ISudFSMStateHandleUtils.handleSuccess(handle); } - // endregion 游戏回调APP 通用状态 定制火箭 + // endregion 游戏回调APP 通用状态 定制火箭 English: Game callback to APP for general state in Custom Rocket. - // region 游戏回调APP 通用状态 棒球 + // region 游戏回调APP 通用状态 棒球 English: Game callback to APP for general state in Baseball. /** - * 1. 查询排行榜数据(棒球) - * mg_baseball_ranking + * 1. 设置界面默认状态(棒球) + * 1. Set Default State of Interface (Baseball) + * mg_baseball_defualt_state */ - default void onGameMGBaseballRanking(ISudFSMStateHandle handle, SudMGPMGState.MGBaseballRanking model) { + default void onGameMGBaseballDefaultState(ISudFSMStateHandle handle, SudMGPMGState.MGBaseballDefaultState model) { ISudFSMStateHandleUtils.handleSuccess(handle); } /** - * 2. 查询我的排名(棒球) - * mg_baseball_my_ranking - */ - default void onGameMGBaseballMyRanking(ISudFSMStateHandle handle, SudMGPMGState.MGBaseballMyRanking model) { - ISudFSMStateHandleUtils.handleSuccess(handle); - } - - /** - * 3. 查询当前距离我的前后玩家数据(棒球) - * mg_baseball_range_info - */ - default void onGameMGBaseballRangeInfo(ISudFSMStateHandle handle, SudMGPMGState.MGBaseballRangeInfo model) { - ISudFSMStateHandleUtils.handleSuccess(handle); - } - - /** - * 4. 设置app提供给游戏可点击区域(棒球) - * mg_baseball_set_click_rect - */ - default void onGameMGBaseballSetClickRect(ISudFSMStateHandle handle, SudMGPMGState.MGBaseballSetClickRect model) { - ISudFSMStateHandleUtils.handleSuccess(handle); - } - - /** - * 5. 前期准备完成(棒球) + * 2. 前期准备完成(棒球) + * 2. Preparation is complete (Baseball) * mg_baseball_prepare_finish */ default void onGameMGBaseballPrepareFinish(ISudFSMStateHandle handle, SudMGPMGState.MGBaseballPrepareFinish model) { @@ -852,7 +1041,8 @@ public interface SudFSMMGListener { } /** - * 6. 主界面已显示(棒球) + * 3. 主界面已显示(棒球) + * 3. The main interface is now displayed (Baseball) * mg_baseball_show_game_scene */ default void onGameMGBaseballShowGameScene(ISudFSMStateHandle handle, SudMGPMGState.MGBaseballShowGameScene model) { @@ -860,7 +1050,8 @@ public interface SudFSMMGListener { } /** - * 7. 主界面已隐藏(棒球) + * 4. 主界面已隐藏(棒球) + * 4. The game client has notified the app that the main interface is now hidden (Baseball) * mg_baseball_hide_game_scene */ default void onGameMGBaseballHideGameScene(ISudFSMStateHandle handle, SudMGPMGState.MGBaseballHideGameScene model) { @@ -868,13 +1059,78 @@ public interface SudFSMMGListener { } /** - * 8. 获取文本配置数据(棒球) + * 5. 查询排行榜数据(棒球) + * 5. To query the ranks data (Baseball) + * mg_baseball_ranking + */ + default void onGameMGBaseballRanking(ISudFSMStateHandle handle, SudMGPMGState.MGBaseballRanking model) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } + + /** + * 6. 查询我的排名(棒球) + * 6. Querying my ranking (baseball) + * mg_baseball_my_ranking + */ + default void onGameMGBaseballMyRanking(ISudFSMStateHandle handle, SudMGPMGState.MGBaseballMyRanking model) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } + + /** + * 7. 查询当前距离我的前后玩家数据(棒球) + * 7. The game client notifies the app to query the data of players before and after me in the current distance (Baseball) + * mg_baseball_range_info + */ + default void onGameMGBaseballRangeInfo(ISudFSMStateHandle handle, SudMGPMGState.MGBaseballRangeInfo model) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } + + /** + * 8. 设置app提供给游戏可点击区域(棒球) + * 8. Set the clickable area provided by the app for the game (baseball) + * mg_baseball_set_click_rect + */ + default void onGameMGBaseballSetClickRect(ISudFSMStateHandle handle, SudMGPMGState.MGBaseballSetClickRect model) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } + + /** + * 9. 获取文本配置数据(棒球) + * 9. Retrieve Text Configuration Data (Baseball) * mg_baseball_text_config */ default void onGameMGBaseballTextConfig(ISudFSMStateHandle handle, SudMGPMGState.MGBaseballTextConfig model) { ISudFSMStateHandleUtils.handleSuccess(handle); } - // endregion 游戏回调APP 通用状态 棒球 + + /** + * 10. 球落地, 通知距离(棒球) + * 10. Ball landed, notify distance (Baseball) + * mg_baseball_send_distance + */ + default void onGameMGBaseballSendDistance(ISudFSMStateHandle handle, SudMGPMGState.MGBaseballSendDistance model) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } + // endregion 游戏回调APP 通用状态 棒球 English: Game callback to APP for general state in Baseball. + + // region 游戏回调APP 3D语聊房 + + /** + * 1. 请求房间数据 + * mg_custom_cr_room_init_data + */ + default void onGameMGCustomCrRoomInitData(ISudFSMStateHandle handle, SudMGPMGState.MGCustomCrRoomInitData model) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } + + /** + * 2. 点击主播位或老板位通知 + * mg_custom_cr_click_seat + */ + default void onGameMGCustomCrClickSeat(ISudFSMStateHandle handle, SudMGPMGState.MGCustomCrClickSeat model) { + ISudFSMStateHandleUtils.handleSuccess(handle); + } + // endregion 游戏回调APP 3D语聊房 /** * 游戏状态变化 @@ -905,4 +1161,4 @@ public interface SudFSMMGListener { return false; } -} +} \ No newline at end of file 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 082dc1802..9a8bf0f3c 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 @@ -6,6 +6,8 @@ package com.yunbao.common.sud.state; import com.google.gson.annotations.SerializedName; +import com.yunbao.common.bean.SudActivityGameInfoBean; +import com.yunbao.common.bean.SudSettleBean; import java.io.Serializable; import java.util.List; @@ -113,6 +115,24 @@ public class SudMGPMGState implements Serializable { @SerializedName(value = "tr-TR") public String tr_TR; // 土耳其语 + + @SerializedName(value = "pt-PT") + public String pt_PT; // 葡萄语 + + @SerializedName(value = "hi-IN") + public String hi_IN; // 印地语 + + @SerializedName(value = "bn-BD") + public String bn_BD; // 孟加拉语 + + @SerializedName(value = "tl-PH") + public String tl_PH; // 塔加路语(菲律宾) + + @SerializedName(value = "fa-IR") + public String fa_IR; // 波斯语(伊朗) + + @SerializedName(value = "ru-RU") + public String ru_RU; // 俄罗斯语 } public static class MGCommonPublicMessageMsgUser implements Serializable { @@ -169,7 +189,9 @@ public class SudMGPMGState implements Serializable { // 游戏结果玩家列表 public List results; - + public List activityGameInfoBean; + public List sudSettleBeans; + public String achievement; @Override public String toString() { return "MGCommonGameSettle{" + @@ -790,6 +812,178 @@ public class SudMGPMGState implements Serializable { */ public static class MGCommonHideGameScene implements Serializable { } + + /** + * 46. 通知app点击了游戏的金币按钮(赛车) + */ + public static final String MG_COMMON_SELF_CLICK_GOLD_BTN = "mg_common_self_click_gold_btn"; + + /** + * 46. 通知app点击了游戏的金币按钮(赛车) 模型 + */ + public static class MGCommonSelfClickGoldBtn implements Serializable { + } + + /** + * 47. 通知app棋子到达终点(ludo) + */ + public static final String MG_COMMON_GAME_PIECE_ARRIVE_END = "mg_common_game_piece_arrive_end"; + + /** + * 47. 通知app棋子到达终点(ludo) 模型 + */ + public static class MGCommonGamePieceArriveEnd implements Serializable { + public String uid; // 玩家id + public int pieceIndex; // 棋子编号 0 ~ 3 + } + + /** + * 48. 通知app玩家是否托管 + */ + public static final String MG_COMMON_GAME_PLAYER_MANAGED_STATE = "mg_common_game_player_managed_state"; + + /** + * 48. 通知app玩家是否托管 模型 + */ + public static class MGCommonGamePlayerManagedState implements Serializable { + public String uid; // 玩家id + public int managed; // 0: 未托管 1:托管 + } + + /** + * 49. 游戏向app发送爆词 + */ + public static final String MG_COMMON_GAME_SEND_BURST_WORD = "mg_common_game_send_burst_word"; + + /** + * 49. 游戏向app发送爆词 模型 + */ + public static class MGCommonGameSendBurstWord implements Serializable { + public String text; // 爆词 + } + + /** + * 50. 游戏向app发送玩家实时排名(只支持怪物消消乐) + */ + public static final String MG_COMMON_GAME_PLAYER_RANKS = "mg_common_game_player_ranks"; + + /** + * 50. 游戏向app发送玩家实时排名(只支持怪物消消乐) 模型 + */ + public static class MGCommonGamePlayerRanks implements Serializable { + public List ranks; // 所有玩家排名变化推送 + + public static class RanksModel implements Serializable { + public String uid; // 用户id + public int rank; // 排名 + } + } + + /** + * 51. 游戏向app发送玩家即时变化的单双牌(只支持okey101) + */ + public static final String MG_COMMON_GAME_PLAYER_PAIR_SINGULAR = "mg_common_game_player_pair_singular"; + + /** + * 51. 游戏向app发送玩家即时变化的单双牌(只支持okey101) 模型 + */ + public static class MGCommonGamePlayerPairSingular implements Serializable { + public List pairs; // 玩家单双牌推送 + + public static class SingularModel implements Serializable { + public String uid; // 用户id + public int pair; // pair: 1 双,0 单 + } + } + + /** + * 52. 游戏向app发送获取玩家持有的道具卡(只支持大富翁) + */ + public static final String MG_COMMON_GAME_PLAYER_MONOPOLY_CARDS = "mg_common_game_player_monopoly_cards"; + + /** + * 52. 游戏向app发送获取玩家持有的道具卡(只支持大富翁) 模型 + */ + public static class MGCommonGamePlayerMonopolyCards implements Serializable { + } + + /** + * 53. 游戏向app发送玩家实时积分(只支持怪物消消乐) + */ + public static final String MG_COMMON_GAME_PLAYER_SCORES = "mg_common_game_player_scores"; + + /** + * 53. 游戏向app发送玩家实时积分(只支持怪物消消乐) 模型 + */ + public static class MGCommonGamePlayerScores implements Serializable { + public List scores; // 所有玩家积分变化推送 + + public static class ScoresModel implements Serializable { + public String uid; // 用户id + public int score; // 积分 + } + } + + /** + * 54. 游戏通知app销毁游戏(只支持部分概率类游戏) + */ + public static final String MG_COMMON_DESTROY_GAME_SCENE = "mg_common_destroy_game_scene"; + + /** + * 54. 游戏通知app销毁游戏(只支持部分概率类游戏) 模型 + */ + public static class MGCommonDestroyGameScene implements Serializable { + } + + /** + * 55. 游戏通知app击球状态(只支持桌球) + */ + public static final String MG_COMMON_GAME_BILLIARDS_HIT_STATE = "mg_common_game_billiards_hit_state"; + + /** + * 55. 游戏通知app击球状态(只支持桌球) 模型 + */ + public static class MGCommonGameBilliardsHitState implements Serializable { + public String uid; // 操作玩家的id + /** + * state状态说明: + * 0: 母球击空或者第一击没击中目标球 + * 2-7: 连杆 + * 8: 白球进洞 + * 9: 没有足够的撞库数量 + * 10: 开球时进了黑八 + * 11: 提前进了黑八 + * 12: 没有有效进球 + * 13: 有有效进球 + * 14: 超时 + */ + public int state; + } + + /** + * 56. 游戏向app发送获取玩家持有的指定点数道具卡(只支持飞行棋) + */ + public static final String MG_COMMON_GAME_PLAYER_PROPS_CARDS = "mg_common_game_player_props_cards"; + + /** + * 56. 游戏向app发送获取玩家持有的指定点数道具卡(只支持飞行棋) 模型 + */ + public static class MGCommonGamePlayerPropsCards implements Serializable { + } + + /** + * 57. 游戏向app发送获游戏通用数据 + */ + public static final String MG_COMMON_GAME_INFO_X = "mg_common_game_info_x"; + + /** + * 57. 游戏向app发送获游戏通用数据 模型 + */ + public static class MGCommonGameInfoX implements Serializable { + public String eventName; // 事件名称 ,(注:具体游戏参考如下) + public String data; // 具体的数据,为一个JSON字符串, (注:具体游戏参考如下) + } + // endregion 通用状态-游戏 // region MG状态机-通用状态-玩家 @@ -1078,6 +1272,7 @@ public class SudMGPMGState implements Serializable { public static final class MGCommonGameDiscoAction implements Serializable { public int actionId; // 指令序号类型 public boolean isSuccess; // true 指令成功,false 指令失败 + public int errCode; // 返回码 } /** @@ -1426,13 +1621,60 @@ public class SudMGPMGState implements Serializable { // region 棒球 /** - * 1. 查询排行榜数据(棒球) + * 1. 设置界面默认状态(棒球) + */ + public static final String MG_BASEBALL_DEFUALT_STATE = "mg_baseball_defualt_state"; + + /** + * 1. 设置界面默认状态(棒球) 模型 + */ + public static final class MGBaseballDefaultState implements Serializable { + } + + /** + * 2. 前期准备完成(棒球) + * 游戏客户端通知APP指令动作前期准备完成 + */ + public static final String MG_BASEBALL_PREPARE_FINISH = "mg_baseball_prepare_finish"; + + /** + * 2. 前期准备完成(棒球) 模型 + */ + public static final class MGBaseballPrepareFinish implements Serializable { + } + + /** + * 3. 主界面已显示(棒球) + * 游戏客户端通知APP指令动作主界面已显示 + */ + public static final String MG_BASEBALL_SHOW_GAME_SCENE = "mg_baseball_show_game_scene"; + + /** + * 3. 主界面已显示(棒球) 模型 + */ + public static final class MGBaseballShowGameScene implements Serializable { + } + + /** + * 4. 主界面已隐藏(棒球) + * 游戏客户端通知APP指令动作主界面已隐藏 + */ + public static final String MG_BASEBALL_HIDE_GAME_SCENE = "mg_baseball_hide_game_scene"; + + /** + * 4. 主界面已隐藏(棒球) 模型 + */ + public static final class MGBaseballHideGameScene implements Serializable { + } + + /** + * 5. 查询排行榜数据(棒球) * 游戏客户端通知APP查询排行榜数据 */ public static final String MG_BASEBALL_RANKING = "mg_baseball_ranking"; /** - * 1. 查询排行榜数据(棒球) 模型 + * 5. 查询排行榜数据(棒球) 模型 */ public static final class MGBaseballRanking implements Serializable { public int page; // 页数 @@ -1440,89 +1682,65 @@ public class SudMGPMGState implements Serializable { } /** - * 2. 查询我的排名(棒球) + * 6. 查询我的排名(棒球) * 游戏客户端通知APP查询我的排名 */ public static final String MG_BASEBALL_MY_RANKING = "mg_baseball_my_ranking"; /** - * 2. 查询我的排名(棒球) 模型 + * 6. 查询我的排名(棒球) 模型 */ public static final class MGBaseballMyRanking implements Serializable { } /** - * 3. 查询当前距离我的前后玩家数据(棒球) + * 7. 查询当前距离我的前后玩家数据(棒球) * 游戏客户端通知APP查询当前距离我的前后玩家数据(需要排除自己) */ public static final String MG_BASEBALL_RANGE_INFO = "mg_baseball_range_info"; /** - * 3. 查询当前距离我的前后玩家数据(棒球) 模型 + * 7. 查询当前距离我的前后玩家数据(棒球) 模型 */ public static final class MGBaseballRangeInfo implements Serializable { public long distance; // 自己当前的距离 } /** - * 4. 设置app提供给游戏可点击区域(棒球) + * 8. 设置app提供给游戏可点击区域(棒球) * 游戏客户端通知APP指令动作设置点击区域 */ public static final String MG_BASEBALL_SET_CLICK_RECT = "mg_baseball_set_click_rect"; /** - * 4. 设置app提供给游戏可点击区域(棒球) 模型 + * 8. 设置app提供给游戏可点击区域(棒球) 模型 */ public static final class MGBaseballSetClickRect implements Serializable { public List list; } /** - * 5. 前期准备完成(棒球) - * 游戏客户端通知APP指令动作前期准备完成 - */ - public static final String MG_BASEBALL_PREPARE_FINISH = "mg_baseball_prepare_finish"; - - /** - * 5. 前期准备完成(棒球) 模型 - */ - public static final class MGBaseballPrepareFinish implements Serializable { - } - - /** - * 6. 主界面已显示(棒球) - * 游戏客户端通知APP指令动作主界面已显示 - */ - public static final String MG_BASEBALL_SHOW_GAME_SCENE = "mg_baseball_show_game_scene"; - - /** - * 6. 主界面已显示(棒球) 模型 - */ - public static final class MGBaseballShowGameScene implements Serializable { - } - - /** - * 7. 主界面已隐藏(棒球) - * 游戏客户端通知APP指令动作主界面已隐藏 - */ - public static final String MG_BASEBALL_HIDE_GAME_SCENE = "mg_baseball_hide_game_scene"; - - /** - * 7. 主界面已隐藏(棒球) 模型 - */ - public static final class MGBaseballHideGameScene implements Serializable { - } - - /** - * 8. 获取文本配置数据(棒球) + * 9. 获取文本配置数据(棒球) */ public static final String MG_BASEBALL_TEXT_CONFIG = "mg_baseball_text_config"; /** - * 8. 获取文本配置数据(棒球) 模型 + * 9. 获取文本配置数据(棒球) 模型 */ public static final class MGBaseballTextConfig implements Serializable { } + + /** + * 10. 球落地, 通知距离(棒球) + */ + public static final String MG_BASEBALL_SEND_DISTANCE = "mg_baseball_send_distance"; + + /** + * 10. 球落地, 通知距离(棒球) 模型 + */ + public static final class MGBaseballSendDistance implements Serializable { + public int[] distances; + } // endregion 棒球 /** 点击区域定义 */ @@ -1533,4 +1751,29 @@ public class SudMGPMGState implements Serializable { public float height; // 区域的height } -} + // region 3D语聊房 + /** + * 1. 请求房间数据 + */ + public static final String MG_CUSTOM_CR_ROOM_INIT_DATA = "mg_custom_cr_room_init_data"; + + /** + * 1. 请求房间数据 模型 + */ + public static final class MGCustomCrRoomInitData implements Serializable { + } + + /** + * 2. 点击主播位或老板位通知 + */ + public static final String MG_CUSTOM_CR_CLICK_SEAT = "mg_custom_cr_click_seat"; + + /** + * 2. 点击主播位或老板位通知 模型 + */ + public static final class MGCustomCrClickSeat implements Serializable { + public int seatIndex; // 0~4一共5个麦位,0为老板位,1~4为四个面主播位 + } + // endregion 3D语聊房 + +} \ No newline at end of file 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 5fef0e982..f17f77096 100644 --- a/common/src/main/java/com/yunbao/common/utils/RouteUtil.java +++ b/common/src/main/java/com/yunbao/common/utils/RouteUtil.java @@ -10,6 +10,7 @@ import com.yunbao.common.CommonAppConfig; import com.yunbao.common.CommonAppContext; import com.yunbao.common.Constants; import com.yunbao.common.HtmlConfig; +import com.yunbao.common.bean.BaseModel; import com.yunbao.common.bean.LiveBean; import com.yunbao.common.bean.RedPacketListBean; import com.yunbao.common.manager.IMLoginManager; @@ -69,10 +70,10 @@ public class RouteUtil { .navigation(); } - public static void forwardSwSudGameActivity(String CreateSudRoom, boolean isAn, boolean isHome) { + public static void forwardSwSudGameActivity(String CreateSudRoom, boolean isActivityGame, boolean isHome) { ARouter.getInstance().build(PATH_SudSwGameActivity) .withString("CreateSudRoom", CreateSudRoom) - .withBoolean("CreateIsAn", isAn) + .withBoolean("isRandom", isActivityGame) .withBoolean("CreateIsHome", isHome) .navigation(); } 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 b2c36f106..d6d6a11c6 100644 --- a/common/src/main/java/com/yunbao/common/views/SudGameListViewHolder.java +++ b/common/src/main/java/com/yunbao/common/views/SudGameListViewHolder.java @@ -1,5 +1,6 @@ package com.yunbao.common.views; +import android.app.Dialog; import android.content.Intent; import android.os.Handler; import android.text.TextUtils; @@ -19,6 +20,7 @@ import com.yunbao.common.R; import com.yunbao.common.bean.CreateSudRoomModel; import com.yunbao.common.bean.LiveBean; import com.yunbao.common.bean.SudRoomListModel; +import com.yunbao.common.event.CheckCurrencyModel; import com.yunbao.common.event.LiveOpenSudRoomEvent; import com.yunbao.common.event.LiveSudGamePopupShowOrHideEvent; import com.yunbao.common.event.SudGameListDissMissEvent; @@ -28,10 +30,13 @@ import com.yunbao.common.http.HttpCallback; import com.yunbao.common.http.LiveHttpUtil; import com.yunbao.common.http.live.LiveNetManager; import com.yunbao.common.manager.IMLoginManager; +import com.yunbao.common.manager.RandomSudGameManager; import com.yunbao.common.utils.Bus; +import com.yunbao.common.utils.DialogUitl; import com.yunbao.common.utils.LiveRoomCheckLivePresenter; import com.yunbao.common.utils.RouteUtil; import com.yunbao.common.utils.ToastUtil; +import com.yunbao.common.utils.WordUtil; import com.yunbao.common.views.weight.ViewClicksAntiShake; import java.util.Locale; @@ -42,7 +47,8 @@ public class SudGameListViewHolder extends RecyclerView.ViewHolder { private RoundedImageView avatarList1, avatarList2, avatarList3, avatarList4, avatarList5; private ImageView gifImageView; private ImageView sex, game_icon, gold_coin; - + private TextView activityTitle; + private View topLayout; public SudGameListViewHolder(@NonNull View itemView) { super(itemView); @@ -60,6 +66,8 @@ public class SudGameListViewHolder extends RecyclerView.ViewHolder { avatarList5 = itemView.findViewById(R.id.avatar_list5); gold_coin = itemView.findViewById(R.id.gold_coin); sex = itemView.findViewById(R.id.sex); + activityTitle = itemView.findViewById(R.id.activityTitle); + topLayout = itemView.findViewById(R.id.topLayout); avatarList1.setVisibility(View.GONE); avatarList2.setVisibility(View.GONE); avatarList3.setVisibility(View.GONE); @@ -84,6 +92,25 @@ public class SudGameListViewHolder extends RecyclerView.ViewHolder { } else { ImgLoader.display(itemView.getContext(), R.mipmap.gold_coin, gold_coin); } + if (TextUtils.equals(model.getIsActivity(), "1")) { + gold_coin.setVisibility(View.GONE); + goldenBeanNumber.setText(""); + activityTitle.setVisibility(View.VISIBLE); + topLayout.setBackgroundResource(R.mipmap.bg_game_list_activity_top); + if(WordUtil.isNewZh()){ + activityTitle.setTextSize(14); + }else{ + activityTitle.setTextSize(10); + } + } else { + gold_coin.setVisibility(View.VISIBLE); + activityTitle.setVisibility(View.GONE); + if(isHome){ + topLayout.setBackgroundResource(R.drawable.bg_home_sud_list_sill); + }else{ + topLayout.setBackgroundResource(R.drawable.bg_live_sud_list_sill); + } + } ImgLoader.display(itemView.getContext(), model.getSudgameicon(), game_icon); ViewClicksAntiShake.clicksAntiShake(itemView.findViewById(R.id.layout), new ViewClicksAntiShake.ViewClicksCallBack() { @Override @@ -99,80 +126,35 @@ public class SudGameListViewHolder extends RecyclerView.ViewHolder { } Bus.get().post(new SudGameListRefreshEvent()); } else { - CreateSudRoomModel createSudRoomModel = new CreateSudRoomModel(); - createSudRoomModel.setSudGameId(model.getSudGameId()); - createSudRoomModel.setSudGameRoomId(model.getSudGameRoomId()); - createSudRoomModel.setAvatar(model.getAvatar()); - createSudRoomModel.setRoomName(model.getRoomName()); - createSudRoomModel.setSudGameName(model.getSudGameName()); - if (isHome) { - if (TextUtils.equals(model.getLiveUid(), "0")) { - if(CommonAppConfig.getInstance().getConfig().isSw()){ - RouteUtil.forwardSwSudGameActivity(new Gson().toJson(createSudRoomModel),true,isHome); - }else{ - RouteUtil.forwardRySudGameActivity(new Gson().toJson(createSudRoomModel),true,isHome); - } - } else { - String yes = "是"; - if (IMLoginManager.get(itemView.getContext()).getLocaleLanguage() == Locale.SIMPLIFIED_CHINESE) { - yes = "是"; - } else { - yes = "Yes"; - } - new XPopup.Builder(itemView.getContext()) - .asCustom(new HintCustomPopup(itemView.getContext(), - itemView.getContext().getString(R.string.interactive_game_search_room_currently_live), - itemView.getContext().getString(R.string.interactive_game_search_room_broadcast_room)) - .setLiveOpenOk(yes) - .setLiveOpenCancel(itemView.getContext().getString(R.string.interactive_game_search_room_bhe_game)) - .setCallBack(new HintCustomPopup.HintCustomCallBack() { + 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 onSure() { - LiveHttpUtil.getLiveInfo(model.getLiveUid() + "", new HttpCallback() { - @Override - public void onSuccess(int code, String msg, String[] info) { - if (code == 0 && info.length > 0) { - LiveBean liveBean = JSON.parseObject(info[0], LiveBean.class); - new LiveRoomCheckLivePresenter(itemView.getContext(), liveBean.getUid(), liveBean.getStream(), new LiveRoomCheckLivePresenter.NewActionListener() { - @Override - public void onLiveRoomChanged(String liveUid, String stream, int liveType, String liveTypeVal, String liveSdk,boolean isSw) { - RouteUtil.forwardLiveAudienceActivity(liveBean, liveType, Integer.parseInt(liveSdk), Integer.parseInt(liveTypeVal),isSw); - new Handler().postDelayed(new Runnable() { - @Override - public void run() { - Bus.get().post(new LiveOpenSudRoomEvent().setCreateSudRoomModel(createSudRoomModel)); - } - }, 1500); - } - - @Override - public void onCheckError(String contextError) { - - } - }); - } else { - RouteUtil.forwardUserHome(itemView.getContext(), model.getLiveUid(), 0); - } - } - }); + public void onCancelClick() { + toGame(model, isHome, currencyModel,true); } @Override - public void onCancel() { - if(CommonAppConfig.getInstance().getConfig().isSw()){ - RouteUtil.forwardSwSudGameActivity(new Gson().toJson(createSudRoomModel),true,isHome); - }else{ - RouteUtil.forwardRySudGameActivity(new Gson().toJson(createSudRoomModel),true,isHome); - } + public void onConfirmClick(Dialog dialog, String content) { + } - })).show(); + }); + return; + } + toGame(model, isHome, currencyModel,true); + } - } + @Override + public void onError(String error) { + } + }); } else { - - Bus.get().post(new LiveSudGamePopupShowOrHideEvent().setType(0).setCreateSudRoomModel(createSudRoomModel)); - Bus.get().post(new SudGameListDissMissEvent()); + toGame(model, isHome, null,false); } } } @@ -187,4 +169,84 @@ public class SudGameListViewHolder extends RecyclerView.ViewHolder { } }); } + + private void toGame(SudRoomListModel model, boolean isHome, CheckCurrencyModel currencyModel,boolean isActivity) { + + + CreateSudRoomModel createSudRoomModel = new CreateSudRoomModel(); + createSudRoomModel.setSudGameId(model.getSudGameId()); + createSudRoomModel.setSudGameRoomId(model.getSudGameRoomId()); + createSudRoomModel.setAvatar(model.getAvatar()); + createSudRoomModel.setRoomName(model.getRoomName()); + createSudRoomModel.setSudGameName(model.getSudGameName()); + if (isHome) { + if (TextUtils.equals(model.getLiveUid(), "0")) { + if (CommonAppConfig.getInstance().getConfig().isSw()) { + RouteUtil.forwardSwSudGameActivity(new Gson().toJson(createSudRoomModel), isActivity, isHome); + } else { + RouteUtil.forwardRySudGameActivity(new Gson().toJson(createSudRoomModel), true, isHome); + } + } else { + String yes = "是"; + if (IMLoginManager.get(itemView.getContext()).getLocaleLanguage() == Locale.SIMPLIFIED_CHINESE) { + yes = "是"; + } else { + yes = "Yes"; + } + new XPopup.Builder(itemView.getContext()) + .asCustom(new HintCustomPopup(itemView.getContext(), + itemView.getContext().getString(R.string.interactive_game_search_room_currently_live), + itemView.getContext().getString(R.string.interactive_game_search_room_broadcast_room)) + .setLiveOpenOk(yes) + .setLiveOpenCancel(itemView.getContext().getString(R.string.interactive_game_search_room_bhe_game)) + .setCallBack(new HintCustomPopup.HintCustomCallBack() { + @Override + public void onSure() { + LiveHttpUtil.getLiveInfo(model.getLiveUid() + "", new HttpCallback() { + @Override + public void onSuccess(int code, String msg, String[] info) { + if (code == 0 && info.length > 0) { + LiveBean liveBean = JSON.parseObject(info[0], LiveBean.class); + new LiveRoomCheckLivePresenter(itemView.getContext(), liveBean.getUid(), liveBean.getStream(), new LiveRoomCheckLivePresenter.NewActionListener() { + @Override + public void onLiveRoomChanged(String liveUid, String stream, int liveType, String liveTypeVal, String liveSdk, boolean isSw) { + RouteUtil.forwardLiveAudienceActivity(liveBean, liveType, Integer.parseInt(liveSdk), Integer.parseInt(liveTypeVal), isSw); + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + Bus.get().post(new LiveOpenSudRoomEvent().setCreateSudRoomModel(createSudRoomModel)); + } + }, 1500); + } + + @Override + public void onCheckError(String contextError) { + + } + }); + } else { + RouteUtil.forwardUserHome(itemView.getContext(), model.getLiveUid(), 0); + } + } + }); + } + + @Override + public void onCancel() { + if (CommonAppConfig.getInstance().getConfig().isSw()) { + RouteUtil.forwardSwSudGameActivity(new Gson().toJson(createSudRoomModel), true, isHome); + } else { + RouteUtil.forwardRySudGameActivity(new Gson().toJson(createSudRoomModel), true, isHome); + } + } + })).show(); + + } + + } else { + + Bus.get().post(new LiveSudGamePopupShowOrHideEvent().setType(0).setCreateSudRoomModel(createSudRoomModel)); + Bus.get().post(new SudGameListDissMissEvent()); + } + } } diff --git a/common/src/main/res/layout/dialog_sub_double.xml b/common/src/main/res/layout/dialog_sub_double.xml index c86e5a573..5373e212f 100644 --- a/common/src/main/res/layout/dialog_sub_double.xml +++ b/common/src/main/res/layout/dialog_sub_double.xml @@ -2,19 +2,30 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools"> + android:paddingBottom="16dp"> + + @@ -33,9 +44,9 @@ android:id="@+id/sub_win_hat" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_centerHorizontal="true" android:src="@mipmap/sub_win_hat" - android:visibility="gone" - android:layout_centerHorizontal="true"/> + android:visibility="gone" /> + app:riv_border_width="1dp" + app:riv_corner_radius="360dp" /> @@ -54,23 +65,40 @@ android:layout_width="80dp" android:layout_height="wrap_content" android:layout_marginTop="10dp" - android:gravity="center" - android:fontFamily="sans-serif-medium" - android:textColor="@color/white" - android:textSize="13sp" android:ellipsize="end" + android:fontFamily="sans-serif-medium" + android:gravity="center" android:singleLine="true" - android:text="用户昵称哈哈哈"/> + android:text="用户昵称哈哈哈" + android:textColor="@color/white" + android:textSize="13sp" /> + + android:text="+10000" + android:textColor="@color/white_60" + android:textSize="11sp" /> + + + + @@ -80,7 +108,7 @@ android:layout_height="wrap_content" android:layout_marginStart="15dp" android:layout_marginEnd="15dp" - android:src="@mipmap/sub_vs"/> + android:src="@mipmap/sub_vs" /> - - - - - - + + + + + + + app:riv_border_width="1dp" + app:riv_corner_radius="360dp" /> @@ -116,23 +144,36 @@ android:layout_width="80dp" android:layout_height="wrap_content" android:layout_marginTop="10dp" - android:gravity="center" - android:fontFamily="sans-serif-medium" - android:textColor="@color/white" android:ellipsize="end" - android:textSize="13sp" + android:fontFamily="sans-serif-medium" + android:gravity="center" android:singleLine="true" - android:text="用户昵称"/> - + android:text="用户昵称" + android:textColor="@color/white" + android:textSize="13sp" /> + + android:text="+10000" + android:textColor="@color/white_60" + android:textSize="11sp" /> + + + @@ -142,32 +183,32 @@ + android:gravity="center_vertical" + android:orientation="horizontal"> + android:layout_height="40dp" + android:layout_marginEnd="15dp"> + android:src="@mipmap/sub_leave_zh" /> + android:fontFamily="sans-serif-medium" + android:text="10" + android:textColor="#FF5B5B5B" + android:textSize="13sp" /> @@ -176,7 +217,7 @@ android:id="@+id/sub_again" android:layout_width="100dp" android:layout_height="40dp" - android:src="@mipmap/sub_again_zh"/> + android:src="@mipmap/sub_again_zh" /> @@ -184,10 +225,10 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="14dp" - android:textSize="11sp" - android:textColor="@color/white_60" + android:singleLine="true" android:text="@string/sub_admission_fee" - android:singleLine="true"/> + android:textColor="@color/white_60" + android:textSize="11sp" /> diff --git a/common/src/main/res/layout/item_home_sud_game_list.xml b/common/src/main/res/layout/item_home_sud_game_list.xml index de0159c94..c0a2e3851 100644 --- a/common/src/main/res/layout/item_home_sud_game_list.xml +++ b/common/src/main/res/layout/item_home_sud_game_list.xml @@ -1,178 +1,192 @@ - - - - - - - - - - + android:id="@+id/linearLayout4" + android:layout_width="match_parent" + android:layout_height="wrap_content" - + android:layout_marginTop="8dp" + android:background="@mipmap/background_home_sud_game_list" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> - + - + - + + + + + android:layout_height="match_parent" + android:layout_marginStart="16dp" + android:orientation="vertical"> + + + + + + + + + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="6dp" + android:gravity="center_vertical"> - + android:visibility="gone"> - + - + - + - + + + + + + android:visibility="gone" /> + + - - - - + + - - + android:layout_height="0dp" + android:layout_marginTop="8dp" + android:layout_marginEnd="4dp" + android:orientation="vertical" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toTopOf="parent"> + android:gravity="center"> @@ -200,4 +214,21 @@ - \ No newline at end of file + + \ No newline at end of file diff --git a/common/src/main/res/layout/item_sud_game_list.xml b/common/src/main/res/layout/item_sud_game_list.xml index a1a0a66b2..f03264c4a 100644 --- a/common/src/main/res/layout/item_sud_game_list.xml +++ b/common/src/main/res/layout/item_sud_game_list.xml @@ -1,164 +1,176 @@ - - - - - - - - - - + android:id="@+id/linearLayout5" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_marginStart="15dp" + android:layout_marginTop="8dp" + android:layout_marginEnd="15dp" + android:background="@mipmap/background_sud_game_list" + android:orientation="horizontal" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> - + + - + - - - + + + android:layout_height="match_parent" + android:layout_marginStart="16dp" + android:orientation="vertical"> + + + + + + + + + + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="6dp" + android:gravity="center_vertical" + android:visibility="gone"> - + - + - + - + - + + + + + + android:visibility="gone" /> + - - - + - - - + android:layout_marginTop="8dp" + android:orientation="vertical" + app:layout_constraintEnd_toEndOf="@+id/linearLayout5" + app:layout_constraintTop_toTopOf="parent"> - \ No newline at end of file + + + \ No newline at end of file diff --git a/common/src/main/res/mipmap-xxhdpi/bg_game_list_activity_top.png b/common/src/main/res/mipmap-xxhdpi/bg_game_list_activity_top.png new file mode 100644 index 000000000..4659cb35a Binary files /dev/null and b/common/src/main/res/mipmap-xxhdpi/bg_game_list_activity_top.png differ diff --git a/common/src/main/res/mipmap-xxhdpi/ic_game_activity_rank_coin.png b/common/src/main/res/mipmap-xxhdpi/ic_game_activity_rank_coin.png new file mode 100644 index 000000000..3272b1b77 Binary files /dev/null and b/common/src/main/res/mipmap-xxhdpi/ic_game_activity_rank_coin.png differ diff --git a/common/src/main/res/mipmap-xxhdpi/ic_game_ticket.png b/common/src/main/res/mipmap-xxhdpi/ic_game_ticket.png new file mode 100644 index 000000000..3e6f3c707 Binary files /dev/null and b/common/src/main/res/mipmap-xxhdpi/ic_game_ticket.png differ diff --git a/common/src/main/res/values-zh/strings.xml b/common/src/main/res/values-zh/strings.xml index b4627cfe7..2d5e7012b 100644 --- a/common/src/main/res/values-zh/strings.xml +++ b/common/src/main/res/values-zh/strings.xml @@ -1545,5 +1545,15 @@ 違規原因: 處罰內容: 處罰時間: - + 門票 + 挑戰一桿清台,瓜分高額獎金 + 恭喜您本局完成 + 一桿清台 + 1連桿 + 2連桿 + 3連桿 + 4連桿 + 5連桿 + 6連桿 + 7連桿 diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index 979a76d34..cb819fbf7 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -1554,4 +1554,15 @@ Violation reasons: Penalty content: Penalty time: + Ticket + Challenge One-shot clearance Share high bonuses + Your office has completed + One-shotclearance + 1 Combo + 2 Combo + 3 Combo + 4 Combo + 5 Combo + 6 Combo + 7 Combo diff --git a/config.gradle b/config.gradle index d25378708..fd3e2d1e0 100644 --- a/config.gradle +++ b/config.gradle @@ -4,7 +4,7 @@ ext { buildToolsVersion: "29.0.2", minSdkVersion : 23, targetSdkVersion : 34, - versionCode : 692, + versionCode : 693, versionName : "6.8.0" ] manifestPlaceholders = [ 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 ab1fb748b..0fbd5ac34 100644 --- a/live/src/main/java/com/yunbao/live/activity/SudSwGameActivity.java +++ b/live/src/main/java/com/yunbao/live/activity/SudSwGameActivity.java @@ -27,12 +27,14 @@ import com.yunbao.common.R; import com.yunbao.common.activity.AbsActivity; import com.yunbao.common.adapter.SudGameChatAdapter; import com.yunbao.common.adapter.SudGameUserListAdapter; +import com.yunbao.common.bean.BaseModel; import com.yunbao.common.bean.CheckRemainingBalance; import com.yunbao.common.bean.CreateSudRoomModel; import com.yunbao.common.bean.CustomSidebarChildModel; import com.yunbao.common.bean.CustomSidebarInfoModel; import com.yunbao.common.bean.HttpCallbackModel; import com.yunbao.common.bean.RoomMicStatusModel; +import com.yunbao.common.bean.SudActivityGameInfoBean; import com.yunbao.common.bean.SudGameChatImModel; import com.yunbao.common.bean.SudGameInfoBean; import com.yunbao.common.bean.SudGameScoreBean; @@ -49,6 +51,7 @@ import com.yunbao.common.glide.ImgLoader; import com.yunbao.common.http.base.HttpCallback; import com.yunbao.common.http.live.LiveNetManager; import com.yunbao.common.manager.IMLoginManager; +import com.yunbao.common.manager.RandomSudGameManager; import com.yunbao.common.manager.imrongcloud.GameSwMicManager; import com.yunbao.common.sud.QuickStartGameViewModel; import com.yunbao.common.sud.model.GameConfigModel; @@ -248,7 +251,7 @@ public class SudSwGameActivity extends AbsActivity implements GameSwMicManager.M } }); - if(isSw){ + if (isSw) { SWAuManager.get().exitChannelAll(); } if (gameMicManager != null) { @@ -261,14 +264,16 @@ public class SudSwGameActivity extends AbsActivity implements GameSwMicManager.M super.onDestroy(); } - private void initView() { + private boolean isActivityGame; + private void initView() { + isActivityGame = getIntent().getBooleanExtra("isRandom", 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); + gameViewModel.getScore(mCreateSudRoomModel.getSudGameRoomId(), mContext); gameContainer = findViewById(R.id.game_container); roomName = findViewById(R.id.room_name); @@ -432,9 +437,9 @@ public class SudSwGameActivity extends AbsActivity implements GameSwMicManager.M } else { disable = true; // 设置禁用麦克风采集 - if(isSw){ + if (isSw) { SWAuManager.get().setMicAn(false); - }else{ + } else { RCRTCEngine.getInstance().getDefaultAudioStream().setMicrophoneDisable(disable); } ImgLoader.display(mContext, R.mipmap.icon_game_close_wheat, gameCloseWheat); @@ -518,7 +523,9 @@ public class SudSwGameActivity extends AbsActivity implements GameSwMicManager.M sudGameDoubleDialog = new SudGameDoubleDialog(this);//双人游戏 sudGameMultipleDialog = new SudGameMultipleDialog(this);//多人游戏 sudLoadDialog = new SudLoadDialog(this);//加载弹窗 - + if (isActivityGame) { + sudGameDoubleDialog.setActivityGame(); + } //游戏结算结束 gameViewModel.listMutableLiveData.observe(this, sudSettleBeans -> { //观察结算排名数据,点击跳过和再来一局不需要显示结算界面 @@ -538,14 +545,21 @@ public class SudSwGameActivity extends AbsActivity implements GameSwMicManager.M //加载弹窗消失监听,自动消失和点击跳过在这个监听中都不做处理 sudLoadDialog.setOnDismissListener(() -> { - if (sudLoadDialog.getClickStatus() == 2){ + if (sudLoadDialog.getClickStatus() == 2) { Bus.get().post(new CheckRemainingBalanceEvent().setSudMGPMGState(SudMGPMGState.MG_COMMON_SELF_CLICK_GAME_SETTLE_AGAIN_BTN).setSubReady(false)); } }); + //通知活动游戏 + if (isActivityGame) { + RandomSudGameManager.getManager().onInitGame(mCreateSudRoomModel); + } } @Subscribe(threadMode = ThreadMode.MAIN) public void onCheckRemainingBalanceEvent(CheckRemainingBalanceEvent event) { + if (isActivityGame) { + RandomSudGameManager.getManager().onGameState(event); + } switch (event.getSudMGPMGState()) { case SudMGPMGState.MG_COMMON_SELF_CLICK_JOIN_BTN: case SudMGPMGState.MG_COMMON_SELF_CLICK_GAME_SETTLE_AGAIN_BTN: @@ -589,15 +603,45 @@ public class SudSwGameActivity extends AbsActivity implements GameSwMicManager.M //先获取用户信息再进行结算处理 LiveNetManager.get(mContext).getSudGameInfo(mCreateSudRoomModel.getSudGameRoomId(), new HttpCallback>() { @Override - public void onSuccess(List data) { - if (!data.isEmpty()){ - gameViewModel.setSudGameInfoBeanList(data); - gameViewModel.sudGameRank(event.getMgCommonGameSettle());//结算游戏 - }else { + public void onSuccess(List infoBean) { + if (!infoBean.isEmpty()) { + System.out.println("结算,是否为游戏活动:"+isActivityGame); + if(isActivityGame) { + loadScore(infoBean, 3); + }else{ + gameViewModel.setSudGameInfoBeanList(infoBean); + gameViewModel.sudGameRank(event.getMgCommonGameSettle(null));//结算游戏 + } + } else { ToastUtil.show(getString(R.string.net_error)); } } + private void loadScore(List infoBean,int index) { + if(index==0){ + return; + } + LiveNetManager.get(mContext) + .ballClearanceTableGetResultScore(mCreateSudRoomModel.getSudGameRoomId(), new HttpCallback<>() { + @Override + public void onSuccess(List data) { + if (data.isEmpty()) { + new Handler(Looper.getMainLooper()).postDelayed(() -> { + loadScore(infoBean,index-1); + }, 300); + return; + } + gameViewModel.setSudGameInfoBeanList(infoBean); + gameViewModel.sudGameRank(event.getMgCommonGameSettle(data));//结算游戏 + } + + @Override + public void onError(String error) { + + } + }); + } + @Override public void onError(String error) { ToastUtil.show(error); diff --git a/main/src/main/java/com/yunbao/main/activity/BattlePassActivity.java b/main/src/main/java/com/yunbao/main/activity/BattlePassActivity.java index 5f91acbfb..c2de579d4 100644 --- a/main/src/main/java/com/yunbao/main/activity/BattlePassActivity.java +++ b/main/src/main/java/com/yunbao/main/activity/BattlePassActivity.java @@ -263,7 +263,7 @@ public class BattlePassActivity extends AbsActivity { if (data.isBattlePassStatus()) { SpUtil.getInstance().removeValue("is_battle_pass_status"); } - fragments.get(viewPager.getCurrentItem()).updateData(); + // fragments.get(viewPager.getCurrentItem()).updateData(); } 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 73405a834..378690fe4 100644 --- a/main/src/main/java/com/yunbao/main/views/MainHomeViewHolder.java +++ b/main/src/main/java/com/yunbao/main/views/MainHomeViewHolder.java @@ -68,9 +68,10 @@ public class MainHomeViewHolder extends AbsMainHomeParentViewHolder { AppManager.runDebugCode(new Runnable() { @Override public void run() { - new GiftWallDialog(mContext, IMLoginManager.get(mContext).getUserInfo().getId() + "", + /* new GiftWallDialog(mContext, IMLoginManager.get(mContext).getUserInfo().getId() + "", IMLoginManager.get(mContext).getUserInfo().getUserNicename(), null - , false).setFullWindows(true).setTab2(true).showDialog(); + , false).setFullWindows(true).setTab2(true).showDialog();*/ + RouteUtil.forwardBattlePass(); } }); return true;