Engine.DialogManagerStatics = {};
Engine.DialogManagerStatics.UseLayer = { "Dialogs":1, "Tutorial":2, "Over":3 };
Engine.DialogManagerStatics.TransitionType = { "Shown":1, "Hidden":2 };
Engine.DialogManager = class
{
constructor()
{
this.dialogsLayer = new Engine.DialogLayer("DialogLayer");
this.dialogsOverLayer = new Engine.DialogLayer("DialogOverLayer");
this.UILayer = null;
this.dialogs = [];
this.dialogsToUpdate = [];
this.TutorialLayer = null;
this.OverLayer = null;
this.activeDialogsChanged = new Action();
this.dialogTransitioned = new Action();
this.dialogAvailableChanged = new Action();
this.lastDialogWasClosed = new Action();
this.dialogOpenOrClosed = new Action();
}
hideAllActiveDialogs()
{
for(var i = 0; i < this.dialogs.length; i++)
{
if (this.dialogs[i].active) this.dialogs[i].hide(true);
}
}
get activeDialogCount()
{
var count = 0;
for(var i = 0; i < this.dialogs.length; i++) if (this.dialogs[i].active) count++;
return count;
}
getTopDialog()
{
var top = this.dialogsOverLayer.getTopDialog();
if (top == null) top = this.dialogsLayer.getTopDialog();
return top;
}
enable()
{
Engine.EnterFrameManagerInstance.add(this, (timeElapsed) => { this.update(timeElapsed); });
}
disable()
{
Engine.EnterFrameManagerInstance.remove(this);
}
getUILayer() { return this.UILayer; }
getTutorialLayer() { return this.TutorialLayer; }
get activeBlockers() { return this.dialogsLayer.activeBlockers + this.dialogsOverLayer.activeBlockers; }
//------- Events -------
fireActiveDialogsChanged() { if (this.activeDialogsChanged != null) this.activeDialogsChanged.call(); }
fireDialogTransitioned(dialogClassName, transition) { if (this.dialogTransitioned != null) this.dialogTransitioned.call(dialogClassName, transition); }
fireDialogAvailableChanged(lastDialog) { if (this.dialogAvailableChanged != null) this.dialogAvailableChanged.call(lastDialog); }
fireLastDialogWasClosed() { if (this.lastDialogWasClosed != null) this.lastDialogWasClosed.call(); }
fireDialogOpenOrClosed(dialog, type) { if (this.dialogOpenOrClosed != null) this.dialogOpenOrClosed.call(dialog, type); }
updateBlockers()
{
this.dialogsLayer.updateBlockers();
this.dialogsOverLayer.updateBlockers();
}
resolutionChanged(width, height)
{
this.dialogsLayer.resolutionChanged(width, height);
this.dialogsOverLayer.resolutionChanged(width, height);
for (var i = 0; i < this.dialogs.length; i++)
{
if (this.dialogs[i].active) this.dialogs[i].resolutionChanged(width, height);
}
}
addDialogToUpdate(dialog)
{
if (this.dialogsToUpdate.indexOf(dialog) == -1) this.dialogsToUpdate.push(dialog);
}
update(timeElapsed)
{
var numToUpdate = this.dialogsToUpdate.length;
for (var i = 0; i < this.dialogsToUpdate.length; i++)
{
if (this.dialogsToUpdate[i].Active == false)
{
this.dialogsToUpdate.splice(i, 1);
i--;
}
}
for (var i = 0; i < this.dialogsToUpdate.length; i++)
{
if (this.dialogsToUpdate[i].active)
{
this.dialogsToUpdate[i].update(timeElapsed);
}
}
}
setUILayer(uiLayer)
{
this.UILayer = uiLayer;
this.UILayer.addChild(this.dialogsLayer);
}
setTutorialLayer(tutorialLayer)
{
this.TutorialLayer = tutorialLayer;
}
setOverLayer(overLayer)
{
this.OverLayer = overLayer;
this.OverLayer.addChild(this.dialogsOverLayer);
}
get activeDialogs()
{
var activeDialogs = [];
for (var i = 0; i < this.dialogs.length; i++) if (this.dialogs[i].active) activeDialogs.push(this.dialogs[i]);
return activeDialogs;
}
showMessageBox(message, okText, closeText, callbackFunction, width, height, overLayer)
{
if (callbackFunction === undefined) callbackFunction = null;
if (width === undefined) width = null;
if (height === undefined) height = null;
if (overLayer === undefined) overLayer = false;
var dialog = this.getDialog(Engine.MessageBox, overLayer ? Engine.DialogManagerStatics.UseLayer.Over : Engine.DialogManagerStatics.UseLayer.Dialogs);
dialog.show(message, okText, closeText, callbackFunction, width, height);
return dialog;
}
showGraphicViewer(callbackFunction)
{
if (callbackFunction === undefined) callbackFunction = null;
var dialog = this.getDialog(GraphicViewer);
dialog.show(callbackFunction);
return dialog;
}
showLoadingTextBox(message, delay, initialTransparent, alwaysTransparent)
{
if (!delay) delay = 0;
if (!initialTransparent) initialTransparent = false;
if (!alwaysTransparent) alwaysTransparent = false;
var dialog = this.getDialog(Engine.LoadingTextBox);
dialog.show(message, delay, initialTransparent, alwaysTransparent);
return dialog;
}
showErrorBox(message, time)
{
if (!time) time = 1;
var dialog = this.getDialog(Engine.ErrorBox);
dialog.show(message, time);
return dialog;
}
/* Get Dialog takes the Class of the dialog you require
and returns you an available dialog from the pool */
getDialog(classConstructor, layer)
{
if (layer === undefined) layer = Engine.DialogManagerStatics.UseLayer.Dialogs;
var dialog = this.getAvailableDialog(classConstructor, false, layer);
if (dialog != null) return dialog;
var parentClip = null;
switch (layer)
{
case Engine.DialogManagerStatics.UseLayer.Dialogs:
parentClip = this.dialogsLayer;
break;
case Engine.DialogManagerStatics.UseLayer.Tutorial:
parentClip = this.TutorialLayer;
break;
case Engine.DialogManagerStatics.UseLayer.Over:
parentClip = this.dialogsOverLayer;
break;
}
if (classConstructor === undefined){
Debug.Log("Constructor null?!");
}
dialog = new classConstructor(parentClip);
this.dialogs.push(dialog);
return dialog;
}
getNumActiveDialogs()
{
return this.activeDialogs.length;
}
getAllActiveDialogs(classConstructor)
{
var activeDialog = [];//new List<Dialog>();
for (var i = 0; i < this.dialogs.length; i++)
{
if (this.dialogs[i] instanceof classConstructor && this.dialogs[i].active == true)
{
activeDialog.push(this.dialogs[i]);
}
}
return activeDialog;
}
getActiveDialog(classConstructor, layer)
{
if (!layer) layer = Engine.DialogManagerStatics.UseLayer.Dialogs;
return this.getAvailableDialog(classConstructor, true, layer);
}
getAvailableDialog(classConstructor, active, layer = Engine.DialogManagerStatics.UseLayer.Dialogs)
{
if (!layer) layer = Engine.DialogManagerStatics.UseLayer.Dialogs;
var parentClip = null;
switch (layer)
{
case Engine.DialogManagerStatics.UseLayer.Dialogs:
parentClip = this.dialogsLayer;
break;
case Engine.DialogManagerStatics.UseLayer.Tutorial:
parentClip = this.TutorialLayer;
break;
case Engine.DialogManagerStatics.UseLayer.Over:
parentClip = this.dialogsOverLayer;
break;
}
for (var i = 0; i < this.dialogs.length; i++)
{
var matches = false;
if (typeof classConstructor == "string")
{
matches = this.dialogs[i].constructor.name == classConstructor;
}
else
{
matches = this.dialogs[i] instanceof classConstructor;
}
if (matches && this.dialogs[i].active == active && this.dialogs[i].parentClip == parentClip)
{
return this.dialogs[i];
}
}
return null;
}
}