diff options
author | Max-001 <maxsmits21@kpnmail.nl> | 2024-12-24 11:36:19 +0100 |
---|---|---|
committer | Max-001 <maxsmits21@kpnmail.nl> | 2024-12-24 11:36:19 +0100 |
commit | 7a6658510ba48c2fbe77e50f36452b0407f7d840 (patch) | |
tree | b62aa81def8d662f2d0c47270bcb597320c83450 /game | |
parent | 8f8d579389303184038addc77c1acffdb2081f91 (diff) |
Implemented particle emmitters
Diffstat (limited to 'game')
-rw-r--r-- | game/player/PlayerScript.cpp | 16 | ||||
-rw-r--r-- | game/player/PlayerSubScene.cpp | 68 |
2 files changed, 84 insertions, 0 deletions
diff --git a/game/player/PlayerScript.cpp b/game/player/PlayerScript.cpp index 874324e..04e7264 100644 --- a/game/player/PlayerScript.cpp +++ b/game/player/PlayerScript.cpp @@ -1,6 +1,7 @@ #include "PlayerScript.h" #include <crepe/api/Animator.h> +#include <crepe/api/ParticleEmitter.h> #include <crepe/api/Rigidbody.h> #include <crepe/api/Transform.h> #include <crepe/types.h> @@ -10,8 +11,14 @@ using namespace std; void PlayerScript::fixed_update(crepe::duration_t dt) { RefVector<Animator> animators = this->get_components_by_name<Animator>("player"); + RefVector<ParticleEmitter> emitters + = this->get_components_by_name<ParticleEmitter>("player"); Transform & transform = this->get_components_by_name<Transform>("player").front(); + for (ParticleEmitter & emitter : emitters) { + emitter.data.boundary.offset = vec2(0, -transform.position.y); + } + Rigidbody & rb = this->get_components_by_name<Rigidbody>("player").front(); if (this->get_key_state(Keycode::SPACE)) { rb.add_force_linear(vec2(0, -10)); @@ -22,6 +29,9 @@ void PlayerScript::fixed_update(crepe::duration_t dt) { anim.data.looping = true; prev_anim = 1; } + for (ParticleEmitter & emitter : emitters) { + emitter.data.emission_rate = 30; + } } } else if (transform.position.y == 195) { if (prev_anim != 0) { @@ -31,6 +41,9 @@ void PlayerScript::fixed_update(crepe::duration_t dt) { anim.data.looping = true; prev_anim = 0; } + for (ParticleEmitter & emitter : emitters) { + emitter.data.emission_rate = 0; + } } } else { if (prev_anim != 2) { @@ -39,6 +52,9 @@ void PlayerScript::fixed_update(crepe::duration_t dt) { anim.data.looping = false; prev_anim = 2; } + for (ParticleEmitter & emitter : emitters) { + emitter.data.emission_rate = 0; + } } } } diff --git a/game/player/PlayerSubScene.cpp b/game/player/PlayerSubScene.cpp index 2e73546..166d54b 100644 --- a/game/player/PlayerSubScene.cpp +++ b/game/player/PlayerSubScene.cpp @@ -3,6 +3,7 @@ #include "../Config.h" #include "api/BoxCollider.h" +#include "api/ParticleEmitter.h" #include "types.h" #include <crepe/api/Animator.h> @@ -17,6 +18,73 @@ using namespace std; PlayerSubScene::PlayerSubScene(Scene & scn) { GameObject player = scn.new_object("player", "player", vec2(-100, 200)); + + Asset player_bullet {"asset/other_effects/effect_smgbullet.png"}; + Sprite & player_bullet_sprite = player.add_component<Sprite>( + player_bullet, + Sprite::Data { + .sorting_in_layer = SORT_IN_LAY_PLAYER, + .order_in_layer = 3, + .size = vec2(0, 6), + } + ); + player.add_component<ParticleEmitter>(player_bullet_sprite, ParticleEmitter::Data{ + .offset = vec2(-15, 15), + .emission_rate = 0, + .min_speed = 300, + .max_speed = 500, + .min_angle = 85, + .max_angle = 100, + .boundary = ParticleEmitter::Boundary { + .height = 400, + .reset_on_exit = true, + }, + }); + Asset player_bullet_x2 {"asset/other_effects/effect_smgbullet_x2.png"}; + Sprite & player_bullet_x2_sprite = player.add_component<Sprite>( + player_bullet_x2, + Sprite::Data { + .sorting_in_layer = SORT_IN_LAY_PLAYER, + .order_in_layer = 3, + .size = vec2(0, 12), + } + ); + player.add_component<ParticleEmitter>(player_bullet_x2_sprite, ParticleEmitter::Data{ + .offset = vec2(-15, 15), + .emission_rate = 0, + .min_speed = 300, + .max_speed = 500, + .min_angle = 85, + .max_angle = 100, + .boundary = ParticleEmitter::Boundary { + .height = 400, + .reset_on_exit = true, + }, + }); + Asset player_shell {"asset/other_effects/effect_rocketmgshell_TVOS.png"}; + Sprite & player_shell_sprite = player.add_component<Sprite>( + player_shell, + Sprite::Data { + .sorting_in_layer = SORT_IN_LAY_PLAYER, + .order_in_layer = 3, + .size = vec2(0, 12), + .angle_offset = 90, + } + ); + player.add_component<ParticleEmitter>(player_shell_sprite, ParticleEmitter::Data{ + .offset = vec2(-15, 15), + .emission_rate = 0, + .min_speed = 200, + .max_speed = 500, + .min_angle = 110, + .max_angle = 120, + .force_over_time = vec2(0, 1000), + .boundary = ParticleEmitter::Boundary { + .height = 400, + .reset_on_exit = true, + }, + }); + Asset player_body_asset {"asset/barry/defaultBody.png"}; Sprite & player_body_sprite = player.add_component<Sprite>( player_body_asset, |