An old version of my custom implementation of Overlay (for another game) is working nice:
package game;
import awe6.core.Overlay;
import awe6.core.BasicButton;
import game.scenes.overlays.EExtendedOverlayButton;
import awe6.interfaces.IKernel;
import awe6.interfaces.IView;
import awe6.interfaces.EOverlayButton;
import awe6.interfaces.EScene;
import game.scenes.EExtendedScene;
/**
* ...
* @author tr
*/
class MyOverlay extends Overlay{
private var _imprintButton:BasicButton;
public function new( p_kernel:IKernel, ?p_buttonWidth:Float = 30.0, ?p_buttonHeight:Float = 30.0, ?p_border:IView, ?p_backUp:IView, ?p_backOver:IView, ?p_muteUp:IView, ?p_muteOver:IView, ?p_unmuteUp:IView, ?p_unmuteOver:IView, ?p_pauseUp:IView, ?p_pauseOver:IView, ?p_unpauseUp:IView, ?p_unpauseOver:IView, ?p_imprintOver:IView, ?p_imprintUp:IView, ?p_pauseBlur:Float = 8, ?p_pauseColor:Int = 0x000000, ?p_pauseAlpha:Float = .35 ){
_imprintButton = new BasicButton(p_kernel, p_imprintUp, p_imprintOver, p_buttonWidth, p_buttonHeight);
super( p_kernel, p_buttonWidth, p_buttonHeight, p_border, p_backUp, p_backOver, p_muteUp, p_muteOver, p_unmuteUp, p_unmuteOver, p_pauseUp, p_pauseOver, p_unpauseUp, p_unpauseOver, p_pauseBlur, p_pauseColor, p_pauseAlpha );
}
override private function _init(){
super._init();
_imprintButton.onClickCallback = _openImprint.bind(EOverlayButton.SUB_TYPE(EExtendedOverlayButton.IMPRINT) );
_buttonUnmute.onClickCallback = activateButton.bind(EOverlayButton.UNMUTE );
addEntity( _imprintButton, true, 26 );
}
override private function _getButton( p_type:EOverlayButton ):BasicButton
{
switch( p_type )
{
case SUB_TYPE( l_value ) :
if ( l_value == EExtendedOverlayButton.IMPRINT){
return _imprintButton;
}
default: null;
}
return super._getButton(p_type);
}
private function _openImprint( p_type:EOverlayButton ){
_kernel.scenes.setScene(EScene.SUB_TYPE(EExtendedScene.IMPRINT));
}
override public function activateButton( p_type:EOverlayButton ):Void
{
if (p_type == EOverlayButton.MUTE){
var l_factory:Factory = cast _kernel.factory;
l_factory.stopMusic();
}
else if (p_type == EOverlayButton.UNMUTE){
var l_factory:Factory = cast _kernel.factory;
l_factory.playMusic();
}
super.activateButton(p_type);
}
}
Only real difference seems to me, that I've used a different approach for selecting the button in _getButton.
:-)