From 0a57018881fc530e18695ed3331482f432bb7750 Mon Sep 17 00:00:00 2001 From: JAROWMR Date: Wed, 8 Jan 2025 19:57:34 +0100 Subject: added color to button --- game/menus/mainmenu/MainMenuScene.cpp | 3 +++ 1 file changed, 3 insertions(+) (limited to 'game/menus/mainmenu') diff --git a/game/menus/mainmenu/MainMenuScene.cpp b/game/menus/mainmenu/MainMenuScene.cpp index fba90ac..ff94e74 100644 --- a/game/menus/mainmenu/MainMenuScene.cpp +++ b/game/menus/mainmenu/MainMenuScene.cpp @@ -55,6 +55,7 @@ void MainMenuScene::load_scene() { .text_width = 200, .position = pos_btn, .script_type = ButtonSubScene::ScriptSelect::PREVIEW, + .btn_side_color = ButtonSubScene::ButtonSideColor::PURPLE, } ); @@ -70,6 +71,7 @@ void MainMenuScene::load_scene() { .icon_type = ButtonSubScene::IconSelect::SHOP, .position = pos_btn, .script_type = ButtonSubScene::ScriptSelect::SHOP, + .btn_side_color = ButtonSubScene::ButtonSideColor::ORANGE, } ); @@ -83,6 +85,7 @@ void MainMenuScene::load_scene() { .text_width = 200, .position = pos_btn, .script_type = ButtonSubScene::ScriptSelect::CREDITS_SHOW, + .btn_side_color = ButtonSubScene::ButtonSideColor::BLUE, } ); -- cgit v1.2.3 From 64a0cf67d6c299a099b48ce083b1f3a688787cb3 Mon Sep 17 00:00:00 2001 From: JAROWMR Date: Fri, 10 Jan 2025 11:04:44 +0100 Subject: added optional replay and added black background --- game/Config.h | 2 ++ game/menus/ButtonReplaySubScript.cpp | 5 +++++ game/menus/mainmenu/MainMenuScene.cpp | 2 +- game/preview/PreviewReplaySubScript.cpp | 5 +++++ 4 files changed, 13 insertions(+), 1 deletion(-) (limited to 'game/menus/mainmenu') diff --git a/game/Config.h b/game/Config.h index 8fa41ba..391fd76 100644 --- a/game/Config.h +++ b/game/Config.h @@ -64,3 +64,5 @@ static constexpr int PLAYER_GRAVITY_SCALE = 60; // In game units static constexpr const char * CAMERA_NAME = "camera"; // Jetpack particles static constexpr const char * JETPACK_PARTICLES = "jetpack_particles"; + +static constexpr bool DISABLE_REPLAY = false; diff --git a/game/menus/ButtonReplaySubScript.cpp b/game/menus/ButtonReplaySubScript.cpp index ddd9fa4..55e718d 100644 --- a/game/menus/ButtonReplaySubScript.cpp +++ b/game/menus/ButtonReplaySubScript.cpp @@ -1,4 +1,5 @@ #include "ButtonReplaySubScript.h" +#include "Config.h" #include "MenusConfig.h" #include "../Events.h" @@ -19,20 +20,24 @@ void ButtonReplaySubScript::init() { this->subscribe([this](const DeleteRecordingEvent & e) { return this->delete_recording(); }); + if(DISABLE_REPLAY)return; replay.record_start(); } bool ButtonReplaySubScript::on_button_press(const ButtonPressEvent & e) { + if(DISABLE_REPLAY)return false; replay.play(this->recording); return false; } bool ButtonReplaySubScript::set_recording() { + if(DISABLE_REPLAY)return false; this->recording = replay.record_end(); return false; } bool ButtonReplaySubScript::delete_recording() { + if(DISABLE_REPLAY)return false; replay.release(this->recording); return false; } diff --git a/game/menus/mainmenu/MainMenuScene.cpp b/game/menus/mainmenu/MainMenuScene.cpp index ff94e74..baeca39 100644 --- a/game/menus/mainmenu/MainMenuScene.cpp +++ b/game/menus/mainmenu/MainMenuScene.cpp @@ -29,7 +29,7 @@ void MainMenuScene::load_scene() { camera_object.add_component( ivec2(990, 720), vec2(1100, 800), Camera::Data { - .bg_color = Color::RED, + .bg_color = Color::BLACK, } ); camera_object.add_component().set_script(); diff --git a/game/preview/PreviewReplaySubScript.cpp b/game/preview/PreviewReplaySubScript.cpp index 9725ba2..51c27aa 100644 --- a/game/preview/PreviewReplaySubScript.cpp +++ b/game/preview/PreviewReplaySubScript.cpp @@ -1,4 +1,5 @@ #include "PreviewReplaySubScript.h" +#include "Config.h" #include "menus/ButtonReplaySubScript.h" #include #include @@ -24,10 +25,12 @@ void PreviewReplaySubScript::init() { } bool PreviewReplaySubScript::on_button_press(const ButtonPressEvent & e) { + if(DISABLE_REPLAY)return false; replay.play(this->recording); return false; } bool PreviewReplaySubScript::start_recording(){ + if(DISABLE_REPLAY)return false; if(record_saved){ this->stop_recording(); this->delete_recording(); @@ -38,12 +41,14 @@ bool PreviewReplaySubScript::start_recording(){ } bool PreviewReplaySubScript::stop_recording() { + if(DISABLE_REPLAY)return false; if(this->record_started)this->recording = replay.record_end(); this->record_saved = true; return false; } bool PreviewReplaySubScript::delete_recording() { + if(DISABLE_REPLAY)return false; if(this->record_started) this->stop_recording(); if(this->record_saved)replay.release(this->recording); this->record_saved = false; -- cgit v1.2.3 From 15a958a7f327bb2e81e7d445f1499ec78c7f5839 Mon Sep 17 00:00:00 2001 From: heavydemon21 Date: Fri, 10 Jan 2025 12:05:16 +0100 Subject: alers scripts and quitscript with ESC key --- game/CMakeLists.txt | 3 +++ game/GameScene.cpp | 1 - game/QuitScript.cpp | 23 +++++++++++++++++++++ game/QuitScript.h | 11 ++++++++++ game/menus/mainmenu/MainMenuScene.cpp | 2 ++ game/missile/AlertScript.cpp | 38 +++++++++++++++++++++++++++++++++++ game/missile/AlertScript.h | 10 +++++++++ game/missile/AlertSubScene.cpp | 38 +++++++++++++++++++++++++++++++++++ game/missile/AlertSubScene.h | 7 +++++++ game/missile/MissilePool.cpp | 2 ++ game/missile/MissileScript.cpp | 11 ++++++++-- game/missile/MissileSubScene.cpp | 25 +++++++++++------------ game/missile/SpawnEvent.cpp | 22 +++++++++++--------- 13 files changed, 168 insertions(+), 25 deletions(-) create mode 100644 game/QuitScript.cpp create mode 100644 game/QuitScript.h create mode 100644 game/missile/AlertScript.cpp create mode 100644 game/missile/AlertScript.h create mode 100644 game/missile/AlertSubScene.cpp create mode 100644 game/missile/AlertSubScene.h (limited to 'game/menus/mainmenu') diff --git a/game/CMakeLists.txt b/game/CMakeLists.txt index e1168eb..70445c9 100644 --- a/game/CMakeLists.txt +++ b/game/CMakeLists.txt @@ -41,6 +41,8 @@ target_sources(main PUBLIC missile/MissilePool.cpp missile/MissileScript.cpp missile/MissileSubScene.cpp + missile/AlertSubScene.cpp + missile/AlertScript.cpp missile/SpawnEvent.cpp #scheduling @@ -57,6 +59,7 @@ target_sources(main PUBLIC GameScene.cpp MoveCameraManualyScript.cpp StartGameScript.cpp + QuitScript.cpp # player player/PlayerScript.cpp diff --git a/game/GameScene.cpp b/game/GameScene.cpp index ea55f7b..7803c9d 100644 --- a/game/GameScene.cpp +++ b/game/GameScene.cpp @@ -1,6 +1,5 @@ #include "GameScene.h" #include "Config.h" -#include "MoveCameraManualyScript.h" #include "StartGameScript.h" #include "coins/CoinPoolSubScene.h" #include "coins/CoinSystemScript.h" diff --git a/game/QuitScript.cpp b/game/QuitScript.cpp new file mode 100644 index 0000000..e48863f --- /dev/null +++ b/game/QuitScript.cpp @@ -0,0 +1,23 @@ + + +#include "QuitScript.h" +#include "api/Event.h" +#include "api/KeyCodes.h" + + +using namespace crepe; + +bool QuitScript::on_event(const KeyPressEvent & ev){ + if (Keycode::ESCAPE == ev.key) { + trigger_event(ShutDownEvent{}); + } + return false; +} + + + +void QuitScript::init(){ + subscribe([this](const KeyPressEvent & ev) -> bool { + return this->on_event(ev); + }); +} diff --git a/game/QuitScript.h b/game/QuitScript.h new file mode 100644 index 0000000..c295183 --- /dev/null +++ b/game/QuitScript.h @@ -0,0 +1,11 @@ +#pragma once + + +#include "api/Script.h" +class QuitScript : public crepe::Script { +private: + bool on_event(const crepe::KeyPressEvent & ev); + +public: + void init(); +}; diff --git a/game/menus/mainmenu/MainMenuScene.cpp b/game/menus/mainmenu/MainMenuScene.cpp index fba90ac..ad2c54d 100644 --- a/game/menus/mainmenu/MainMenuScene.cpp +++ b/game/menus/mainmenu/MainMenuScene.cpp @@ -2,6 +2,7 @@ #include "MainMenuScene.h" #include "CreditsSubScene.h" #include "MainMenuConfig.h" +#include "QuitScript.h" #include "TransitionStartSubScript.h" #include "../ButtonSubScene.h" @@ -33,6 +34,7 @@ void MainMenuScene::load_scene() { } ); camera_object.add_component().set_script(); + camera_object.add_component().set_script(); //Button menu GameObject menu_button = this->new_object(MENU_BUTTON_NAME, MENU_BUTTON_NAME, MENU_OFFSET); diff --git a/game/missile/AlertScript.cpp b/game/missile/AlertScript.cpp new file mode 100644 index 0000000..c1124ac --- /dev/null +++ b/game/missile/AlertScript.cpp @@ -0,0 +1,38 @@ +#include "AlertScript.h" +#include "../Config.h" +#include "api/CircleCollider.h" +#include "api/Sprite.h" + +#include + +using namespace crepe; + +void AlertScript::fixed_update(crepe::duration_t dt) { + const auto & cam = this->get_components_by_name("camera").front().get(); + //missile transform + const auto & this_transform = this->get_component(); + auto missile_transforms = this->get_components_by_name("missile"); + const auto & this_collider = this->get_component(); + + auto alert_sprites = this->get_components_by_name("missile_alert"); + auto alert_transforms = this->get_components_by_name("missile_alert"); + + int idx = 0; + for (int i = 0; i < missile_transforms.size(); i++) { + const auto & missile_transform = missile_transforms[i].get(); + if (this_transform.game_object_id == missile_transform.game_object_id) { + idx = i; + break; + } + } + + auto & alert_transform = alert_transforms[idx].get(); + alert_transform.position.x = cam.position.x + (VIEWPORT_X / 2 - 100); + alert_transform.position.y = this_transform.position.y; + + // check if transform is in camera view + if (this_transform.position.x > cam.position.x - (VIEWPORT_X / 2) + && this_transform.position.x < cam.position.x + (VIEWPORT_X / 2)) { + alert_sprites[idx].get().active = false; + } +} diff --git a/game/missile/AlertScript.h b/game/missile/AlertScript.h new file mode 100644 index 0000000..ab29863 --- /dev/null +++ b/game/missile/AlertScript.h @@ -0,0 +1,10 @@ +#pragma once + +#include "api/Script.h" +class AlertScript : public crepe::Script { +private: + bool has_alert = false; + +public: + void fixed_update(crepe::duration_t dt); +}; diff --git a/game/missile/AlertSubScene.cpp b/game/missile/AlertSubScene.cpp new file mode 100644 index 0000000..c3379e8 --- /dev/null +++ b/game/missile/AlertSubScene.cpp @@ -0,0 +1,38 @@ +#include "AlertSubScene.h" +#include "../Config.h" +#include "api/Animator.h" +#include "api/BehaviorScript.h" +#include "api/Scene.h" +#include "api/Sprite.h" +#include "missile/AlertScript.h" + +using namespace crepe; + +MissileAlert::MissileAlert(Scene& scn){ + GameObject alert = scn.new_object("missile_alert", "missile_alert", {0, 0}, 0, 1); + + Asset missile_alert_ss {"asset/obstacles/missile/missileAlert.png"}; + + //alert.add_component().set_script(); + + auto & missile_alert_sprite = alert.add_component( + missile_alert_ss, + Sprite::Data { + .sorting_in_layer = SORT_IN_LAY_OBSTACLES, + .size = {0, 100}, + } + ); + + auto & missile_alert_anim = alert.add_component( + missile_alert_sprite, ivec2 {64, 64}, uvec2 {4, 2}, + Animator::Data { + .fps = 15, + .looping = true, + } + ); + + missile_alert_anim.set_anim(1); + missile_alert_sprite.active = false; + + +} diff --git a/game/missile/AlertSubScene.h b/game/missile/AlertSubScene.h new file mode 100644 index 0000000..661b3f1 --- /dev/null +++ b/game/missile/AlertSubScene.h @@ -0,0 +1,7 @@ +#pragma once + +#include "api/Scene.h" +class MissileAlert { +public: + MissileAlert(crepe::Scene & scn); +}; diff --git a/game/missile/MissilePool.cpp b/game/missile/MissilePool.cpp index e549210..23f03c9 100644 --- a/game/missile/MissilePool.cpp +++ b/game/missile/MissilePool.cpp @@ -1,5 +1,6 @@ #include "MissilePool.h" #include "MissileSubScene.h" +#include "missile/AlertSubScene.h" #include @@ -10,6 +11,7 @@ MissilePool::MissilePool(Scene & scn) { int amount = 0; MissileSubScene missile; while (amount < this->MAX_MISSILE_COUNT) { + MissileAlert alert(scn); missile.create(scn); amount++; } diff --git a/game/missile/MissileScript.cpp b/game/missile/MissileScript.cpp index 6d0e40e..2d1052e 100644 --- a/game/missile/MissileScript.cpp +++ b/game/missile/MissileScript.cpp @@ -1,6 +1,9 @@ #include "MissileScript.h" #include "../Config.h" +#include "Collider.h" #include "api/BehaviorScript.h" +#include "api/CircleCollider.h" +#include "api/Rigidbody.h" #include #include @@ -25,8 +28,9 @@ void MissileScript::init() { void MissileScript::kill_missile() { auto animations = this->get_components(); auto sprites = this->get_components(); + auto collider = this->get_component(); auto & fly_sound = this->get_components().front().get(); - auto & this_script = this->get_components().back().get(); + auto & this_script = this->get_components().front().get(); animations[0].get().active = false; animations[1].get().active = false; @@ -34,7 +38,7 @@ void MissileScript::kill_missile() { sprites[0].get().active = false; sprites[1].get().active = false; sprites[2].get().active = true; - + collider.active = false; this_script.active = false; this->seeking_disabled = false; @@ -47,9 +51,12 @@ void MissileScript::activate() { anim[0].get().active = true; anim[1].get().active = true; anim[2].get().stop(); + //anim[3].get().active = true; + sprites[0].get().active = true; sprites[1].get().active = true; sprites[2].get().active = false; + //sprites[3].get().active = true; } bool MissileScript::on_collision(const CollisionEvent & ev) { diff --git a/game/missile/MissileSubScene.cpp b/game/missile/MissileSubScene.cpp index 6719c3d..6df6c87 100644 --- a/game/missile/MissileSubScene.cpp +++ b/game/missile/MissileSubScene.cpp @@ -1,6 +1,8 @@ #include "MissileSubScene.h" #include "../Config.h" #include "../missile/MissileScript.h" +#include "Random.h" +#include "missile/AlertScript.h" #include #include @@ -10,14 +12,10 @@ #include #include #include -#include using namespace crepe; void MissileSubScene::create(crepe::Scene & scn) { - std::random_device rd; - std::mt19937 gen(rd()); - GameObject missle = scn.new_object("missile", "missile", {0, 0}, 0, 1); Asset missle_ss {"asset/obstacles/missile/missile.png"}; @@ -27,6 +25,7 @@ void MissileSubScene::create(crepe::Scene & scn) { Asset missile_fire {"asset/sfx/missile_launch.ogg"}; missle.add_component().set_script().active = false; + missle.add_component().set_script(); auto & sound = missle.add_component(missile_fire); sound.volume = 0.5; @@ -88,16 +87,16 @@ void MissileSubScene::create(crepe::Scene & scn) { missile_explosion_sprite.active = false; explosion_anim.active = false; - std::uniform_int_distribution<> dist(200, 250); - missle.add_component(Rigidbody::Data { - .body_type = Rigidbody::BodyType::KINEMATIC, - .max_linear_velocity = static_cast(dist(gen)), - .kinematic_collision = false, - .collision_layers = {COLL_LAY_PLAYER, COLL_LAY_BOT_TOP}, - .collision_layer = COLL_LAY_MISSILE, - }); + missle + .add_component(Rigidbody::Data { + .body_type = Rigidbody::BodyType::KINEMATIC, + .max_linear_velocity = Random::f(250, 200), + .kinematic_collision = false, + .collision_layers = {COLL_LAY_PLAYER, COLL_LAY_BOT_TOP}, + .collision_layer = COLL_LAY_MISSILE, + }); - missle.add_component(3); + missle.add_component(3).active = false; auto & missle_ai = missle.add_component(1000); } diff --git a/game/missile/SpawnEvent.cpp b/game/missile/SpawnEvent.cpp index 03a9b8c..c407832 100644 --- a/game/missile/SpawnEvent.cpp +++ b/game/missile/SpawnEvent.cpp @@ -1,4 +1,7 @@ #include "SpawnEvent.h" +#include "Config.h" +#include "Random.h" +#include "api/CircleCollider.h" #include #include @@ -8,7 +11,6 @@ #include #include -#include using namespace crepe; @@ -18,28 +20,30 @@ void MissileSpawnEventHandler::init() { }); } -std::random_device rd; -std::mt19937 gen(rd()); - bool MissileSpawnEventHandler::on_event(const MissileSpawnEvent & event) { - auto missile_sprites = this->get_components_by_name("missile"); auto missile_transforms = this->get_components_by_name("missile"); + auto alert_sprites = this->get_components_by_name("missile_alert"); + auto alert_transforms = this->get_components_by_name("missile_alert"); + auto colliders = this->get_components_by_name("missile"); auto missile_behaviorscripts = this->get_components_by_name("missile"); auto missile_audiosources = this->get_components_by_name("missile"); auto & camera_transform = this->get_components_by_name("camera").front().get(); for (size_t i = 0; i < missile_behaviorscripts.size(); ++i) { - auto & script = missile_behaviorscripts[i].get(); + auto & script = missile_behaviorscripts[i * 2].get(); if (script.active) continue; script.active = true; - + colliders[i].get().active = true; missile_audiosources[i * 2].get().play(); auto & transform = missile_transforms[i].get(); transform.position.x = camera_transform.position.x + this->MISSILE_OFFSET; - std::uniform_int_distribution<> dist(this->MIN_RANGE, this->MAX_RANGE); - transform.position.y = dist(gen); + transform.position.y = Random::i(this->MAX_RANGE, this->MIN_RANGE); + + auto & alert_transform = alert_transforms[i].get(); + auto & alert_sprite = alert_sprites[i].get(); + alert_sprite.active = true; break; } -- cgit v1.2.3