Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
MemoryBankData.cs
浏览该文件的文档.
1using System.Text;
2using Engine;
3
4namespace Game {
6 public static List<char> m_hexChars = [
7 '0',
8 '1',
9 '2',
10 '3',
11 '4',
12 '5',
13 '6',
14 '7',
15 '8',
16 '9',
17 'A',
18 'B',
19 'C',
20 'D',
21 'E',
22 'F'
23 ];
24
25 public DynamicArray<byte> Data = [];
26
27 public byte LastOutput { get; set; }
28
29 public byte Read(int address) {
30 if (address >= 0
31 && address < Data.Count) {
32 return Data.Array[address];
33 }
34 return 0;
35 }
36
37 public void Write(int address, byte data) {
38 if (address >= 0
39 && address < Data.Count) {
40 Data.Array[address] = data;
41 }
42 else if (address >= 0
43 && address < 256
44 && data != 0) {
45 Data.Count = MathUtils.Max(Data.Count, address + 1);
46 Data.Array[address] = data;
47 }
48 }
49
50 public IEditableItemData Copy() => new MemoryBankData { Data = new DynamicArray<byte>(Data), LastOutput = LastOutput };
51
52 public void LoadString(string data) {
53 string[] array = data.Split([';'], StringSplitOptions.RemoveEmptyEntries);
54 if (array.Length >= 1) {
55 string text = array[0];
56 text = text.TrimEnd('0');
57 Data.Clear();
58 for (int i = 0; i < MathUtils.Min(text.Length, 256); i++) {
59 int num = m_hexChars.IndexOf(char.ToUpperInvariant(text[i]));
60 if (num < 0) {
61 num = 0;
62 }
63 Data.Add((byte)num);
64 }
65 }
66 if (array.Length >= 2) {
67 string text2 = array[1];
68 int num2 = m_hexChars.IndexOf(char.ToUpperInvariant(text2[0]));
69 if (num2 < 0) {
70 num2 = 0;
71 }
72 LastOutput = (byte)num2;
73 }
74 }
75
76 public string SaveString() => SaveString(true);
77
78 public string SaveString(bool saveLastOutput) {
79 StringBuilder stringBuilder = new();
80 int num = 0;
81 for (int i = 0; i < Data.Count; i++) {
82 if (Data.Array[i] != 0) {
83 num = i + 1;
84 }
85 }
86 for (int j = 0; j < num; j++) {
87 int index = Math.Clamp((int)Data.Array[j], 0, 15);
88 stringBuilder.Append(m_hexChars[index]);
89 }
90 if (saveLastOutput) {
91 stringBuilder.Append(';');
92 stringBuilder.Append(m_hexChars[Math.Clamp((int)LastOutput, 0, 15)]);
93 }
94 return stringBuilder.ToString();
95 }
96 }
97}
static int Min(int x1, int x2)
static int Max(int x1, int x2)
void Write(int address, byte data)
IEditableItemData Copy()
string SaveString(bool saveLastOutput)
DynamicArray< byte > Data
static List< char > m_hexChars
void LoadString(string data)