This commit is contained in:
CortexCore
2024-11-23 17:20:13 +08:00
commit bb257507bc
133 changed files with 2574 additions and 0 deletions

30
Src/Quest/IQuestData.cs Normal file
View 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; }
}
}

View File

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

View 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;
}
}
}

View File

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

View 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
}

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: b93d14745ae2c064fb21541ca62ad9de
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant: