From 231d33954dab62e2452eb88e509d2741a8437498 Mon Sep 17 00:00:00 2001 From: Max-001 Date: Wed, 8 Jan 2025 08:57:19 +0100 Subject: Init --- game/workers/CollisionScript.cpp | 62 ++++++++++++++++++++++++++++++++++++++++ game/workers/CollisionScript.h | 12 ++++++++ 2 files changed, 74 insertions(+) create mode 100644 game/workers/CollisionScript.cpp create mode 100644 game/workers/CollisionScript.h (limited to 'game') diff --git a/game/workers/CollisionScript.cpp b/game/workers/CollisionScript.cpp new file mode 100644 index 0000000..9e9b981 --- /dev/null +++ b/game/workers/CollisionScript.cpp @@ -0,0 +1,62 @@ +#include "CollisionScript.h" + +#include +#include +#include + + +using namespace crepe; +using namespace std; + +void CollisionScript::init() { + subscribe([this](const CollisionEvent & ev) -> bool { + return this->on_collision(ev); + }); +} + +bool CollisionScript::on_collision(const CollisionEvent & ev) { + RefVector animators = this->get_components_by_name("player"); + RefVector emitters + = this->get_components_by_name("player"); + + if (ev.info.other.metadata.tag == "zapper") { + for (Animator & anim : animators) { + anim.active = true; + anim.set_anim(4); + anim.data.looping = true; + } + for (ParticleEmitter & emitter : emitters) { + emitter.data.emission_rate = 0; + } + + return true; + } else if (ev.info.other.metadata.tag == "laser") { + for (Animator & anim : animators) { + anim.active = true; + anim.set_anim(4); + anim.data.looping = true; + } + for (ParticleEmitter & emitter : emitters) { + emitter.data.emission_rate = 0; + } + play_scr.active = false; + end_scr.active = true; + + return true; + } else if (ev.info.other.metadata.tag == "missile") { + for (Animator & anim : animators) { + anim.active = true; + anim.set_anim(5); + anim.data.looping = true; + } + for (ParticleEmitter & emitter : emitters) { + emitter.data.emission_rate = 0; + } + play_scr.active = false; + end_scr.active = true; + + return true; + } + + return false; +} diff --git a/game/workers/CollisionScript.h b/game/workers/CollisionScript.h new file mode 100644 index 0000000..70c5fe1 --- /dev/null +++ b/game/workers/CollisionScript.h @@ -0,0 +1,12 @@ +#pragma once + +#include +#include + +class CollisionScript : public crepe::Script { +public: + void init(); + +private: + bool on_collision(const crepe::CollisionEvent & ev); +}; -- cgit v1.2.3