progress bar improvements

This commit is contained in:
2017-06-19 06:17:36 +07:00
parent 8142f49e90
commit 9d0846d7dc
4 changed files with 57 additions and 18 deletions

View File

@@ -35,18 +35,19 @@ namespace FTEditor.Postprocessors {
static void SwfAssetProcess(SwfAsset asset) {
try {
EditorUtility.SetDirty(asset);
var asset_data = SwfEditorUtils.DecompressAsset<SwfAssetData>(asset.Data, progress => {
_progressBar.UpdateProgress("decompress swf asset", progress);
});
asset.Atlas = LoadAssetAtlas(asset);
if ( asset.Atlas ) {
ConfigureAtlas(asset);
ConfigureClips(
asset,
SwfEditorUtils.DecompressAsset<SwfAssetData>(asset.Data));
ConfigureClips(asset, asset_data);
} else {
_progressBar.UpdateTitle(asset.name);
var new_data = ConfigureBitmaps(
asset,
SwfEditorUtils.DecompressAsset<SwfAssetData>(asset.Data));
asset.Data = SwfEditorUtils.CompressAsset(new_data);
var new_data = ConfigureBitmaps(asset, asset_data);
asset.Data = SwfEditorUtils.CompressAsset(new_data, progress => {
_progressBar.UpdateProgress("compress swf asset", progress);
});
}
} catch ( Exception e ) {
Debug.LogErrorFormat(

View File

@@ -60,9 +60,11 @@ namespace FTEditor.Postprocessors {
static bool SafeLoadSwfAsset(string swf_path, string swf_hash, SwfAsset swf_asset) {
try {
_progressBar.UpdateTitle(Path.GetFileName(swf_path));
var new_data = LoadSwfAssetData(swf_path);
swf_asset.Data = SwfEditorUtils.CompressAsset(new_data);
swf_asset.Hash = swf_hash;
var new_data = LoadSwfAssetData(swf_path);
swf_asset.Data = SwfEditorUtils.CompressAsset(new_data, progress => {
_progressBar.UpdateProgress("swf asset compression", progress);
});
swf_asset.Hash = swf_hash;
if ( swf_asset.Atlas ) {
AssetDatabase.DeleteAsset(
AssetDatabase.GetAssetPath(swf_asset.Atlas));
@@ -108,9 +110,6 @@ namespace FTEditor.Postprocessors {
.Where(p => !string.IsNullOrEmpty(p.ExportName))
.ToList();
for ( var i = 0; i < sprite_defs.Count; ++i ) {
_progressBar.UpdateProgress(
"load swf symbols",
(float)(i + 1) / sprite_defs.Count);
var def = sprite_defs[i];
var name = def.ExportName;
var tags = def.ControlTags.Tags;
@@ -128,6 +127,9 @@ namespace FTEditor.Postprocessors {
});
var symbol_frames = new List<SwfFrameData>();
while ( executer.NextFrame(tags, disp_lst) ) {
_progressBar.UpdateProgress(
string.Format("swf symbols loading ({0})", symbol_name),
(float)(executer.CurrentTag + 1) / tags.Count);
symbol_frames.Add(LoadSymbolFrameData(library, disp_lst));
}
return new SwfSymbolData{

View File

@@ -185,14 +185,14 @@ namespace FTEditor {
.ToArray();
}
public static byte[] CompressAsset<T>(T asset) {
public static byte[] CompressAsset<T>(T asset, System.Action<float> progress_act) {
var bytes = AssetToBytes(asset);
var result = ZlibStream.CompressBuffer(bytes);
var result = CompressBuffer(bytes, progress_act);
return result;
}
public static T DecompressAsset<T>(byte[] data) {
var bytes = ZlibStream.UncompressBuffer(data);
public static T DecompressAsset<T>(byte[] data, System.Action<float> progress_act) {
var bytes = DecompressBuffer(data, progress_act);
var result = BytesToAsset<T>(bytes);
return result;
}
@@ -212,6 +212,41 @@ namespace FTEditor {
}
}
static byte[] CompressBuffer(byte[] bytes, System.Action<float> progress_act) {
using ( var output = new MemoryStream() ) {
using ( var compressor = new ZlibStream(output, CompressionMode.Compress, CompressionLevel.Default) ) {
var n = 0;
while ( n < bytes.Length ) {
var count = Mathf.Min(4 * 1024, bytes.Length - n);
compressor.Write(bytes, n, count);
n += count;
if ( progress_act != null ) {
progress_act((float)n / bytes.Length);
}
}
}
return output.ToArray();
}
}
static byte[] DecompressBuffer(byte[] compressed_bytes, System.Action<float> progress_act) {
using ( var input = new MemoryStream(compressed_bytes) ) {
using ( var decompressor = new ZlibStream(input, CompressionMode.Decompress) ) {
using ( var output = new MemoryStream() ) {
int n;
var buffer = new byte[4 * 1024];
while ( (n = decompressor.Read(buffer, 0, buffer.Length)) != 0 ) {
output.Write(buffer, 0, n);
if ( progress_act != null ) {
progress_act((float)decompressor.Position / input.Length);
}
}
return output.ToArray();
}
}
}
}
// ---------------------------------------------------------------------
//
// Demo

View File

@@ -78,7 +78,8 @@ dipyalov: фишка в том, что swf обновился, но и собр
Таки стоит, но с рекурсивным выносом в отдельные символы и последующей их обработкой
**** DONE В ошибках конвертации писать, что нужно прогнать через скрипт экспорта
А еще лучше как-то метить прогнанную анимацию и нет
**** TODO Добавить прогресс на LoadSymbol
**** DONE Добавить прогресс на LoadSymbol
**** DONE Реализовать прогресс для CompressAsset
**** TODO Note на ассет когда текстура сжата до максимального размера
*** Баги
**** DONE При больших (>= 4000 пикселей) выделениях не работает convertSelectionToBitmap