Browse Source

update doc

master
jkpete 1 month ago
parent
commit
6e8ca99ed7
  1. 49
      Example/UsingTest/Script/EGSaveTest.cs
  2. 142
      addons/EGFramework/Manual/EGSave.md
  3. 20
      addons/EGFramework/Module/SaveTools/EGSave.cs

49
Example/UsingTest/Script/EGSaveTest.cs

@ -4,11 +4,11 @@ using LiteDB; @@ -4,11 +4,11 @@ using LiteDB;
namespace EGFramework.Examples.Test{
public partial class EGSaveTest : Node,IEGFramework
{
public override void _Ready()
{
base._Ready();
TestCode();
}
public override void _Ready()
{
base._Ready();
TestCode();
}
public void TestSqlite(){
// string result = this.EGSqlite().CreateTable<SqliteBackpackItem>();
@ -30,16 +30,16 @@ namespace EGFramework.Examples.Test{ @@ -30,16 +30,16 @@ namespace EGFramework.Examples.Test{
// string Path2 = "Data1.json".GetGodotResPath();
// this.EGSave().LoadObjectFile<EGJsonSave>(Path2);
// // this.EGSave().SetObject(CardPath1,"Customer1",new Customer() { Name = "Andy" });
// // this.EGSave().SetObject(CardPath1,"Customer3",new Customer() { Name = "Terry" });
// this.EGSave().SetObject(Path2,"Customer1",new Customer() { Name = "Andy" });
// this.EGSave().SetObject(Path2,"Customer3",new Customer() { Name = "Terry" });
// string CardPath1 = "Card1";
// FileAccess fileAccess = FileAccess.Open("res://SaveData/TestCsv.csv", FileAccess.ModeFlags.Read);
// GD.Print(fileAccess.GetAsText());
FileAccess testJson = FileAccess.Open("res://TestJson.json", FileAccess.ModeFlags.Read);
this.EGSave().ReadObject<EGJsonSave>("TestJson",testJson.GetAsText());
Customer customer = this.EGSave().GetObject<Customer>("TestJson","Customer3");
GD.Print("ReadName is "+customer.Name);
// FileAccess testJson = FileAccess.Open("res://TestJson.json", FileAccess.ModeFlags.Read);
// this.EGSave().ReadObject<EGJsonSave>("TestJson",testJson.GetAsText());
// Customer customer = this.EGSave().GetObject<Customer>("TestJson","Customer3");
// GD.Print("ReadName is "+customer.Name);
// FileAccess testCSV = FileAccess.Open("res://SaveData/TestCSV.json", FileAccess.ModeFlags.Read);
@ -54,21 +54,26 @@ namespace EGFramework.Examples.Test{ @@ -54,21 +54,26 @@ namespace EGFramework.Examples.Test{
// IsActive = true
// };
// csvSave.SetData("",testData,2)
// string Path1 = "Test.csv".GetGodotResPath();
// this.EGSave().LoadDataFile<EGCsvSave>(Path1);
// FileAccess testCsv = FileAccess.Open("res://SaveData/TestCsv.csv", FileAccess.ModeFlags.Read);
// this.EGSave().ReadData<EGCsvSave>("TestCsv",testCsv.GetAsText());
// IEnumerable<Customer> allResult = this.EGSave().GetAllData<Customer>(CardPath1,"");
// GD.Print("Get result " + allResult.Count());
string Path1 = "SaveData/TestCsv.csv".GetGodotResPath();
this.EGSave().LoadDataFile<EGCsvSave>(Path1);
this.EGSave().SetData(Path1,"Customer1",new Customer() { Name = "Andy" },9);
// IEnumerable<Customer> allResult = this.EGSave().GetAllData<Customer>(Path1,"");
// foreach(Customer customer in allResult){
// GD.Print(customer.Id +"|" + customer.Name);
// }
// Customer customer1 = this.EGSave().GetData<Customer>(Path1,"",0);
// GD.Print(customer1.Id +"|" + customer1.Name);
// FileAccess testCsv = FileAccess.Open("res://SaveData/TestCsv.csv", FileAccess.ModeFlags.Read);
// this.EGSave().ReadData<EGCsvSave>("TestCsv",testCsv.GetAsText());
this.EGSave().LoadObjectFile<EGByteSave>("SaveData/testDat.dat");
// this.EGSave().SetObject("SaveData/testDat.dat","",testData);
CustomerByte testDat = this.EGSave().GetObject<CustomerByte>("SaveData/testDat.dat","");
GD.Print(testDat.Id);
// this.EGSave().LoadObjectFile<EGByteSave>("SaveData/testDat.dat");
// // this.EGSave().SetObject("SaveData/testDat.dat","",testData);
// CustomerByte testDat = this.EGSave().GetObject<CustomerByte>("SaveData/testDat.dat","");
// GD.Print(testDat.Id);
// System.Linq.Expressions.Expression<Func<Customer, bool>> expr = i => i.Name == "Creature";
// IEnumerable<Customer> linqResult = csvSave.FindData<Customer>("",expr);

142
addons/EGFramework/Manual/EGSave.md

@ -2,9 +2,11 @@ @@ -2,9 +2,11 @@
---
注:下述`数据`无特殊声明默认指代:对象的集合。
SaveTools使用了两种数据格式,一种是表式存储,一种是对象存储,统一使用key-value方式存储数据,通过唯一key值锁定对应的数据。如果是只读数据,则需指定唯一标识key,读写数据,这个key值则为文件路径(唯一)。
在使用该库时,一定要保证该数据被加载。可以重复读取数据文件,如果外部进行了修改,新读取的数据会覆盖掉原来的数据。
在使用该库时,一定要保证该数据被加载。可以重复读取数据文件,如果外部进行了修改,新读取的数据会覆盖掉原来的数据。使用流程:加载数据->读写数据或者其他操作
需要在对应Godot的Node类下实现接口 `IEGFramework`
@ -50,14 +52,10 @@ public partial class EGSaveTest : Node,IEGFramework{ @@ -50,14 +52,10 @@ public partial class EGSaveTest : Node,IEGFramework{
# EGSave
## 属性
暂无
## 方法
| 方法名 | 简介 |
@ -73,13 +71,11 @@ public partial class EGSaveTest : Node,IEGFramework{ @@ -73,13 +71,11 @@ public partial class EGSaveTest : Node,IEGFramework{
| void SetObject<TObject>(string path,string objectKey,TObject obj) | 设置对象(写入文件) |
| TObject GetObject<TObject>(string path,string key) | 获取对象(读取文件) |
| void SetData<TData>(string path,string dataKey,TData data,int id) | 设置数据(写入文件) |
| TData GetData<TData>(string path,string key,int id) | 获取单个数据(读取文件) |
| IEnumerable<TData> GetAllData<TData>(string path,string key) | 获取全部数据(读取文件) |
| TData GetData<TData>(string keyOrPath,string key,int id) | 获取单个数据(读取文件) |
| IEnumerable<TData> GetAllData<TData>(string keyOrPath,string key) | 获取全部数据(读取文件) |
| OpenResPath() | 打开Res文件目录 |
| OpenUserPath() | 打开User文件目录 |
## 扩展方法
| 方法名 | 简介 |
@ -88,14 +84,10 @@ public partial class EGSaveTest : Node,IEGFramework{ @@ -88,14 +84,10 @@ public partial class EGSaveTest : Node,IEGFramework{
| [string].GetGodotResPath(this string path) | 转为res文件下的相对路径 |
| [string].GetGodotUserPath(this string path) | 转为User文件下的相对路径 |
## 属性说明
暂无
## 方法说明
### LoadDataFile<T>(string path)
@ -111,8 +103,6 @@ string Path1 = "Data/Test1.csv".GetGodotResPath(); @@ -111,8 +103,6 @@ string Path1 = "Data/Test1.csv".GetGodotResPath();
this.EGSave().LoadDataFile<EGCsvSave>(Path1);
```
### ReadData<T>(string key,string data)
### ReadData<T>(string key,byte[] data)
@ -130,8 +120,6 @@ FileAccess testCsv = FileAccess.Open("res://TestCsv.csv", FileAccess.ModeFlags.R @@ -130,8 +120,6 @@ FileAccess testCsv = FileAccess.Open("res://TestCsv.csv", FileAccess.ModeFlags.R
this.EGSave().ReadData<EGCsvSave>("TestCsv",testCsv.GetAsText());
```
### LoadObjectFile<T>(string path)
从路径中加载对象文件,因为是可读写,所以必须指定对应的文件路径位置,如果不存在该文件则会新建对应数据文件。
@ -145,8 +133,6 @@ string Path2 = "Data1.json".GetGodotResPath(); @@ -145,8 +133,6 @@ string Path2 = "Data1.json".GetGodotResPath();
this.EGSave().LoadObjectFile<EGJsonSave>(Path2);
```
### ReadObject<T>(string key,string data)
### ReadObject<T>(string key,byte[] data)
@ -164,8 +150,6 @@ FileAccess testJson = FileAccess.Open("res://TestJson.json", FileAccess.ModeFlag @@ -164,8 +150,6 @@ FileAccess testJson = FileAccess.Open("res://TestJson.json", FileAccess.ModeFlag
this.EGSave().ReadObject<EGJsonSave>("TestJson",testJson.GetAsText());
```
### Unload(string keyOrPath)
卸载已读取或者加载的数据,并删除对应key值下的数据,此方法执行后,不再能获取对应的数据,也不能写入文件,需要重新加载。
@ -176,8 +160,6 @@ this.EGSave().ReadObject<EGJsonSave>("TestJson",testJson.GetAsText()); @@ -176,8 +160,6 @@ this.EGSave().ReadObject<EGJsonSave>("TestJson",testJson.GetAsText());
this.EGSave().Unload("TestCsv");
```
### List<string> GetKeys()
获取所有加载过的key值或者路径值。
@ -186,13 +168,125 @@ this.EGSave().Unload("TestCsv"); @@ -186,13 +168,125 @@ this.EGSave().Unload("TestCsv");
List<string> keys = this.EGSave().GetKeys();
```
### SetObject<T>(string path,string objectKey,TObject obj)
把对象写入文件中。需要先加载再写入。
- T:指代任何一个对象工具类
- path:对象文件的路径值
- objectKey:对象文件的key值
- obj:要写入的对象
```csharp
public class Customer
{
[CsvParam("ID")]
public int Id { get; set; }
[CsvParam("Name")]
public string Name { get; set; }
public string[] Phones { get; set; }
[CsvParam("是否启用")]
public bool IsActive { get; set; }
}
public partial class EGSaveTest : Node,IEGFramework{
public override void _Ready()
{
string Path2 = "Data1.json".GetGodotResPath();
this.EGSave().LoadObjectFile<EGJsonSave>(Path2);
        this.EGSave().SetObject(Path2,"Customer1",new Customer()
            { Name = "Andy" });
}
}
```
### TObject GetObject<T>(string path,string key)
从文件中获取对象,同样需要先加载再获取。
- TObject:要获取的对象类型。
- path:对象文件的路径值
- key:对象的key值
```csharp
string Path2 = "Data1.json".GetGodotResPath();
this.EGSave().LoadObjectFile<EGJsonSave>(Path2);
Customer customer = this.EGSave().
GetObject<Customer>("Data1.json","Customer1");
```
### SetData<T>(string path,string dataKey,TData data,int id)
把一条数据写入文件中的指定位置。特别注意,如果写入的位置超出了文件中的数据量,则会进行追加数据,否则覆盖对应位置的数据。
- T:指代任何一个数据工具类
- path:数据文件的路径值
- dataKey:数据文件的key值
- data:要写入的数据
- id:指代第x条数据
```csharp
string Path2 = "TestCsv.csv".GetGodotResPath();
this.EGSave().LoadObjectFile<EGJsonSave>(Path2);
this.EGSave().SetData(Path1,"Customer1",
    new Customer() { Name = "Andy" },9);
```
### TData GetData<T>(string keyOrPath,string key,int id)
获取文件中特定key值的列表里,第x条数据。
- keyOrPath:文件的路径,或者读取后存储的key值。
- key:文件中的数据列表对应的key值。
- id:第【id】条
```csharp
string Path1 = "SaveData/TestCsv.csv".GetGodotResPath();
this.EGSave().LoadDataFile<EGCsvSave>(Path1);
Customer customer1 = this.EGSave().GetData<Customer>(Path1,"",0);
GD.Print(customer1.Id +"|" + customer1.Name);
```
### IEnumerable<T> GetAllData<T>(string keyOrPath,string key)
获取文件中特定key值的全部数据。
- keyOrPath:文件的路径,或者读取后存储的key值。
- key:文件中的数据列表对应的key值。
```csharp
string Path1 = "SaveData/TestCsv.csv".GetGodotResPath();
this.EGSave().LoadDataFile<EGCsvSave>(Path1);
IEnumerable<Customer> allResult = this.EGSave().GetAllData<Customer>(Path1,"");
foreach(Customer customer in allResult){
GD.Print(customer.Id +"|" + customer.Name);
}
```
### OpenResPath()
打开godot对应的res文件夹
### OpenUserPath()
打开godot对应的user文件夹
# 接口说明
# 接口说明与扩展建议
---

20
addons/EGFramework/Module/SaveTools/EGSave.cs

@ -154,21 +154,21 @@ namespace EGFramework @@ -154,21 +154,21 @@ namespace EGFramework
throw new Exception("File not loaded, you should use LoadDataFile(path) first.");
}
}
public TData GetData<TData>(string path,string key,int id) where TData : new(){
if(DataBaseFiles.ContainsKey(path)){
return DataBaseFiles[path].GetData<TData>(key,id);
}else if(DataBaseReadOnly.ContainsKey(path)){
return DataBaseReadOnly[path].GetData<TData>(key,id);
public TData GetData<TData>(string keyOrPath,string key,int id) where TData : new(){
if(DataBaseFiles.ContainsKey(keyOrPath)){
return DataBaseFiles[keyOrPath].GetData<TData>(key,id);
}else if(DataBaseReadOnly.ContainsKey(keyOrPath)){
return DataBaseReadOnly[keyOrPath].GetData<TData>(key,id);
}else{
throw new Exception("File not loaded, you should use LoadDataFile(key) or ReadData(key,data) first.");
}
}
public IEnumerable<TData> GetAllData<TData>(string path,string key) where TData : new(){
if(DataBaseFiles.ContainsKey(path)){
return DataBaseFiles[path].GetAll<TData>(key);
}else if(DataBaseReadOnly.ContainsKey(path)){
return DataBaseReadOnly[path].GetAll<TData>(key);
public IEnumerable<TData> GetAllData<TData>(string keyOrPath,string key) where TData : new(){
if(DataBaseFiles.ContainsKey(keyOrPath)){
return DataBaseFiles[keyOrPath].GetAll<TData>(key);
}else if(DataBaseReadOnly.ContainsKey(keyOrPath)){
return DataBaseReadOnly[keyOrPath].GetAll<TData>(key);
}else{
throw new Exception("File not loaded, you should use LoadDataFile(key) or ReadData(key,data) first.");
}

Loading…
Cancel
Save