package sample.game.controller; import java.util.ArrayList; import library.core.mainAI.RiverCrossingAI; import library.core.model.CoreModel; import sample.game.main.UserGameTitle; import sample.game.model.title.HowToPlayButton; import sample.game.model.title.LevelButton; import sample.game.model.title.SoundButton; import sample.game.model.title.TitleAnimationModel; /** * ユーザーが操作するタイトルのコントローラー * @author 貴裕 * */ public class TitleController { public enum Level{ easy, normal, hard }; private Level targetLevel=Level.easy; private UserGameTitle palent; private CoreModel backScreen; private CoreModel backScreen2; //ループの後追い private CoreModel logo; private ArrayList<LevelButton> levelButtons; private TitleAnimationModel easyCharaAnim; private TitleAnimationModel normalCharaAnim; private TitleAnimationModel hardCharaAnim; private SoundButton soundButton; private HowToPlayButton howToPlayButton; private CoreModel fadeMask; private float time; private float backScreenMoveTime; private boolean isSelectStage=false; private boolean nowShowInitProductPhase=true; private boolean moveBackScreen=false; private boolean isSelectHowToPlay=false; public TitleController(UserGameTitle palent){ this.palent=palent; time=0; backScreenMoveTime=0; RiverCrossingAI.getBgmPlayer().play("bgm/title.ogg", 0); } /** * 初期演出判定 */ public void checkInitProduction(){ lockButtons(); this.fadeMask.setAlpha(255); this.fadeMask.setShowView(true); this.nowShowInitProductPhase=true; this.isSelectHowToPlay=false; time=0; moveBackScreen=true; } public void update(float deltaTime){ //突入時のフェイド処理 if(nowShowInitProductPhase){ time+=deltaTime; //CoreLog.debug("time: "+time); float rate=time/1f; if(rate>1) rate=1; RiverCrossingAI.getBgmPlayer().setVolume(rate);; this.fadeMask.setAlpha((int)(255*(1f-rate))); if(time>=1f){ fadeMask.setShowView(false); unlockButtons(); this.nowShowInitProductPhase=false; time=0; } return; } if(moveBackScreen){ backScreenMoveTime+=deltaTime; if(backScreenMoveTime>=0.01f){ backScreenMoveTime=0; backScreen.move(4f, 0); backScreen2.move(4f, 0); if(backScreen.getCenterX()>=1920){ backScreen.setCenterX(-640); } if(backScreen2.getCenterX()>=1920){ backScreen2.setCenterX(-640); } } } //ステージの選択がされた場合 if(isSelectStage){ time+=deltaTime; if(time>=0.5f){ fadeout((1.5f-time)/1f); } if(time>=1.5f){ time=-100; if(isSelectHowToPlay){ palent.loadHowToPlay(); }else{ goGameScreen(); } } } } /** * 黒画像でやった方がいいかも * @param rate 0で完全に透明 */ public void fadeout(float rate){ int alpha=(int)((rate)*255); if(alpha<0) alpha=0; if(rate<0) rate=0; RiverCrossingAI.getBgmPlayer().setVolume(rate); fadeMask.setAlpha(255-alpha); /*backScreen.setAlpha(alpha); backScreen2.setAlpha(alpha); for (LevelButton l : levelButtons) { l.setAlpha(alpha); } easyCharaAnim.setAlpha(alpha); normalCharaAnim.setAlpha(alpha); hardCharaAnim.setAlpha(alpha); soundButton.setAlpha(alpha); howToPlayButton.setAlpha(alpha); logo.setAlpha(alpha);*/ } /** * 処理順の都合により分離 * @param buttons */ public void setLevelButtons(ArrayList<LevelButton> buttons){ this.levelButtons=buttons; } /** * 処理順の都合により分離 * @param buttons */ public void setSoundButton(SoundButton soundButton) { this.soundButton = soundButton; } /** * 処理順の都合により分離 * @param buttons */ public void setHowToPlayButton(HowToPlayButton howToPlayButton) { this.howToPlayButton = howToPlayButton; } public void setEasyCharaAnim(TitleAnimationModel anim){ this.easyCharaAnim=anim; } public void setNormalCharaAnim(TitleAnimationModel anim){ this.normalCharaAnim=anim; } public void setHardCharaAnim(TitleAnimationModel anim){ this.hardCharaAnim=anim; } public void setBackScreen(CoreModel backScreen) { this.backScreen = backScreen; } public void setBackScreen2(CoreModel backScreen) { this.backScreen2 = backScreen; } public void setLogo(CoreModel logo) { this.logo = logo; } /** * レベルの選択(ボタン入力)(ゲームモードの決定) * @param level */ public void selectLevet(Level level){ time=0; lockButtons(); this.targetLevel=level; isSelectStage=true; fadeMask.setAlpha(0); fadeMask.setShowView(true); //アニメーションの切り替え /*switch (level) { case easy: easyCharaAnim.changeAnimation(1); break; case normal: normalCharaAnim.changeAnimation(1); break; case hard: hardCharaAnim.changeAnimation(1); break; }*/ easyCharaAnim.changeAnimation(1); normalCharaAnim.changeAnimation(1); hardCharaAnim.changeAnimation(1); moveBackScreen=false; } /** * ゲームシーンへの遷移 */ public void goGameScreen(){ this.palent.loadGameScreen(targetLevel); } /** * 遊び方を選んだ場合 */ public void selectHowToPlay(){ time=0; lockButtons(); isSelectStage=true; isSelectHowToPlay=true; fadeMask.setAlpha(0); fadeMask.setShowView(true); easyCharaAnim.changeAnimation(1); normalCharaAnim.changeAnimation(1); hardCharaAnim.changeAnimation(1); moveBackScreen=false; } /** * ボタンの無効化 */ private void lockButtons(){ for(int i=0;i<levelButtons.size();i++){ levelButtons.get(i).setCanUse(false); } soundButton.setCanUse(false); howToPlayButton.setCanUse(false); } /** * ボタンの有効化 */ private void unlockButtons(){ for(int i=0;i<levelButtons.size();i++){ levelButtons.get(i).setCanUse(true); } soundButton.setCanUse(true); howToPlayButton.setCanUse(true); } public Level getTargetLevel() { return targetLevel; } public void setFadeMask(CoreModel fadeMask) { this.fadeMask = fadeMask; } }