-
Notifications
You must be signed in to change notification settings - Fork 3
/
TableLoader.cs
82 lines (73 loc) · 1.83 KB
/
TableLoader.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
using System;
using System.Diagnostics;
using System.IO;
using UnityEngine;
using Debug = UnityEngine.Debug;
namespace FlatTable
{
public enum LoadType
{
FilePath,
ResourcePath
}
public class TableLoader
{
private static byte[] cacheBytes;
public static byte[] GetByteArray(int length)
{
if (cacheBytes == null)
{
cacheBytes = new byte[1024];
}
if (length > cacheBytes.Length)
{
cacheBytes = new byte[length];
}
return cacheBytes;
}
public static string fileLoadPath;
public static LoadType loadType = LoadType.FilePath;
public static Func<string, byte[]> customLoader;
public static void Load<T>() where T : TableBase, new()
{
T t = new T();
if (customLoader != null)
{
byte[] bytes = customLoader(t.FileName);
t.Decode(bytes);
return;
}
if (loadType == LoadType.FilePath)
{
string fileName = t.FileName + ".bytes";
string loadPath = Path.Combine(fileLoadPath, fileName);
if (!File.Exists(loadPath))
{
Debug.LogError("无法根据路径载入配置文件: " + loadPath);
t.Dispose();
return;
}
using (FileStream fs = File.OpenRead(loadPath))
{
int byteLength = (int) fs.Length;
fs.Position = 0;
byte[] bytes = GetByteArray(byteLength);
fs.Read(bytes, 0, byteLength);
t.Decode(bytes);
}
}
else if (loadType == LoadType.ResourcePath)
{
string loadPath = Path.Combine(fileLoadPath, t.FileName);
TextAsset fileTextAsset = Resources.Load<TextAsset>(loadPath);
if (fileTextAsset == null)
{
Debug.LogError("无法在resource目录载入配置文件: " + loadPath);
return;
}
byte[] bytes = fileTextAsset.bytes;
t.Decode(bytes);
}
}
}
}