UI更改与功能修正

This commit is contained in:
YiHan0621
2025-09-17 16:22:06 +08:00
parent 0fd35d8c21
commit 3f425c9434
191 changed files with 1271 additions and 4307 deletions

View File

@@ -223,32 +223,32 @@ namespace TcgEngine
SaveTokens();
}
}
public async Task<UserData> LoadUserData()
{
udata = await LoadUserData(this.username);
udata = await LoadUserData(this.UserID);
return udata;
}
public async Task<UserData> LoadUserData(string username)
/// <summary>
/// 发送id或者用户名都可以返回玩家数据
/// </summary>
/// <param name="user">ID或用户名</param>
/// <returns></returns>
public async Task<UserData> LoadUserData(string user)
{
if (!IsConnected())
return null;
string url = ServerURL + "/users/" + username;
string url = ServerURL + "/users/" + user;
WebResponse res = await SendGetRequest(url);
UserData udata = null;
if (res.success)
{
udata = ApiTool.JsonToObject<UserData>(res.data);
// Debug.Log($"获取玩家数据:{res.data}");
Debug.Log($"获取玩家数据:{res.data}");
}
else
{
Debug.LogError("失败!!!!!!!!!!!!");
}
Debug.Log($"{udata.id}");
return udata;
}
@@ -482,8 +482,8 @@ namespace TcgEngine
public static ApiClient Get()
{
if (instance == null)
instance = FindObjectOfType<ApiClient>();
// if (instance == null)
// instance = FindObjectOfType<ApiClient>();
return instance;
}
}

View File

@@ -48,38 +48,38 @@ namespace TcgEngine
return taskData;
}
// 本地读取的缓存存储处
// 还没改
public TaskData LoadFromResponse(TaskDataResponse response)
{
TaskData task = ScriptableObject.CreateInstance<TaskData>();
task.id = response.id;
task.name = response.name;
task.desc = response.desc;
task.condition = (TaskConditionType)response.condition;
task.value1 = response.value1;
task.value2 = response.value2;
task.value3 = response.value3;
if (response.rewardTypes != null)
{
task.rewardTypes = new TaskRewardType[response.rewardTypes.Length];
for (int i = 0; i < response.rewardTypes.Length; i++)
{
task.rewardTypes[i] = (TaskRewardType)response.rewardTypes[i];
}
}
else
{
task.rewardTypes = new TaskRewardType[0];
}
task.rewardNums = response.rewardNums != null ? response.rewardNums : new int[0];
task.isDailyTask = response.isDailyTask;
task.durationHours = response.durationHours;
return task;
}
// // 本地读取的缓存存储处
// // 还没改
// public static TaskData LoadFromResponse(TaskDataResponse response)
// {
// TaskData task = ScriptableObject.CreateInstance<TaskData>();
// task.id = response.id;
// task.name = response.name;
// task.desc = response.desc;
// task.condition = (TaskConditionType)response.condition;
// task.value1 = response.value1;
// task.value2 = response.value2;
// task.value3 = response.value3;
//
// if (response.rewardTypes != null)
// {
// task.rewardTypes = new TaskRewardType[response.rewardTypes.Length];
// for (int i = 0; i < response.rewardTypes.Length; i++)
// {
// task.rewardTypes[i] = (TaskRewardType)response.rewardTypes[i];
// }
// }
// else
// {
// task.rewardTypes = new TaskRewardType[0];
// }
//
// task.rewardNums = response.rewardNums != null ? response.rewardNums : new int[0];
// task.isDailyTask = response.isDailyTask;
// task.durationHours = response.durationHours;
//
// return task;
// }
}
public enum TaskConditionType

View File

