队伍选择和指挥官技能UI

main
yurui 2024-03-08 20:00:56 +08:00
parent b87c3c3e4a
commit a8c4714db7
11 changed files with 5718 additions and 7432 deletions

Binary file not shown.

View File

@ -81,6 +81,7 @@ public partial class UIManager
_WindowMeta(UINameConst.UINoticeTwo, UIWindowLayer.Waiting);
_WindowMeta(UINameConst.UI_CommandSkillCultivate, UIWindowLayer.Normal);
_WindowMeta(UINameConst.UI_TeamAndSkillSelect, UIWindowLayer.Normal);
}
@ -174,8 +175,14 @@ public static class UINameConst
public static readonly string UI_Patio = "MainScene/Raffle/UI_Patio";
public static readonly string UI_BuyDiamond = "Interface/Shop/UI_BuyDiamond";
public static readonly string UI_LevelDetail = "LevelSelect/UI_LevelDetail";
/// <summary>
/// 指挥官技能养成界面
/// </summary>
public static readonly string UI_CommandSkillCultivate = "CommandSkill/UI_CommandSkillCultivate";
public static readonly string UI_TeamAndSkillSelect = "CommandSkill/CommandAndTeamSelect/TeamAndSkillSelect";
/// <summary>
/// 队伍选择和指挥官技能选择进入战斗界面
/// </summary>
public static readonly string UI_TeamAndSkillSelect = "CommandSkill/CommandAndTeamSelect/UI_TeamAndSkillSelect";
public static readonly string UI_DailyBonus = "Interface/UI_DailyBonus";
}

View File

@ -94,7 +94,7 @@ public partial class SROptions
[Category("快速创建默认队列")]
public void CreateDefaultTeam()
{
Team team = new Team(0, "DefaultTeam", 1, new uint[]{100001, 100002, 100003, 100004, 100005}, 300001);
Team team = new Team(0, "DefaultTeam", 1, new uint[] { 100001, 100002, 100003, 100004, 100005 }, new uint[] { 0, 0, 0 }, 300001);
TeamEditManager.Instance.SaveTeam(team);
}
}

View File

@ -91,7 +91,7 @@ public class TeamEditManager : Singlenton<TeamEditManager>, IInitable
}
//在管理器内部创建一个成员Team
public void CreateTeam(int idx, string name, int icon, uint[] characterIDs, uint vehicleID)
public void CreateTeam(int idx, string name, int icon, uint[] characterIDs, uint[] playerSkillIDs, uint vehicleID)
{
//test
for (int i = 0; i < characterIDs.Length; i++)
@ -103,14 +103,14 @@ public class TeamEditManager : Singlenton<TeamEditManager>, IInitable
characterIDs[i] = 0;
}
}
_teamList.Add(new Team(idx, name, icon, characterIDs, vehicleID));
_teamList.Add(new Team(idx, name, icon, characterIDs, playerSkillIDs, vehicleID));
}
public void CreateTeam(Team team)
{
CreateTeam(team.TeamIndex, team.Name, team.IconNumber, team.GetCharacterIDs(), team.GetVehicleID());
CreateTeam(team.TeamIndex, team.Name, team.IconNumber, team.GetCharacterIDs(), team.GetPlayerSkillIDs(), team.GetVehicleID());
}
public Team GetTeamByIndex(uint idx)
@ -304,13 +304,14 @@ public class TeamEditManager : Singlenton<TeamEditManager>, IInitable
var info = teamInfos[i];
if (info != null)
{
CreateTeam(i, info.Name, (int)info.Icon, info.CharacterIDs, info.VehicleID);
CreateTeam(i, info.Name, (int)info.Icon, info.CharacterIDs, info.PlayerSkillIDs, info.VehicleID);
}
else
{
//test
uint[] testIDs = {0, 0, 0, 0, 0, 0};
CreateTeam(i, CommonUtils.GetLocalizeText("team_edit_default" + i), 1, testIDs, 0);
uint[] testSkillIDs = { 0, 0, 0 };
CreateTeam(i, CommonUtils.GetLocalizeText("team_edit_default" + i), 1, testIDs, testSkillIDs, 0);
}
}
}
@ -347,7 +348,7 @@ public class Team
public const int MAX_VEHICLE_COUNT = 1;
public const uint NONE_ID = 0;
public Team(int teamIdx, string name, int icon, uint[] characterIDs, uint vehicleID)
public Team(int teamIdx, string name, int icon, uint[] characterIDs, uint[] playerSkillIDs, uint vehicleID)
{
_teamIdx = teamIdx;
_name = name;
@ -373,7 +374,21 @@ public class Team
{
_characterIDs = (uint[]) characterIDs.Clone();
}
uint[] tempSkillIDs = { NONE_ID, NONE_ID, NONE_ID };
// 判断一下传入的技能列表是否达到固定长度未达到后面添加0到满足固定长度
if (playerSkillIDs.Length < CommandSkillManager.COMMAND_SKILL_COUNT)
{
for (int i = 0; i < tempSkillIDs.Length; i++)
{
if (i < tempSkillIDs.Length)
tempSkillIDs[i] = tempSkillIDs[i];
}
_playerSkillIDs = tempSkillIDs;
}
else
_playerSkillIDs = (uint[])tempSkillIDs.Clone();
_vehicleID = vehicleID;
}

