var BakeHandlerStatics = {};
BakeHandlerStatics.BakingAllowed = true;
BakeHandlerStatics.BakingAllowedChanged = new Action();
BakeHandlerStatics.SetBakingAllowed = function(value)
{
this.bakingAllowed = value;
if (this.BakingAllowedChanged != null) this.BakingAllowedChanged.call(this.bakingAllowed);
};
Engine.BakeHandler = class
{
get baked()
{
return (this.parentDrawable.cacheAsBitmap || this.currentFramesUntilRebake >= 0);
}
constructor(parent /*Drawable*/, showLog = false/*bool*/)
{
this.bakeStarting = new Action();
this.gameSettingsAllow = false;
this.bakeAllowed = false;
this.unbakeableChildren = 0;
this.currentFramesUntilRebake = -1;
this.framesUntilRebake = 30;
this.currSecondsToRebake = -1;
this.maxSecondsToRebake = 0.5;
this.showLog = false;
this.baking = false;
this.parentDrawable = parent;
this.showLog = showLog;
Engine.EnterFrameManagerInstance.add(this, this.enterNextFrame);
this.gameSettingsAllow = BakeHandlerStatics.BakingAllowed;
BakeHandlerStatics.BakingAllowedChanged.addListener(this, this.updateUICaching);
}
updateUICaching(currentValue /*bool*/)
{
if (this.gameSettingsAllow != currentValue) this.gameSettingsAllow = currentValue;
// UnBake if uicaching is disabled
if (!this.gameSettingsAllow) this.unbake();
}
changeUnbakeableChildren(numChildren /*int*/)
{
var oldChildren = this.unbakeableChildren;
this.unbakeableChildren += numChildren;
if (this.unbakeableChildren < 0) this.unbakeableChildren = 0;
if (this.showLog) Debug.Log("BakeHandler:: " + this.parentDrawable.getGameObjectName() + " unbakeableChildren " + (this.numChildren > 0 ? "+1" : "-1") + " curr: " + this.unbakeableChildren);
if (!this.gameSettingsAllow) return;
if (this.unbakeableChildren == 0 && oldChildren > 0 && this.bakeAllowed && !this.baked)
{
if (this.showLog) Debug.Log("BakeHandler:: " + this.parentDrawable.getGameObjectName() + " CHILDREN ALLOWED TO REBAKE");
this.bake();
}
else if (this.unbakeableChildren > 0 && oldChildren == 0 && this.Baked)
{
this.unbake();
}
}
allowBake(bakeAllowed /*bool*/)
{
if (this.bakeAllowed == bakeAllowed) return;
if (this.showLog) Debug.Log("BakeHandler:: " + this.parentDrawable.getGameObjectName() + " AllowBake " + (bakeAllowed ? "turn on" : "turn off"));
this.bakeAllowed = bakeAllowed;
if (!this.gameSettingsAllow) return;
if (bakeAllowed && this.unbakeableChildren > 0) return;
if (bakeAllowed && !this.baked)
{
this.bake();
}
else if (!bakeAllowed && this.baked)
{
this.unbake();
}
}
bake(actualBake = false/*bool*/)
{
if (!this.gameSettingsAllow) return;
if (!this.bakeAllowed) return;
if (!this.baking)
{
this.baking = true;
if (!this.parentDrawable.cacheAsBitmap)
{
if (this.actualBake)
{
this.currSecondsToRebake = -1;
this.currentFramesUntilRebake = -1;
this.parentDrawable.cacheAsBitmap = true;
//this.parentDrawable.bakeLiveEffects();
}
else
{
if (this.showLog) Debug.Log("BakeHandler:: " + this.parentDrawable.getGameObjectName() + " setting currseconds to" + this.maxSecondsToRebake);
this.currSecondsToRebake = 0;
this.currentFramesUntilRebake = 0;
}
}
this.baking = false;
}
}
unbake()
{
this.currSecondsToRebake = -1;
this.currentFramesUntilRebake = -1;
if (this.parentDrawable.cacheAsBitmap)
{
if (this.showLog)
{
Debug.Log("BakeHandler:: " + this.parentDrawable.getGameObjectName() + " Unbaking");
//UnityEditor.EditorApplication.isPaused = true;
}
this.parentDrawable.cacheAsBitmap = false;
//this.parentDrawable.removeBakedFrame();
}
}
enterNextFrame(timeElapsed /*float*/)
{
if (Engine.Drawable.fastRenderMode) return;
if (!this.gameSettingsAllow) return;
/*
if (currSecondsToRebake >= 0)
{
if (showLog) Debug.Log("BakeHandler:: " + parentDrawable.GetGameObjectName() + " altering currseconds " + currSecondsToRebake);
currSecondsToRebake += timeElapsed;
if (currSecondsToRebake >= maxSecondsToRebake)
{
this.currSecondsToRebake = -1;
if (bakeAllowed)
{
if (showLog) Debug.Log("BakeHandler:: " + parentDrawable.GetGameObjectName() + " Next Frame Baking");
this.bake(true);
}
}
}
*/
if (this.currentFramesUntilRebake >= 0)
{
if (this.showLog) Debug.Log("BakeHandler:: " + this.parentDrawable.getGameObjectName() + " altering currseconds " + this.currentFramesUntilRebake);
this.currentFramesUntilRebake += 1;
if (this.currentFramesUntilRebake >= this.framesUntilRebake)
{
if (this.bakeAllowed)
{
if (this.showLog) Debug.Log("BakeHandler:: " + this.parentDrawable.getGameObjectName() + " Next Frame Baking");
this.bake(true);
}
}
}
}
}