@@ -4,14 +4,49 @@ using UnityEngine;
namespace TcgEngine
{
/// <summary>
/// Defines all factions data
/// </summary>
[System.Serializable]
public enum TeamTitle
{
Neutral,
Light,
Dark,
Fire,
Wind,
Water
}
public static class TeamTitleData
{
public static string Team(TeamTitle title)
{
switch (title)
{
case TeamTitle.Dark:
return "dark";
break;
case TeamTitle.Fire:
return "fire";
break;
case TeamTitle.Light:
return "light";
break;
case TeamTitle.Water:
return "water";
break;
case TeamTitle.Wind:
return "wind";
break;
default:
return "neutral";
}
}
}
[CreateAssetMenu(fileName = "TeamData", menuName = "TcgEngine/TeamData", order = 1)]
public class TeamData : ScriptableObject
{
public string id;
public TeamTitle id;
public string title;
public Sprite icon;
public Color color;
@@ -28,7 +63,7 @@ namespace TcgEngine
{
foreach (TeamData team in GetAll())
{
if (team.id == id)
if (TeamTitleData.Team(team.id) == id)
return team;
}
return null;

View File

@@ -303,16 +303,23 @@ namespace TcgEngine.Gameplay
// 每日任务分配
public void AssignDailyTaskIfNeeded()
{
long now = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
var now = DateTimeOffset.UtcNow.ToOffset(TimeSpan.FromHours(8)); // 北京时间
var last = DateTimeOffset.FromUnixTimeSeconds(lastDailyTaskAssigned).ToOffset(TimeSpan.FromHours(8));
long secondsSinceLastTask = now - lastDailyTaskAssigned;
// 转换为小时
double hoursSinceLastTask = secondsSinceLastTask / 3600.0;
Debug.Log($"当前时间:{now},最后下发时间:{lastDailyTaskAssigned},减去时间{secondsSinceLastTask},小时时间:{hoursSinceLastTask}");
if (hoursSinceLastTask < 24 && assignedTaskDict.Count == 5)
// 如果还是同一天,并且任务已满,就不分配
if (now.Date == last.Date && assignedTaskDict.Count == maxTasks)
return;
// 检查玩家是否已达到最大任务
// 如果已经跨天 -> 清空旧任务
if (now.Date != last.Date)
{
playerTasks.Clear();
assignedTaskDict.Clear();
Debug.Log("新的一天,清空旧任务");
// OnPlayerLogin();
}
// 检查是否达到上限
if (playerTasks.Count >= maxTasks)
return;
@@ -374,7 +381,7 @@ namespace TcgEngine.Gameplay
PlayerTask playerTask = new PlayerTask(selectedTask);
playerTasks.Add(playerTask);
lastDailyTaskAssigned = now;
lastDailyTaskAssigned = now.ToUnixTimeSeconds();
SavePlayerData();
Debug.Log($"分配任务: {selectedTask.name}");

View File

@@ -477,7 +477,7 @@ namespace TcgEngine.Server
//--- Setup Commands ------
public virtual async void SetPlayerDeck(int player_id, string username, UserDeckData deck)
public virtual async void SetPlayerDeck(int player_id, string userID, UserDeckData deck)
{
Player player = game_data.GetPlayer(player_id);
if (player != null && game_data.state == GameState.Connecting)
@@ -485,7 +485,7 @@ namespace TcgEngine.Server
UserData user = Authenticator.Get().UserData; //Offline game, get local user
if(Authenticator.Get().IsApi())
user = await ApiClient.Get().LoadUserData(username); //Online game, validate from api
user = await ApiClient.Get().LoadUserData(userID); //Online game, validate from api
//Use user API deck
UserDeckData udeck = user?.GetDeck(deck.tid);

View File

@@ -100,7 +100,7 @@ namespace TcgEngine.UI
//Set power abilities hover text
foreach (IconButton btn in hero_powers)
{
CardData icard = CardData.Get(btn.value);
CardData icard = CardData.Get(btn.GetValue());
HoverTargetUI hover = btn.GetComponent<HoverTargetUI>();
AbilityData iability = icard?.GetAbility(AbilityTrigger.Activate);
if (icard != null && hover != null && iability != null)
@@ -198,6 +198,9 @@ namespace TcgEngine.UI
RefreshStarterDeck();
}
/// <summary>
/// 筛选刷新
/// </summary>
private void RefreshFilters()
{
search.text = "";
@@ -388,7 +391,7 @@ namespace TcgEngine.UI
foreach (IconButton btn in hero_powers)
{
if (deck.hero != null && btn.value == deck.hero.tid)
if (deck.hero != null && btn.GetValue() == deck.hero.tid)
btn.Activate();
}
@@ -615,7 +618,7 @@ namespace TcgEngine.UI
{
foreach (TeamData team in TeamData.GetAll())
{
if (button.value == team.id)
if (button.GetValue() == TeamTitleData.Team(team.id))
filter_team = team;
}
}
@@ -806,7 +809,7 @@ namespace TcgEngine.UI
foreach (IconButton btn in hero_powers)
{
if (btn.IsActive())
return btn.value;
return btn.GetValue();
}
return "";
}

View File

@@ -47,8 +47,8 @@ namespace TcgEngine.UI
private bool isHideObject = false;
public List<string> Usersid = new List<string>();
UserData udata = ApiClient.Get().UserData;
private UserData udata;
protected override void Awake()
{
base.Awake();
@@ -59,6 +59,7 @@ namespace TcgEngine.UI
my_ladderLine.onClick += OnClickRankLine;
InitLines();
udata = ApiClient.Get().UserData;
}
private void OnDestroy()
@@ -288,6 +289,7 @@ namespace TcgEngine.UI
RefreshPanel();
RefreshLadderPanel();
ladderRank.Show();
udata = ApiClient.Get().UserData;
}
public override void Hide(bool instant = false)

View File

@@ -1,5 +1,6 @@
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
using TcgEngine.Client;
@@ -55,6 +56,7 @@ namespace TcgEngine.UI
public Text edit_error;
private string username;
private string _userPlayerID;
private UserData user_data;
private static PlayerPanel instance;
@@ -89,7 +91,6 @@ namespace TcgEngine.UI
user_data = Authenticator.Get().UserData;
else
user_data = await ApiClient.Get().LoadUserData(username);
RefreshPanel();
}
@@ -131,7 +132,7 @@ namespace TcgEngine.UI
defeats.text = user.defeats.ToString();
cards_all.text = user.CountUniqueCards() + " / " + CardData.GetAllDeckbuilding().Count;
buttons_area?.SetActive(IsYou()); //Buttons like logout only active if your account
// buttons_area?.SetActive(IsYou()); //Buttons like logout only active if your account
account_button?.SetActive(Authenticator.Get().IsApi());
sell_button?.SetActive(Authenticator.Get().IsApi());
}
@@ -419,7 +420,7 @@ namespace TcgEngine.UI
public override void Show(bool instant = false)
{
base.Show(instant);
ShowPlayer();
ShowPlayer(); // 每次显示
}
public override void Hide(bool instant = false)

View File

@@ -235,7 +235,7 @@ namespace TcgEngine
CardAddRequest req = new CardAddRequest();
req.tid = card.id;
req.type = card.GetTypeId();
req.team = card.team.id;
req.team = TeamTitleData.Team(card.team.id);
req.rarity = card.rarity.id;
req.mana = card.mana;
req.attack = card.attack;
@@ -263,7 +263,7 @@ namespace TcgEngine
CardAddRequest rcard = new CardAddRequest();
rcard.tid = card.id;
rcard.type = card.GetTypeId();
rcard.team = card.team.id;
rcard.team = TeamTitleData.Team(card.team.id);
rcard.rarity = card.rarity.id;
rcard.mana = card.mana;
rcard.attack = card.attack;

View File

@@ -0,0 +1,8 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DeckScroller : MonoBehaviour
{
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 2badac8a05537094caad9f78cb2e2e0b
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -8,9 +8,8 @@ using TcgEngine;
namespace TcgEngine.UI
{
/// <summary>
/// Deck selector is a dropdown that let the player select a deck before a match
/// 牌组选择器是一个下拉菜单,让玩家在比赛前选择牌组
/// </summary>
public class DeckSelector : MonoBehaviour
{
public DropdownValue deck_dropdown;

View File

@@ -7,9 +7,8 @@ using UnityEngine.UI;
namespace TcgEngine.UI
{
/// <summary>
/// Class that let you store a ID with each element of a Dropdown
/// 在Dropdown的每个元素中存储ID
/// </summary>
[System.Serializable]
public class DropdownValueItem
{

View File

@@ -13,7 +13,8 @@ namespace TcgEngine.UI
public class IconButton : MonoBehaviour
{
public string group;
public string value;
public TeamTitle valueData;
private string value;
public Image active_img;
public Image disabled_img;
@@ -42,7 +43,7 @@ namespace TcgEngine.UI
void Start()
{
value = TeamTitleData.Team(valueData);
}
private void Update()
@@ -124,5 +125,10 @@ namespace TcgEngine.UI
}
return toggles;
}
public string GetValue()
{
return value;
}
}
}