View File

@ -19,8 +19,11 @@ using NPOI.SS.Formula.Functions;
using BehaviorDesigner.Runtime.Tasks.Unity.UnityParticleSystem;
using Gameplay.PlayerSkill;
using Gameplay.Skill;
using Constants = Framework.Constants;
using DG.Tweening;
using Gameplay.Level;
using Gameplay;
using static MagicaCloth2.TeamManager;
using Constants = Framework.Constants;
/// <summary>
/// 队伍和技能选择界面
@ -35,11 +38,16 @@ public class UI_TeamAndSkillSelectController : UIWindow
return await UIManager.Instance.OpenWindow(UINameConst.UI_TeamAndSkillSelect, levelId);
}
#region 类
/// <summary>
/// 队伍
/// 无效技能id
/// </summary>
private class TeamItem : UIBaseItem
private const int INVAIN_SKILL_ID = 0;
#region 类
/// <summary>
/// 队伍
/// </summary>
private class TeamItem : UIBaseItem
{
#region UI
/// <summary>
@ -73,27 +81,42 @@ public class UI_TeamAndSkillSelectController : UIWindow
private RectTransform rectTransformTeam;
#endregion
/// <summary>
/// 队伍索引
/// </summary>
private readonly int index;
/// <summary>
/// 队伍数据
/// </summary>
private Team teamData;
/// <summary>
/// 是否选中
/// </summary>
private bool isSelect;
private readonly bool isSelect;
/// <summary>
/// 选择队伍回调
/// </summary>
private readonly Action<TeamItem> selectTeamAction;
public bool IsSelect
{
get { return isSelect; }
set
{
//rectTransformTeam.DOPivotX(1f, 0.3f);
if(value)
rectTransformTeam.DOPivotX(0f, 0.3f);
else
rectTransformTeam.DOPivotX(1f, 0.3f);
}
}
public TeamItem(GameObject root, int index) : base(root)
/// <summary>
/// 队伍数据
/// </summary>
public Team TeamData
{
this.index = index;
get { return teamData; }
}
public TeamItem(GameObject root, Action<TeamItem> selectTeam) : base(root)
{
selectTeamAction = selectTeam;
goTeam = FindObj("ImageTeamName");
textTeamNum = GetComponent<TMP_Text>("TextTeamNum");
@ -104,19 +127,21 @@ public class UI_TeamAndSkillSelectController : UIWindow
buttonRoot = GoRoot.GetComponent<Button>();
rectTransformTeam = goTeam.transform as RectTransform;
BindButton(buttonRoot, OnPop);
BindButton(buttonReturn, OnPush);
BindButton(buttonRoot, OnClick);
BindButton(buttonReturn, OnClick);
BindButton(buttonEdit, OnEdit);
}
/// <summary>
/// 入口
/// </summary>
public void SetInfo()
rectTransformTeam.pivot = new Vector2(1f, rectTransformTeam.pivot.y);
}
/// <summary>
/// 入口
/// </summary>
public void SetInfo(Team team)
{
textTeamNum.text = $"{index + 1}";
teamData = team;
Team team = TeamEditManager.Instance.TeamList[index];
textTeamNum.text = $"{teamData.TeamIndex + 1}";
textName.text = team.Name;
//imageTeamLogo.sprite = await AssetManager.Instance.LoadAssetAsync<Sprite>(team.); TODO 加载队伍图标
@ -125,20 +150,12 @@ public class UI_TeamAndSkillSelectController : UIWindow
#region 按钮回调方法
/// <summary>
/// UI收回
/// 点击
/// </summary>
private void OnPush()
private void OnClick()
{
rectTransformTeam.DOPivotX(1f, 0.3f);
}
/// <summary>
/// UI弹出
/// </summary>
private void OnPop()
{
rectTransformTeam.DOPivotX(0f, 0.3f);
}
selectTeamAction?.Invoke(this);
}
/// <summary>
/// 队伍编辑
@ -147,15 +164,15 @@ public class UI_TeamAndSkillSelectController : UIWindow
{
TeamEditManager.Instance.RefreshTeams();
await TeamEditManager.Instance.PreLoadAssets();
await UIManager.Instance.OpenWindow(UINameConst.UITeamChoose, index);
await UIManager.Instance.OpenWindow(UINameConst.UITeamChoose, teamData.TeamIndex);
}
#endregion
}
/// <summary>
/// 技能
/// 选中的指挥官技能
/// </summary>
private class SkillItem : UIBaseItem
private class UseSkillItem : UIBaseItem
{
/// <summary>
/// 打开技能选择按钮
@ -166,7 +183,10 @@ public class UI_TeamAndSkillSelectController : UIWindow
/// </summary>
private Image imageLogo;
private readonly string UI_Plus_Icon_Path = "Assets/Art/UI/Texture/UI_Pic_Team/UI_TeamAndSkillSelect/UI_Plus";
/// <summary>
/// 未携带技能的图标状态
/// </summary>
private readonly string UI_Plus_Icon_Path = "Assets/Art/UI/Texture/UI_Pic_Team/UI_TeamAndSkillSelect/UI_Plus.png";
/// <summary>
/// 打开技能选择界面回调
/// </summary>
@ -176,7 +196,7 @@ public class UI_TeamAndSkillSelectController : UIWindow
/// </summary>
private int index;
public SkillItem(GameObject root, int index, Action openSelectSkillAction) : base(root)
public UseSkillItem(GameObject root, int index, Action openSelectSkillAction) : base(root)
{
this.index = index;
this.openSelectSkillAction = openSelectSkillAction;
@ -189,12 +209,13 @@ public class UI_TeamAndSkillSelectController : UIWindow
public async void SetInfo(int skillId)
{
if (skillId == Constants.INVALID_ID)
if (skillId == INVAIN_SKILL_ID)
imageLogo.sprite = await AssetManager.Instance.LoadAssetAsync<Sprite>(UI_Plus_Icon_Path);
else
{
DataPlayerSkill dataPlayerSkill = TableManager.Instance.Tables.PlayerSkillConfig.Get(skillId);
imageLogo.sprite = await AssetManager.Instance.LoadAssetAsync<Sprite>(dataPlayerSkill.IconPath);
string iconPath = $"{Constants.UI_PlaySkill_IconPathFolder}{dataPlayerSkill.IconPath}.png";
imageLogo.sprite = await AssetManager.Instance.LoadAssetAsync<Sprite>(iconPath);
}
IsScaleShow = true;
@ -379,7 +400,7 @@ public class UI_TeamAndSkillSelectController : UIWindow
/// <summary>
/// 动态列表
/// </summary>
private RecycleView phxhRecycleView;
private RecycleView recycleView;
/// <summary>
/// 滑动列表
/// </summary>
@ -438,8 +459,8 @@ public class UI_TeamAndSkillSelectController : UIWindow
textSkillTitle = GetComponent<TMP_Text>("Image_BG/Image_RightBG/Text_SkillTitle");
textSkillCollingTime = GetComponent<TMP_Text>("Image_BG/Image_RightBG/Text_SkillCollingTime");
textDescribe = GetComponent<TMP_Text>("Image_BG/Image_RightBG/Text_Describe");
phxhRecycleView = GetComponent<RecycleView>("Image_BG/PhxhScrollView");
scrollRect = phxhRecycleView.transform.GetComponent<ScrollRect>();
recycleView = GetComponent<RecycleView>("Image_BG/ScrollView");
scrollRect = recycleView.transform.GetComponent<ScrollRect>();
listTab.Add(new TabItem(FindObj("Image_BG/Button_ConductTitle"), PlayerSkillType.Conduct, OnSelectTab));
listTab.Add(new TabItem(FindObj("Image_BG/Button_AttackTitle"), PlayerSkillType.Attack, OnSelectTab));
@ -458,7 +479,7 @@ public class UI_TeamAndSkillSelectController : UIWindow
}
#endregion
phxhRecycleView.Init(RefreshItem);
recycleView.Init(RefreshItem);
BindButton(buttonCancel, OnCancel);
BindButton(buttonClose, OnClose);
@ -477,7 +498,7 @@ public class UI_TeamAndSkillSelectController : UIWindow
/// </summary>
private void RefreshSkillList()
{
phxhRecycleView.ShowList(GetRecycleListShowCount());
recycleView.ShowList(GetRecycleListShowCount());
// 默认选中第一个
List<DataPlayerSkill> listCurSkillData = GetCurTapSkillDatas();
@ -627,15 +648,23 @@ public class UI_TeamAndSkillSelectController : UIWindow
/// <summary>
/// 选中的技能列表
/// </summary>
private readonly List<SkillItem> listSkill = new(CommandSkillManager.COMMAND_SKILL_COUNT);
/// <summary>
/// 编队列表
/// </summary>
private readonly List<TeamItem> listTeam = new(TeamEditManager.MAX_TEAM_COUNT);
private readonly List<UseSkillItem> listSkill = new(CommandSkillManager.COMMAND_SKILL_COUNT);
/// <summary>
/// 编队列表有10个队伍但是该界面只有8个队伍后续可能修改
/// </summary>
private readonly List<TeamItem> listTeam = new(TeamEditManager.MAX_TEAM_COUNT);
/// <summary>
/// 选择技能面板
/// </summary>
private SelectSkillPanel selectSkillPanel;
/// <summary>
/// 当前选中队伍
/// </summary>
private TeamItem curTeamItem;
/// <summary>
/// 当前关卡id
/// </summary>
private int curLevelId;
/// <summary>
/// 初始化
@ -644,18 +673,18 @@ public class UI_TeamAndSkillSelectController : UIWindow
{
TeamAndSkillSelectBinder.GetComponents(this);
selectSkillPanel = new SelectSkillPanel(FindObj("ImageBG/ChangeSkillPanel"));
selectSkillPanel = new SelectSkillPanel(FindObj("ImageBG/SelectSkillPanel"));
Transform tsTeamRoot = FindObj("ImageBG/Teams").transform;
for (int i = 0; i < tsTeamRoot.childCount; ++i)
{
listTeam.Add(new TeamItem(tsTeamRoot.GetChild(i).gameObject, i));
listTeam.Add(new TeamItem(tsTeamRoot.GetChild(i).gameObject, OnSelectTeam));
}
Transform tsSkillRoot = FindObj("ImageBG/CommandSkill").transform;
Transform tsSkillRoot = FindObj("ImageBG/CommandSkills").transform;
for (int i = 0; i < tsSkillRoot.childCount; ++i)
{
listSkill.Add(new SkillItem(tsSkillRoot.GetChild(i).gameObject, i, OnOpenSkillSelect));
listSkill.Add(new UseSkillItem(tsSkillRoot.GetChild(i).gameObject, i, OnOpenSkillSelect));
}
BindButton(Button_Back, OnBack);
@ -669,22 +698,18 @@ public class UI_TeamAndSkillSelectController : UIWindow
/// <param name="data"></param>
protected override void OnShowWindow(object data = null)
{
selectSkillPanel.IsScaleShow = false;
if (data != null)
curLevelId = (int)data;
foreach (TeamItem teamItem in listTeam)
{
teamItem.SetInfo();
}
selectSkillPanel.IsScaleShow = false;
TeamManager.Instance.Init();
for (int i = 0; i < CommandSkillManager.COMMAND_SKILL_COUNT; ++i)
for (int i=0;i<listTeam.Count;++i)
{
if(TeamManager.Instance.CommonSkillMgr.CommandSkillIDs.Count > i)
listSkill[i].SetInfo(TeamManager.Instance.CommonSkillMgr.CommandSkillIDs[i]);
else
listSkill[i].SetInfo(Constants.INVALID_ID);
listTeam[i].SetInfo(TeamEditManager.Instance.TeamList[i]);
}
}
OnSelectTeam(listTeam[TeamEditManager.Instance.SelectTeamIdx]); // 初始选中
}
/// <summary>
/// 重新加载窗口时调用
@ -713,6 +738,39 @@ public class UI_TeamAndSkillSelectController : UIWindow
base.OnRelease();
}
/// <summary>
/// 进入关卡完成后回调
/// </summary>
private void OnEnterLevelFinished()
{
CloseWindow();
}
/// <summary>
/// 刷新队伍使用的技能
/// </summary>
public void RefreshTeamUseSkill()
{
if (curTeamItem == null)
{
for (int i = 0; i < CommandSkillManager.COMMAND_SKILL_COUNT; ++i)
{
listSkill[i].SetInfo(INVAIN_SKILL_ID);
}
return;
}
uint[] skills = curTeamItem.TeamData.GetPlayerSkillIDs();
for (int i = 0; i < CommandSkillManager.COMMAND_SKILL_COUNT; ++i)
{
if (skills.Length > i)
listSkill[i].SetInfo((int)skills[i]);
else
listSkill[i].SetInfo(INVAIN_SKILL_ID);
}
}
#region 按钮回调方法
/// <summary>
/// 返回
@ -733,16 +791,43 @@ public class UI_TeamAndSkillSelectController : UIWindow
/// <summary>
/// 扫荡
/// </summary>
private void OnSweep()
private async void OnSweep()
{
// TODO
Debug.Log("点击扫荡");
}
if (curTeamItem == null)
return;
if (curTeamItem.TeamData.IsMemberEmpty())
return;
// 关闭选关界面和场景
await CommonUtils.CloseUIWithScene(UINameConst.UI_LevelSelect);
LevelManager.Instance.TryEnterLevel(curLevelId, OnEnterLevelFinished);
}
/// <summary>
/// 打开技能选择界面
/// 选择队伍
/// </summary>
private void OnOpenSkillSelect()
private void OnSelectTeam(TeamItem teamItem)
{
#region 选中状态
if (curTeamItem == teamItem)
return;
if (curTeamItem != null)
curTeamItem.IsSelect = false;
curTeamItem = teamItem;
curTeamItem.IsSelect = true;
#endregion
TeamEditManager.Instance.SetSelectTeam((uint)teamItem.TeamData.TeamIndex);
RefreshTeamUseSkill();
}
/// <summary>
/// 打开技能选择界面
/// </summary>
private void OnOpenSkillSelect()
{
selectSkillPanel.SetInfo();
}

View File

@ -279,6 +279,5 @@ public class CommandSkillData
skillLevel = Actor.Instance.PlayerSkill.GetLevel(id);
skillUpgradeData = TableManager.Instance.Tables.PlayerSkillUpgrade.Get(skillID, skillLevel);
playerSkill = TableManager.Instance.Tables.PlayerSkillConfig.Get(skillID);
}
}

