增加任务逻辑
This commit is contained in:
116
Assets/TcgEngine/Scripts/Data/TaskData.cs
Normal file
116
Assets/TcgEngine/Scripts/Data/TaskData.cs
Normal file
@@ -0,0 +1,116 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace TcgEngine
|
||||
{
|
||||
/// <summary>
|
||||
/// 任务配置数据,用于定义各种任务的属性和条件
|
||||
/// </summary>
|
||||
[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>();
|
||||
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 DateTime assignedTime;
|
||||
public DateTime expireTime;
|
||||
public TaskStatus status;
|
||||
public int progress; // 当前进度
|
||||
|
||||
public PlayerTask(TaskData taskConfig)
|
||||
{
|
||||
taskId = taskConfig.id;
|
||||
assignedTime = DateTime.Now;
|
||||
expireTime = assignedTime.AddHours(taskConfig.durationHours);
|
||||
status = TaskStatus.Active;
|
||||
progress = 0;
|
||||
}
|
||||
|
||||
// 从服务器响应数据创建玩家任务
|
||||
public PlayerTask(PlayerTaskResponse response)
|
||||
{
|
||||
taskId = response.taskId;
|
||||
assignedTime = new DateTime(response.assignedTime);
|
||||
expireTime = new DateTime(response.expireTime);
|
||||
status = (TaskStatus)response.status;
|
||||
progress = response.progress;
|
||||
}
|
||||
|
||||
// 转换为服务器响应数据
|
||||
public PlayerTaskResponse ToResponse()
|
||||
{
|
||||
PlayerTaskResponse response = new PlayerTaskResponse();
|
||||
response.taskId = taskId;
|
||||
response.assignedTime = assignedTime.Ticks;
|
||||
response.expireTime = expireTime.Ticks;
|
||||
response.status = (int)status;
|
||||
response.progress = progress;
|
||||
return response;
|
||||
}
|
||||
}
|
||||
|
||||
public enum TaskStatus
|
||||
{
|
||||
Active = 0, // 激活
|
||||
Completed = 1, // 完成
|
||||
Expired = 2, // 过期
|
||||
Claimed = 3 // 已领取
|
||||
}
|
||||
}
|
||||
11
Assets/TcgEngine/Scripts/Data/TaskData.cs.meta
Normal file
11
Assets/TcgEngine/Scripts/Data/TaskData.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 951a52e8fe4069e41963e049a390811f
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user