UI更改与功能修正
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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}");
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 "";
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
8
Assets/TcgEngine/Scripts/UI/DeckScroller.cs
Normal file
8
Assets/TcgEngine/Scripts/UI/DeckScroller.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class DeckScroller : MonoBehaviour
|
||||
{
|
||||
|
||||
}
|
||||
11
Assets/TcgEngine/Scripts/UI/DeckScroller.cs.meta
Normal file
11
Assets/TcgEngine/Scripts/UI/DeckScroller.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2badac8a05537094caad9f78cb2e2e0b
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user