View File

@ -498,12 +498,12 @@ public class UI_CommandSkillCultivateController : UIWindow
{
RefreshAllUI();
EventManager.Instance.Register(EventManager.EventName.CultivatePlayerSkillUpgrade, RefreshAllUI);
EventManager.Instance.Register(EventManager.EventName.CultivatePlayerSkillUpgrade, OnSkillUpgrade);
}
protected override void OnHideWindow()
{
EventManager.Instance.Unregister(EventManager.EventName.CultivatePlayerSkillUpgrade, RefreshAllUI);
EventManager.Instance.Unregister(EventManager.EventName.CultivatePlayerSkillUpgrade, OnSkillUpgrade);
}
public override void OnRelease()
@ -511,6 +511,16 @@ public class UI_CommandSkillCultivateController : UIWindow
base.OnRelease();
}
/// <summary>
/// 接收到服务器的技能升级消息
/// </summary>
private void OnSkillUpgrade()
{
Button_LevelUp.interactable = true;
RefreshAllUI();
}
#region 刷新方法
/// <summary>
/// 刷新所有UI
@ -684,6 +694,8 @@ public class UI_CommandSkillCultivateController : UIWindow
return;
}
Button_LevelUp.interactable = false; // 防止快速重复点击
NetHelper.PlayerSkillUpgrade((uint)curSelectItem.SkillData.SkillID);
}

View File

@ -8,7 +8,6 @@ using UnityEngine.UIElements;
using Button = UnityEngine.UI.Button;
using Image = UnityEngine.UI.Image;
using Toggle = UnityEngine.UI.Toggle;
using ScrollView = PhxhSDK.PhxhScrollView;
public class TeamAndSkillSelectBinder
{

View File

@ -132,9 +132,9 @@ public class UI_LevelDetailController : UIWindow
BindButton(Button_Minus, MinusOnClick);
}
private void FightOnClick()
private async void FightOnClick()
{
UIManager.Instance.OpenWindow(UINameConst.UI_BeforeFight, _currLevelInfo.ID);
await UI_TeamAndSkillSelectController.Open(_currLevelInfo.ID);
}
private void OnEnterLevelFinished()