using System.Collections.Generic;
|
using UnityEngine;
|
|
//我的福地
|
namespace vnxbqy.UI
|
{
|
public class BlessedLandFightWin : Window
|
{
|
[SerializeField] ImageEx imgMyBloodBarValue;
|
[SerializeField] TextEx txtMyRealm;
|
[SerializeField] TextEx txtMyName;
|
[SerializeField] ImageEx imgEnemyBloodBarValue;
|
[SerializeField] AvatarCell myHead;
|
[SerializeField] AvatarCell enemyHead;
|
[SerializeField] ImageEx imgMyDamageTaken;
|
[SerializeField] ImageEx imgEnemyDamageTaken;
|
[SerializeField] TextEx txtEnemyRealm;
|
[SerializeField] TextEx txtEnemyName;
|
[SerializeField] TextEx txtSkipInfo;
|
[SerializeField] TextEx txtMyCP;
|
[SerializeField] TextEx txtEnemyCP;
|
[SerializeField] ButtonEx btnClose;
|
[SerializeField] PositionTween myPositionTween;
|
[SerializeField] PositionTween enemyPositionTween;
|
[SerializeField] List<TextEx> myDamageList;
|
[SerializeField] List<TextEx> enemyDamageList;
|
BlessedLandModel blessedLandModel { get { return ModelCenter.Instance.GetModel<BlessedLandModel>(); } }
|
RoleParticularModel roleParticularModel { get { return ModelCenter.Instance.GetModel<RoleParticularModel>(); } }
|
int turnNumber;
|
int TimeS;
|
int skipS;
|
double myNowHP;
|
double robNowHp;
|
double myAtk; //我方攻击力
|
double robAtk; //敌方攻击力
|
double myAllHP; //我方总生命值
|
double robAllHp; //敌人总生命值
|
float timer = 0f;
|
bool battleEnded;
|
|
protected override void BindController()
|
{
|
|
}
|
|
protected override void AddListeners()
|
{
|
btnClose.SetListener(() =>
|
{
|
if (skipS >= 0)
|
return;
|
JumpSettleWin();
|
});
|
}
|
|
private void OnSecondEvent()
|
{
|
TimeS += 1;
|
skipS -= 1;
|
if (skipS <= 0)
|
{
|
txtSkipInfo.text = Language.Get("L2004");
|
}
|
else
|
{
|
txtSkipInfo.text = Language.Get("BlessedLand050", skipS);
|
}
|
}
|
|
protected override void OnPreOpen()
|
{
|
GlobalTimeEvent.Instance.secondEvent += OnSecondEvent;
|
skipS = 5;
|
TimeS = 0;
|
InitData();
|
myPositionTween.Stop();
|
enemyPositionTween.Stop();
|
myPositionTween.SetStartState();
|
enemyPositionTween.SetStartState();
|
for (int i = 0; i < 10; i++)
|
{
|
myDamageList[i].GetComponent<PositionTween>().Stop();
|
enemyDamageList[i].GetComponent<PositionTween>().Stop();
|
myDamageList[i].SetActive(false);
|
enemyDamageList[i].SetActive(false);
|
myDamageList[i].GetComponent<PositionTween>().SetStartState();
|
enemyDamageList[i].GetComponent<PositionTween>().SetStartState();
|
}
|
txtMyRealm.text = PlayerDatas.Instance.baseData.realmLevel > 0 ? RealmConfig.Get(PlayerDatas.Instance.baseData.realmLevel).Name : " ";
|
txtMyName.text = PlayerDatas.Instance.baseData.PlayerName.ToString();
|
myHead.InitUI(AvatarHelper.GetMyAvatarModel());
|
|
txtMyCP.text = PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.FightPower).ToString();
|
txtSkipInfo.text = Language.Get("BlessedLand050", skipS);
|
blessedLandModel.isStart = true;
|
RoleParticularModel.ViewPlayerData viewPlayerData = roleParticularModel.GetViewPlayerData((int)blessedLandModel.robPlayerId);
|
//防viewPlayerData为空
|
if (viewPlayerData == null)
|
return;
|
txtEnemyRealm.text = RealmConfig.Get(viewPlayerData.rolePropData.RealmLV).Name;
|
txtEnemyName.text = viewPlayerData.rolePropData.Name;
|
enemyHead.InitUI(AvatarHelper.GetOtherAvatarModel(viewPlayerData.rolePropData.Face, viewPlayerData.rolePropData.FacePic, viewPlayerData.rolePropData.Job));
|
txtEnemyCP.text = viewPlayerData.rolePropData.FightPower.ToString();
|
}
|
|
protected override void OnPreClose()
|
{
|
GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent;
|
}
|
|
protected override void LateUpdate()
|
{
|
timer += Time.deltaTime;
|
if (timer > 1f)
|
{
|
if (!blessedLandModel.isStart)
|
return;
|
timer = 0;
|
|
//检查战斗结束条件
|
if (battleEnded)
|
{
|
JumpSettleWin();
|
blessedLandModel.isStart = false;
|
return;
|
}
|
|
//玩家行为
|
double damage = myAtk;
|
double randomNumber = GetRandomNumber();
|
if (blessedLandModel.isWin)
|
{
|
damage = randomNumber > 0.8 ? damage * (1 + randomNumber) : damage;
|
}
|
else
|
{
|
damage = randomNumber < 0.15 ? 0 : damage * randomNumber;
|
}
|
robNowHp = robNowHp - damage;
|
myPositionTween.Play(() =>
|
{
|
imgEnemyBloodBarValue.fillAmount = (float)(robNowHp / robAllHp);
|
enemyDamageList[turnNumber].text = StringUtility.Contact("-", UIHelper.ReplaceLargeNum((ulong)damage));
|
enemyDamageList[turnNumber].SetActive(true);
|
imgEnemyDamageTaken.SetActive(true);
|
enemyDamageList[turnNumber].GetComponent<PositionTween>().Play(() =>
|
{
|
enemyDamageList[turnNumber].SetActive(false);
|
imgEnemyDamageTaken.SetActive(false);
|
});
|
myPositionTween.SetStartState();
|
});
|
|
//检查战斗结束条件
|
battleEnded = CheckBattleEndCondition();
|
if (battleEnded)
|
{
|
JumpSettleWin();
|
blessedLandModel.isStart = false;
|
return;
|
}
|
|
//敌人行为
|
double randomNumber1 = GetRandomNumber();
|
double damage1 = robAtk;
|
if (blessedLandModel.isWin)
|
{
|
damage1 = randomNumber1 < 0.15 ? 0 : damage1 * randomNumber1;
|
}
|
else
|
{
|
damage1 = randomNumber1 > 0.8 ? damage1 * (1 + randomNumber1) : damage1;
|
}
|
myNowHP = myNowHP - damage;
|
enemyPositionTween.Play(() =>
|
{
|
//扣血条
|
imgMyBloodBarValue.fillAmount = (float)(myNowHP / myAllHP);
|
//伤害数字
|
myDamageList[turnNumber].text = StringUtility.Contact("-", UIHelper.ReplaceLargeNum((ulong)damage1));
|
myDamageList[turnNumber].SetActive(true);
|
imgMyDamageTaken.SetActive(true);
|
myDamageList[turnNumber].GetComponent<PositionTween>().Play(() =>
|
{
|
myDamageList[turnNumber].SetActive(false);
|
imgMyDamageTaken.SetActive(false);
|
});
|
enemyPositionTween.SetStartState();
|
});
|
battleEnded = CheckBattleEndCondition();
|
|
//检查战斗结束条件
|
if (battleEnded)
|
{
|
JumpSettleWin();
|
blessedLandModel.isStart = false;
|
return;
|
}
|
|
turnNumber++;
|
}
|
}
|
//初始化战斗数据
|
void InitData()
|
{
|
turnNumber = 0;
|
battleEnded = false;
|
imgMyBloodBarValue.fillAmount = 1;
|
imgEnemyBloodBarValue.fillAmount = 1;
|
myAtk = PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.MAXATK);
|
robAtk = blessedLandModel.isWin ? myAtk * 0.8 : myAtk * 1.5;
|
myAllHP = blessedLandModel.isWin ? myAtk * 6 : myAtk * 6;
|
robAllHp = blessedLandModel.isWin ? myAtk * 5 : myAtk * 7;
|
myNowHP = myAllHP;
|
robNowHp = robAllHp;
|
}
|
|
//战斗结束条件
|
private bool CheckBattleEndCondition()
|
{
|
//对方血量0以下
|
if (robNowHp <= 0)
|
return true;
|
//我方血量为0以下
|
if (myNowHP <= 0)
|
return true;
|
//战斗超时
|
if (TimeS >= 10)
|
return true;
|
//最多打8个回合
|
if (turnNumber >= 8)
|
return true;
|
return false;
|
}
|
|
void JumpSettleWin()
|
{
|
WindowCenter.Instance.Close<BlessedLandFightWin>();
|
if (blessedLandModel.isWin)
|
{
|
WindowCenter.Instance.Open<BlessedLandVictoryWin>();
|
}
|
else
|
{
|
WindowCenter.Instance.Open<BlessedLandDefeatedWin>();
|
}
|
}
|
|
double GetRandomNumber()
|
{
|
double randomNumber;
|
do
|
{
|
randomNumber = Random.Range(0f, 1f);
|
}
|
while (randomNumber <= 0.5);
|
return (double)randomNumber;
|
}
|
|
protected override void OnAfterOpen()
|
{
|
|
}
|
|
protected override void OnAfterClose()
|
{
|
|
}
|
}
|
}
|
|