using System;
using System.Collections.Generic;
using UnityEngine;
namespace TcgEngine
{
///
/// 任务配置数据,用于定义各种任务的属性和条件
///
[CreateAssetMenu(fileName = "TaskData", menuName = "TcgEngine/TaskData")]
public class TaskData : ScriptableObject
{
public string id;
public string name;
public string desc;
public TaskConditionType condition;
public int value1; // 任务进度上限
public string value2; // 边界条件1
public string value3; // 边界条件2
public TaskRewardType[] rewardTypes;
public int[] rewardNums;
public bool isDailyTask = true; // 是否为每日任务
public int durationHours = 24; // 任务有效期(小时)
// 从服务器响应数据创建任务配置
public static TaskData CreateFromResponse(TaskDataResponse response)
{
TaskData taskData = ScriptableObject.CreateInstance();
taskData.id = response.id;
taskData.name = response.name;
taskData.desc = response.desc;
taskData.condition = (TaskConditionType)response.condition;
taskData.value1 = response.value1;
taskData.value2 = response.value2;
taskData.value3 = response.value3;
// 转换奖励类型数组
taskData.rewardTypes = new TaskRewardType[response.rewardTypes.Length];
for (int i = 0; i < response.rewardTypes.Length; i++)
{
taskData.rewardTypes[i] = (TaskRewardType)response.rewardTypes[i];
}
taskData.rewardNums = response.rewardNums;
taskData.isDailyTask = response.isDailyTask;
taskData.durationHours = response.durationHours;
return taskData;
}
}
public enum TaskConditionType
{
LoginGame = 1, // 登入游戏
PlayGames = 2, // 进行X场对战
WinGames = 3, // 胜利X场
DefeatHeroWithAttributes = 4, // 击败Y属性和Z属性的英雄X次
SummonHeroWithAttributes = 5, // 召唤Y属性和Z属性的英雄X次
UseHeroSkillWithAttributes = 6 // 使用Y属性和Z属性英雄的技能X次
}
public enum TaskRewardType
{
Coins = 0, // 金币
// 后续可扩展其他奖励类型
}
[Serializable]
public class PlayerTask
{
public string taskId;
public long assignedTime;
public long expireTime;
public TaskStatus status;
public int progress; // 当前进度
public PlayerTask(TaskData taskConfig)
{
taskId = taskConfig.id;
assignedTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
expireTime = DateTimeOffset.UtcNow.AddHours(taskConfig.durationHours).ToUnixTimeSeconds();
Debug.Log($"" +
$"任务获取时间=={assignedTime}" +
$"任务结束时间=={expireTime}" +
$"");
status = TaskStatus.Active;
progress = 0;
}
// 从服务器响应数据创建玩家任务
public PlayerTask(PlayerTaskResponse response)
{
taskId = response.taskId;
assignedTime = response.assignedTime;
expireTime = response.expireTime;
Debug.Log($"" +
$"任务获取时间=={assignedTime}" +
$"任务结束时间=={expireTime}" +
$"");
status = (TaskStatus)response.status;
progress = response.progress;
}
// 转换为服务器响应数据
public PlayerTaskResponse ToResponse()
{
PlayerTaskResponse response = new PlayerTaskResponse();
response.taskId = taskId;
response.assignedTime = assignedTime;
response.expireTime = expireTime;
response.status = (int)status;
response.progress = progress;
return response;
}
}
public enum TaskStatus
{
Active = 0, // 激活
Completed = 1, // 完成
Expired = 2, // 过期
Claimed = 3 // 已领取
}
}