demo 1
This commit is contained in:
@@ -1,21 +0,0 @@
|
||||
/*
|
||||
# ______ ____ ___
|
||||
# | \/ ____| |___|
|
||||
# | | | \ | |
|
||||
#-----------------------------------------------------------------------
|
||||
# Copyright 2022, tyra - https://github.com/h4570/tyra
|
||||
# Licenced under Apache License 2.0
|
||||
# Sandro Sobczyński <sandro.sobczynski@gmail.com>
|
||||
*/
|
||||
|
||||
#include "demo.hpp"
|
||||
|
||||
namespace Tyra {
|
||||
|
||||
Demo::Demo(Engine* t_engine) { engine = t_engine; }
|
||||
Demo::~Demo() {}
|
||||
|
||||
void Demo::init() { TYRA_LOG("Init!"); }
|
||||
void Demo::loop() {}
|
||||
|
||||
} // namespace Tyra
|
||||
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
# ______ ____ ___
|
||||
# | \/ ____| |___|
|
||||
# | | | \ | |
|
||||
#-----------------------------------------------------------------------
|
||||
# Copyright 2022, tyra - https://github.com/h4570/tyra
|
||||
# Licenced under Apache License 2.0
|
||||
# Sandro Sobczyński <sandro.sobczynski@gmail.com>
|
||||
*/
|
||||
|
||||
#include "demo_game.hpp"
|
||||
#include "states/intro/intro_state.hpp"
|
||||
|
||||
namespace Demo {
|
||||
|
||||
DemoGame::DemoGame(Engine* t_engine)
|
||||
: engine(t_engine), stateManager(STATE_INTRO) {}
|
||||
DemoGame::~DemoGame() {}
|
||||
|
||||
void DemoGame::init() { stateManager.add(new IntroState(engine)); }
|
||||
void DemoGame::loop() { stateManager.update(); }
|
||||
|
||||
} // namespace Demo
|
||||
+2
-2
@@ -9,11 +9,11 @@
|
||||
*/
|
||||
|
||||
#include "engine.hpp"
|
||||
#include "demo.hpp"
|
||||
#include "demo_game.hpp"
|
||||
|
||||
int main() {
|
||||
Tyra::Engine engine;
|
||||
Tyra::Demo game(&engine);
|
||||
Demo::DemoGame game(&engine);
|
||||
engine.run(&game);
|
||||
SleepThread();
|
||||
return 0;
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
# ______ ____ ___
|
||||
# | \/ ____| |___|
|
||||
# | | | \ | |
|
||||
#-----------------------------------------------------------------------
|
||||
# Copyright 2022, tyra - https://github.com/h4570/tyra
|
||||
# Licenced under Apache License 2.0
|
||||
# Sandro Sobczyński <sandro.sobczynski@gmail.com>
|
||||
*/
|
||||
|
||||
#include "states/intro/intro_state.hpp"
|
||||
#include "file/file_utils.hpp"
|
||||
#include "debug/debug.hpp"
|
||||
|
||||
#include "states/intro/states/intro_ps2dev_state.hpp"
|
||||
#include "states/intro/states/intro_tyra_state.hpp"
|
||||
#include "states/intro/states/intro_war_info_state.hpp"
|
||||
|
||||
using Tyra::FileUtils;
|
||||
|
||||
namespace Demo {
|
||||
|
||||
IntroState::IntroState(Engine* t_engine)
|
||||
: State(t_engine), stateManager(STATE_PS2DEV) {
|
||||
state = STATE_INTRO;
|
||||
_wantFinish = false;
|
||||
}
|
||||
|
||||
IntroState::~IntroState() {}
|
||||
|
||||
void IntroState::onStart() {
|
||||
engine->audio.loadSong(FileUtils::fromCwd("intro/intro.wav"));
|
||||
engine->audio.setSongLoop(false);
|
||||
engine->audio.setSongVolume(80);
|
||||
engine->audio.playSong();
|
||||
|
||||
stateManager.add(new IntroPs2DevState(engine));
|
||||
stateManager.add(new IntroTyraState(engine));
|
||||
stateManager.add(new IntroWarInfoState(engine));
|
||||
}
|
||||
|
||||
void IntroState::update() { stateManager.update(); }
|
||||
|
||||
GlobalStateType IntroState::onFinish() { return STATE_EXIT; }
|
||||
|
||||
} // namespace Demo
|
||||
@@ -0,0 +1,99 @@
|
||||
/*
|
||||
# ______ ____ ___
|
||||
# | \/ ____| |___|
|
||||
# | | | \ | |
|
||||
#-----------------------------------------------------------------------
|
||||
# Copyright 2022, tyra - https://github.com/h4570/tyra
|
||||
# Licenced under Apache License 2.0
|
||||
# Sandro Sobczyński <sandro.sobczynski@gmail.com>
|
||||
*/
|
||||
|
||||
#include "states/intro/states/intro_ps2dev_state.hpp"
|
||||
#include "loaders/texture/png_loader.hpp"
|
||||
#include "file/file_utils.hpp"
|
||||
#include "debug/debug.hpp"
|
||||
#include "thread/threading.hpp"
|
||||
|
||||
using Tyra::FileUtils;
|
||||
using Tyra::PngLoader;
|
||||
using Tyra::Threading;
|
||||
|
||||
namespace Demo {
|
||||
|
||||
IntroPs2DevState::IntroPs2DevState(Engine* t_engine) : State(t_engine) {
|
||||
state = STATE_PS2DEV;
|
||||
_wantFinish = false;
|
||||
initialized = false;
|
||||
initialDelayElapsed = false;
|
||||
frameSkipper = 0;
|
||||
fadeinActivated = true;
|
||||
fadeoutActivated = false;
|
||||
}
|
||||
|
||||
IntroPs2DevState::~IntroPs2DevState() {
|
||||
if (!initialized) return;
|
||||
|
||||
delete sprite;
|
||||
engine->renderer.core.texture.repository.free(texture->getId());
|
||||
}
|
||||
|
||||
void IntroPs2DevState::onStart() {
|
||||
const auto& settings = engine->renderer.core.getSettings();
|
||||
|
||||
TYRA_LOG("Init!");
|
||||
|
||||
initialDelayTimer.prime();
|
||||
|
||||
sprite = new Sprite;
|
||||
sprite->size.set(256.0F, 64.0F);
|
||||
sprite->position.set(settings.getWidth() / 2 - sprite->size.x / 2,
|
||||
settings.getHeight() / 2 - sprite->size.y / 2);
|
||||
sprite->color.a = 0;
|
||||
|
||||
texture = engine->renderer.core.texture.repository.add(
|
||||
FileUtils::fromCwd("intro/ps2dev.png"));
|
||||
texture->addLink(sprite->getId());
|
||||
|
||||
initialized = true;
|
||||
}
|
||||
|
||||
void IntroPs2DevState::update() {
|
||||
engine->renderer.beginFrame();
|
||||
|
||||
if (initialDelayTimer.getTimeDelta() >= 60000) initialDelayElapsed = true;
|
||||
|
||||
frameSkipper++;
|
||||
if (frameSkipper > 3) {
|
||||
frameSkipper = 0;
|
||||
}
|
||||
|
||||
if (fadeinActivated && initialDelayElapsed && frameSkipper == 0) {
|
||||
if (sprite->color.a < 128.0F)
|
||||
sprite->color.a += 2.0F;
|
||||
else {
|
||||
fadeoutActivated = true;
|
||||
fadeinActivated = false;
|
||||
}
|
||||
if (sprite->color.a >= 96.0F && sprite->color.a < 128.0F) {
|
||||
sprite->color.g -= 6.0F;
|
||||
sprite->color.b -= 6.0F;
|
||||
}
|
||||
}
|
||||
|
||||
Threading::switchThread();
|
||||
|
||||
if (fadeoutActivated && frameSkipper == 0) {
|
||||
if (sprite->color.a > 0)
|
||||
sprite->color.a -= 4;
|
||||
else
|
||||
_wantFinish = true;
|
||||
}
|
||||
|
||||
engine->renderer.renderer2D.render(sprite);
|
||||
|
||||
engine->renderer.endFrame();
|
||||
}
|
||||
|
||||
IntroStateType IntroPs2DevState::onFinish() { return STATE_TYRA; }
|
||||
|
||||
} // namespace Demo
|
||||
@@ -0,0 +1,173 @@
|
||||
/*
|
||||
# ______ ____ ___
|
||||
# | \/ ____| |___|
|
||||
# | | | \ | |
|
||||
#-----------------------------------------------------------------------
|
||||
# Copyright 2022, tyra - https://github.com/h4570/tyra
|
||||
# Licenced under Apache License 2.0
|
||||
# Sandro Sobczyński <sandro.sobczynski@gmail.com>
|
||||
*/
|
||||
|
||||
#include "states/intro/states/intro_tyra_state.hpp"
|
||||
#include "loaders/texture/png_loader.hpp"
|
||||
#include "file/file_utils.hpp"
|
||||
#include "debug/debug.hpp"
|
||||
#include "thread/threading.hpp"
|
||||
#include "math/math.hpp"
|
||||
|
||||
using Tyra::FileUtils;
|
||||
using Tyra::Math;
|
||||
using Tyra::PngLoader;
|
||||
using Tyra::Threading;
|
||||
|
||||
namespace Demo {
|
||||
|
||||
IntroTyraState::IntroTyraState(Engine* t_engine) : State(t_engine) {
|
||||
state = STATE_TYRA;
|
||||
_wantFinish = false;
|
||||
initialized = false;
|
||||
initialDelayElapsed = false;
|
||||
animActivated = true;
|
||||
fadeoutActivated = false;
|
||||
frameSkipper = 0;
|
||||
}
|
||||
|
||||
IntroTyraState::~IntroTyraState() {
|
||||
if (!initialized) return;
|
||||
|
||||
engine->renderer.core.texture.repository.free(tyraTexture->getId());
|
||||
engine->renderer.core.texture.repository.free(bgTexture->getId());
|
||||
engine->renderer.core.texture.repository.free(fillerTexture->getId());
|
||||
|
||||
delete tyraSprite;
|
||||
delete bgSprite;
|
||||
delete fillerSprite;
|
||||
}
|
||||
|
||||
void IntroTyraState::onStart() {
|
||||
const auto& settings = engine->renderer.core.getSettings();
|
||||
|
||||
initialDelayTimer.prime();
|
||||
|
||||
tyraSprite = new Sprite;
|
||||
tyraSprite->size.set(256.0F, 64.0F);
|
||||
tyraSprite->position.set(settings.getWidth() / 2 - tyraSprite->size.x / 2,
|
||||
settings.getHeight() / 2 - tyraSprite->size.y / 2);
|
||||
|
||||
bgSprite = new Sprite;
|
||||
bgSprite->size.set(256.0F, 256.0F);
|
||||
bgSprite->position.set(settings.getWidth() / 2 - bgSprite->size.x / 2,
|
||||
settings.getHeight() / 3 * 2.0F);
|
||||
|
||||
bg2Sprite = new Sprite;
|
||||
bg2Sprite->size.set(256.0F, 256.0F);
|
||||
bg2Sprite->position.set(
|
||||
settings.getWidth() / 2 - bg2Sprite->size.x / 2,
|
||||
(settings.getHeight() / 3 * 2.0F) + bg2Sprite->size.y + 1.0F);
|
||||
|
||||
fillerSprite = new Sprite;
|
||||
fillerSprite->size.set(256.0F, 256.0F);
|
||||
fillerSprite->position.set(0.0F, 0.0F);
|
||||
|
||||
tyraTexture = engine->renderer.core.texture.repository.add(
|
||||
FileUtils::fromCwd("intro/tyra.png"));
|
||||
tyraTexture->addLink(tyraSprite->getId());
|
||||
|
||||
bgTexture = engine->renderer.core.texture.repository.add(
|
||||
FileUtils::fromCwd("intro/tyra_bg.png"));
|
||||
bgTexture->addLink(bgSprite->getId());
|
||||
|
||||
bg2Texture = engine->renderer.core.texture.repository.add(
|
||||
FileUtils::fromCwd("intro/tyra_bg2.png"));
|
||||
bg2Texture->addLink(bg2Sprite->getId());
|
||||
|
||||
fillerTexture = engine->renderer.core.texture.repository.add(
|
||||
FileUtils::fromCwd("intro/filler.png"));
|
||||
fillerTexture->addLink(fillerSprite->getId());
|
||||
|
||||
initialized = true;
|
||||
}
|
||||
|
||||
void IntroTyraState::update() {
|
||||
engine->renderer.beginFrame();
|
||||
|
||||
if (initialDelayTimer.getTimeDelta() >= 15000) initialDelayElapsed = true;
|
||||
|
||||
frameSkipper++;
|
||||
if (frameSkipper > 3) {
|
||||
frameSkipper = 0;
|
||||
}
|
||||
|
||||
const float slideUpMaxPost = -128.0F;
|
||||
|
||||
if (initialDelayElapsed) {
|
||||
if (bgSprite->position.y <= 32.0F) fadeoutActivated = true;
|
||||
|
||||
float offset = 1.0F;
|
||||
if (bgSprite->position.y > slideUpMaxPost && bgSprite->position.y <= 64.0F)
|
||||
offset /= 1.6F;
|
||||
else if (bgSprite->position.y > 64.0F && bgSprite->position.y <= 128.0F)
|
||||
offset /= 1.2F;
|
||||
|
||||
if (bgSprite->position.y > 32.0F && bgSprite->position.y <= 64.0F &&
|
||||
bgSprite->color.g > 0.0F) {
|
||||
const float colorOffset = 1.5F;
|
||||
bgSprite->color.g -= colorOffset;
|
||||
bgSprite->color.b -= colorOffset;
|
||||
bg2Sprite->color.g -= colorOffset;
|
||||
bg2Sprite->color.b -= colorOffset;
|
||||
}
|
||||
|
||||
if (bgSprite->position.y > slideUpMaxPost) {
|
||||
bgSprite->position.y -= offset;
|
||||
bg2Sprite->position.y -= offset;
|
||||
}
|
||||
}
|
||||
|
||||
if (fadeoutActivated && frameSkipper == 0) {
|
||||
if (bgSprite->color.a > 0) {
|
||||
bgSprite->color.a -= 4.0F;
|
||||
bg2Sprite->color.a -= 4.0F;
|
||||
} else
|
||||
_wantFinish = true;
|
||||
}
|
||||
|
||||
Threading::switchThread();
|
||||
|
||||
engine->renderer.renderer2D.render(bgSprite);
|
||||
engine->renderer.renderer2D.render(bg2Sprite);
|
||||
engine->renderer.renderer2D.render(tyraSprite);
|
||||
|
||||
Threading::switchThread();
|
||||
renderFillers();
|
||||
|
||||
engine->renderer.endFrame();
|
||||
}
|
||||
|
||||
void IntroTyraState::renderFillers() {
|
||||
// Up
|
||||
fillerSprite->position.set(0.0F, -63.0F);
|
||||
engine->renderer.renderer2D.render(fillerSprite);
|
||||
|
||||
fillerSprite->position.set(256.0F, -63.0F);
|
||||
engine->renderer.renderer2D.render(fillerSprite);
|
||||
|
||||
// Left
|
||||
fillerSprite->position.set(-124.0F, 128.0F);
|
||||
engine->renderer.renderer2D.render(fillerSprite);
|
||||
|
||||
// Down
|
||||
fillerSprite->position.set(0.0F, 256.0F);
|
||||
engine->renderer.renderer2D.render(fillerSprite);
|
||||
|
||||
fillerSprite->position.set(256.0F, 256.0F);
|
||||
engine->renderer.renderer2D.render(fillerSprite);
|
||||
|
||||
// Right
|
||||
fillerSprite->position.set(386.0F, 128.0F);
|
||||
engine->renderer.renderer2D.render(fillerSprite);
|
||||
}
|
||||
|
||||
IntroStateType IntroTyraState::onFinish() { return STATE_WAR_INFO; }
|
||||
|
||||
} // namespace Demo
|
||||
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
# ______ ____ ___
|
||||
# | \/ ____| |___|
|
||||
# | | | \ | |
|
||||
#-----------------------------------------------------------------------
|
||||
# Copyright 2022, tyra - https://github.com/h4570/tyra
|
||||
# Licenced under Apache License 2.0
|
||||
# Sandro Sobczyński <sandro.sobczynski@gmail.com>
|
||||
*/
|
||||
|
||||
#include "states/intro/states/intro_war_info_state.hpp"
|
||||
#include "loaders/texture/png_loader.hpp"
|
||||
#include "file/file_utils.hpp"
|
||||
#include "debug/debug.hpp"
|
||||
#include "thread/threading.hpp"
|
||||
#include "math/math.hpp"
|
||||
|
||||
using Tyra::FileUtils;
|
||||
using Tyra::Math;
|
||||
using Tyra::PngLoader;
|
||||
using Tyra::Threading;
|
||||
|
||||
namespace Demo {
|
||||
|
||||
IntroWarInfoState::IntroWarInfoState(Engine* t_engine) : State(t_engine) {
|
||||
state = STATE_WAR_INFO;
|
||||
_wantFinish = false;
|
||||
}
|
||||
|
||||
IntroWarInfoState::~IntroWarInfoState() {
|
||||
if (!initialized) return;
|
||||
}
|
||||
|
||||
void IntroWarInfoState::onStart() { initialized = true; }
|
||||
|
||||
void IntroWarInfoState::update() {
|
||||
engine->renderer.beginFrame();
|
||||
|
||||
engine->renderer.endFrame();
|
||||
}
|
||||
IntroStateType IntroWarInfoState::onFinish() { return STATE_PRESS_KEY; }
|
||||
|
||||
} // namespace Demo
|
||||
Reference in New Issue
Block a user