123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382 |
- #if (UNITY_IOS)
- using UnityEngine;
- using System.Runtime.InteropServices;
- using System;
- using CommonUI_Unity3D.Platform;
- using CommonLang.Concurrent;
- using System.Threading;
- using MPQ.Updater;
- using System.IO;
- namespace CommonUI_Unity3D_IOS
- {
- public class UnityPlatformIOS : IUnityPlatform
- {
- public void Assert(string msg)
- {
- Debug.LogError(msg);
- }
- //----------------------------------------------------------------------------------------------------------
- #region Native
- /// <summary>
- /// inflate
- /// </summary>
- /// <param name="srcFile"></param>
- /// <param name="dstFile"></param>
- /// <returns></returns>
- [DllImport("__Internal")]
- public static extern bool _Decompress_z(string srcFile, string dstFile);
- [DllImport("__Internal")]
- public static extern int _Decompress_bytes();
- [DllImport("__Internal")]
- public static extern bool _Decompress_z_mem(byte[] src, int s_offset, int s_end, byte[] dst, int dst_offset, int dst_end);
- [DllImport("__Internal")]
- public static extern bool _SysFontTest(
- string pText,
- string fontName,
- int fontStyle,
- int fontSize,
- int bgCount,
- int expectSizeW,
- int expectSizeH,
- ref int outW,
- ref int outH);
- [DllImport("__Internal")]
- public static extern bool _SysFontTexture2(
- string pText,
- string fontName,
- int fontStyle,
- int fontSize,
- int fontColorRGBA,
- int bgCount,
- int bgColorRGBA,
- int expectSizeW,
- int expectSizeH,
- int glTextureID);
- [DllImport("__Internal")]
- public static extern bool _SysFontTexture2_Ptr(
- string pText,
- string fontName,
- int fontStyle,
- int fontSize,
- int fontColorRGBA,
- int bgCount,
- int bgColorRGBA,
- int expectSizeW,
- int expectSizeH,
- IntPtr glTextureID_Ptr);
- [DllImport("__Internal")]
- public static extern bool _SysFontGetPixels(
- string pText,
- string fontName,
- int fontStyle,
- int fontSize,
- int fontColorRGBA,
- int bgCount,
- int bgColorRGBA,
- int pixelW,
- int pixelH,
- byte[] pixels);
- [DllImport("__Internal")]
- public static extern bool _SysFontGetPixels_Color32(
- string pText,
- string fontName,
- int fontStyle,
- int fontSize,
- int fontColorRGBA,
- int bgCount,
- int bgColorRGBA,
- int pixelW,
- int pixelH,
- Color32[] pixels);
- [DllImport("__Internal")]
- public static extern bool _Md5_CheckFile(string srcFile, byte[] dst);
- #endregion
- //----------------------------------------------------------------------------------------------------------
- #region TEXT
- public const string FontName = "Helvetica-Bold";
- public Texture2D SysFontTexture(
- string text,
- bool readable,
- CommonUI.Display.FontStyle style,
- int fontSize,
- uint fontColor,
- int borderTime,
- uint borderColor,
- CommonUI.Gemo.Size2D expectSize,
- out int boundW,
- out int boundH)
- {
- try
- {
- text = text + "";
- int _pixelW = 8;
- int _pixelH = 8;
- int _expectW = 0;
- int _expectH = 0;
- if (expectSize != null)
- {
- _pixelW = (int)expectSize.width;
- _pixelH = (int)expectSize.height;
- _expectW = (int)_pixelW;
- _expectH = (int)_pixelH;
- }
- if (_SysFontTest(
- text,
- FontName,
- (int)style,
- (int)fontSize,
- borderTime,
- (int)_expectW,
- (int)_expectH,
- ref _pixelW,
- ref _pixelH))
- {
- boundW = _pixelW;
- boundH = _pixelH;
- byte[] rgba = new byte[_pixelW * _pixelH * 4];
- _SysFontGetPixels(
- text,
- FontName,
- (int)style,
- (int)fontSize,
- (int)fontColor,
- (int)borderTime,
- (int)borderColor,
- (int)_pixelW,
- (int)_pixelH,
- rgba);
- Texture2D mTexture = new UnityEngine.Texture2D(_pixelW, _pixelH, TextureFormat.RGBA32, false, true);
- mTexture.filterMode = FilterMode.Bilinear;
- mTexture.wrapMode = TextureWrapMode.Clamp;
- mTexture.anisoLevel = 0;
- mTexture.mipMapBias = 0;
- mTexture.LoadRawTextureData(rgba);
- if (readable)
- {
- mTexture.Apply(false, false);
- }
- else
- {
- mTexture.Apply(false, true);
- }
- return mTexture;
- }
- }
- catch (Exception) { }
- Texture2D tex = new UnityEngine.Texture2D(8, 8, TextureFormat.RGBA32, false, true);
- tex.filterMode = FilterMode.Point;
- tex.wrapMode = TextureWrapMode.Clamp;
- boundW = 8;
- boundH = 8;
- tex.Apply(false, true);
- return tex;
- }
- public bool TestTextLineBreak(string text, float size, CommonUI.Display.FontStyle style,
- int borderTime,
- float testWidth,
- out float realWidth,
- out float realHeight)
- {
- int tw = 0;
- int th = 0;
- try
- {
- _SysFontTest(text, FontName, (int)style, (int)size, borderTime, 0, 0, ref tw, ref th);
- realWidth = tw;
- realHeight = th;
- if (realWidth > testWidth)
- {
- _SysFontTest(text, FontName, (int)style, (int)size, borderTime, (int)testWidth, 0, ref tw, ref th);
- realWidth = tw;
- return true;
- }
- }
- catch (Exception)
- {
- realWidth = tw;
- realHeight = th;
- }
- return false;
- }
- private static void InnRect(Texture2D src, ref int sx, ref int sy)
- {
- if (sx < 0)
- sx = 0;
- if (sx >= src.width)
- sx = src.width - 1;
- if (sy < 0)
- sy = 0;
- if (sy >= src.height)
- sy = src.height - 1;
- }
- public void CopyPixels(Texture2D src, int sx, int sy, int sw, int sh, Texture2D dst, int dx, int dy)
- {
- int sx2 = sx + sw;
- int sy2 = sy + sh;
- int dx2 = dx + sw;
- int dy2 = dy + sh;
- InnRect(src, ref sx, ref sy);
- InnRect(src, ref sx2, ref sy2);
- InnRect(dst, ref dx, ref dy);
- InnRect(dst, ref dx2, ref dy2);
- sw = Mathf.Min(sx2 - sx, dx2 - dx);
- sh = Mathf.Min(sy2 - sy, dy2 - dy);
- try
- {
- if (sw > 0 && sh > 0)
- {
- UnityEngine.Color[] colors = src.GetPixels(sx, sy, sw, sh);
- dst.SetPixels(dx, dy, sw, sh, colors);
- dst.Apply();
- }
- }
- catch (Exception err)
- {
- Debug.LogError(err.Message);
- Debug.LogException(err);
- }
- }
- #endregion
- //----------------------------------------------------------------------------------------------------------
- #region IME
- #endregion
- //----------------------------------------------------------------------------------------------------------
- #region MPQ
- public bool IsNativeUnzip { get { return true; } }
- public long GetAvaliableSpace(string path)
- {
- try
- {
- DriveInfo drive = new DriveInfo(Directory.GetDirectoryRoot(path));
- return drive.AvailableFreeSpace;
- }
- catch (Exception)
- {
- return long.MaxValue;
- }
- }
- public long GetTotalSpace(string path)
- {
- try
- {
- DriveInfo drive = new DriveInfo(Directory.GetDirectoryRoot(path));
- return drive.TotalSize;
- }
- catch (Exception)
- {
- return long.MaxValue;
- }
- }
- private class DecompressTask
- {
- private bool result;
- private bool isDone;
- public bool Run(string src, string dst, AtomicLong process)
- {
- isDone = false;
- var task = new Thread(() =>
- {
- try
- {
- result = _Decompress_z(src, dst);
- }
- catch (Exception err)
- {
- Console.WriteLine(err.Message + "\n" + err.StackTrace);
- result = false;
- }
- finally
- {
- isDone = true;
- }
- });
- task.Name = "_Decompress_z";
- task.Start();
- long total = 0;
- while (!isDone)
- {
- Thread.Sleep(100);
- long bytes = _Decompress_bytes();
- if (total < bytes)
- {
- process += (bytes - total);
- total = bytes;
- }
- }
- return this.result;
- }
- }
- public bool NativeDecompressFile(MPQUpdater updater, MPQUpdater.RemoteFileInfo zip_file, MPQUpdater.RemoteFileInfo mpq_file, AtomicLong current_unzip_bytes)
- {
- if (zip_file.file.Name.EndsWith(".z"))
- {
- var task = new DecompressTask();
- return task.Run(zip_file.file.FullName, mpq_file.file.FullName, current_unzip_bytes);
- }
- else
- {
- throw new Exception("iOSÖ»Ö§³Ö.z¸ñʽNative½âѹËõ£¡");
- }
- }
- public bool NativeDecompressMemory(byte[] src, int s_start, int s_end, byte[] dst, int dst_start, int dst_end)
- {
- return _Decompress_z_mem(src, s_start, s_end, dst, dst_start, dst_end);
- }
- public bool NativeDecompressMemory(ArraySegment<byte> src, ArraySegment<byte> dst)
- {
- return _Decompress_z_mem(src.Array, src.Offset, src.Offset + src.Count, dst.Array, dst.Offset, dst.Offset + dst.Count);
- }
- public bool NativeGetFileMD5(string fullname, out string md5string)
- {
- byte[] md5 = new byte[32];
- md5string = string.Empty;
- if (_Md5_CheckFile(fullname, md5))
- {
- for (int i = 0; i < md5.Length; i++)
- {
- md5string += (char)md5[i];
- }
- return true;
- }
- return false;
- }
- #endregion
- //----------------------------------------------------------------------------------------------------------
- }
- }
- #endif
|