NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/UI/ShowAllCharacter/UILevelUpController.cs

748 lines
25 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using cfg.CharacterCfg;
using Cysharp.Threading.Tasks;
using Framework;
using Gameplay;
using Gameplay.Common;
using Gameplay.Net;
using NLDPB;
using PhxhSDK;
using System;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using Button = UnityEngine.UI.Button;
using Image = UnityEngine.UI.Image;
using Vector2 = UnityEngine.Vector2;
public class UILevelUpController : UIWindow
{
//UI GameObj
///Auto Gen Start///
public Image Image_BG;
public Button Button_Back;
public Button Button_Home;
public Image Image_PointBG;
public TMP_Text Text_ExpPoint;
public TMP_Text Text_UniversalExp;
public TMP_Text Text_Exp_Value;
public Image Image_LevelUPBar;
public Image Image_Poster;
public TMP_Text Text_Level_Now;
public TMP_Text Text_Level_Max;
public Image Image_Hp;
public TMP_Text Text_Hp;
public TMP_Text Text_Hp_Value;
public TMP_Text Text_Change_Hp;
public Image Image_Morale;
public TMP_Text Text_Cultivate_Morale;
public TMP_Text Text_Morale_Value;
public TMP_Text Text_Change_Morale;
public Image Image_Defense;
public TMP_Text Text_Cultivate_Defense;
public TMP_Text Text_Defense_Value;
public TMP_Text Text_Change_Defanse;
public Image Image_Armor;
public TMP_Text Text_Cultivate_Armor;
public TMP_Text Text_Armor_Value;
public TMP_Text Text_Change_Armor;
public Image Image_Attack;
public TMP_Text Text_Cultivate_Attack;
public TMP_Text Text_Attack_Value;
public TMP_Text Text_Change_Attack;
public Image Image_Speed;
public TMP_Text Text_Cultivate_Speed;
public TMP_Text Text_Speed_Value;
public TMP_Text Text_Change_Speed;
public TMP_Text Text_ExpBefore;
public TMP_Text Text_EXP;
public TMP_Text Text_Plus;
public TMP_Text Text_ExpNeed;
public TMP_Text Text_Level_Value;
public TMP_Text Text_LV;
public TMP_Text Text_LevelUpTo;
public Button Button_MAX;
public Button Button_Plus;
public Button Button_Minus;
public Image Image_LevelBar;
public Image Image_LevelArrow;
float ArrowRadius;
public TMP_Text Text_Level;
public Button Button_Cannot;
public TMP_Text Text_Cannot_Confirm;
public Button Button_Confirm;
public TMP_Text Text_Confirm;
public Button Button_Cancel;
/// Auto Gen End///
/// <summary>
/// 打开角色升级界面
/// </summary>
public static async UniTask<UIWindow> Open(CharacterDataInfo characterDataInfo)
{
CommonUtils.CaptureScreenshot();
return await UIManager.Instance.CreateAndOpenWindow(UINameConst.UILevelUp, characterDataInfo);
}
/// <summary>
/// 台词类
/// </summary>
private class Dialogue : UIGameObjectWrapper
{
/// <summary>
/// 角色名
/// </summary>
private TMP_Text textName;
/// <summary>
/// 角色类型
/// </summary>
private TMP_Text textContent;
public Dialogue(GameObject root) : base(root)
{
textName = GetComponent<TMP_Text>("Text_Name");
textContent = GetComponent<TMP_Text>("Text_Describe");
}
public void SetInfo(string name)
{
textName.text = name;
}
public void SetDialogue(string content)
{
textContent.text = content;
}
}
/// <summary>
/// 高斯模糊遮罩
/// </summary>
private RawImage rawImageGaussianBlurMask;
/// <summary>
/// 升级总消耗经验
/// </summary>
private int expLast;
bool useAllExp = false;//达不到上限,有多少经验用多少经验
/// <summary>
/// 升级消耗的金币
/// </summary>
private int goldLast;
/// <summary>
/// 升级材料列表
/// </summary>
private readonly List<Materal> listMateral = new(3);
CharacterDataInfo mCharacterDataInfo;
int CharacterLevelupTemplate;
private int mCurrentExp;
CharacterLevelUp mCharacterLevelExpCfg;
CharacterBreak mCharacterBreak;
int targetLevel ;
public DragForUI dragForUI;
private AudioInst _dialogueAudioCri;
private Dialogue dialogue;
private class Materal : UIGameObjectWrapper
{
private TMP_Text textValue;
private GameObject goRed;
private GameObject goGreen;
private GenericItem genericItem;
public Materal(GameObject root) : base(root)
{
textValue = GetComponent<TMP_Text>("value");
goRed = FindObj("Image_Red");
goGreen = FindObj("Image_Green02");
genericItem = new(FindObj("item/GenericItem"));
}
public void SetInfo(int itemId, int count)
{
var itemCount = Actor.Instance.Item.GetItemCount(itemId);
string countStr = CommonUtils.ToMetricNotation(itemCount);
textValue.text = $"{countStr}/{count}";
goRed.IsScaleShow(!(Actor.Instance.Item.GetItemCount(itemId) >= count));
goGreen.IsScaleShow(Actor.Instance.Item.GetItemCount(itemId) >= count);
genericItem.SetInfo(itemId, 0, () => UI_UsingItemController.Open(itemId, () =>
{
UIManager.Instance.CloseWindow(UINameConst.UIRank);
UIManager.Instance.CloseWindow(UINameConst.UI_Cultivate);
UIManager.Instance.CloseWindow(UINameConst.UI_Cultivate_ProAndInfo);
UIManager.Instance.CloseWindow(UINameConst.UI_Cultivate_Detail);
UIManager.Instance.CloseWindow(UINameConst.UISelectCharacter);
}));
IsScaleShow = true;
}
protected override void Dispose(bool isDisposing)
{
genericItem.Dispose();
base.Dispose(isDisposing);
}
}
/// <summary>
/// 是否正在播放台词语音
/// </summary>
public bool IsDialoguePlaying
{
get { return _dialogueAudioCri != null && _dialogueAudioCri.IsPlaying; }
}
// Use this for initialization
public override void OnInit()
{
//bind UI GameObj
UILevelUpBinder.GetComponents(this);
ArrowRadius = -Image_LevelArrow.GetComponent<RectTransform>().anchoredPosition.y;
rawImageGaussianBlurMask = GetComponent<RawImage>("GaussianBlurMask");
rawImageGaussianBlurMask.texture = CommonUtils.GetScreenTexture2D();
dialogue = new(FindObj("Image_ActorLineBG"));
Transform tsMateralRoot = FindObj("Image_BG/UI_Materals").transform;
for (int i = 0; i < tsMateralRoot.childCount; ++i)
{
listMateral.Add(new Materal(tsMateralRoot.GetChild(i).gameObject));
}
BindButton(Button_Back, OnButton_BackClick);
BindButton(Button_Plus, OnButton_PlusClick);
BindButton(Button_Minus, OnButton_MinusClick);
BindButton(Button_MAX, OnButton_MAXClick);
BindButton(Button_Cancel, OnButton_CancelClick);
BindButton(Button_Confirm, OnButton_ConfirmClick);
BindButton(Button_Home, OnClickHome);
dragForUI = CommonUtils.GetComponent<DragForUI>(this.gameObject,"Drag");
dragForUI.OnDragStarted += ondragStart;
dragForUI.OnDraging += ondrag;
dragForUI.OnDragCompleted += ondragend;
RegisterEvent();
}
UnityEngine.Vector2 startPos;
float interval;//滑动的间隔
float levelCursor;//将等级想象成游标进行滑动
private void ondragend(PointerEventData eventData)
{
}
private void ondrag(PointerEventData eventData)
{
//float offset = eventData.position.y - startPos.y;
float offset = eventData.delta.y;
if (offset < 0)
{
if (targetLevel <= mCharacterDataInfo.Level)//不可小于已达成等级
{
return;
}
levelCursor += interval * offset;
targetLevel = (int)levelCursor;
if (targetLevel <= mCharacterDataInfo.Level)
targetLevel = (int)mCharacterDataInfo.Level;
CalculateExp();
RefreshAfterChangeValue();
RefreshLevelUpBtn();
}
else
{
if (mCharacterBreak.Get((int)mCharacterDataInfo.ID, (int)mCharacterDataInfo.BreakLevel) == null)
{
DebugUtil.LogError("没有配置Id {0} 突破等级 {1}", mCharacterDataInfo.ID, mCharacterDataInfo.BreakLevel);
return;
}
if (targetLevel >= GetExpEnoughMaxLevel(out _))
{
return;
}
levelCursor += interval * offset;
targetLevel = (int)levelCursor;
if (targetLevel > GetExpEnoughMaxLevel(out _))
{
targetLevel = GetExpEnoughMaxLevel(out uint consumeExp);
}
CalculateExp();
RefreshAfterChangeValue();
RefreshLevelUpBtn();
}
}
private void ondragStart(PointerEventData eventData)
{
startPos = eventData.position;
interval = (mCharacterBreak.Get((int)mCharacterDataInfo.ID, (int)mCharacterDataInfo.BreakLevel).LevelLimit - mCharacterDataInfo.Level) / 400f;
levelCursor = targetLevel;
}
private void OnClickHome()
{
CommonUtils.HomeToMain();
}
private void RegisterEvent()
{
EventManager.Instance.Register(EventManager.EventName.EN_CharacterLevelUp,(Action<UpgradeType>)OnCharacterLevelup);
}
private void OnCharacterLevelup(UpgradeType type)
{
if (type != UpgradeType.UtLevel)
{
return;
}
AudioManager.Instance.PlayAudio(Framework.Constants.Sound.CHARACTER_LEVEL_UP);
mCharacterDataInfo = CharacterDataInfoManager.Instance.GetCharacterInfo(mCharacterDataInfo.ID);
CharacterLevelupTemplate = mCharacterDataInfo.Cfg.LevelUpTemplate;
if (CharacterLevelupTemplate == 0)
{
DebugUtil.LogError("没有配置该角色等级模板:{0},自动使用默认模板", mCharacterDataInfo.ID);
CharacterLevelupTemplate = 1;
}
targetLevel = (int)mCharacterDataInfo.Level;
expLast = 0;
RefreshUI();
RefreshAfterChangeValue();
RefreshLevelUpBtn();
_dialogueAudioCri?.Stop();
_dialogueAudioCri = DialogueManager.Instance.PlayDiaogue((int)mCharacterDataInfo.Uid,
cfg.DialogueCfg.E_DialogueType.UpLevel,
(content) => { dialogue.SetDialogue(content); });
}
private void UnregisterEvent()
{
EventManager.Instance.Unregister(EventManager.EventName.EN_CharacterLevelUp,(Action<UpgradeType>)OnCharacterLevelup);
}
private void RefreshLevelUpBtn()
{
Button_Cannot.gameObject.SetActive(expLast <= 0);//targetLevel == mCharacterDataInfo.Level
Button_Confirm.gameObject.SetActive(expLast > 0);//targetLevel != mCharacterDataInfo.Level
Button_Cancel.gameObject.SetActive(expLast > 0);
}
private void OnButton_ConfirmClick()
{
if (expLast <= 0)//targetLevel == mCharacterDataInfo.Level
{
return;
}
//if (targetLevel >= expLast)
//{
// CommonUtils.ShowMessageTips(CommonUtils.GetLocalizeText("cultivate_expDontFull"));
// return;
//}
AudioManager.Instance.PlayAudio(Framework.Constants.Sound.COMMON_CLICK);
if (Actor.Instance.Item.GetItemCount(GLConfig.Inst.data.HeroExpItem)< expLast)
{
CommonUtils.ShowMessageTips(CommonUtils.GetLocalizeText("cultivate_expDontFull"));
return;
}
if (Actor.Instance.Item.GetItemCount(GLConfig.Inst.data.GoldItemId) < goldLast)
{
CommonUtils.ShowMessageTips(CommonUtils.GetLocalizeText("shop_noMoney"));
return;
}
if (targetLevel > ActorLevelTableHelper.Instance.Get((int)Actor.Instance.Base.GetProp(ActorProp.Level)).Level)
{
CommonUtils.ShowMessageTips(CommonUtils.GetLocalizeText("cultivate_LevelUpOutRange"));
return;
}
NetHelper.CharacterUpgrade(mCharacterDataInfo.ID, NLDPB.UpgradeType.UtLevel, (uint)targetLevel, useAllExp);
}
private void OnButton_CancelClick()
{
if (expLast <= 0)
{
return;
}
AudioManager.Instance.PlayAudio(Framework.Constants.Sound.COMMON_CLICK);
targetLevel = (int)mCharacterDataInfo.Level;
if (useAllExp)
useAllExp = false;
CalculateExp();
RefreshAfterChangeValue();
RefreshLevelUpBtn();
}
private void OnButton_MAXClick()
{
AudioManager.Instance.PlayAudio(Framework.Constants.Sound.COMMON_CLAIM);
//if (targetLevel > mCharacterDataInfo.Cfg.Hp.Count)
//{
// DebugUtil.LogError("levelexp表和各种属性没有该突破等级的等级限制等级");
// return;
//}
if (targetLevel >= mCharacterBreak.Get((int)mCharacterDataInfo.ID, (int)mCharacterDataInfo.BreakLevel).LevelLimit)
{
CommonUtils.ShowMessageTips(CommonUtils.GetLocalizeText("cultivate_LevelUpMAX"));
return;
}
if (targetLevel >= ActorLevelTableHelper.Instance.Get((int)Actor.Instance.Base.GetProp(ActorProp.Level)).Level)
{
CommonUtils.ShowMessageTips(CommonUtils.GetLocalizeText("cultivate_LevelMaxOutRange"));
return;
}
targetLevel = GetExpEnoughMaxLevel(out _);//mCharacterBreak.Get((int)mCharacterDataInfo.ID, (int)mCharacterDataInfo.BreakLevel).LevelLimit;
//expLast = (int)consumeExp;
CalculateExp();
RefreshAfterChangeValue();
RefreshLevelUpBtn();
}
/// <summary>
/// 获取最大经验值填充后的等级(超出等级上限取最大等级)
/// </summary>
/// <param name="consumeExp"></param>
/// <returns></returns>
int GetExpEnoughMaxLevel(out uint consumeExp)
{
var exp = Actor.Instance.Item.GetItemCount(GLConfig.Inst.data.HeroExpItem);
int level = (int)mCharacterDataInfo.Level;
int consume = -(int)mCharacterDataInfo.Exp;
var ActorLevel = ActorLevelTableHelper.Instance.Get((int)Actor.Instance.Base.GetProp(ActorProp.Level)).Level;
while (level < mCharacterBreak.Get((int)mCharacterDataInfo.ID, (int)mCharacterDataInfo.BreakLevel).LevelLimit && level < ActorLevel)
{
var levelcfg = mCharacterLevelExpCfg.Get(CharacterLevelupTemplate, level + 1);
if (levelcfg != null)//GetOrDefault((level + 1)) != null
{
var needExp = levelcfg.EXP;
if (consume + needExp > exp)
{
consumeExp = exp;//达不到上限,有多少经验用多少经验
return level;
}
else
{
consume += needExp;
}
}
else
{
DebugUtil.LogError("CharacterLevelExpCfg的等级不够了");
}
level++;
}
consumeExp = (uint)consume;
return level;
}
private void OnButton_MinusClick()
{
AudioManager.Instance.PlayAudio(Framework.Constants.Sound.CHARACTER_LEVEL_UP_PLUS, AudioCriManager.EPlayType.Sound);
if (expLast <= 0)//targetLevel <= mCharacterDataInfo.Level
{
CommonUtils.ShowMessageTips(CommonUtils.GetLocalizeText("cultivate_LevelUpMIN"));
return;
}
if (!useAllExp)
targetLevel--;
else
useAllExp = false;
CalculateExp();
RefreshAfterChangeValue();
RefreshLevelUpBtn();
}
private void OnButton_PlusClick()
{
AudioManager.Instance.PlayAudio(Framework.Constants.Sound.CHARACTER_LEVEL_UP_PLUS, AudioCriManager.EPlayType.Sound);
if (mCharacterBreak.Get((int)mCharacterDataInfo.ID, (int)mCharacterDataInfo.BreakLevel) == null)
{
DebugUtil.LogError("没有配置Id {0} 突破等级 {1}", mCharacterDataInfo.ID, mCharacterDataInfo.BreakLevel);
return;
}
if (targetLevel >= mCharacterBreak.Get((int)mCharacterDataInfo.ID, (int)mCharacterDataInfo.BreakLevel).LevelLimit)
{
CommonUtils.ShowMessageTips(CommonUtils.GetLocalizeText("cultivate_LevelUpMAX"));
return;
}
if (targetLevel >= ActorLevelTableHelper.Instance.Get((int)Actor.Instance.Base.GetProp(ActorProp.Level)).Level)
{
CommonUtils.ShowMessageTips(CommonUtils.GetLocalizeText("cultivate_LevelUpOutRange"));
return;
}
if (targetLevel + 1 > GetExpEnoughMaxLevel(out uint consumeExp))
{
CommonUtils.ShowMessageTips(CommonUtils.GetLocalizeText("cultivate_expDontFull"));
expLast = (int)consumeExp;
useAllExp = true;
}
else
{
targetLevel++;
CalculateExp();
}
RefreshAfterChangeValue();
RefreshLevelUpBtn();
}
private void OnButton_BackClick()
{
CloseWindow();
}
private void LoadCfg()
{
OnLoadCfg(TableManager.Instance.Tables.CharacterLevelUp);
}
private void OnLoadCfg(CharacterLevelUp characterLevelExp)
{
mCharacterLevelExpCfg = characterLevelExp;
mCharacterBreak = TableManager.Instance.Tables.CharacterBreak;
RefreshUI();
RefreshAfterChangeValue();
}
//invoke when open window
protected override void OnShowWindow(object data = null)
{
base.OnShowWindow(data);
if (data == null)
{
return;
}
else
{
mCharacterDataInfo = data as CharacterDataInfo;
CharacterLevelupTemplate = mCharacterDataInfo.Cfg.LevelUpTemplate;
if (CharacterLevelupTemplate == 0)
{
DebugUtil.LogError("没有配置该角色等级模板:{0},自动使用默认模板", mCharacterDataInfo.ID);
CharacterLevelupTemplate = 1;
}
targetLevel = (int)mCharacterDataInfo.Level;
}
LoadCfg();
expLast = 0;
useAllExp = false;
dialogue.SetInfo(mCharacterDataInfo.Name);
//InputManager.Instance.OnFingersMove += OnFingersHover;
}
private void OnFingersHover(float delta)
{
}
private async void RefreshUI()
{
string imgPath = CommonUtils.GetCharacterPicPath(mCharacterDataInfo.Cfg.RoleID, CommonUtils.ECharacterPicPathType.LevelUp, (int)mCharacterDataInfo.SkinID);
var sprite = await LoadAssetAsync<Sprite>(imgPath);
CommonUtils.RefreshCharacter2DPic(Image_Poster, sprite);
RefresLevelUpBar(mCharacterDataInfo.Level);
RefreshLevelUpBtn();
}
private void RefresLevelUpBar(uint targetRefreshLevel)
{
uint nowLevel = targetRefreshLevel;
int maxLevel = (int)mCharacterBreak.Get((int)mCharacterDataInfo.ID, (int)mCharacterDataInfo.BreakLevel).LevelLimit;
Text_Level_Now.text = nowLevel.ToString();
Text_Level_Max.text ="/" +maxLevel.ToString();
Text_Level_Value.text = targetRefreshLevel.ToString();
float fillAmount;
if (nowLevel >= maxLevel)
{
fillAmount = 1;
}
else
{
var expCount = mCharacterLevelExpCfg.Get(CharacterLevelupTemplate, (int)mCharacterDataInfo.Level + 1).EXP;
if (expCount == 0)
expCount = 1;
fillAmount = mCharacterDataInfo.Exp * 1.0f / expCount;
}
//fillAmount= mCharacterDataInfo.Exp/ //nowLevel / (float)maxLevel;
Image_LevelBar.fillAmount = fillAmount;
SetExpBarFillAmount(fillAmount);
Text_Hp_Value.text = mCharacterDataInfo.HP().ToString();
Text_Morale_Value.text = mCharacterDataInfo.Cfg.MaxMorale.ToString();
Text_Defense_Value.text = mCharacterDataInfo.Defence().ToString();
Text_Armor_Value.text= mCharacterDataInfo.Armor().ToString();
Text_Attack_Value.text=mCharacterDataInfo.Attack().ToString();
Text_Speed_Value.text=mCharacterDataInfo.MoveSpeed().ToString();
Text_Exp_Value.text = Actor.Instance.Item.GetItemCount(GLConfig.Inst.data.HeroExpItem).ToString(); ;
}
private void RefreshAfterChangeValue()
{
float changeHp = mCharacterDataInfo.HpLevelUp((int)targetLevel) - mCharacterDataInfo.HpLevelUp((int)mCharacterDataInfo.Level);
float changeMorale = 0;
float changeDefense = mCharacterDataInfo.DefenceLevelUp((int)targetLevel) - mCharacterDataInfo.DefenceLevelUp((int)mCharacterDataInfo.Level);
float changeArmor = mCharacterDataInfo.ArmorLevelUp((int)targetLevel) - mCharacterDataInfo.ArmorLevelUp((int)mCharacterDataInfo.Level);
float changeAttack = mCharacterDataInfo.AttackLevelUp((int)targetLevel) - mCharacterDataInfo.AttackLevelUp((int)mCharacterDataInfo.Level);
float changespeed = 0;
Text_Change_Hp.gameObject.SetActive(changeHp != 0);
Text_Change_Hp.text = "+" + changeHp.ToString();
Text_Change_Morale.gameObject.SetActive(changeMorale != 0);
Text_Change_Morale.text = "+" + changeMorale.ToString();
Text_Change_Defanse.gameObject.SetActive(changeDefense != 0);
Text_Change_Defanse.text = "+" + changeDefense.ToString();
Text_Change_Armor.gameObject.SetActive(changeArmor != 0);
Text_Change_Armor.text = "+" + changeArmor.ToString();
Text_Change_Attack.gameObject.SetActive(changeAttack != 0);
Text_Change_Attack.text = "+" + changeAttack.ToString();
Text_Change_Speed.gameObject.SetActive(changespeed != 0);
Text_Change_Speed.text = "+" + changespeed.ToString();
listMateral[0].SetInfo(GLConfig.Inst.data.GoldItemId, goldLast);
Text_ExpNeed.gameObject.SetActive(expLast > 0);
Text_ExpNeed.text = expLast.ToString();
Text_Level_Now.text = targetLevel.ToString();
Text_Level_Value.text = targetLevel.ToString();
Text_ExpBefore.text = mCharacterDataInfo.Exp.ToString();
float fillAmount;
if (targetLevel >= mCharacterBreak.Get((int)mCharacterDataInfo.ID, (int)mCharacterDataInfo.BreakLevel).LevelLimit)//= mCharacterLevelExpCfg.GetOrDefault((int)targetLevel).EXP - expLast;
{
//满级进度条
fillAmount = 1;
}
else if (expLast <= 0)
{
//无强化显示持有经验进度条
var expCount = mCharacterLevelExpCfg.Get(CharacterLevelupTemplate, (int)targetLevel + 1).EXP;
if (expCount == 0)
expCount = 1;
fillAmount = mCharacterDataInfo.Exp * 1.0f / expCount;
}
else
{
if (!useAllExp)
{
fillAmount = 0;
}
else
{
var consumeExp = expLast;
CalculateExp();
useAllExp = true;
var ExpRemainInBar = consumeExp - expLast;
expLast = consumeExp;
var expCount = mCharacterLevelExpCfg.Get(CharacterLevelupTemplate, (int)targetLevel + 1).EXP;
if (expCount == 0)
expCount = 1;
fillAmount = ExpRemainInBar * 1.0f / expCount;
}
}
//fillAmount = targetLevel / (float)mCharacterBreak.Get((int)mCharacterDataInfo.ID, (int)mCharacterDataInfo.BreakLevel).LevelLimit;
Image_LevelBar.fillAmount = fillAmount;
SetExpBarFillAmount(fillAmount);
}
/// <summary>
/// 设置经验进度条及小三角位置
/// </summary>
/// <param name="fillAmount"></param>
void SetExpBarFillAmount(float fillAmount)
{
var angle = -360 * fillAmount;
Image_LevelArrow.transform.rotation = UnityEngine.Quaternion.Euler(0, 0, angle);
float posX = Mathf.Sin(angle * Mathf.Deg2Rad) * ArrowRadius;
float posY = -Mathf.Cos(angle * Mathf.Deg2Rad) * ArrowRadius;
Image_LevelArrow.GetComponent<RectTransform>().anchoredPosition = new Vector2(posX, posY);
}
/// <summary>
/// 计算恰好升到目标等级所需经验(刚好升满经验槽的经验量)
/// </summary>
void CalculateExp()
{
useAllExp = false;
expLast = 0;
goldLast = 0;
for (int i = (int)mCharacterDataInfo.Level; i < targetLevel; i++)
{
var levelCfg = mCharacterLevelExpCfg.Get(CharacterLevelupTemplate, i + 1);
if (levelCfg != null)
{
expLast += levelCfg.EXP;
goldLast += levelCfg.Gold;
}
else
{
DebugUtil.LogError("CharacterLevelExpCfg的等级不够了");
}
}
expLast -= (int)mCharacterDataInfo.Exp;
}
//invoke when reload window
protected override void OnReloadWindow(object data = null)
{
}
protected override void OnUpdate()
{
base.OnUpdate();
dialogue.IsScaleShow = IsDialoguePlaying;
}
//invoke when close window
protected override void OnHideWindow()
{
EventManager.Instance.Send(EventManager.EventName.EN_UIControllCultivateMainInput, true);
//AudioManager.Instance.AudioMgrObj.StopAllSounds();
base.OnHideWindow();
}
public override void OnRelease()
{
base.OnRelease();
UnregisterEvent();
}
}