Files
SVSimServer/SVSim.BattleEngine/Engine/ByteReader.cs
gamer147 824309ec44 feat(battle-engine): close the AI-simulation subsystem (verbatim)
Copied the 89 uncopied AI*SimulationUtility/extension files defining the
AIVirtualCard/AIVirtualField extension methods; the compile loop then auto-closed
the revealed type deps (~3049 files total, drift-clean). 10.0k -> 62 errors.
2026-06-05 20:30:59 -04:00

204 lines
3.7 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using UnityEngine;
public class ByteReader
{
private byte[] mBuffer;
private int mOffset;
private static BetterList<string> mTemp = new BetterList<string>();
public bool canRead
{
get
{
if (mBuffer != null)
{
return mOffset < mBuffer.Length;
}
return false;
}
}
public ByteReader(byte[] bytes)
{
mBuffer = bytes;
}
public ByteReader(TextAsset asset)
{
mBuffer = asset.bytes;
}
public static ByteReader Open(string path)
{
FileStream fileStream = File.OpenRead(path);
if (fileStream != null)
{
fileStream.Seek(0L, SeekOrigin.End);
byte[] array = new byte[fileStream.Position];
fileStream.Seek(0L, SeekOrigin.Begin);
fileStream.Read(array, 0, array.Length);
fileStream.Close();
return new ByteReader(array);
}
return null;
}
private static string ReadLine(byte[] buffer, int start, int count)
{
return Encoding.UTF8.GetString(buffer, start, count);
}
public string ReadLine()
{
return ReadLine(skipEmptyLines: true);
}
public string ReadLine(bool skipEmptyLines)
{
int num = mBuffer.Length;
if (skipEmptyLines)
{
while (mOffset < num && mBuffer[mOffset] < 32)
{
mOffset++;
}
}
int num2 = mOffset;
if (num2 < num)
{
int num3;
do
{
if (num2 < num)
{
num3 = mBuffer[num2++];
continue;
}
num2++;
break;
}
while (num3 != 10 && num3 != 13);
string result = ReadLine(mBuffer, mOffset, num2 - mOffset - 1);
mOffset = num2;
return result;
}
mOffset = num;
return null;
}
public Dictionary<string, string> ReadDictionary()
{
Dictionary<string, string> dictionary = new Dictionary<string, string>();
char[] separator = new char[1] { '=' };
while (canRead)
{
string text = ReadLine();
if (text == null)
{
break;
}
if (!text.StartsWith("//"))
{
string[] array = text.Split(separator, 2, StringSplitOptions.RemoveEmptyEntries);
if (array.Length == 2)
{
string key = array[0].Trim();
string value = array[1].Trim().Replace("\\n", "\n");
dictionary[key] = value;
}
}
}
return dictionary;
}
public BetterList<string> ReadCSV()
{
mTemp.Clear();
string text = "";
bool flag = false;
int num = 0;
while (canRead)
{
if (flag)
{
string text2 = ReadLine(skipEmptyLines: false);
if (text2 == null)
{
return null;
}
text2 = text2.Replace("\\n", "\n");
text = text + "\n" + text2;
}
else
{
text = ReadLine(skipEmptyLines: true);
if (text == null)
{
return null;
}
text = text.Replace("\\n", "\n");
num = 0;
}
int i = num;
for (int length = text.Length; i < length; i++)
{
switch (text[i])
{
case ',':
if (!flag)
{
mTemp.Add(text.Substring(num, i - num));
num = i + 1;
}
break;
case '"':
if (flag)
{
if (i + 1 >= length)
{
mTemp.Add(text.Substring(num, i - num).Replace("\"\"", "\""));
return mTemp;
}
if (text[i + 1] != '"')
{
mTemp.Add(text.Substring(num, i - num).Replace("\"\"", "\""));
flag = false;
if (text[i + 1] == ',')
{
i++;
num = i + 1;
}
}
else
{
i++;
}
}
else
{
num = i + 1;
flag = true;
}
break;
}
}
if (num < text.Length)
{
if (flag)
{
continue;
}
mTemp.Add(text.Substring(num, text.Length - num));
}
return mTemp;
}
return null;
}
}