/** * File name: MathAttackMainMenuScreen.java * Version: 1.0 * Date: 01/03/2015 19:28:24 * Author: Sawan * Copyright: Copyright 200X Sawan * * This file is part of Foobar. * * Math Attack is free software: you can redistribute it * and/or modify it under the terms of the GNU General * Public License as published by the Free Software * Foundation, either version 3 of the License, * or (at your option) any later version. * * Math Attack is distributed in the hope that it will * be useful, but WITHOUT ANY WARRANTY; without even * the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General * Public License along with Math Attack. If not, see * http://www.gnu.org/licenses/. */ package com.sawan.mathattack.game_screens.main; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.scenes.scene2d.actions.Actions; import com.sawan.mathattack.asset.Backgrounds; import com.sawan.mathattack.asset.UIAssets; import com.sawan.mathattack.buttons.MathAttackButton; import com.sawan.mathattack.effects.EffectCreator; import com.sawan.mathattack.game.AbstractGame; import com.sawan.mathattack.game_screens.main.helpers.MAMainMenuButtons; import com.sawan.mathattack.game_screens.main.helpers.MAMainMenuEnviroment; import com.sawan.mathattack.interfaces.IScreen; import com.sawan.mathattack.models.EmptyActorLight; import com.sawan.mathattack.scene2d.ui.TableModel; import com.sawan.mathattack.screen.AbstractScreen; import com.sawan.mathattack.settings.AppSettings; // TODO: Auto-generated Javadoc /** * The Class MathAttackMainMenuScreen. * * @author Sawan */ public class MAMainMenuScreen extends AbstractScreen implements IScreen { /** The splash_loading. */ public EmptyActorLight splash_loading; /** The Constant SPLASH_W. */ private final static float SPLASH_W = 100f; /** The Constant SPLASH_H. */ private final static float SPLASH_H = 100f; /** The Constant SPLASH_ROTATION_VALUE. */ private final static float SPLASH_ROTATION_VALUE = -5f; /** The Constant SCALE_TITLE_RATIO. */ private final static float SCALE_TITLE_RATIO = 1.1f; /** The Constant SHAKE_TITLE_ANGLE. */ private final static float SHAKE_TITLE_ANGLE = 8f; /** The Constant SHAKE_DURATION. */ private final static float SHAKE_DURATION = 0.11f; /** The menu_table. */ public TableModel menu_table; /** The title. */ public EmptyActorLight title; /** The background. */ public EmptyActorLight background; /** The button_play. */ public MathAttackButton button_play; /** The button_settings. */ public MathAttackButton button_settings; /** The button_credits. */ public MathAttackButton button_credits; /** The is splash completed. */ private boolean isSplashCompleted; // Main menu elements /** The enviroment. */ public MAMainMenuEnviroment enviroment; /** The buttons. */ public MAMainMenuButtons buttons; // Timers /** The Constant SPLASH_TIMER. */ private final static float SPLASH_TIMER = 6.0f; /** The Constant TITLE_LOOP_ANIMATION. */ private final static float TITLE_LOOP_ANIMATION = 3.0f; /** The title_animation_timer. */ private float title_animation_timer; /** * Instantiates a new math attack main menu screen. * * @param game the game * @param screenName the screen name */ public MAMainMenuScreen(AbstractGame game, String screenName) { super(game, screenName); setUpScreenElements(); setUpMenu(); } /* (non-Javadoc) * @see com.sawan.mathattack.interfaces.IScreen#setUpScreenElements() */ @Override public void setUpScreenElements() { // Reset System setSecondsTime(0); isSplashCompleted = false; setBackButtonActive(true); // Set Background image setBackgroundTexture(Backgrounds.image_main_background); // Set title animation timer title_animation_timer = SPLASH_TIMER + TITLE_LOOP_ANIMATION; // Construct main menu elements buttons = new MAMainMenuButtons(); enviroment = new MAMainMenuEnviroment(); // Prepare splash splash_loading = new EmptyActorLight(SPLASH_W, SPLASH_H, true); splash_loading.setTextureRegion(UIAssets.image_main_loader, true); splash_loading.setOrigin(splash_loading.getWidth() / 2.0f, splash_loading.getHeight() / 2.0f); splash_loading.setPosition(AppSettings.SCREEN_W - splash_loading.getWidth(), AppSettings.SCREEN_H - splash_loading.getHeight()); // Add splash to stage getStage().addActor(splash_loading); } /* (non-Javadoc) * @see com.sawan.mathattack.interfaces.IScreen#setUpMenu() */ @Override public void setUpMenu() { // ---------- Main menu (Order is important) -------- // // They are invisible or scaled to 0f until splash is completed // We will send the elements after splash is completed // Check the render() method enviroment.setUpGameName(this); buttons.setUpMainMenuButtons(this); } /* (non-Javadoc) * @see com.sawan.mathattack.screen.AbstractScreen#render(float) */ @Override public void render(float delta) { super.render(delta); // -------------------- Splash -------------------------------- // // When splash is completed, send main menu elements (Name, Buttons, // etc...), I faked the splash/loading here. Normally use assetmanager // and when its really completed the asset loading, send game elements if (!isSplashCompleted) { if (getSecondsTime() > SPLASH_TIMER) { buttons.sendInMainMenuButtons(this); enviroment.sendInTitle(this); isSplashCompleted = true; } if (getSecondsTime() > SPLASH_TIMER - 1.0f) { splash_loading.addAction(Actions.rotateBy(SPLASH_ROTATION_VALUE)); EffectCreator.create_FO(splash_loading, 0.7f, 0, null, false); } else { splash_loading.addAction(Actions.rotateBy(SPLASH_ROTATION_VALUE)); } } // ----------- Title animation ---------------------- // // Every some specified seconds animate the game name // Shake effect if (getSecondsTime() > title_animation_timer) { if (title != null) { // Create Scale => Shake => BackToNormal effect EffectCreator.create_SC_SHK_BTN(title, SCALE_TITLE_RATIO, SCALE_TITLE_RATIO, SHAKE_TITLE_ANGLE, 0, SHAKE_DURATION, null, false); title_animation_timer = getSecondsTime() + TITLE_LOOP_ANIMATION; } } } @Override public void keyBackPressed() { super.keyBackPressed(); Gdx.app.exit(); } }