TextureTranslationInfo.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. using System.Text;
  2. using UnityEngine;
  3. using XUnity.AutoTranslator.Plugin.Core.Configuration;
  4. using XUnity.AutoTranslator.Plugin.Core.Extensions;
  5. using XUnity.AutoTranslator.Plugin.Core.Utilities;
  6. namespace XUnity.AutoTranslator.Plugin.Core
  7. {
  8. public class TextureTranslationInfo
  9. {
  10. private static readonly Encoding UTF8 = new UTF8Encoding( false );
  11. private string _key;
  12. private byte[] _originalData;
  13. private bool? _nonReadable;
  14. public bool IsTranslated { get; set; }
  15. public bool HasDumpedAlternativeTexture { get; set; }
  16. public bool IsNonReadable( Texture2D texture )
  17. {
  18. if( !_nonReadable.HasValue )
  19. {
  20. _nonReadable = texture.IsNonReadable();
  21. }
  22. return _nonReadable.Value;
  23. }
  24. public string GetKey( Texture2D texture )
  25. {
  26. SetupHashAndData( texture );
  27. return _key;
  28. }
  29. public byte[] GetOriginalData( Texture2D texture )
  30. {
  31. SetupHashAndData( texture );
  32. return _originalData;
  33. }
  34. public byte[] GetOrCreateOriginalData( Texture2D texture )
  35. {
  36. // special handling if SetupHashAndData is changed to not support originalData
  37. // which frankly, is a memory drain
  38. SetupHashAndData( texture );
  39. if( _originalData != null ) return _originalData;
  40. return TextureHelper.GetData( texture ).Data;
  41. }
  42. private void SetupHashAndData( Texture2D texture )
  43. {
  44. if( _key == null )
  45. {
  46. if( Settings.TextureHashGenerationStrategy == TextureHashGenerationStrategy.FromImageData )
  47. {
  48. var result = TextureHelper.GetData( texture );
  49. _originalData = result.Data;
  50. _nonReadable = result.NonReadable;
  51. _key = HashHelper.Compute( _originalData ).Substring( 0, 8 );
  52. }
  53. else if( Settings.TextureHashGenerationStrategy == TextureHashGenerationStrategy.FromImageName )
  54. {
  55. var name = texture.name; // name may be duplicate, WILL be duplicate!
  56. if( string.IsNullOrEmpty( name ) ) return;
  57. _key = HashHelper.Compute( UTF8.GetBytes( name ) ).Substring( 0, 8 );
  58. if( Settings.EnableTextureToggling )
  59. {
  60. var result = TextureHelper.GetData( texture );
  61. _originalData = result.Data;
  62. _nonReadable = result.NonReadable;
  63. }
  64. }
  65. else // if( Settings.TextureHashGenerationStrategy == TextureHashGenerationStrategy.FromImageNameThenData )
  66. {
  67. var name = texture.name;
  68. if( string.IsNullOrEmpty( name ) )
  69. {
  70. var result = TextureHelper.GetData( texture );
  71. _originalData = result.Data;
  72. _nonReadable = result.NonReadable;
  73. _key = HashHelper.Compute( _originalData ).Substring( 0, 8 );
  74. }
  75. else
  76. {
  77. _key = HashHelper.Compute( UTF8.GetBytes( name ) ).Substring( 0, 8 );
  78. if( Settings.EnableTextureToggling )
  79. {
  80. var result = TextureHelper.GetData( texture );
  81. _originalData = result.Data;
  82. _nonReadable = result.NonReadable;
  83. }
  84. }
  85. }
  86. }
  87. }
  88. }
  89. }