diff options
| -rw-r--r-- | game/CMakeLists.txt | 3 | ||||
| -rw-r--r-- | game/GameScene.cpp | 1 | ||||
| -rw-r--r-- | game/QuitScript.cpp | 23 | ||||
| -rw-r--r-- | game/QuitScript.h | 11 | ||||
| -rw-r--r-- | game/menus/mainmenu/MainMenuScene.cpp | 2 | ||||
| -rw-r--r-- | game/missile/AlertScript.cpp | 38 | ||||
| -rw-r--r-- | game/missile/AlertScript.h | 10 | ||||
| -rw-r--r-- | game/missile/AlertSubScene.cpp | 38 | ||||
| -rw-r--r-- | game/missile/AlertSubScene.h | 7 | ||||
| -rw-r--r-- | game/missile/MissilePool.cpp | 2 | ||||
| -rw-r--r-- | game/missile/MissileScript.cpp | 11 | ||||
| -rw-r--r-- | game/missile/MissileSubScene.cpp | 25 | ||||
| -rw-r--r-- | game/missile/SpawnEvent.cpp | 22 | 
13 files changed, 168 insertions, 25 deletions
| 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>(ShutDownEvent{}); +	} +	return false; +} + + + +void QuitScript::init(){ +	subscribe<KeyPressEvent>([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<BehaviorScript>().set_script<TransitionStartSubScript>(); +	camera_object.add_component<BehaviorScript>().set_script<QuitScript>();  	//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 <crepe/api/Transform.h> + +using namespace crepe; + +void AlertScript::fixed_update(crepe::duration_t dt) { +	const auto & cam = this->get_components_by_name<Transform>("camera").front().get(); +	//missile transform +	const auto & this_transform = this->get_component<Transform>(); +	auto missile_transforms = this->get_components_by_name<Transform>("missile"); +	const auto & this_collider = this->get_component<CircleCollider>(); + +	auto alert_sprites = this->get_components_by_name<Sprite>("missile_alert"); +	auto alert_transforms = this->get_components_by_name<Transform>("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<BehaviorScript>().set_script<AlertScript>(); + +	auto & missile_alert_sprite = alert.add_component<Sprite>( +		missile_alert_ss, +		Sprite::Data { +			.sorting_in_layer = SORT_IN_LAY_OBSTACLES, +			.size = {0, 100}, +		} +	); + +	auto & missile_alert_anim = alert.add_component<Animator>( +		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 <crepe/api/Scene.h> @@ -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 <crepe/api/Animator.h>  #include <crepe/api/AudioSource.h> @@ -25,8 +28,9 @@ void MissileScript::init() {  void MissileScript::kill_missile() {  	auto animations = this->get_components<Animator>();  	auto sprites = this->get_components<Sprite>(); +	auto collider = this->get_component<CircleCollider>();  	auto & fly_sound = this->get_components<AudioSource>().front().get(); -	auto & this_script = this->get_components<BehaviorScript>().back().get(); +	auto & this_script = this->get_components<BehaviorScript>().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 <crepe/api/AI.h>  #include <crepe/api/Animator.h> @@ -10,14 +12,10 @@  #include <crepe/api/Scene.h>  #include <crepe/api/Sprite.h>  #include <crepe/types.h> -#include <random>  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<BehaviorScript>().set_script<MissileScript>().active = false; +	missle.add_component<BehaviorScript>().set_script<AlertScript>();  	auto & sound = missle.add_component<AudioSource>(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>(Rigidbody::Data { -		.body_type = Rigidbody::BodyType::KINEMATIC, -		.max_linear_velocity = static_cast<float>(dist(gen)), -		.kinematic_collision = false, -		.collision_layers = {COLL_LAY_PLAYER, COLL_LAY_BOT_TOP}, -		.collision_layer = COLL_LAY_MISSILE, -	}); +	missle +		.add_component<Rigidbody>(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<CircleCollider>(3); +	missle.add_component<CircleCollider>(3).active = false;  	auto & missle_ai = missle.add_component<AI>(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 <crepe/api/Animator.h>  #include <crepe/api/AudioSource.h> @@ -8,7 +11,6 @@  #include <crepe/api/Transform.h>  #include <cstdlib> -#include <random>  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<Sprite>("missile");  	auto missile_transforms = this->get_components_by_name<Transform>("missile"); +	auto alert_sprites = this->get_components_by_name<Sprite>("missile_alert"); +	auto alert_transforms = this->get_components_by_name<Transform>("missile_alert"); +	auto colliders = this->get_components_by_name<CircleCollider>("missile");  	auto missile_behaviorscripts = this->get_components_by_name<BehaviorScript>("missile");  	auto missile_audiosources = this->get_components_by_name<AudioSource>("missile");  	auto & camera_transform = this->get_components_by_name<Transform>("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;  	} |