Updated Esenthel Source:
-added automatic Texture Streaming on secondary thread, to use please update your Images/Textures by running the app below in your project (you may want to backup your project first just in case), this feature greatly reduces loading times (first a smaller texture is loaded, then on a secondary thread, bigger mip maps are streamed, especially useful for Nintendo Switch)
-also if you use Titan Server to synchronize your project (please delete the project on server and reupload after update)
-updated support for Android
-updated Android compilation to latest toolchain (Visual Studio compatible)
-not all Android functionality has been updated (in-app purchases, facebook, admob, chartboost are not available at the moment)
-Material "Tex Size Mobile" was separated into "Mobile" and "NintendoSwitch"
-added Project Settings option to specify default value for "Material Tex Size" in newly created Materials
-added option to disable publishing specific project elements for Mobile platforms (publishing now has 2 options - #1 default/global/all platforms, #2 additional disable for mobile only)
-current build platform target will now be displayed in the "Build" combobox next to "Play" button
-added new function 'Gui.moveMouse'
-added new function 'DeviceVibrate' for Android and iOS
-Project compression can now be separately configured for mobile platforms
-updated to latest iOS SDK
-added new D.rectUI
Fixes:
-fixed app freeze when trying to open configure controllers applet on Nintendo Switch after using software keyboard
-fixed bug on Android when minimizing the app manually through codes, and then reopening it and rendering 3d graphics
-fixed bug on Android 'Exit' not displaying error message correctly
-fixed bug when upscaling with WAIFU to compressed format at the same time (affects rare cases when converting images to Android/iOS platforms)
-fixed issues in App.stayAwake for UWP, iOS, Switch
Name Changes:
FlagTest -> FlagOn
Code to update your projects:
Code:
/******************************************************************************/
Edit.EditorInterface EI;
Memc<Edit.Elm> elms;
Str error, Path;
/******************************************************************************/
void UpdateImage(C Str &name)
{
Image img;
File temp;
if(img.load(name))
if(img.save(temp.writeMem()))
{
temp.pos(0);
if(SafeOverwrite(temp, name))return;
}
error.line()+=name;
}
void UpdateImageAtlas(C Str &name)
{
ImageAtlas img;
File temp;
if(img.load(name))
if(img.save(temp.writeMem()))
{
temp.pos(0);
if(SafeOverwrite(temp, name))return;
}
error.line()+=name;
}
void UpdatePanelImage(C Str &name)
{
PanelImage img;
File temp;
if(img.load(name))
if(img.save(temp.writeMem()))
{
temp.pos(0);
if(SafeOverwrite(temp, name))return;
}
error.line()+=name;
}
void UpdateFont(C Str &name)
{
Font font;
File temp;
if(font.load(name))
if(font.save(temp.writeMem()))
{
temp.pos(0);
if(SafeOverwrite(temp, name))return;
}
error.line()+=name;
}
/******************************************************************************/
Str Name(C UID &id) {return Path+id.asFileName();}
/******************************************************************************/
void InitPre()
{
INIT();
App.flag|=APP_WORK_IN_BACKGROUND|APP_MINIMIZABLE|APP_MAXIMIZABLE|APP_RESIZABLE;
#if DEBUG
App.flag|=APP_MEM_LEAKS|APP_BREAKPOINT_ON_ERROR;
#endif
}
bool Init()
{
SupportCompressAll();
Str msg; if(!EI.connect(msg))Exit(msg);
DYNAMIC_ASSERT(EI.getElms(elms, true), "getElms");
Path=EI.dataPath().tailSlash(true);
Str temp=GetPath(Path)+"Temp";
EI.openProject();
for(FileFind ff(Path+"Tex"); ff(); )UpdateImage(ff.pathName());
REPA(elms)switch(elms[i].type)
{
case Edit.ELM_IMAGE:
case Edit.ELM_ICON : UpdateImage(Name(elms[i].id)); break;
case Edit.ELM_IMAGE_ATLAS: UpdateImageAtlas(Name(elms[i].id)); break;
case Edit.ELM_PANEL_IMAGE: UpdatePanelImage(Name(elms[i].id)); break;
case Edit.ELM_FONT : UpdateFont(Name(elms[i].id)); break;
}
FDelDirs(temp);
Exit(error.is() ? S+"Failed to update following files:\n"+error : "All OK!");
return true;
}
void Shut()
{
}
/******************************************************************************/
bool Update()
{
return false;
}
void Draw()
{
}
/******************************************************************************/