package com.znv.linkup.view.dialog;
import android.app.Dialog;
import android.os.Message;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.znv.linkup.GameActivity;
import com.znv.linkup.R;
import com.znv.linkup.ViewSettings;
import com.znv.linkup.WelcomeActivity;
import com.znv.linkup.core.config.LevelCfg;
import com.znv.linkup.db.DbScore;
import com.znv.linkup.db.LevelScore;
import com.znv.linkup.rest.IUpload;
import com.znv.linkup.rest.LevelInfo;
import com.znv.linkup.rest.UserInfo;
import com.znv.linkup.rest.UserScore;
import com.znv.linkup.util.ShareUtil;
import com.znv.linkup.view.LevelTop;
import com.znv.linkup.view.LevelTop.LevelTopStatus;
/**
* 游戏结果确认框
*
* @author yzb
*
*/
public class SuccessDialog extends Dialog implements IUpload {
private GameActivity linkup = null;
private ResultInfo resultInfo = null;
private LevelTop levelTop = null;
private ShareUtil shareHelper = null;
public SuccessDialog(final GameActivity linkup) {
super(linkup, R.style.CustomDialogStyle);
this.linkup = linkup;
setContentView(R.layout.success_dialog);
setCancelable(false);
setCanceledOnTouchOutside(false);
shareHelper = new ShareUtil(getContext());
TextView btnCancel = (TextView) findViewById(R.id.success_button_cancel);
btnCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
levelTop.cancelUrlImages();
cancel();
linkup.onBackPressed();
}
});
TextView btnAgain = (TextView) findViewById(R.id.btnAgain);
btnAgain.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
levelTop.cancelUrlImages();
cancel();
linkup.start();
}
});
TextView btnShare = (TextView) findViewById(R.id.btnshare);
btnShare.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String msg = String.format(getContext().getString(R.string.share_score), linkup.getLevelCfg().getLevelName(),
String.valueOf(resultInfo.getScore()));
// 分享
if (levelTop.getTopStatus() == LevelTopStatus.TopInfo) {
// 带截图分享
shareHelper.shareMsgView(msg, levelTop);
} else {
shareHelper.shareMessage(msg);
}
}
});
TextView btnOk = (TextView) findViewById(R.id.success_button_ok);
btnOk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
levelTop.cancelUrlImages();
cancel();
linkup.next();
}
});
levelTop = (LevelTop) findViewById(R.id.level_top);
levelTop.setUploadListener(this);
}
/**
* 处理返回键
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
TextView btn = (TextView) findViewById(R.id.success_button_cancel);
btn.performClick();
return true;
}
return super.onKeyDown(keyCode, event);
}
/**
* 显示游戏胜利对话框
*
* @param ResultInfo
* 游戏结果
*/
public void showDialog(ResultInfo resultInfo) {
this.resultInfo = resultInfo;
setGameScore(resultInfo.getScore());
setGameStar(resultInfo.getStars());
isNewRecord(resultInfo.isNewRecord());
if (levelTop != null) {
levelTop.reset();
}
uploadScore();
show();
}
/**
* 设置游戏总得分
*
* @param score
* 游戏得分
*/
private void setGameScore(int score) {
TextView tvScore = (TextView) findViewById(R.id.success_score);
tvScore.setText(String.valueOf(score) + getContext().getString(R.string.score_unit));
TextView tvCoin = (TextView) findViewById(R.id.level_coin_reward);
tvCoin.setText("+" + String.valueOf(score / 10));
}
/**
* 设置是否是新的记录
*
* @param isNewRecord
* 是否为新记录
*/
private void isNewRecord(boolean isNewRecord) {
ImageView ivRecord = (ImageView) findViewById(R.id.level_champion);
ivRecord.setVisibility(isNewRecord ? View.VISIBLE : View.INVISIBLE);
}
/**
* 设置游戏星级
*
* @param star
* 星级数
*/
private void setGameStar(int star) {
ImageView level_star = (ImageView) findViewById(R.id.level_star);
ImageView star1Reward = (ImageView) findViewById(R.id.level_star1_reward);
star1Reward.setVisibility(View.GONE);
ImageView star2Reward = (ImageView) findViewById(R.id.level_star2_reward);
star2Reward.setVisibility(View.GONE);
ImageView star3Reward = (ImageView) findViewById(R.id.level_star3_reward);
star3Reward.setVisibility(View.GONE);
TextView tvDiamond = (TextView) findViewById(R.id.level_diamond_reward);
if (star <= 0 || star > 3) {
return;
}
level_star.setImageResource(ViewSettings.StarImages[star - 1]);
tvDiamond.setText("+" + String.valueOf(star));
if (star > 0) {
if (LevelCfg.globalCfg.getPromptNum() < ViewSettings.PromptMaxNum) {
// promt 增加一次
LevelCfg.globalCfg.setPromptNum(LevelCfg.globalCfg.getPromptNum() + 1);
}
star1Reward.setVisibility(View.VISIBLE);
}
if (star > 1) {
if (LevelCfg.globalCfg.getAddTimeNum() < ViewSettings.AddTimeMaxNum) {
// AddTime 增加一次
LevelCfg.globalCfg.setAddTimeNum(LevelCfg.globalCfg.getAddTimeNum() + 1);
}
star2Reward.setVisibility(View.VISIBLE);
}
if (star > 2) {
if (LevelCfg.globalCfg.getRefreshNum() < ViewSettings.RefreshMaxNum) {
// refresh 增加一次
LevelCfg.globalCfg.setRefreshNum(LevelCfg.globalCfg.getRefreshNum() + 1);
}
star3Reward.setVisibility(View.VISIBLE);
}
linkup.setGlobalCfg();
}
/**
* 上传分数
*/
private void uploadScore() {
// 判断是否已登录
if (!resultInfo.getUserId().equals("")) {
LevelInfo scoreInfo = new LevelInfo();
scoreInfo.setUserId(resultInfo.getUserId());
scoreInfo.setLevel(resultInfo.getLevel());
scoreInfo.setDiamond(resultInfo.getStars());
scoreInfo.setGold(resultInfo.getScore() / 10);
// 增加奖励的钻石和金币
WelcomeActivity.userInfo.addDiamond(getContext(), scoreInfo.getDiamond());
if (resultInfo.isNewRecord()) {
scoreInfo.setScore(resultInfo.getScore());
scoreInfo.setTime(resultInfo.getTime());
WelcomeActivity.userInfo.addGold(getContext(), scoreInfo.getGold());
UserScore.addGetResult(scoreInfo, levelTop.netMsgHandler);
} else {
if (!resultInfo.isUpload()) {
scoreInfo.setScore(resultInfo.getMaxScore());
scoreInfo.setTime(resultInfo.getMinTime());
WelcomeActivity.userInfo.addGold(getContext(), scoreInfo.getGold());
UserScore.addGetResult(scoreInfo, levelTop.netMsgHandler);
} else {
// 获取排行榜
UserScore.getLevelTops(resultInfo.getLevel(), levelTop.netMsgHandler);
}
}
} else {
// 没有登录则提示登录
}
}
@Override
public void onLoginSuccess(Message msg) {
UserInfo userInfo = WelcomeActivity.userInfo;
if (userInfo != null) {
resultInfo.setUserId(userInfo.getUserId());
uploadScore();
}
}
@Override
public void onLevelResultAdd(Message msg) {
// 更新是否已上传
linkup.getLevelCfg().setUpload(true);
LevelScore ls = new LevelScore(resultInfo.getLevel());
ls.setIsUpload(1);
DbScore.updateUpload(ls);
}
}