|
|
- /*
- * Copyright (C) 2017-2019 Christopher J. Howard
- *
- * This file is part of Antkeeper Source Code.
- *
- * Antkeeper Source Code 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.
- *
- * Antkeeper Source Code 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 Antkeeper Source Code. If not, see <http://www.gnu.org/licenses/>.
- */
-
- #include "splash-state.hpp"
- #include "game.hpp"
- #include "sandbox-state.hpp"
- #include "ui/ui.hpp"
-
- SplashState::SplashState(Game* game):
- GameState(game)
- {}
-
- SplashState::~SplashState()
- {}
-
- void SplashState::enter()
- {
- AnimationChannel<float>* channel;
-
- // Construct fade-in animation clip
- fadeInClip.setInterpolator(lerp<float>);
- channel = fadeInClip.addChannel(0);
- channel->insertKeyframe(0.0f, 0.0f);
- channel->insertKeyframe(0.5f, 0.0f);
- channel->insertKeyframe(1.25f, 1.0f);
- channel->insertKeyframe(5.25f, 1.0f);
-
- // Construct fade-out animation clip
- fadeOutClip.setInterpolator(lerp<float>);
- channel = fadeOutClip.addChannel(0);
- channel->insertKeyframe(0.0f, 1.0f);
- channel->insertKeyframe(0.75f, 0.0f);
- channel->insertKeyframe(1.25f, 0.0f);
-
- // Setup animate callback to change splash screen opacity
- fadeAnimation.setAnimateCallback
- (
- [this](std::size_t id, float opacity)
- {
- this->game->splashImage->setTintColor(Vector4(1.0f, 1.0f, 1.0f, opacity));
- }
- );
-
- // Setup end callback to fade-out after fading in
- fadeAnimation.setEndCallback
- (
- [this]()
- {
- // Change clip to fade-out
- this->fadeAnimation.setClip(&fadeOutClip);
- this->fadeAnimation.setTimeFrame(this->fadeOutClip.getTimeFrame());
- this->fadeAnimation.rewind();
- this->fadeAnimation.play();
-
- // Setup end callback to change to title state after fading out
- this->fadeAnimation.setEndCallback
- (
- [this]()
- {
- //this->game->changeState(this->game->titleState);
- this->game->changeState(this->game->sandboxState);
- }
- );
- }
- );
-
- // Setup fade animation to fade-in
- fadeAnimation.setSpeed(1.0f);
- fadeAnimation.setLoop(false);
- fadeAnimation.setClip(&fadeInClip);
- fadeAnimation.setTimeFrame(fadeInClip.getTimeFrame());
-
- // Play the fade animation
- fadeAnimation.play();
-
- // Add fade animation to the animator
- game->getAnimator()->addAnimation(&fadeAnimation);
-
- // Subscribe this state to input events
- game->getEventDispatcher()->subscribe<KeyPressedEvent>(this);
- game->getEventDispatcher()->subscribe<MouseButtonPressedEvent>(this);
- game->getEventDispatcher()->subscribe<GamepadButtonPressedEvent>(this);
-
- // Make splash screen visible
- game->splashBackgroundImage->setVisible(true);
- game->splashImage->setVisible(true);
- game->splashImage->setTintColor(Vector4(1.0f, 1.0f, 1.0f, 0.0f));
- game->splashBackgroundImage->setTintColor(Vector4(0.0f, 0.0f, 0.0f, 1.0f));
- game->splashImage->resetTweens();
- game->splashBackgroundImage->resetTweens();
- game->uiRootElement->update();
-
- // Hide mouse
- game->mouse->setVisible(false);
- }
-
- void SplashState::execute()
- {}
-
- void SplashState::exit()
- {
- // Remove fade animation from the animator
- game->getAnimator()->removeAnimation(&fadeAnimation);
-
- // Unsubscribe this state from input events
- game->getEventDispatcher()->unsubscribe<KeyPressedEvent>(this);
- game->getEventDispatcher()->unsubscribe<MouseButtonPressedEvent>(this);
- game->getEventDispatcher()->unsubscribe<GamepadButtonPressedEvent>(this);
-
- // Make splash screen invisible
- game->splashBackgroundImage->setVisible(false);
- game->splashImage->setVisible(false);
- }
-
- void SplashState::handleEvent(const KeyPressedEvent& event)
- {
- skip();
- }
-
- void SplashState::handleEvent(const MouseButtonPressedEvent& event)
- {
- skip();
- }
-
- void SplashState::handleEvent(const GamepadButtonPressedEvent& event)
- {
- skip();
- }
-
- void SplashState::skip()
- {
- game->splashImage->setVisible(false);
- game->changeState(game->sandboxState);
- }
-
|