diff --git a/app/src/main/java/com/shayu/phonelive/AppContext.java b/app/src/main/java/com/shayu/phonelive/AppContext.java index 5ceb3d531..4397e9546 100644 --- a/app/src/main/java/com/shayu/phonelive/AppContext.java +++ b/app/src/main/java/com/shayu/phonelive/AppContext.java @@ -28,6 +28,7 @@ import com.facebook.appevents.AppEventsLogger; import com.fm.openinstall.OpenInstall; import com.google.gson.Gson; import com.yunbao.common.manager.IMLoginManager; +import com.yunbao.common.utils.DebugUtils; import com.yunbao.common.utils.LogUtils; import com.tencent.imsdk.v2.V2TIMGroupMemberInfo; import com.tencent.imsdk.v2.V2TIMManager; @@ -355,7 +356,7 @@ public class AppContext extends CommonAppContext { NeverCrashUtils.getInstance().setDebugMode(BuildConfig.DEBUG).setMainCrashHandler((t, e) -> { Log.e("ApplicationError", "主线程异常");//此处log只是展示,当debug为true时,主类内部log会打印异常信息 e.printStackTrace(); - AppManager.runDebugCode(() -> { + DebugUtils.runDebugCode(() -> { //闪退后finish所有Activity并且杀死进程 for (WeakReference activity : activities) { if (activity != null && activity.get() != null) { diff --git a/app/src/main/java/com/shayu/phonelive/NeverCrashUtils.java b/app/src/main/java/com/shayu/phonelive/NeverCrashUtils.java index b9787b307..4c1b4d4cc 100644 --- a/app/src/main/java/com/shayu/phonelive/NeverCrashUtils.java +++ b/app/src/main/java/com/shayu/phonelive/NeverCrashUtils.java @@ -10,6 +10,7 @@ import android.widget.Toast; import com.yunbao.common.bean.CrashSaveBean; import com.yunbao.common.utils.AppManager; +import com.yunbao.common.utils.DebugUtils; import com.yunbao.common.utils.FileUtil; import com.yunbao.common.utils.SpUtil; @@ -105,10 +106,10 @@ public class NeverCrashUtils { } e.printStackTrace(); AppContext.setFirebaseCrashData(); - AppManager.runDebugCode(() -> Toast.makeText(application, "发生闪退:" + e.getMessage(), Toast.LENGTH_SHORT).show()); + DebugUtils.runDebugCode(() -> Toast.makeText(application, "发生闪退:" + e.getMessage(), Toast.LENGTH_SHORT).show()); FileUtil.saveStringToFile(new File(application.getDir("files", Context.MODE_PRIVATE).getAbsolutePath()), throwableToString(e), "error.log"); getMainCrashHandler().mainException(Looper.getMainLooper().getThread(), e); - AppManager.runDebugCode(() -> errorWhile = false); + DebugUtils.runDebugCode(() -> errorWhile = false); // return; } } diff --git a/common/src/main/java/com/yunbao/common/CommonAppConfig.java b/common/src/main/java/com/yunbao/common/CommonAppConfig.java index 2bf10babe..708e04195 100644 --- a/common/src/main/java/com/yunbao/common/CommonAppConfig.java +++ b/common/src/main/java/com/yunbao/common/CommonAppConfig.java @@ -669,5 +669,7 @@ public class CommonAppConfig { public String getAnchorPkTime() { return SpUtil.getInstance().getStringValue(SpUtil.ANCHOR_PK_TIME); } - + public static boolean isTestEnv() { + return CommonAppConfig.HOST.contains("ceshi"); + } } diff --git a/common/src/main/java/com/yunbao/common/adapter/GiftWallGiftInfoListItemAdapter.java b/common/src/main/java/com/yunbao/common/adapter/GiftWallGiftInfoListItemAdapter.java index d49706220..a5a510e02 100644 --- a/common/src/main/java/com/yunbao/common/adapter/GiftWallGiftInfoListItemAdapter.java +++ b/common/src/main/java/com/yunbao/common/adapter/GiftWallGiftInfoListItemAdapter.java @@ -1,6 +1,9 @@ package com.yunbao.common.adapter; +import android.content.Context; import android.graphics.Color; +import android.os.Handler; +import android.os.Looper; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -9,12 +12,17 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; +import com.blankj.utilcode.util.LogUtils; import com.makeramen.roundedimageview.RoundedImageView; import com.yunbao.common.R; import com.yunbao.common.bean.GiftWallInfoBean; +import com.yunbao.common.bean.GiftWallTab2Bean; +import com.yunbao.common.dialog.GiftWallMainTab2ClassicInfoDialog; import com.yunbao.common.glide.ImgLoader; +import com.yunbao.common.interfaces.OnItemClickListener; import com.yunbao.common.manager.IMLoginManager; import com.yunbao.common.utils.WordUtil; +import com.yunbao.common.views.weight.ViewClicksAntiShake; import java.util.ArrayList; import java.util.List; @@ -27,8 +35,23 @@ public class GiftWallGiftInfoListItemAdapter extends RecyclerView.Adapter onItemClickListener; + + public GiftWallGiftInfoListItemAdapter(Context mContext) { + this.mContext = mContext; + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.onItemClickListener = onItemClickListener; + } + + public void setGiftId(int giftId) { + this.giftId = giftId; + } public void setAnchorName(String anchorName) { this.anchorName = anchorName; @@ -71,9 +94,20 @@ public class GiftWallGiftInfoListItemAdapter extends RecyclerView.Adapter 0) && data.get(0).getId() != -1 && list_type == 2) { + return 1; + } + return 0; + } + @NonNull @Override public VH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + if (viewType == 1) { + return new VH2(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_dialog_gift_wall_gift_info2, parent, false)); + } return new VH(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_dialog_gift_wall_gift_info, parent, false)); } @@ -156,4 +190,41 @@ public class GiftWallGiftInfoListItemAdapter extends RecyclerView.Adapter list) { + data=new ArrayList<>(); + for (GiftWallInfoBean.Data item : list) { + GiftData gift=new GiftData(); + gift.setUserId(item.user_id); + gift.setAvatar(item.getAvatar()); + gift.setCreateTime(item.getCreate_time()); + gift.setLiveAvatar(item.getLive_avatar()); + gift.setActiveRankHide(item.getGift_hall_rank_hide()); + gift.setLiveUserName(item.getLive_user_name()); + gift.setGiftHallSendNum(item.getGift_hall_send_num()); + gift.setNaming_user_gift_hall_rank_hide(item.getGift_hall_rank_hide()); + gift.setUserName(item.getUser_name()); + data.add(gift); + } + } + // 内部类:GiftInfo public static class GiftInfo { 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/SudGameAiInfo.java b/common/src/main/java/com/yunbao/common/bean/SudGameAiInfo.java new file mode 100644 index 000000000..cf00aadec --- /dev/null +++ b/common/src/main/java/com/yunbao/common/bean/SudGameAiInfo.java @@ -0,0 +1,24 @@ +package com.yunbao.common.bean; + +import com.google.gson.annotations.SerializedName; + +import java.util.ArrayList; +import java.util.List; + +public class SudGameAiInfo extends BaseModel{ + @SerializedName("uids") + private List uids; + + public SudGameAiInfo() { + } + + public List getUids() { + if(uids==null) + uids=new ArrayList<>(); + return uids; + } + + public void setUids(List uids) { + this.uids = uids; + } +} diff --git a/common/src/main/java/com/yunbao/common/bean/SudGameRoomInfoBean.java b/common/src/main/java/com/yunbao/common/bean/SudGameRoomInfoBean.java new file mode 100644 index 000000000..a889641c7 --- /dev/null +++ b/common/src/main/java/com/yunbao/common/bean/SudGameRoomInfoBean.java @@ -0,0 +1,117 @@ +package com.yunbao.common.bean; + +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +public class SudGameRoomInfoBean extends BaseModel{ + public static final String STATUS_WAITING = "WATING"; + public static final String STATUS_PLAYING = "PLAYING"; + @SerializedName("status") + private String status=""; + + @SerializedName("captain_uid") + private String captainUid; + + @SerializedName("player") + private List players; + + // 注意:这里没有getter和setter方法 + // 可以添加一个构造方法或其他方法来初始化对象(如果需要) + + public SudGameRoomInfoBean() { + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getCaptainUid() { + return captainUid; + } + + public void setCaptainUid(String captainUid) { + this.captainUid = captainUid; + } + + public List getPlayers() { + return players; + } + + public void setPlayers(List players) { + this.players = players; + } + + // 嵌套类来表示游戏位玩家 + public static class Player { + public static final String PLAYER_STATUS_READY = "READY"; + public static final String PLAYER_STATUS_IDLE = "IDLE"; + @SerializedName("uid") + private String uid; + + @SerializedName("seat_index") + private int seatIndex; + + @SerializedName("status") + private String status=""; + + @SerializedName("is_ai") + private int isAi; + + @SerializedName("ai_level") + private int aiLevel; + + // 同样,这里没有getter和setter方法 + + // 可以根据需要添加构造方法或其他方法 + + public Player() { + } + + public String getUid() { + return uid; + } + + public void setUid(String uid) { + this.uid = uid; + } + + public int getSeatIndex() { + return seatIndex; + } + + public void setSeatIndex(int seatIndex) { + this.seatIndex = seatIndex; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public int getIsAi() { + return isAi; + } + + public void setIsAi(int isAi) { + this.isAi = isAi; + } + + public int getAiLevel() { + return aiLevel; + } + + public void setAiLevel(int aiLevel) { + this.aiLevel = aiLevel; + } + } + + // 如果需要,可以添加其他方法来操作这些数据 +} diff --git a/common/src/main/java/com/yunbao/common/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..8f86de763 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; @@ -16,6 +21,7 @@ import android.widget.TextView; import androidx.annotation.NonNull; +import com.blankj.utilcode.util.LogUtils; import com.google.gson.Gson; import com.lxj.xpopup.XPopup; import com.lxj.xpopup.core.BottomPopupView; @@ -32,7 +38,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 +103,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 +117,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 +223,8 @@ public class CreateSudGamePopup extends BottomPopupView { ToastUtil.show("貨幣數量区间为[10 - 1000]"); } else { ToastUtil.show("Currency quantity range [10-1000]"); - } } + } + } return; } @@ -245,7 +256,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 +285,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, false); + 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, false, isHome); + } else { + RouteUtil.forwardRySudGameActivity(new Gson().toJson(data), true, isHome); } } else { Bus.get().post(new LiveSudGamePopupShowOrHideEvent().setType(0).setCreateSudRoomModel(data)); @@ -299,6 +321,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 +363,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 +374,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 +392,11 @@ public class CreateSudGamePopup extends BottomPopupView { } - } }); } + private void closeAnimSudGameListEvent() { ObjectAnimator animator = ObjectAnimator.ofFloat(roomGameArrow, "rotation", 90f, 0f); animator.setDuration(animDuration); @@ -384,7 +415,14 @@ public class CreateSudGamePopup extends BottomPopupView { interactionID = event.getInteractionID(); createGameType.setText(event.getTitle()); id = event.getId(); - + gameSill.setEnabled(true); + gameSill.setText(""); + LogUtils.e(id,currencyType); + if (!currencyModel.getActivityList().contains(id) && "4".equals(currencyType)) { + currencyType = "3"; + currencyTypeName = WordUtil.getNewString(R.string.golden_bean); + selectCurrencyType.setText(currencyTypeName); + } } @Subscribe(threadMode = ThreadMode.MAIN) @@ -397,5 +435,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/GiftWallGiftInfoDialog.java b/common/src/main/java/com/yunbao/common/dialog/GiftWallGiftInfoDialog.java index 3ca287050..03c22ea72 100644 --- a/common/src/main/java/com/yunbao/common/dialog/GiftWallGiftInfoDialog.java +++ b/common/src/main/java/com/yunbao/common/dialog/GiftWallGiftInfoDialog.java @@ -26,6 +26,7 @@ import com.opensource.svgaplayer.SVGAVideoEntity; import com.yunbao.common.R; import com.yunbao.common.adapter.GiftWallGiftInfoListItemAdapter; import com.yunbao.common.bean.GiftWallInfoBean; +import com.yunbao.common.bean.GiftWallTab2Bean; import com.yunbao.common.bean.JsWishBean; import com.yunbao.common.custom.ItemDecoration; import com.yunbao.common.event.ClosePopupDialogEvent; @@ -37,6 +38,7 @@ import com.yunbao.common.manager.IMLoginManager; import com.yunbao.common.utils.Bus; import com.yunbao.common.utils.DpUtil; import com.yunbao.common.utils.ScreenDimenUtil; +import com.yunbao.common.utils.ViewUtils; import com.yunbao.common.utils.WordUtil; import com.yunbao.common.views.weight.ViewClicksAntiShake; @@ -67,6 +69,7 @@ public class GiftWallGiftInfoDialog extends AbsDialogPopupWindow { View bottom_layout; View gift_schedule; ImageView diamond_icon; + View titleLayout, titleLayout2; GiftWallGiftInfoListItemAdapter adapter; RecyclerView recyclerView; @@ -167,10 +170,28 @@ public class GiftWallGiftInfoDialog extends AbsDialogPopupWindow { tab_layout = findViewById(R.id.tab_layout); bottom_layout = findViewById(R.id.bottom_layout); gift_schedule = findViewById(R.id.gift_schedule); - adapter = new GiftWallGiftInfoListItemAdapter(); + titleLayout = findViewById(R.id.list_title); + titleLayout2 = findViewById(R.id.list_title2); + adapter = new GiftWallGiftInfoListItemAdapter(mContext); adapter.setAnchor(isAnchor); adapter.setLiveRoom(isLiveRoom); adapter.setStar(isStar); + adapter.setOnItemClickListener(new OnItemClickListener() { + @Override + public void onItemClick(GiftWallTab2Bean.Gift bean, int position) { + new GiftWallMainTab2ClassicInfoDialog(mContext, bean, isAnchor) + .setFullWindows(!isLiveRoom) + .setRank(position+1) + .setGiftWallGiftInfoDialog(new GiftWallGiftInfoDialog(mContext, giftId, toUserId, isAnchor) + .setFullWindows(isFullWindows) + .setAnchorId(anchorId) + .setTab2Enter(isTab2Enter) + .setLiveRoom(isLiveRoom) + .setStar(isStar)) + .showDialog(); + dismiss(); + } + }); recyclerView.setAdapter(adapter); recyclerView.addItemDecoration(new ItemDecoration(mContext, 0x00000000, 0, 10)); @@ -191,11 +212,13 @@ public class GiftWallGiftInfoDialog extends AbsDialogPopupWindow { adapter.setList_type(list_type); ((TextView) findViewById(R.id.user_name)).setText(WordUtil.getNewString(R.string.dialog_gift_wall_assistance_user)); ((TextView) findViewById(R.id.tv_rename)).setText(WordUtil.getNewString(R.string.dialog_gift_wall_assistance_star)); + + titleLayout2.setVisibility(View.GONE); + titleLayout.setVisibility(View.VISIBLE); + user_name.setText(IMLoginManager.get(mContext).getUserInfo().getUserNicename()); initData(); }); ViewClicksAntiShake.clicksAntiShake(tab2, () -> { - btn_one.setVisibility(View.VISIBLE); - btn_one_tips.setVisibility(View.VISIBLE); tab2.setBackgroundResource(R.drawable.gift_wall_gift_info_list_btn_up); tab2.setTextColor(Color.parseColor("#31326D")); @@ -204,7 +227,19 @@ public class GiftWallGiftInfoDialog extends AbsDialogPopupWindow { tab1.setTextColor(Color.parseColor("#FFFFFF")); list_type = 2; adapter.setList_type(list_type); + if (isStar && list_type == 2) { + btn_one.setVisibility(View.GONE); + btn_one_tips.setVisibility(View.GONE); + titleLayout.setVisibility(View.GONE); + titleLayout2.setVisibility(View.VISIBLE); + } else { + btn_one.setVisibility(View.VISIBLE); + btn_one_tips.setVisibility(View.VISIBLE); + titleLayout.setVisibility(View.VISIBLE); + } + initTabText(); + initData(); }); XPopup.Builder builder = new XPopup.Builder(getContext()) @@ -251,6 +286,9 @@ public class GiftWallGiftInfoDialog extends AbsDialogPopupWindow { mIvBack.setLayoutParams(params); ViewClicksAntiShake.clicksAntiShake(mIvBack, this::dismiss); resetWindows(); + if (isStar && list_type == 2) { + findViewById(R.id.anchorTips).setVisibility(View.VISIBLE); + } } private void initTabText() { @@ -259,7 +297,11 @@ public class GiftWallGiftInfoDialog extends AbsDialogPopupWindow { ((TextView) findViewById(R.id.user_name)).setText(WordUtil.getNewString(R.string.dialog_gift_wall_list_info_list_header_rename1)); ((TextView) findViewById(R.id.tv_rename)).setText(WordUtil.getNewString(R.string.dialog_gift_wall_list_info_list_header_rename_value1)); tv_list_title.setText(WordUtil.getNewString(R.string.dialog_gift_wall_gfit_info_list_title_star)); + titleLayout.setVisibility(View.GONE); + titleLayout2.setVisibility(View.VISIBLE); } else { + titleLayout.setVisibility(VISIBLE); + titleLayout2.setVisibility(View.GONE); tab2.setText(WordUtil.getNewString(R.string.dialog_gift_wall_gfit_info_list_title_champion)); tv_list_title.setText(WordUtil.getNewString(R.string.dialog_gift_wall_gfit_info_list_title_champion)); ((TextView) findViewById(R.id.user_name)).setText(WordUtil.getNewString(R.string.dialog_gift_wall_list_info_list_header_rename)); @@ -336,6 +378,7 @@ public class GiftWallGiftInfoDialog extends AbsDialogPopupWindow { btn_lighten.setBackgroundResource(R.drawable.gift_wall_gift_info_un_lighten); } adapter.setGiftStatus(giftBean.getGift_info().getIlluminate_status()); + adapter.setGiftId(giftBean.getGift_info().getGift_id()); /** * 如果对方是主播,要有点亮标记。 * 如果对方是用户,不要有点亮标记 @@ -371,12 +414,34 @@ public class GiftWallGiftInfoDialog extends AbsDialogPopupWindow { } adapter.setData(giftBean.getData()); time = (WordUtil.isNewZh() ? "榜單結算時間:" : "Settlement time:") + giftBean.getGift_info().getGift_hall_start() + " - " + giftBean.getGift_info().getGift_hall_end(); - ImgLoader.display(mContext, IMLoginManager.get(mContext).getUserInfo().getAvatar(), avatar); - user_name.setText(IMLoginManager.get(mContext).getUserInfo().getUserNicename()); - send_num.setText(String.format(Locale.getDefault(), "%s", giftBean.getGift_info().getUser_gift_hall_send_num())); + + if (isStar && list_type == 2) { + user_name.setText(giftBean.getGift_info().getLive_nicename()); + send_num.setText(String.format(Locale.getDefault(), "%s", giftBean.getGift_info().getGift_hall_send_num())); + ImgLoader.display(mContext, giftBean.getGift_info().getLive_avatar(), avatar); + findViewById(R.id.anchorTips).setVisibility(View.VISIBLE); + ViewUtils.findViewById(this, R.id.textView7, TextView.class).setText(WordUtil.getNewString(R.string.dialog_gift_wall_gfit_info_list_bottom_tips3)); + if (giftBean.getGift_info().getLive_sort() == 0) { + ViewUtils.findViewById(this, R.id.bottom_rank_value, TextView.class).setText(WordUtil.isNewZh() ? "未上榜" : "Not listed"); + } else { + ViewUtils.findViewById(this, R.id.bottom_rank_value, TextView.class).setText(String.valueOf(giftBean.getGift_info().getLive_sort())); + } + findViewById(R.id.bottom_rank_layout).setVisibility(View.VISIBLE); + + } else { + ImgLoader.display(mContext, IMLoginManager.get(mContext).getUserInfo().getAvatar(), avatar); + user_name.setText(IMLoginManager.get(mContext).getUserInfo().getUserNicename()); + send_num.setText(String.format(Locale.getDefault(), "%s", giftBean.getGift_info().getUser_gift_hall_send_num())); + findViewById(R.id.anchorTips).setVisibility(View.GONE); + ViewUtils.findViewById(this, R.id.textView7, TextView.class).setText(WordUtil.getNewString(R.string.dialog_gift_wall_gfit_info_list_bottom_send)); + findViewById(R.id.bottom_rank_layout).setVisibility(View.GONE); + } String tmp = ""; if (giftBean.getGift_info().getIlluminate_status() != 1) {//未點亮 + if(list_type==2) { + btn_one.setVisibility(View.VISIBLE); + } btn_one.setText(R.string.dialog_gift_wall_gfit_info_list_bottom_btn_one_light); tmp = String.format(Locale.getDefault(), "%s", (giftBean.getGift_info().getIlluminate_num() - Integer.parseInt(giftBean.getGift_info().getGift_hall_send_num()))); setTips(tmp); @@ -392,7 +457,14 @@ public class GiftWallGiftInfoDialog extends AbsDialogPopupWindow { } private void setTips(String tmp) { - btn_one_tips.setVisibility(View.VISIBLE); + if (isStar && list_type == 2) { + btn_one.setVisibility(View.GONE); + btn_one_tips.setVisibility(View.GONE); + return; + } + if (btn_one.getVisibility() == VISIBLE) { + btn_one_tips.setVisibility(View.VISIBLE); + } btn_one_tips.setText(String.format(Locale.getDefault(), "%s%s%s" , WordUtil.isNewZh() ? "需 " : "Need ", tmp, @@ -410,6 +482,9 @@ public class GiftWallGiftInfoDialog extends AbsDialogPopupWindow { btn_one.setText(WordUtil.getNewString(R.string.dialog_gift_wall_gfit_info_list_bottom_btn_one_champion_get)); btn_one_tips.setVisibility(View.GONE); } else { + if(list_type==2) { + btn_one.setVisibility(View.VISIBLE); + } btn_one.setText(WordUtil.getNewString(R.string.dialog_gift_wall_gfit_info_list_bottom_btn_one_champion)); setTips(String.valueOf(tmp)); } diff --git a/common/src/main/java/com/yunbao/common/dialog/GiftWallMainTab2ClassicInfoDialog.java b/common/src/main/java/com/yunbao/common/dialog/GiftWallMainTab2ClassicInfoDialog.java index 9c42cc9e8..1670208bb 100644 --- a/common/src/main/java/com/yunbao/common/dialog/GiftWallMainTab2ClassicInfoDialog.java +++ b/common/src/main/java/com/yunbao/common/dialog/GiftWallMainTab2ClassicInfoDialog.java @@ -21,6 +21,7 @@ import com.lxj.xpopup.XPopup; import com.makeramen.roundedimageview.RoundedImageView; import com.yunbao.common.R; import com.yunbao.common.adapter.GiftWallTab2GiftInfoListItemAdapter; +import com.yunbao.common.bean.GiftWallInfoBean; import com.yunbao.common.bean.GiftWallMainTab2ClassicInfoBean; import com.yunbao.common.bean.GiftWallTab2Bean; import com.yunbao.common.custom.ItemDecoration; @@ -35,6 +36,7 @@ import com.yunbao.common.utils.DpUtil; import com.yunbao.common.utils.RouteUtil; import com.yunbao.common.utils.ScreenDimenUtil; import com.yunbao.common.utils.ToastUtil; +import com.yunbao.common.utils.ViewUtils; import com.yunbao.common.utils.WordUtil; import com.yunbao.common.views.CustomEllipsizeTextView; import com.yunbao.common.views.weight.ViewClicksAntiShake; @@ -67,6 +69,8 @@ public class GiftWallMainTab2ClassicInfoDialog extends AbsDialogPopupWindow { GiftWallTab2Bean.Gift gift; String userName; boolean isAnchor; + GiftWallGiftInfoDialog giftWallGiftInfoDialog; + int rank; public GiftWallMainTab2ClassicInfoDialog(@NonNull Context context, GiftWallTab2Bean.Gift gift, boolean isAnchor) { super(context); @@ -80,6 +84,24 @@ public class GiftWallMainTab2ClassicInfoDialog extends AbsDialogPopupWindow { return this; } + public GiftWallMainTab2ClassicInfoDialog setRank(int rank) { + this.rank = rank; + return this; + } + + public GiftWallMainTab2ClassicInfoDialog setGiftWallGiftInfoDialog(GiftWallGiftInfoDialog giftWallGiftInfoDialog) { + this.giftWallGiftInfoDialog = giftWallGiftInfoDialog; + return this; + } + + @Override + protected void onDismiss() { + super.onDismiss(); + if (giftWallGiftInfoDialog != null) { + giftWallGiftInfoDialog.showDialog(); + } + } + @Override public void buildDialog(XPopup.Builder builder) { @@ -100,17 +122,37 @@ public class GiftWallMainTab2ClassicInfoDialog extends AbsDialogPopupWindow { } void initData() { - LiveNetManager.get(mContext).lastAllGiftHallWeekStarDetail(gift.getGiftId() + "", gift.getNamingLiveId() + "", new HttpCallback() { - @Override - public void onSuccess(GiftWallMainTab2ClassicInfoBean data) { - initData(data); - } + if (gift.getSendType() == -1) { + LiveNetManager.get(mContext) + .liveGiftHallDetail(gift.getNamingLiveId() + "", gift.getGiftId() + "", 2, 1, new HttpCallback() { + @Override + public void onSuccess(GiftWallInfoBean data) { + GiftWallMainTab2ClassicInfoBean infoBean = new GiftWallMainTab2ClassicInfoBean(); + infoBean.setIsMe(data.getIs_me()); + infoBean.setWallInfoGiftInfo(data.getGift_info(), gift); + infoBean.setWallInfoData(data.getData()); + initData(infoBean); + } - @Override - public void onError(String error) { + @Override + public void onError(String error) { - } - }); + } + }); + return; + } + LiveNetManager.get(mContext).lastAllGiftHallWeekStarDetail(gift.getGiftId() + "", + gift.getNamingLiveId() + "", new HttpCallback() { + @Override + public void onSuccess(GiftWallMainTab2ClassicInfoBean data) { + initData(data); + } + + @Override + public void onError(String error) { + + } + }); } void initData(GiftWallMainTab2ClassicInfoBean data) { @@ -149,6 +191,12 @@ public class GiftWallMainTab2ClassicInfoDialog extends AbsDialogPopupWindow { } } }); + if (giftWallGiftInfoDialog == null) { + ViewUtils.findViewById(this, R.id.tv_rank, TextView.class).setText(WordUtil.getNewString(R.string.dialog_gift_wall_gfit_info_list_bottom_tips4)); + ViewUtils.findViewById(this, R.id.rank_value, TextView.class).setText("1"); + } else { + ViewUtils.findViewById(this, R.id.rank_value, TextView.class).setText(String.valueOf(rank)); + } } void setTopData(GiftWallMainTab2ClassicInfoBean.GiftData data, ImageView avatar, TextView name, TextView value) { 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..ba35e7c9b 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,21 +80,23 @@ 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-> { - Bus.get().post(new CheckRemainingBalanceEvent().setSudMGPMGState(SudMGPMGState.MG_COMMON_SELF_CLICK_GAME_SETTLE_AGAIN_BTN).setSubReady(false)); + sub_leave.setOnClickListener(v -> destroyDialog()); + sub_again.setOnClickListener(v -> { + Bus.get().post(new CheckRemainingBalanceEvent(null).setSudMGPMGState(SudMGPMGState.MG_COMMON_SELF_CLICK_GAME_SETTLE_AGAIN_BTN).setSubReady(false)); destroyDialog(); }); @@ -86,30 +104,57 @@ public class SudGameDoubleDialog extends AbsDialogCenterPopupWindow{ @SuppressLint("SetTextI18n") private void initData() { - if (settleBeans.size() == 2){ + sub_win_score.setVisibility(View.VISIBLE); + sub_win_name.setVisibility(View.VISIBLE); + sub_loss_score.setVisibility(View.VISIBLE); + sub_loss_name.setVisibility(View.VISIBLE); + winActivityIcon.setVisibility(View.VISIBLE); + lossActivityIcon.setVisibility(View.VISIBLE); + 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(); - + String myUid = CommonAppConfig.getInstance().getUid(); + LogUtils.e("isFirstMe:" + isFirstMe); + if (isActivityGame) { + findViewById(R.id.tips).setVisibility(View.INVISIBLE); + } 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); @@ -119,16 +164,30 @@ public class SudGameDoubleDialog extends AbsDialogCenterPopupWindow{ sub_title.setImageResource(isZh ? (isFirstMe ? R.mipmap.sub_win_zh : R.mipmap.sub_loss_zh) : (isFirstMe ? R.mipmap.sub_win_en : R.mipmap.sub_loss_en)); sub_win_hat.setVisibility(View.VISIBLE); } + if (isActivityGame) { + if (sudSettleBean1.getUid().equals(myUid)) { + sub_loss_score.setVisibility(View.INVISIBLE); + lossActivityIcon.setVisibility(View.INVISIBLE); + } else { + sub_win_score.setVisibility(View.INVISIBLE); + winActivityIcon.setVisibility(View.INVISIBLE); + } + } } else { // 当前用户不在游戏中 ImgLoader.display(mContext, sudSettleBean1.getAvatar_url(), sub_win_head); ImgLoader.display(mContext, sudSettleBean2.getAvatar_url(), sub_loss_head); sub_win_name.setText(sudSettleBean1.getNick_name()); sub_loss_name.setText(sudSettleBean2.getNick_name()); - - sub_win_score.setText(sudSettleBean1.getWin_num() > 0 ? "+" + sudSettleBean1.getWin_num() : String.valueOf(sudSettleBean1.getWin_num())); - sub_loss_score.setText(String.valueOf(sudSettleBean2.getWin_num())); - + if (isActivityGame) { + Map map = showActivityGameScore(); + if (!map.isEmpty()) { + isDraw = map.get("win").intValue() == map.get("loss").intValue(); + } + } else { + sub_win_score.setText(sudSettleBean1.getWin_num() > 0 ? "+" + sudSettleBean1.getWin_num() : String.valueOf(sudSettleBean1.getWin_num())); + sub_loss_score.setText(String.valueOf(sudSettleBean2.getWin_num())); + } if (isDraw) { // 平局 sub_title.setImageResource(isZh ? R.mipmap.sub_draw_zh : R.mipmap.sub_draw_en); @@ -138,11 +197,59 @@ public class SudGameDoubleDialog extends AbsDialogCenterPopupWindow{ sub_title.setImageResource(isZh ? R.mipmap.sub_win_zh : R.mipmap.sub_win_en); sub_win_hat.setVisibility(View.VISIBLE); } + if (isActivityGame) { + sub_win_score.setVisibility(View.INVISIBLE); + winActivityIcon.setVisibility(View.INVISIBLE); + sub_loss_score.setVisibility(View.INVISIBLE); + lossActivityIcon.setVisibility(View.INVISIBLE); + } } } + 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); + } + if (sub_loss_score.getVisibility() == View.VISIBLE) { + lossActivityIcon.setVisibility(View.VISIBLE); + } + if (sub_win_score.getVisibility() == View.VISIBLE) { + winActivityIcon.setVisibility(View.VISIBLE); + } + if(!containMe){ + sub_win_score.setVisibility(View.INVISIBLE); + winActivityIcon.setVisibility(View.INVISIBLE); + sub_loss_score.setVisibility(View.INVISIBLE); + lossActivityIcon.setVisibility(View.INVISIBLE); + } + + } } - 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 +257,11 @@ public class SudGameDoubleDialog extends AbsDialogCenterPopupWindow{ protected void onShow() { super.onShow(); //关闭倒计时 - countDownTimer = new CountDownTimer(10000, 1000){ + countDownTimer = new CountDownTimer(10000, 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 +272,40 @@ 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 列表 + if (isActivityGame) { + for (SudActivityGameInfoBean infoBean : gameSettle.activityGameInfoBean) { + for (SudSettleBean bean : list) { + if (bean.getUid().equals(infoBean.getUid() + "")) { + bean.setWin_num(infoBean.getScore()); + break; + } + } + } + } Collections.sort(list, (bean1, bean2) -> { return Integer.compare(bean2.getWin_num(), bean1.getWin_num()); // 从大到小排序 }); + 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..80340d344 100644 --- a/common/src/main/java/com/yunbao/common/dialog/SudGameMultipleDialog.java +++ b/common/src/main/java/com/yunbao/common/dialog/SudGameMultipleDialog.java @@ -65,7 +65,7 @@ public class SudGameMultipleDialog extends AbsDialogCenterPopupWindow{ sub_leave.setOnClickListener(v-> destroyDialog()); sub_again.setOnClickListener(v-> { - Bus.get().post(new CheckRemainingBalanceEvent().setSudMGPMGState(SudMGPMGState.MG_COMMON_SELF_CLICK_GAME_SETTLE_AGAIN_BTN).setSubReady(false)); + Bus.get().post(new CheckRemainingBalanceEvent(null).setSudMGPMGState(SudMGPMGState.MG_COMMON_SELF_CLICK_GAME_SETTLE_AGAIN_BTN).setSubReady(false)); destroyDialog(); }); @@ -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/dialog/SudGameSearchDialogPopup.java b/common/src/main/java/com/yunbao/common/dialog/SudGameSearchDialogPopup.java index 659f64d60..ad52f75f1 100644 --- a/common/src/main/java/com/yunbao/common/dialog/SudGameSearchDialogPopup.java +++ b/common/src/main/java/com/yunbao/common/dialog/SudGameSearchDialogPopup.java @@ -56,7 +56,6 @@ public class SudGameSearchDialogPopup extends AbsDialogPopupWindow { @Override public void dismiss() { - Bus.getOff(this); super.dismiss(); } @@ -78,7 +77,6 @@ public class SudGameSearchDialogPopup extends AbsDialogPopupWindow { @Override protected void onCreate() { super.onCreate(); - Bus.getOn(this); editSearch = findViewById(R.id.edit_search); // listHistory = findViewById(R.id.list_history); listRoom = findViewById(R.id.list_room); diff --git a/common/src/main/java/com/yunbao/common/dialog/SudLoadDialog.java b/common/src/main/java/com/yunbao/common/dialog/SudLoadDialog.java index d0e074dcc..5a02e5b8b 100644 --- a/common/src/main/java/com/yunbao/common/dialog/SudLoadDialog.java +++ b/common/src/main/java/com/yunbao/common/dialog/SudLoadDialog.java @@ -1,24 +1,28 @@ package com.yunbao.common.dialog; import android.content.Context; +import android.os.Handler; +import android.os.Looper; import android.view.View; import android.widget.ProgressBar; + import androidx.annotation.NonNull; import androidx.appcompat.widget.AppCompatImageView; import androidx.appcompat.widget.LinearLayoutCompat; import androidx.core.content.ContextCompat; + import com.lxj.xpopup.XPopup; import com.yunbao.common.R; import com.yunbao.common.utils.WordUtil; -public class SudLoadDialog extends AbsDialogCenterPopupWindow{ +public class SudLoadDialog extends AbsDialogCenterPopupWindow { public SudLoadDialog(@NonNull Context context) { super(context); } private LinearLayoutCompat sud_load_bg; - private AppCompatImageView sud_load,sud_load_skip,sud_load_again; - private ProgressBar sud_load_bar_double,sud_load_bar_multiple; + private AppCompatImageView sud_load, sud_load_skip, sud_load_again; + private ProgressBar sud_load_bar_double, sud_load_bar_multiple; private int isDouble = 0;//游戏模式 1:双人对战 2:多人游戏 private int clickStatus = 0;//0:什么都不点击 1:点击跳过 2:点击再来一局 @@ -50,36 +54,39 @@ public class SudLoadDialog extends AbsDialogCenterPopupWindow{ sud_load_bar_double = findViewById(R.id.sud_load_bar_double); sud_load_bar_multiple = findViewById(R.id.sud_load_bar_multiple); - if (WordUtil.isNewZh()){ + if (WordUtil.isNewZh()) { sud_load.setImageResource(R.mipmap.sud_load_zh); sud_load_skip.setImageResource(R.mipmap.sud_load_skip_zh); sud_load_again.setImageResource(R.mipmap.sub_again_zh); - }else { + } else { sud_load.setImageResource(R.mipmap.sud_load_en); sud_load_skip.setImageResource(R.mipmap.sud_load_skip_en); sud_load_again.setImageResource(R.mipmap.sub_again_en); } - sud_load_skip.setOnClickListener(v->{ + sud_load_skip.setOnClickListener(v -> { clickStatus = 1; dismiss(); }); - sud_load_again.setOnClickListener(v->{ + sud_load_again.setOnClickListener(v -> { clickStatus = 2; dismiss(); }); } - + Handler activityGameTipsHandler = null; + Runnable activityGameTipsRunnable = () -> { + findViewById(R.id.sud_activity_tips_text).setVisibility(View.VISIBLE); + }; @Override protected void onShow() { super.onShow(); - if (isDouble == 1){ - sud_load_bg.setBackground(ContextCompat.getDrawable(mContext,R.mipmap.sud_load_bg_double)); + if (isDouble == 1) { + sud_load_bg.setBackground(ContextCompat.getDrawable(mContext, R.mipmap.sud_load_bg_double)); sud_load_bar_double.setVisibility(View.VISIBLE); sud_load_bar_multiple.setVisibility(View.GONE); - }else { - sud_load_bg.setBackground(ContextCompat.getDrawable(mContext,R.mipmap.sud_load_bg_multiple)); + } else { + sud_load_bg.setBackground(ContextCompat.getDrawable(mContext, R.mipmap.sud_load_bg_multiple)); sud_load_bar_double.setVisibility(View.GONE); sud_load_bar_multiple.setVisibility(View.VISIBLE); } @@ -88,9 +95,25 @@ public class SudLoadDialog extends AbsDialogCenterPopupWindow{ // dismiss(); // } // },10000); + activityGameTipsHandler=new Handler(Looper.getMainLooper()); + activityGameTipsHandler.postDelayed(activityGameTipsRunnable,5000); } - public void setDouble(int isDouble){ + public void setDouble(int isDouble) { this.isDouble = isDouble; } + + private boolean isActivityGame = false; + + public void setActivityGame() { + isActivityGame = true; + } + + @Override + protected void onDismiss() { + super.onDismiss(); + if(activityGameTipsHandler!=null){ + activityGameTipsHandler.removeCallbacks(activityGameTipsRunnable); + } + } } diff --git a/common/src/main/java/com/yunbao/common/event/CheckCurrencyModel.java b/common/src/main/java/com/yunbao/common/event/CheckCurrencyModel.java index 846001b91..17198b0d0 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,47 @@ package com.yunbao.common.event; +import android.text.TextUtils; + import com.google.gson.annotations.SerializedName; +import com.yunbao.common.CommonAppConfig; 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<>(); + if(CommonAppConfig.isTestEnv()) { + activityList.add("24");//测试服-台球 + }else { + activityList.add("38");//正式服-台球 + } + } + + 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 +51,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..0bb365a89 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,68 @@ 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; + private SudMGPMGState.MGCommonPlayerIn playerIn; + private String uid; + private Object object; + + public boolean isSubReady() { + return subReady; + } + + public boolean isActivityGame() { + return isActivityGame; + } + + public Object getObject() { + return object; + } + + public String getUid() { + return uid; + } + + public CheckRemainingBalanceEvent(String uid) { + this.uid = uid; + } + + public void setObject(Object object) { + this.object = object; + } + + public com.yunbao.common.sud.state.SudMGPMGState.MGCommonPlayerIn getPlayerIn() { + return playerIn; + } + + public CheckRemainingBalanceEvent setPlayerIn(com.yunbao.common.sud.state.SudMGPMGState.MGCommonPlayerIn playerIn) { + this.playerIn = playerIn; + return this; + } + + public CheckRemainingBalanceEvent setActivityGame(boolean activityGame) { + isActivityGame = activityGame; + 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 +86,23 @@ 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; } + + @Override + public String toString() { + return "CheckRemainingBalanceEvent{" + + "seatIndex=" + seatIndex + + ", SudMGPMGState='" + SudMGPMGState + '\'' + + ", subReady=" + subReady + + ", mgCommonGameSettle=" + mgCommonGameSettle + + ", isActivityGame=" + isActivityGame + + '}'; + } } diff --git a/common/src/main/java/com/yunbao/common/event/LiveSudGamePopupShowOrHideEvent.java b/common/src/main/java/com/yunbao/common/event/LiveSudGamePopupShowOrHideEvent.java index 2479fc6de..aa4d96ab5 100644 --- a/common/src/main/java/com/yunbao/common/event/LiveSudGamePopupShowOrHideEvent.java +++ b/common/src/main/java/com/yunbao/common/event/LiveSudGamePopupShowOrHideEvent.java @@ -1,10 +1,21 @@ package com.yunbao.common.event; import com.yunbao.common.bean.CreateSudRoomModel; +import com.yunbao.common.utils.DebugUtils; 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 e58cfcd64..93cd6743b 100644 --- a/common/src/main/java/com/yunbao/common/http/PDLiveApi.java +++ b/common/src/main/java/com/yunbao/common/http/PDLiveApi.java @@ -5,6 +5,7 @@ import com.yunbao.common.bean.ActiveModel; import com.yunbao.common.bean.AnchorRecommendItemModel; import com.yunbao.common.bean.AnchorRecommendModel; import com.yunbao.common.bean.AvatarBean; +import com.yunbao.common.bean.BallClearanceTableJoinRoomBean; import com.yunbao.common.bean.BaseModel; import com.yunbao.common.bean.BattlePassPoints; import com.yunbao.common.bean.BattlePassTask; @@ -74,7 +75,10 @@ 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.SudGameAiInfo; import com.yunbao.common.bean.SudGameInfoBean; +import com.yunbao.common.bean.SudGameRoomInfoBean; import com.yunbao.common.bean.SudGameScoreBean; import com.yunbao.common.bean.SudGameUserModel; import com.yunbao.common.bean.SudRoomListModel; @@ -1054,6 +1058,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); /** @@ -1349,4 +1354,23 @@ public interface PDLiveApi { @GET("/api/public/?service=Message.penalizeStatus") Observable getPenalizeStatus(); + @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 + ); + @GET("/api/public/?service=Sudgameserver.ballClearanceTableAiAdd") + Observable> ballClearanceTableAiAdd( + @Query("room_id")String roomId + ); + @GET("/api/public/?service=Sudgameserver.ballClearanceTableGetRoomInfo") + Observable> ballClearanceTableGetRoomInfo( + @Query("room_id")String roomId + ); + @GET("/api/public/?service=Sudgameserver.ballClearanceTableJoinRoom") + Observable> ballClearanceTableJoinRoom ( + ); } diff --git a/common/src/main/java/com/yunbao/common/http/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 e102bb23e..66aa1c9f7 100644 --- a/common/src/main/java/com/yunbao/common/http/live/LiveNetManager.java +++ b/common/src/main/java/com/yunbao/common/http/live/LiveNetManager.java @@ -10,6 +10,7 @@ import com.yunbao.common.Constants; import com.yunbao.common.R; import com.yunbao.common.bean.ActiveModel; import com.yunbao.common.bean.AvatarBean; +import com.yunbao.common.bean.BallClearanceTableJoinRoomBean; import com.yunbao.common.bean.BaseModel; import com.yunbao.common.bean.BattlePassPoints; import com.yunbao.common.bean.BattlePassTask; @@ -72,7 +73,10 @@ 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.SudGameAiInfo; import com.yunbao.common.bean.SudGameInfoBean; +import com.yunbao.common.bean.SudGameRoomInfoBean; import com.yunbao.common.bean.SudGameScoreBean; import com.yunbao.common.bean.SudGameUserModel; import com.yunbao.common.bean.SudRoomListModel; @@ -2346,8 +2350,22 @@ public class LiveNetManager { } 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>() { @@ -2357,7 +2375,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()); } } @@ -3600,7 +3618,101 @@ 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(); + } + public void ballClearanceTableAiAdd( String roomId, HttpCallback callback) { + API.get().pdLiveApi(mContext) + .ballClearanceTableAiAdd(roomId) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(listResponseModel -> { + if (callback != null) { + callback.onSuccess(listResponseModel.getData().getInfo()); + } + }, new Consumer() { + @Override + public void accept(Throwable throwable) throws Exception { + throwable.printStackTrace(); + if (callback != null) { + callback.onError(mContext.getString(R.string.net_error)); + } + } + }).isDisposed(); + } + public void ballClearanceTableGetRoomInfo( String roomId, HttpCallback callback) { + API.get().pdLiveApi(mContext) + .ballClearanceTableGetRoomInfo(roomId) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(listResponseModel -> { + if (callback != null) { + callback.onSuccess(listResponseModel.getData().getInfo()); + } + }, new Consumer() { + @Override + public void accept(Throwable throwable) throws Exception { + throwable.printStackTrace(); + if (callback != null) { + callback.onError(mContext.getString(R.string.net_error)); + } + } + }).isDisposed(); + } + public void ballClearanceTableJoinRoom( HttpCallback callback) { + API.get().pdLiveApi(mContext) + .ballClearanceTableJoinRoom() + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(listResponseModel -> { + if (callback != null) { + callback.onSuccess(listResponseModel.getData().getInfo()); + } + }, new Consumer() { + @Override + public void accept(Throwable throwable) throws Exception { + throwable.printStackTrace(); + if (callback != null) { + callback.onError(mContext.getString(R.string.net_error)); + } + } + }).isDisposed(); + } private MultipartBody.Part createUploadFile(File file) { RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file); return MultipartBody.Part.createFormData("file", file.getName(), requestBody); diff --git a/common/src/main/java/com/yunbao/common/manager/RandomSudGameManager.java b/common/src/main/java/com/yunbao/common/manager/RandomSudGameManager.java new file mode 100644 index 000000000..e42b95309 --- /dev/null +++ b/common/src/main/java/com/yunbao/common/manager/RandomSudGameManager.java @@ -0,0 +1,265 @@ +package com.yunbao.common.manager; + +import android.app.Dialog; +import android.content.Context; +import android.content.DialogInterface; +import android.os.Handler; +import android.os.Looper; +import android.text.Spannable; +import android.text.SpannableString; +import android.text.TextUtils; +import android.text.style.ImageSpan; +import android.view.View; + +import com.yunbao.common.CommonAppConfig; +import com.yunbao.common.R; +import com.yunbao.common.activity.WebViewActivity; +import com.yunbao.common.bean.BallClearanceTableJoinRoomBean; +import com.yunbao.common.bean.CreateSudRoomModel; +import com.yunbao.common.bean.SudGameRoomInfoBean; +import com.yunbao.common.event.CheckCurrencyModel; +import com.yunbao.common.event.CheckRemainingBalanceEvent; +import com.yunbao.common.http.base.HttpCallback; +import com.yunbao.common.http.live.LiveNetManager; +import com.yunbao.common.interfaces.OnItemClickListener; +import com.yunbao.common.manager.game.AbsRandomGameManager; +import com.yunbao.common.manager.game.BilliardsRandomManager; +import com.yunbao.common.sud.QuickStartGameViewModel; +import com.yunbao.common.sud.state.SudMGPMGState; +import com.yunbao.common.utils.AppManager; +import com.yunbao.common.utils.DialogUitl; +import com.yunbao.common.utils.RouteUtil; +import com.yunbao.common.utils.StringUtil; +import com.yunbao.common.utils.ToastUtil; +import com.yunbao.common.utils.WordUtil; + +import java.util.Locale; + +public class RandomSudGameManager { + private static RandomSudGameManager manager; + private AbsRandomGameManager gameManager; + private CreateSudRoomModel sudRoomModel; + private QuickStartGameViewModel gameViewModel; + private boolean isRandom = false; + + public static RandomSudGameManager getManager() { + if (manager == null) { + manager = new RandomSudGameManager(); + } + return manager; + } + + private RandomSudGameManager() { + + } + + public void start(CreateSudRoomModel data, boolean isHome, boolean isRandom) { + //TODO 等待五秒调用接口获取可以匹配的玩家 + //TODO 五秒内没有玩家就自己创建 + sudRoomModel = data; + this.isRandom = isRandom; + createRoom(data, isHome, isRandom); + } + + + private void createRoom(CreateSudRoomModel data, boolean isHome, boolean isRandom) { + //TODO 创建房间五秒内没有其他玩家就上AI + LiveNetManager.get(AppManager.getInstance().getMainActivity()) + .checkCurrency(new HttpCallback() { + @Override + public void onSuccess(CheckCurrencyModel currencyModel) { + gameManager = new BilliardsRandomManager(); + gameManager.setRandom(isRandom); + gameManager.onStart(currencyModel, data, isHome, isRandom); + } + + @Override + public void onError(String error) { + + } + }); + } + + private void createRoom(Context mContext) { + if(gameManager!=null){ + gameManager.randomCreateRoom(mContext, new OnItemClickListener() { + @Override + public void onItemClick(CreateSudRoomModel bean, int position) { + start(bean, true, true); + } + }); + } + } + + public void reset() { + if (gameManager != null) { + gameManager.reset(); + } + } + + public void destroy() { + if (gameManager != null) { + gameManager.destroy(); + gameManager = null; + } + sudRoomModel = null; + } + + /** + * 游戏结算 + * + * @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() ? "您還未用有門票$立即前往獲取吧~" : "You don’ thave a ticket yet$Go get it now~"; + 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) + .setCancelable(true) + .setShowConfirmButton(true) + .setShowCancelButton(true); + if (isAudience) { + builder.setConfirmString(WordUtil.isNewZh() ? "僅觀戰" : "Watch the game"); + builder.setCancelString(WordUtil.isNewZh() ? "獲取" : "Obtain"); + text = WordUtil.isNewZh() ? "您還未擁有門票$是否前往獲取?" : "You don’ t have the tickets yet $ Do you want to get them?"; + ss = new SpannableString(text); + ss.setSpan(image, text.indexOf("$"), text.indexOf("$") + 1, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); + builder.setHtmlCode(ss); + }else { + 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(!isAudience){ + openTicketWeb(mContext); + } + if (simpleCallback != null) { + simpleCallback.onConfirmClick(dialog, ""); + } + } + + @Override + public void onCancel(Dialog dialog, View title, View context, View confirmBtn, View cancelBtn) { + dialog.dismiss(); + if(isAudience){ + openTicketWeb(mContext); + } + if (simpleCallback != null) { + simpleCallback.onCancelClick(); + } + } + }) + .build() + .show(); + } + + + public void onInitGame(CreateSudRoomModel mCreateSudRoomModel) { + if (gameManager == null) { + gameManager = new BilliardsRandomManager(); + gameManager.setRandom(isRandom); + gameManager.onStart(null, mCreateSudRoomModel, false, false); + } + + } + + public void onGameState(CheckRemainingBalanceEvent event) { + if (gameManager != null) { + gameManager.onGameState(event); + } + } + + public void random(Context mContext) { + LiveNetManager.get(mContext) + .ballClearanceTableJoinRoom(new HttpCallback<>() { + @Override + public void onSuccess(BallClearanceTableJoinRoomBean data) { + if (data != null) { + if ("0".equals(data.getRoom_id()) || StringUtil.isEmpty(data.getRoom_id())) { + createRoom(mContext); + return; + } + check(data); + } + } + + @Override + public void onError(String error) { + ToastUtil.show(error); + } + + private void check(BallClearanceTableJoinRoomBean data) { + LiveNetManager.get(mContext).checkRoomStatus(data.getRoom_id(), new HttpCallback<>() { + @Override + public void onSuccess(CreateSudRoomModel model) { + if (TextUtils.equals(model.getRoomStatus(), "0")) { + if (IMLoginManager.get(mContext).getLocaleLanguage() == Locale.SIMPLIFIED_CHINESE) { + ToastUtil.show("房间不存在"); + } else { + ToastUtil.show("The room does not exist"); + } + } else { + CreateSudRoomModel createSudRoomModel = new CreateSudRoomModel(); + createSudRoomModel.setSudGameId(data.getGameId()); + createSudRoomModel.setSudGameRoomId(data.getRoom_id()); + createSudRoomModel.setRoomName(data.getRoomName()); + start(createSudRoomModel, true, true); + } + } + + @Override + public void onError(String error) { + + } + }); + } + }); + } + + public void setGameViewModel(QuickStartGameViewModel gameViewModel) { + this.gameManager = gameManager; + if (gameManager != null) { + gameManager.setGameViewModel(gameViewModel); + } + } + + public void openTicketWeb(Context mContext) { + String url = String.format(Locale.getDefault(), "%s/h5/monthlyActivities/20240822/index.html?type=1&uid=%s&token=%s&isZh=%s", + CommonAppConfig.HOST, + IMLoginManager.get(mContext).getUserInfo().getId(), + IMLoginManager.get(mContext).getUserInfo().getToken(), + WordUtil.isNewZh() ? "1" : "0" + ); + WebViewActivity.forward(mContext, url, true, false); + } +} 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..69dbf28a8 --- /dev/null +++ b/common/src/main/java/com/yunbao/common/manager/game/AbsRandomGameManager.java @@ -0,0 +1,50 @@ +package com.yunbao.common.manager.game; + +import android.app.Dialog; +import android.content.Context; +import android.content.DialogInterface; + +import com.yunbao.common.bean.CreateSudRoomModel; +import com.yunbao.common.bean.SudGameRoomInfoBean; +import com.yunbao.common.event.CheckCurrencyModel; +import com.yunbao.common.event.CheckRemainingBalanceEvent; +import com.yunbao.common.interfaces.OnItemClickListener; +import com.yunbao.common.sud.QuickStartGameViewModel; +import com.yunbao.common.sud.state.SudMGPMGState; + +public abstract class AbsRandomGameManager { + protected CreateSudRoomModel data; + protected QuickStartGameViewModel gameViewModel; + protected boolean isRandom; + protected boolean isCaptain = false; + + public void setRandom(boolean random) { + isRandom = random; + } + + public void setGameViewModel(QuickStartGameViewModel gameViewModel) { + this.gameViewModel = gameViewModel; + } + + public abstract void onStart(CheckCurrencyModel currencyModel, CreateSudRoomModel data, boolean isHome, boolean isRandom); + + public abstract void reset(); + public abstract void randomCreateRoom(Context mContext, OnItemClickListener onClickListener); + + public abstract void onGameMGCommonGameBilliardsHitState(SudMGPMGState.MGCommonGameBilliardsHitState model); + + public abstract boolean onGameMGCommonGameSettle(SudMGPMGState.MGCommonGameSettle model); + + public void onGameState(CheckRemainingBalanceEvent event) { + if (event.getSudMGPMGState().equals(SudMGPMGState.MG_COMMON_PLAYER_CAPTAIN)) { + isCaptain = true; + } + } + + protected int getPlayerSize() { + if (gameViewModel == null) return 0; + return gameViewModel.getSudFSMMGCache().getPlayerInSet().size(); + } + + public abstract void destroy(); +} diff --git a/common/src/main/java/com/yunbao/common/manager/game/BilliardsRandomManager.java b/common/src/main/java/com/yunbao/common/manager/game/BilliardsRandomManager.java new file mode 100644 index 000000000..817958142 --- /dev/null +++ b/common/src/main/java/com/yunbao/common/manager/game/BilliardsRandomManager.java @@ -0,0 +1,296 @@ +package com.yunbao.common.manager.game; + +import android.content.Context; +import android.content.DialogInterface; +import android.os.Handler; +import android.os.Looper; +import android.view.View; +import android.widget.Button; + +import com.blankj.utilcode.util.LogUtils; +import com.google.gson.Gson; +import com.lzf.easyfloat.enums.ShowPattern; +import com.yunbao.common.CommonAppConfig; +import com.yunbao.common.R; +import com.yunbao.common.bean.BaseModel; +import com.yunbao.common.bean.CreateSudRoomModel; +import com.yunbao.common.bean.SudGameAiInfo; +import com.yunbao.common.bean.SudGameRoomInfoBean; +import com.yunbao.common.dialog.DebugDialog; +import com.yunbao.common.event.CheckCurrencyModel; +import com.yunbao.common.event.CheckRemainingBalanceEvent; +import com.yunbao.common.event.LiveSudGamePopupShowOrHideEvent; +import com.yunbao.common.http.base.HttpCallback; +import com.yunbao.common.http.live.LiveNetManager; +import com.yunbao.common.interfaces.OnItemClickListener; +import com.yunbao.common.manager.IMLoginManager; +import com.yunbao.common.manager.RandomSudGameManager; +import com.yunbao.common.sud.QuickStartGameViewModel; +import com.yunbao.common.sud.state.SudMGPMGState; +import com.yunbao.common.utils.AppManager; +import com.yunbao.common.utils.Bus; +import com.yunbao.common.utils.DebugUtils; +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;//对方连杆数 + private SudGameAiInfo aiInfo; + private boolean isAddRobot = true; + private OnItemClickListener onItemClickListener; + + + Handler autoJoinRobotHandler = null; + Runnable autoJoinRobotRunnable = () -> { + if (gameViewModel != null && gameViewModel.getSudFSMMGCache().getPlayerInSet().size() <= 2) { + if (isCaptain) { + onAddAiPlayer(); + } + } + }; + private boolean isInitDebug = false; + + @Override + public void onStart(CheckCurrencyModel currencyModel, CreateSudRoomModel data, boolean isHome, boolean isRandom) { + this.data = data; + if (isInitDebug) { + isInitDebug = false; + new Handler(Looper.getMainLooper()) + .postDelayed(() -> { + DebugDialog.getInstance(new DebugDialog.DebugDialogRunnable() { + @Override + public void run(DebugDialog dialog) { + dialog.setShowPattern(ShowPattern.ALL_TIME); + onItemClickListener = (bean, position) -> { + dialog.setParams("AI状态", isAddRobot + ""); + dialog.setParams("清杆状态", isOneOverForMy + ""); + dialog.setParams("连击", comboNumberForMy + ""); + + if (position == -1) { + dialog.setParams("参数", bean); + } + dialog.setView("关闭", new Button(AppManager.getInstance().getMainActivity()), new View.OnClickListener() { + @Override + public void onClick(View v) { + dialog.close(); + } + }); + }; + dialog.show(); + } + }); + }, 300); + } + if (currencyModel == null) return; + if (isHome) { + RouteUtil.forwardSwSudGameActivity(new Gson().toJson(data), true, isRandom, 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; + if (autoJoinRobotHandler != null) { + LogUtils.e("终止机器人"); + DebugUtils.showStackTrace(); + autoJoinRobotHandler.removeCallbacks(autoJoinRobotRunnable); + autoJoinRobotHandler = null; + } + aiInfo = null; + if (onItemClickListener != null) + onItemClickListener.onItemClick("", 0); + } + + @Override + public void randomCreateRoom(Context mContext, OnItemClickListener onClickListener) { + //name = 三大风扇史蒂夫史蒂夫的房间 sill = 1 currencyType = 4 id = 24 isTicket = true + String userName = IMLoginManager.get(mContext).getUserInfo().getUserNicename(); + String name = WordUtil.isNewZh() ? userName + "的房间 " : userName + "‘s room"; + String sill = "1"; + String currencyType = "4"; + String id; + if (CommonAppConfig.isTestEnv()) { + id = "24"; + } else { + id = "38"; + } + LiveNetManager.get(mContext).createSudRoom(name, sill, currencyType, id, true, new HttpCallback() { + @Override + public void onSuccess(CreateSudRoomModel data) { + onClickListener.onItemClick(data, 0); + } + + @Override + public void onError(String error) { + + } + }); + } + + @Override + public void onGameState(CheckRemainingBalanceEvent event) { + super.onGameState(event); + if (event.getSudMGPMGState().equals(SudMGPMGState.MG_GAME_LOAD_OVER)) { + joinAiRobot(); + } + if (event.getSudMGPMGState().equals(SudMGPMGState.MG_COMMON_PLAYER_IN)) { + LogUtils.e("收到的回调: AI uid = " + getAiUid() + "| kickUid = " + event.getPlayerIn().kickUID + "|" + getPlayerSize()); + if (event.getPlayerIn().reason == 1 && aiInfo != null) { + reset(); + isAddRobot = false; + } else if (event.getPlayerIn().isIn && getPlayerSize() < 2) { + reset(); + joinAiRobot(); + } + } + } + + private String getAiUid() { + if (aiInfo == null) { + return ""; + } + if (aiInfo.getUids().isEmpty()) { + return ""; + } + try { + return aiInfo.getUids().get(0); + } catch (Exception e) { + e.printStackTrace(); + } + return ""; + } + + private void joinAiRobot() { + if (!isAddRobot) return; + if (!isRandom) return; + if (getPlayerSize() == 2) return; + if (autoJoinRobotHandler != null) { + autoJoinRobotHandler.removeCallbacks(autoJoinRobotRunnable); + } + autoJoinRobotHandler = new Handler(Looper.getMainLooper()); + autoJoinRobotHandler.postDelayed(autoJoinRobotRunnable, 5000); + } + + @Override + public void onGameMGCommonGameBilliardsHitState(SudMGPMGState.MGCommonGameBilliardsHitState model) { + if (Integer.parseInt(model.uid) == IMLoginManager.get(AppManager.getInstance().getMainActivity()).getUserInfo().getId()) { + 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; + } + } + if (onItemClickListener != null) { + onItemClickListener.onItemClick(model.state + "", -1); + } + } else { + if (isOneOverForMy == 1) { + isOneOverForMy = 0; + onSendNotOneOver(); + } + 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) { + model.achievement = WordUtil.getNewString(R.string.game_dialog_activity_achievements_0); + } else if (comboNumberForMy > 0) { + 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(null) + .setSudMGPMGState(SudMGPMGState.MG_COMMON_GAME_SETTLE) + .setActivityGame(true) + .setMgCommonGameSettle(model)); + return false; + } + + @Override + public void destroy() { + isAddRobot = true; + reset(); + } + + public void onAddAiPlayer() { + if (isAddRobot && getPlayerSize() == 1) { + LiveNetManager.get(AppManager.getInstance().getMainActivity()) + .ballClearanceTableAiAdd(data.getSudGameRoomId(), new HttpCallback<>() { + @Override + public void onSuccess(SudGameAiInfo data) { + if (data != null) { + aiInfo = data; + } + } + + @Override + public void onError(String error) { + + } + }); + } + } + + private void onSendNotOneOver() { + LiveNetManager.get(AppManager.getInstance().getMainActivity()) + .ballClearanceTableStatus(data.getSudGameRoomId(), new HttpCallback() { + @Override + public void onSuccess(BaseModel data) { + ToastUtil.show("标记一杆清台失败"); + } + + @Override + public void onError(String error) { + ToastUtil.show("标记一杆清台失败 错误:" + 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..843f4b563 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(null).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..a47dbd673 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,8 +10,11 @@ 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.DebugUtils; import com.yunbao.common.utils.ISudFSMStateHandleUtils; import com.yunbao.common.utils.SudJsonUtils; @@ -80,6 +83,9 @@ public class SudFSMMGDecorator implements ISudFSMMG { if (listener != null) { listener.onGameStarted(); } + Bus.get().post(new CheckRemainingBalanceEvent(null) + .setSudMGPMGState(SudMGPMGState.MG_GAME_LOAD_OVER) + ); } /** @@ -178,11 +184,10 @@ 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); - Bus.get().post(new CheckRemainingBalanceEvent().setSeatIndex(mgCommonSelfClickJoinBtn.seatIndex).setSudMGPMGState(SudMGPMGState.MG_COMMON_SELF_CLICK_JOIN_BTN).setSubReady(false)); + Bus.get().post(new CheckRemainingBalanceEvent(null).setSeatIndex(mgCommonSelfClickJoinBtn.seatIndex).setSudMGPMGState(SudMGPMGState.MG_COMMON_SELF_CLICK_JOIN_BTN).setSubReady(false)); // if (listener == null) { // ISudFSMStateHandleUtils.handleSuccess(handle); // } else { @@ -216,7 +221,7 @@ public class SudFSMMGDecorator implements ISudFSMMG { break; case SudMGPMGState.MG_COMMON_SELF_CLICK_START_BTN: // 8. 开始游戏按钮点击状态 SudMGPMGState.MGCommonSelfClickStartBtn mgCommonSelfClickStartBtn = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonSelfClickStartBtn.class); - Bus.get().post(new CheckRemainingBalanceEvent().setSudMGPMGState(SudMGPMGState.MG_COMMON_SELF_CLICK_START_BTN)); + Bus.get().post(new CheckRemainingBalanceEvent(null).setSudMGPMGState(SudMGPMGState.MG_COMMON_SELF_CLICK_START_BTN)); // if (listener == null) { // ISudFSMStateHandleUtils.handleSuccess(handle); // } else { @@ -236,7 +241,7 @@ public class SudFSMMGDecorator implements ISudFSMMG { SudMGPMGState.MGCommonGameState mgCommonGameState = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonGameState.class); sudFSMMGCache.onGameMGCommonGameState(mgCommonGameState); if (mgCommonGameState.gameState == 2) { - Bus.get().post(new CheckRemainingBalanceEvent().setSudMGPMGState(SudMGPMGState.MG_COMMON_GAME_STATE)); + Bus.get().post(new CheckRemainingBalanceEvent(null).setSudMGPMGState(SudMGPMGState.MG_COMMON_GAME_STATE)); } if (listener == null) { ISudFSMStateHandleUtils.handleSuccess(handle); @@ -259,7 +264,7 @@ public class SudFSMMGDecorator implements ISudFSMMG { // } else { // listener.onGameMGCommonSelfClickGameSettleAgainBtn(handle, mgCommonSelfClickGameSettleAgainBtn); // } - Bus.get().post(new CheckRemainingBalanceEvent().setSudMGPMGState(SudMGPMGState.MG_COMMON_SELF_CLICK_GAME_SETTLE_AGAIN_BTN).setSubReady(false)); + Bus.get().post(new CheckRemainingBalanceEvent(null).setSudMGPMGState(SudMGPMGState.MG_COMMON_SELF_CLICK_GAME_SETTLE_AGAIN_BTN).setSubReady(false)); break; case SudMGPMGState.MG_COMMON_GAME_SOUND_LIST: // 13. 游戏上报游戏中的声音列表(2021-12-30新增,现在只支持碰碰我最强) SudMGPMGState.MGCommonGameSoundList mgCommonGameSoundList = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonGameSoundList.class); @@ -533,6 +538,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 +850,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 +866,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 +874,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 +882,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 +922,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; @@ -844,6 +977,7 @@ public class SudFSMMGDecorator implements ISudFSMMG { } else { listener.onPlayerMGCommonPlayerIn(handle, userId, mgCommonPlayerIn); } + Bus.get().post(new CheckRemainingBalanceEvent(userId).setSudMGPMGState(SudMGPMGState.MG_COMMON_PLAYER_IN).setPlayerIn(mgCommonPlayerIn)); break; case SudMGPMGState.MG_COMMON_PLAYER_READY: // 2.准备状态(已修改) @@ -863,6 +997,7 @@ public class SudFSMMGDecorator implements ISudFSMMG { } else { listener.onPlayerMGCommonPlayerCaptain(handle, userId, mgCommonPlayerCaptain); } + Bus.get().post(new CheckRemainingBalanceEvent(userId).setSudMGPMGState(SudMGPMGState.MG_COMMON_PLAYER_CAPTAIN)); break; case SudMGPMGState.MG_COMMON_PLAYER_PLAYING: // 4.游戏状态(已修改) SudMGPMGState.MGCommonPlayerPlaying mgCommonPlayerPlaying = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonPlayerPlaying.class); diff --git a/common/src/main/java/com/yunbao/common/sud/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..742f9e8bb 100644 --- a/common/src/main/java/com/yunbao/common/sud/state/SudMGPMGState.java +++ b/common/src/main/java/com/yunbao/common/sud/state/SudMGPMGState.java @@ -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; @@ -15,7 +17,10 @@ import java.util.List; * 参考文档:https://docs.sud.tech/zh-CN/app/Client/MGFSM/ */ public class SudMGPMGState implements Serializable { - + /** + * 自定义的,游戏加载完毕的通知 + */ + public static final String MG_GAME_LOAD_OVER="game_load_over"; // region MG状态机-通用状态-游戏 // 参考文档:https://docs.sud.tech/zh-CN/app/Client/MGFSM/CommonStateGame.html /** @@ -113,6 +118,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 +192,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 +815,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状态机-通用状态-玩家 @@ -818,6 +1015,16 @@ public class SudMGPMGState implements Serializable { // 当reason==1时有效;kickUID为踢人的用户uid;判断被踢的人是本人条件(onPlayerStateChange(userId==kickedUID == selfUID);(kickUID默认"",无意义便于处理) public String kickUID; + + @Override + public String toString() { + return "MGCommonPlayerIn{" + + "isIn=" + isIn + + ", teamId=" + teamId + + ", reason=" + reason + + ", kickUID='" + kickUID + '\'' + + '}'; + } } /** @@ -1078,6 +1285,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 +1634,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 +1695,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 +1764,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/AppManager.java b/common/src/main/java/com/yunbao/common/utils/AppManager.java index 45d95dd91..d4041e02d 100644 --- a/common/src/main/java/com/yunbao/common/utils/AppManager.java +++ b/common/src/main/java/com/yunbao/common/utils/AppManager.java @@ -179,15 +179,6 @@ public class AppManager { activityStack.clear(); } - /** - * 仅在debug下运行的代码 - */ - public static void runDebugCode(Runnable runnable) { - if (BuildConfig.DEBUG) { - runnable.run(); - } - } - /** * 退出应用程序 diff --git a/common/src/main/java/com/yunbao/common/utils/DebugUtils.java b/common/src/main/java/com/yunbao/common/utils/DebugUtils.java new file mode 100644 index 000000000..1a96e85eb --- /dev/null +++ b/common/src/main/java/com/yunbao/common/utils/DebugUtils.java @@ -0,0 +1,29 @@ +package com.yunbao.common.utils; + +import android.util.Log; + +import com.yunbao.common.BuildConfig; + +public class DebugUtils { + /** + * 打印堆栈信息 + */ + public static void showStackTrace(){ + StackTraceElement[] stackTrace = new Throwable().getStackTrace(); + StringBuilder sb=new StringBuilder(); + for (StackTraceElement element : stackTrace) { + if(element!=null){ + sb.append(element).append("\n"); + } + } + Log.e("DebugUtils",sb.toString()); + } + /** + * 仅在debug下运行的代码 + */ + public static void runDebugCode(Runnable runnable) { + if (BuildConfig.DEBUG) { + runnable.run(); + } + } +} diff --git a/common/src/main/java/com/yunbao/common/utils/JavascriptInterfaceUtils.java b/common/src/main/java/com/yunbao/common/utils/JavascriptInterfaceUtils.java index 4660abed4..fcc3a49a8 100644 --- a/common/src/main/java/com/yunbao/common/utils/JavascriptInterfaceUtils.java +++ b/common/src/main/java/com/yunbao/common/utils/JavascriptInterfaceUtils.java @@ -23,6 +23,7 @@ import com.lxj.xpopup.XPopup; import com.yunbao.common.CommonAppConfig; import com.yunbao.common.Constants; import com.yunbao.common.bean.CheckUpgradesModel; +import com.yunbao.common.bean.CreateSudRoomModel; import com.yunbao.common.bean.IMLoginModel; import com.yunbao.common.bean.LiveBean; import com.yunbao.common.bean.ReportCommunityBean; @@ -38,6 +39,7 @@ import com.yunbao.common.http.HttpClient; import com.yunbao.common.http.LiveHttpUtil; import com.yunbao.common.interfaces.CommonCallback; import com.yunbao.common.manager.IMLoginManager; +import com.yunbao.common.manager.RandomSudGameManager; import org.greenrobot.eventbus.EventBus; @@ -717,4 +719,16 @@ public class JavascriptInterfaceUtils { throw new RuntimeException(e); } } + @JavascriptInterface + public void androidRandomSudGame(){ + RandomSudGameManager.getManager().random(mContext); + } + @JavascriptInterface + public void androidStartSudGame(String roomName,String roomId,String gameId){ + CreateSudRoomModel createSudRoomModel = new CreateSudRoomModel(); + createSudRoomModel.setSudGameId(gameId); + createSudRoomModel.setSudGameRoomId(roomId); + createSudRoomModel.setRoomName(roomName); + RandomSudGameManager.getManager().start(createSudRoomModel,true,true); + } } 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 3900488c5..424935060 100644 --- a/common/src/main/java/com/yunbao/common/utils/RouteUtil.java +++ b/common/src/main/java/com/yunbao/common/utils/RouteUtil.java @@ -9,6 +9,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,11 @@ public class RouteUtil { .navigation(); } - public static void forwardSwSudGameActivity(String CreateSudRoom, boolean isAn, boolean isHome) { + public static void forwardSwSudGameActivity(String CreateSudRoom, boolean isActivityGame,boolean isRandomRankUser, boolean isHome) { ARouter.getInstance().build(PATH_SudSwGameActivity) .withString("CreateSudRoom", CreateSudRoom) - .withBoolean("CreateIsAn", isAn) + .withBoolean("isActivity", isActivityGame) + .withBoolean("isRandomRankUser", isRandomRankUser) .withBoolean("CreateIsHome", isHome) .navigation(); } diff --git a/common/src/main/java/com/yunbao/common/views/LiveSudGamePopup.java b/common/src/main/java/com/yunbao/common/views/LiveSudGamePopup.java index 09ff270a1..aa9abac80 100644 --- a/common/src/main/java/com/yunbao/common/views/LiveSudGamePopup.java +++ b/common/src/main/java/com/yunbao/common/views/LiveSudGamePopup.java @@ -1,6 +1,7 @@ package com.yunbao.common.views; import android.app.Activity; +import android.app.Dialog; import android.content.Context; import android.os.Handler; import android.os.Looper; @@ -22,6 +23,7 @@ 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.SudActivityGameInfoBean; import com.yunbao.common.bean.SudGameInfoBean; import com.yunbao.common.bean.SudGameScoreBean; import com.yunbao.common.dialog.SudGameDoubleDialog; @@ -36,14 +38,17 @@ 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.sud.QuickStartGameViewModel; import com.yunbao.common.sud.model.GameConfigModel; import com.yunbao.common.sud.model.GameViewInfoModel; import com.yunbao.common.sud.state.SudMGPAPPState; import com.yunbao.common.sud.state.SudMGPMGState; import com.yunbao.common.utils.Bus; +import com.yunbao.common.utils.DialogUitl; import com.yunbao.common.utils.DpUtil; import com.yunbao.common.utils.ToastUtil; +import com.yunbao.common.utils.WordUtil; import com.yunbao.common.views.weight.ViewClicksAntiShake; import org.greenrobot.eventbus.Subscribe; @@ -69,6 +74,8 @@ public class LiveSudGamePopup extends BottomPopupView { private SudGameDoubleDialog sudGameDoubleDialog;//双人游戏弹窗 private SudGameMultipleDialog sudGameMultipleDialog;//多人游戏弹窗 private SudLoadDialog sudLoadDialog;//加载弹窗 + private boolean isActivityGame; + private boolean isRandomRankUser; public LiveSudGamePopup(@NonNull Context context, long interactionID, String liveUid) { super(context); @@ -84,7 +91,9 @@ public class LiveSudGamePopup extends BottomPopupView { //第二次进入时,viewmodel数据丢失,所以初始化时直接获取 gameViewModel.getScore(mCreateSudRoomModel.getSudGameRoomId(),getActivity()); IMLoginManager.get(context).setSudGame(""); - + if (isActivityGame) { + RandomSudGameManager.getManager().setGameViewModel(gameViewModel); + } // 设置游戏安全操作区域 GameViewInfoModel.GameViewRectModel gameViewRectModel = new GameViewInfoModel.GameViewRectModel(); gameViewRectModel.left = 0; @@ -97,6 +106,7 @@ public class LiveSudGamePopup extends BottomPopupView { sudGameDoubleDialog = new SudGameDoubleDialog(context);//双人游戏 sudGameMultipleDialog = new SudGameMultipleDialog(context);//多人游戏 sudLoadDialog = new SudLoadDialog(context);//加载弹窗 + } // 返回自定义弹窗的布局 @@ -115,6 +125,16 @@ public class LiveSudGamePopup extends BottomPopupView { } + public LiveSudGamePopup setActivityGame(boolean activityGame) { + isActivityGame = activityGame; + return this; + } + + public LiveSudGamePopup setRandomRankUser(boolean randomRankUser) { + isRandomRankUser = randomRankUser; + return this; + } + private void initView() { gameContainer = findViewById(R.id.game_container); gameTitle = findViewById(R.id.game_title); @@ -201,7 +221,10 @@ public class LiveSudGamePopup extends BottomPopupView { gameConfigModel.ui.start_btn.custom = true; // SudMGP平台64bit游戏ID gameViewModel.switchGame((Activity) getContext(), mLiveUid, mInteractionID); - + if(isActivityGame){ + sudGameDoubleDialog.setActivityGame(); + sudLoadDialog.setActivityGame(); + } //游戏结算结束 gameViewModel.listMutableLiveData.observe(this, sudSettleBeans -> { if (sudLoadDialog.getClickStatus() == 0) { @@ -221,9 +244,13 @@ public class LiveSudGamePopup extends BottomPopupView { //加载弹窗监听 sudLoadDialog.setOnDismissListener(() -> { if (sudLoadDialog.getClickStatus() == 2){ - Bus.get().post(new CheckRemainingBalanceEvent().setSudMGPMGState(SudMGPMGState.MG_COMMON_SELF_CLICK_GAME_SETTLE_AGAIN_BTN).setSubReady(false)); + Bus.get().post(new CheckRemainingBalanceEvent(null).setSudMGPMGState(SudMGPMGState.MG_COMMON_SELF_CLICK_GAME_SETTLE_AGAIN_BTN).setSubReady(false)); } }); + //通知活动游戏 + if (isActivityGame) { + RandomSudGameManager.getManager().onInitGame(mCreateSudRoomModel); + } } private List customSidebarChildModels = new ArrayList<>(); @@ -273,6 +300,9 @@ public class LiveSudGamePopup extends BottomPopupView { @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: @@ -313,15 +343,61 @@ public class LiveSudGamePopup extends BottomPopupView { //获取用户信息 LiveNetManager.get(getContext()).getSudGameInfo(mCreateSudRoomModel.getSudGameRoomId(), new HttpCallback>() { @Override - public void onSuccess(List data) { - if (!data.isEmpty()){ - gameViewModel.setSudGameInfoBeanList(data); - gameViewModel.sudGameRank(event.getMgCommonGameSettle()); - }else { - ToastUtil.show(getContext().getString(R.string.net_error)); + 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 { + if (isActivityGame) { + showDialog(); + } else { + ToastUtil.show(WordUtil.getNewString(R.string.net_error)); + } } } + private void showDialog() { + DialogUitl.showSimpleDialog(getContext(), WordUtil.isNewZh() ? "結算超時\n請前往活動頁面查看本局結果" : + "Settlement timed out\nPlease check the result on the event page Confirm.", new DialogUitl.SimpleCallback() { + @Override + public void onConfirmClick(Dialog dialog, String content) { + dialog.dismiss(); + if(sudLoadDialog.isShow()){ + sudLoadDialog.dismiss(); + } + } + }); + } + private void loadScore(List infoBean, int index) { + if (index == 0) { + showDialog(); + return; + } + LiveNetManager.get(getContext()) + .ballClearanceTableGetResultScore(mCreateSudRoomModel.getSudGameRoomId(), new HttpCallback<>() { + @Override + public void onSuccess(List data) { + if (data.isEmpty()) { + new Handler(Looper.getMainLooper()).postDelayed(() -> { + loadScore(infoBean, index - 1); + }, 500); + 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/common/src/main/java/com/yunbao/common/views/SudGameListViewHolder.java b/common/src/main/java/com/yunbao/common/views/SudGameListViewHolder.java index b2c36f106..14f701982 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; @@ -18,7 +19,9 @@ import com.yunbao.common.CommonAppConfig; import com.yunbao.common.R; import com.yunbao.common.bean.CreateSudRoomModel; import com.yunbao.common.bean.LiveBean; +import com.yunbao.common.bean.SudGameScoreBean; import com.yunbao.common.bean.SudRoomListModel; +import com.yunbao.common.event.CheckCurrencyModel; import com.yunbao.common.event.LiveOpenSudRoomEvent; import com.yunbao.common.event.LiveSudGamePopupShowOrHideEvent; import com.yunbao.common.event.SudGameListDissMissEvent; @@ -28,10 +31,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 +48,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 +67,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 +93,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 +127,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() { - @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); - } + if (TextUtils.equals(model.getIsActivity(), "1")) { + LiveNetManager.get(mAvatar.getContext()) + .getScore(model.getSudGameRoomId(), new com.yunbao.common.http.base.HttpCallback() { + @Override + public void onSuccess(SudGameScoreBean data) { + if(data.getGolden_bean_remaining_balance()!=1){ + RandomSudGameManager.getManager().showNotActivityTicketDialog(itemView.getContext(), true, new DialogUitl.SimpleCallback2() { + @Override + public void onCancelClick() { - @Override - public void onCheckError(String contextError) { + } - } - }); - } else { - RouteUtil.forwardUserHome(itemView.getContext(), model.getLiveUid(), 0); - } - } - }); - } + @Override + public void onConfirmClick(Dialog dialog, String content) { + toGame(model, isHome, true); + } + }); + return; + } + toGame(model, isHome, 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); - } - } - })).show(); - - } + @Override + public void onError(String error) { + } + }); } else { - - Bus.get().post(new LiveSudGamePopupShowOrHideEvent().setType(0).setCreateSudRoomModel(createSudRoomModel)); - Bus.get().post(new SudGameListDissMissEvent()); + toGame(model, isHome, false); } } } @@ -187,4 +170,83 @@ public class SudGameListViewHolder extends RecyclerView.ViewHolder { } }); } + + private void toGame(SudRoomListModel model, boolean isHome,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,false, 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), isActivity,false, isHome); + } else { + RouteUtil.forwardRySudGameActivity(new Gson().toJson(createSudRoomModel), true, isHome); + } + } + })).show(); + + } + + } else { + Bus.get().post(new LiveSudGamePopupShowOrHideEvent().setType(0).setActivityGame(isActivity).setCreateSudRoomModel(createSudRoomModel)); + Bus.get().post(new SudGameListDissMissEvent()); + } + } } diff --git a/common/src/main/res/drawable/bg_gift_wall_star_t1.xml b/common/src/main/res/drawable/bg_gift_wall_star_t1.xml new file mode 100644 index 000000000..11b6b2b24 --- /dev/null +++ b/common/src/main/res/drawable/bg_gift_wall_star_t1.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/common/src/main/res/drawable/bg_gift_wall_star_t2.xml b/common/src/main/res/drawable/bg_gift_wall_star_t2.xml new file mode 100644 index 000000000..0ada76776 --- /dev/null +++ b/common/src/main/res/drawable/bg_gift_wall_star_t2.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/common/src/main/res/layout/dialog_gift_wall_gift_info.xml b/common/src/main/res/layout/dialog_gift_wall_gift_info.xml index 7c2097297..a94222c4d 100644 --- a/common/src/main/res/layout/dialog_gift_wall_gift_info.xml +++ b/common/src/main/res/layout/dialog_gift_wall_gift_info.xml @@ -186,7 +186,9 @@ android:textAllCaps="false" android:textColor="#02215D" android:textSize="16sp" - tools:text="繼續點亮" /> + android:visibility="gone" + tools:text="繼續點亮" + tools:visibility="visible" /> @@ -199,8 +201,8 @@ android:layout_marginTop="10dp" android:layout_marginEnd="17dp" android:layout_marginBottom="58dp" - android:paddingBottom="32dp" android:background="@mipmap/gift_wall_gift_info_list" + android:paddingBottom="32dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/linearLayout2"> @@ -263,29 +265,41 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> - + app:layout_constraintTop_toBottomOf="@+id/tips_timer"> + + + + + + @@ -297,54 +311,81 @@ android:layout_width="0dp" android:layout_height="64dp" android:background="@mipmap/gift_wall_gift_info_botton" + android:visibility="gone" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toStartOf="parent"> + app:layout_constraintStart_toStartOf="parent" + tools:visibility="visible"> - + app:layout_constraintTop_toTopOf="parent"> - + - + + + + + + +