1
This commit is contained in:
30
Src/Quest/IQuestData.cs
Normal file
30
Src/Quest/IQuestData.cs
Normal file
@@ -0,0 +1,30 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Net.Project.B.Quest
|
||||
{
|
||||
public enum QuestState
|
||||
{
|
||||
Inactive,
|
||||
Active,
|
||||
Completed,
|
||||
Canceled,
|
||||
Failed
|
||||
}
|
||||
public interface IQuestData
|
||||
{
|
||||
public int Identity { get; }
|
||||
public string Name { get; }
|
||||
public string Description { get; }
|
||||
public bool IsCompleted { get; }
|
||||
public QuestState CurrentState { get; }
|
||||
}
|
||||
public struct QuestData : IQuestData
|
||||
{
|
||||
public int Identity { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string Description { get; set; }
|
||||
public bool IsCompleted { get; set; }
|
||||
public QuestState CurrentState { get; set; }
|
||||
}
|
||||
}
|
11
Src/Quest/IQuestData.cs.meta
Normal file
11
Src/Quest/IQuestData.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5fde0215d2d5e254580d8747f34f43a3
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
45
Src/Quest/IQuestService.cs
Normal file
45
Src/Quest/IQuestService.cs
Normal file
@@ -0,0 +1,45 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace Net.Project.B.Quest
|
||||
{
|
||||
public interface IQuestService
|
||||
{
|
||||
public IReadOnlyDictionary<int,IQuestData> Quests { get; }
|
||||
public event Action<IQuestData,QuestState,QuestState> OnQuestCreatedOrUpdated;
|
||||
IQuestData AddOrUpdateQuest(IQuestData questData);
|
||||
}
|
||||
public class QuestService : IQuestService
|
||||
{
|
||||
//自动实现
|
||||
private readonly ILogger<QuestService> _logger;
|
||||
public IReadOnlyDictionary<int, IQuestData> Quests => _quests;
|
||||
public event Action<IQuestData, QuestState, QuestState> OnQuestCreatedOrUpdated;
|
||||
private readonly ConcurrentDictionary<int,IQuestData> _quests = new();
|
||||
|
||||
public QuestService(ILogger<QuestService> logger)
|
||||
{
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public IQuestData AddOrUpdateQuest(IQuestData questData)
|
||||
{
|
||||
if (_quests.TryAdd(questData.Identity, questData))
|
||||
{
|
||||
OnQuestCreatedOrUpdated?.Invoke(questData,QuestState.Inactive,questData.CurrentState);
|
||||
_logger.LogInformation($"任务:{questData.Name}已创建");
|
||||
}
|
||||
else
|
||||
{
|
||||
var currentState = _quests[questData.Identity].CurrentState;
|
||||
_quests[questData.Identity] = questData;
|
||||
OnQuestCreatedOrUpdated?.Invoke(questData,currentState,questData.CurrentState);
|
||||
_logger.LogInformation($"任务:{questData.Name}已更新状态,从{currentState}更新为{questData.CurrentState}");
|
||||
}
|
||||
return questData;
|
||||
}
|
||||
}
|
||||
}
|
11
Src/Quest/IQuestService.cs.meta
Normal file
11
Src/Quest/IQuestService.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d132a501f9e537b479368d38dce91e44
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
16
Src/Quest/Net.Project.B.Quest.asmdef
Normal file
16
Src/Quest/Net.Project.B.Quest.asmdef
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"name": "Net.Project.B.Quest",
|
||||
"rootNamespace": "",
|
||||
"references": [
|
||||
"GUID:14fe60d984bf9f84eac55c6ea033a8f4"
|
||||
],
|
||||
"includePlatforms": [],
|
||||
"excludePlatforms": [],
|
||||
"allowUnsafeCode": false,
|
||||
"overrideReferences": false,
|
||||
"precompiledReferences": [],
|
||||
"autoReferenced": true,
|
||||
"defineConstraints": [],
|
||||
"versionDefines": [],
|
||||
"noEngineReferences": true
|
||||
}
|
7
Src/Quest/Net.Project.B.Quest.asmdef.meta
Normal file
7
Src/Quest/Net.Project.B.Quest.asmdef.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b93d14745ae2c064fb21541ca62ad9de
|
||||
AssemblyDefinitionImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Reference in New Issue
Block a user