Rev 147 |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
package com.gebauz.pingK.common.game;
import com.gebauz.pingK.common.R;
import com.gebauz.pingK.common.framework.MathUtil;
import com.gebauz.pingK.common.framework.ResourceManager;
import com.gebauz.pingK.common.framework.Sprite2D;
import com.gebauz.pingK.common.game.gamestates.GameStateManager;
/** Not a very pretty pause menu implementation. */
public class PauseScreen
{
private TextButton mRestart
;
private TextButton mHelp
;
private TextButton mMusicOnOff
;
private TextButton mQuit
;
private GameLogic mGameLogic
;
private Sprite2D mBackground =
new Sprite2D
();
private Sprite2D mBlack =
new Sprite2D
();
private float mPopupTimer = GameConsts.
PAUSE_MENU_POPUP_TIME + 1.0f
;
private HelpScreen mHelpScreen
;
public PauseScreen
(GameLogic gameLogic
)
{
mGameLogic = gameLogic
;
mBackground.
init(R.
drawable.
pause_bg,
0, mGameLogic.
getVirtualPlayFieldHeight() / 2.0f, GameConsts.
VIRTUAL_SCREEN_WIDTH, GameConsts.
PAUSE_BG_HEIGHT);
mBackground.
pivotX =
0;
mBackground.
pivotY = GameConsts.
PAUSE_BG_HEIGHT / 2.0f
;
mBlack.
init(R.
drawable.
black50,
0,
0, GameConsts.
VIRTUAL_SCREEN_WIDTH, mGameLogic.
getVirtualPlayFieldHeight());
mBlack.
pivotX =
0;
mBlack.
pivotY =
0;
mRestart =
new TextButton
(GameServices.
getFont(), ResourceManager.
getInstance().
getCurrentContext().
getString(R.
string.
pause_restart));
mRestart.
x = GameConsts.
VIRTUAL_SCREEN_WIDTH / 2.0f
;
mRestart.
y = GameConsts.
PAUSE_MENU_RESTART_POSITION_Y;
mRestart.
scale = GameConsts.
PAUSE_MENU_TEXT_SCALE;
mRestart.
setAlignment(TextButton.
HorizontalAlignment.
CENTER, TextButton.
VerticalAlignment.
TOP);
mRestart.
setTouchListener(mRestartListener
);
mHelp =
new TextButton
(GameServices.
getFont(), ResourceManager.
getInstance().
getCurrentContext().
getString(R.
string.
title_help));
mHelp.
x = GameConsts.
VIRTUAL_SCREEN_WIDTH / 2.0f
;
mHelp.
y = GameConsts.
PAUSE_MENU_HELP_POSITION_Y;
mHelp.
scale = GameConsts.
PAUSE_MENU_TEXT_SCALE;
mHelp.
setAlignment(TextButton.
HorizontalAlignment.
CENTER, TextButton.
VerticalAlignment.
TOP);
mHelp.
setTouchListener(mHelpListener
);
String musicOnOff = ResourceManager.
getResources().
getString(R.
string.
title_music_off);
if (GameServices.
getAudio().
isMusicEnabled())
musicOnOff = ResourceManager.
getResources().
getString(R.
string.
title_music_on);
mMusicOnOff =
new TextButton
(GameServices.
getFont(), musicOnOff
);
mMusicOnOff.
x = GameConsts.
VIRTUAL_SCREEN_WIDTH / 2.0f
;
mMusicOnOff.
y = GameConsts.
PAUSE_MENU_MUSIC_ONOFF_POSITION_Y;
mMusicOnOff.
scale = GameConsts.
PAUSE_MENU_TEXT_SCALE;
mMusicOnOff.
setAlignment(TextButton.
HorizontalAlignment.
CENTER, TextButton.
VerticalAlignment.
TOP);
mMusicOnOff.
setTouchListener(mMusicOnOffListener
);
mQuit =
new TextButton
(GameServices.
getFont(), ResourceManager.
getInstance().
getCurrentContext().
getString(R.
string.
pause_quit));
mQuit.
x = GameConsts.
VIRTUAL_SCREEN_WIDTH / 2.0f
;
mQuit.
y = GameConsts.
PAUSE_MENU_QUIT_POSITION_Y;
mQuit.
scale = GameConsts.
PAUSE_MENU_TEXT_SCALE;
mQuit.
setAlignment(TextButton.
HorizontalAlignment.
CENTER, TextButton.
VerticalAlignment.
TOP);
mQuit.
setTouchListener(mQuitListener
);
mHelpScreen =
new HelpScreen
(mGameLogic.
getVirtualPlayFieldHeight());
}
BaseButton.
TouchListener mRestartListener =
new BaseButton.
TouchListener()
{
@
Override
public void onTouched
(BaseButton sender,
int tag
)
{
GameStateManager.
getInstance().
switchState("MainGameState");
}
};
BaseButton.
TouchListener mHelpListener =
new BaseButton.
TouchListener()
{
@
Override
public void onTouched
(BaseButton sender,
int tag
)
{
mHelpScreen.
show();
}
};
BaseButton.
TouchListener mMusicOnOffListener =
new BaseButton.
TouchListener()
{
@
Override
public void onTouched
(BaseButton sender,
int tag
)
{
TextButton tb =
(TextButton
)sender
;
if (GameServices.
getAudio().
isMusicEnabled())
{
GameServices.
getAudio().
enableMusic(false);
tb.
setText(ResourceManager.
getResources().
getString(R.
string.
title_music_off));
}
else
{
GameServices.
getAudio().
enableMusic(true);
tb.
setText(ResourceManager.
getResources().
getString(R.
string.
title_music_on));
}
}
};
BaseButton.
TouchListener mQuitListener =
new BaseButton.
TouchListener()
{
@
Override
public void onTouched
(BaseButton sender,
int tag
)
{
GameStateManager.
getInstance().
switchState("TitleState");
}
};
public void update
(float deltaTime
)
{
mPopupTimer += deltaTime
;
float bgsize = 0.0f
;
if (mGameLogic.
isPaused())
{
bgsize = MathUtil.
clamp(mPopupTimer / GameConsts.
PAUSE_MENU_POPUP_TIME, 0.0f, 1.0f
) * GameConsts.
PAUSE_BG_HEIGHT;
}
else
{
bgsize =
(1.0f-MathUtil.
clamp(mPopupTimer / GameConsts.
PAUSE_MENU_POPUP_TIME, 0.0f, 1.0f
)) * GameConsts.
PAUSE_BG_HEIGHT;
}
mBackground.
h = bgsize
;
mBackground.
pivotY = mBackground.
h/2.0f
;
mBackground.
update(deltaTime
);
mBlack.
update(deltaTime
);
if (!mGameLogic.
isPaused())
return;
if (!mHelpScreen.
isActive())
{
mRestart.
update(deltaTime
);
mHelp.
update(deltaTime
);
mMusicOnOff.
update(deltaTime
);
mQuit.
update(deltaTime
);
}
mHelpScreen.
update(deltaTime
);
}
public void render
()
{
if (mGameLogic.
isPaused())
{
mBlack.
render();
}
if (!mGameLogic.
isPaused() && (mPopupTimer
> GameConsts.
PAUSE_MENU_POPUP_TIME))
return;
mBackground.
render();
if (mGameLogic.
isPaused() && (mPopupTimer
> GameConsts.
PAUSE_MENU_POPUP_TIME))
{
String text = ResourceManager.
getInstance().
getCurrentContext().
getResources().
getString(R.
string.
pause_text);
float w = text.
length() * Font.
CHARACTER_SIZE * GameConsts.
PAUSE_TITLE_TEXT_SCALE;
GameServices.
getFont().
drawText(text,
(GameConsts.
VIRTUAL_SCREEN_WIDTH - w
) / 2.0f, GameConsts.
PAUSE_TITLE_TEXT_POSITION_Y, GameConsts.
PAUSE_TITLE_TEXT_SCALE);
mRestart.
render();
mHelp.
render();
mMusicOnOff.
render();
mQuit.
render();
}
mHelpScreen.
render();
}
public void startShowing
()
{
if (!mGameLogic.
isPaused() && mHelpScreen.
isActive())
{
mHelpScreen.
hideImmediately();
}
mPopupTimer = 0.0f
;
}
}