123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.IO;
- using System.IO.Compression;
- using System.Text;
- using UnityEngine;
- namespace LightReflectiveMirror
- {
- public static class LRMTools
- {
- public static void WriteByte(this byte[] data, ref int position, byte value)
- {
- data[position] = value;
- position += 1;
- }
- public static byte ReadByte(this byte[] data, ref int position)
- {
- byte value = data[position];
- position += 1;
- return value;
- }
- public static void WriteBool(this byte[] data, ref int position, bool value)
- {
- unsafe
- {
- fixed (byte* dataPtr = &data[position])
- {
- bool* valuePtr = (bool*)dataPtr;
- *valuePtr = value;
- position += 1;
- }
- }
- }
- public static bool ReadBool(this byte[] data, ref int position)
- {
- bool value = BitConverter.ToBoolean(data, position);
- position += 1;
- return value;
- }
- public static void WriteString(this byte[] data, ref int position, string value)
- {
- if (string.IsNullOrWhiteSpace(value))
- {
- data.WriteInt(ref position, 0);
- }
- else
- {
- data.WriteInt(ref position, value.Length);
- for (int i = 0; i < value.Length; i++)
- data.WriteChar(ref position, value[i]);
- }
- }
- public static string ReadString(this byte[] data, ref int position)
- {
- string value = default;
- int stringSize = data.ReadInt(ref position);
- for (int i = 0; i < stringSize; i++)
- value += data.ReadChar(ref position);
- return value;
- }
- public static void WriteBytes(this byte[] data, ref int position, byte[] value)
- {
- data.WriteInt(ref position, value.Length);
- for (int i = 0; i < value.Length; i++)
- data.WriteByte(ref position, value[i]);
- }
- public static byte[] ReadBytes(this byte[] data, ref int position)
- {
- int byteSize = data.ReadInt(ref position);
- byte[] value = new byte[byteSize];
- for (int i = 0; i < byteSize; i++)
- value[i] = data.ReadByte(ref position);
- return value;
- }
- public static void WriteChar(this byte[] data, ref int position, char value)
- {
- unsafe
- {
- fixed (byte* dataPtr = &data[position])
- {
- char* valuePtr = (char*)dataPtr;
- *valuePtr = value;
- position += 2;
- }
- }
- }
- public static char ReadChar(this byte[] data, ref int position)
- {
- char value = BitConverter.ToChar(data, position);
- position += 2;
- return value;
- }
- public static void WriteInt(this byte[] data, ref int position, int value)
- {
- unsafe
- {
- fixed (byte* dataPtr = &data[position])
- {
- int* valuePtr = (int*)dataPtr;
- *valuePtr = value;
- position += 4;
- }
- }
- }
- public static int ReadInt(this byte[] data, ref int position)
- {
- int value = BitConverter.ToInt32(data, position);
- position += 4;
- return value;
- }
- }
- internal static class CompressorExtensions
- {
- /// <summary>
- /// Decompresses the string.
- /// </summary>
- /// <param name="compressedText">The compressed text.</param>
- /// <returns></returns>
- public static string Decompress(this string compressedText)
- {
- byte[] gZipBuffer = Convert.FromBase64String(compressedText);
- using (var memoryStream = new MemoryStream())
- {
- int dataLength = BitConverter.ToInt32(gZipBuffer, 0);
- memoryStream.Write(gZipBuffer, 4, gZipBuffer.Length - 4);
- var buffer = new byte[dataLength];
- memoryStream.Position = 0;
- using (var gZipStream = new GZipStream(memoryStream, CompressionMode.Decompress))
- {
- gZipStream.Read(buffer, 0, buffer.Length);
- }
- return Encoding.UTF8.GetString(buffer);
- }
- }
- }
- internal static class JsonUtilityHelper
- {
- public static bool IsJsonArray(string json)
- {
- return json.StartsWith("[") && json.EndsWith("]");
- }
- public static T[] FromJson<T>(string json)
- {
- if (!IsJsonArray(json))
- {
- throw new System.FormatException("The input json string is not a Json Array");
- }
- json = "{\"Items\":" + json + "}";
- JsonWrapper<T> wrapper = JsonUtility.FromJson<JsonWrapper<T>>(json);
- return wrapper.Items;
- }
- public static string ToJson<T>(T[] array)
- {
- JsonWrapper<T> wrapper = new JsonWrapper<T>();
- wrapper.Items = array;
- return JsonUtility.ToJson(wrapper);
- }
- public static string ToJson<T>(T[] array, bool prettyPrint)
- {
- JsonWrapper<T> wrapper = new JsonWrapper<T>();
- wrapper.Items = array;
- return JsonUtility.ToJson(wrapper, prettyPrint);
- }
- [Serializable]
- private class JsonWrapper<T>
- {
- public T[] Items;
- }
- }
- }
|