File:KartKingdomPlugin.js
/**
* @module Container
* @namespace springroll
*/
(function()
{
// Include classes
var Minigame = include('springroll.pbskids.kartkingdom.Minigame', false);
var MinigameEvent = include('springroll.pbskids.kartkingdom.MinigameEvent', false);
/**
* @class Container
*/
var plugin = new springroll.ContainerPlugin();
plugin.setup = function()
{
/**
* The instance of the Kart Kingdom Minigame API
* @property {Minigame} minigame
*/
this.minigame = null;
};
plugin.open = function()
{
this.client.on('kk-init', onKartKingdomInit.bind(this));
};
/**
* Initialize the Kart Kingdom API
* @method onKarKingdomInit
* @private
* @param {object} event Bellhop event
*/
var onKartKingdomInit = function(event)
{
// If we don't have the library, ignore
if (!Minigame)
{
// Doesn't break/hang games which don't have
// the Kart Kingdom API embedded with the container
this.client.send('kk-init-done');
return;
}
var config = event.data;
if (DEBUG)
{
console.log("KartKingdomClient: container = ", this);
}
if (!this.dom.parentNode.id)
this.dom.parentNode.id = this.dom.parentNode.id + "-kartkingdom-wrapper";
this.minigame = new Minigame(
config.gameID,
this.dom.parentNode.id,
function()
{
this.paused = true;
},
function()
{
this.paused = false;
},
config.options
);
onInitMinigame.call(this);
// Let the client know we're done
this.client.send('kk-init-done');
};
/**
* Bind handlers to events between the client and minigame instances.
* @method _addEventListeners
* @param {Minigame} minigame Instance of the Minigame API.
* @param {Bellhop} client Bellhop instance on the container.
* @private
*/
var onInitMinigame = function()
{
var client = this.client;
var minigame = this.minigame;
// Event Listeners on the Client
client.on('kk-event', function(event)
{
minigame.event(event.data);
});
client.on('kk-level-complete', function(event)
{
minigame.levelComplete();
});
client.on('kk-destroy', function(event)
{
plugin.teardown.call(this);
}.bind(this));
client.respond('kk-has-power-up', minigame.hasPowerUp(event.data));
client.on('kk-use-power-ups', function(event)
{
minigame.usePowerUps(
event.data.powerupsObject,
function()
{
//onSuccessCallback
client.send(event.data.successEvent);
},
function()
{
//onFailureCallback
client.send(event.data.failureEvent);
}
);
});
// Event Listeners on the Minigame API
minigame.addEventListener(MinigameEvent.MINIGAME_READY, function(event)
{
client.send('kk-ready', event);
});
minigame.addEventListener(MinigameEvent.LEVEL_COMPLETE_OPEN, function(event)
{
client.send('kk-level-open', event);
});
minigame.addEventListener(MinigameEvent.LEVEL_COMPLETE_CLOSED, function(event)
{
client.send('kk-level-closed', event);
});
minigame.addEventListener(MinigameEvent.LEVEL_RESET, function(event)
{
client.send('kk-level-reset', event);
});
minigame.addEventListener(MinigameEvent.RESOURCES_EARNED, function(event)
{
client.send('kk-resources-earned', event);
});
minigame.addEventListener(MinigameEvent.RESOURCE_REQUEST_COMPLETE, function(event)
{
client.send('kk-resources-complete', event);
});
};
plugin.teardown = function()
{
if (this.minigame)
{
this.minigame.destroy();
delete this.minigame;
}
};
}());