#ifndef EFFECT_SYSTEM_H_0B497B39 #define EFFECT_SYSTEM_H_0B497B39 #include "system.h" #include "timer.h" #include "vector.h" class Game; class EffectSystem : public System { public: static constexpr SystemKey Key = SystemKey::Effect; explicit EffectSystem(Game& game) : game_(game) {} void tick(double dt) override; /* Commands */ // Fades the entire screen in or out // - length is in milliseconds // - amount is [0,1] void fadeScreen(int length, double amount); // Fades just the map, leaving the sprites, messages, etc unfaded. // - length is in milliseconds // - amount is [0,1] void fadeMap(int length, double amount); // Shakes the viewport by 1 tile in both directions. // - period is in milliseconds, it's actually a half period void shakeCamera(int period); void stopShakingCamera(); /* Information */ bool isScreenFaded() const { return screenFade_ > 0.0; } double getScreenFadeProgress() const { return screenFade_; } bool isScreenFadeComplete() const { return screenFade_ == screenFadeDest_; } bool isMapFaded() const { return mapFade_ > 0.0; } double getMapFadeProgress() const { return mapFade_; } bool isMapFadeComplete() const { return mapFade_ == mapFadeDest_; } const vec2i& getCameraShakeOffset() const { return cameraShakeOffset_; } bool isCameraShaking() const { return cameraShaking_; } private: Game& game_; double screenFade_ = 0.0; double screenFadeDest_ = 0.0; double screenFadeStart_ = 0.0; double screenFadeLength_ = 0; double screenFadeThus_ = 0; double mapFade_ = 0.0; double mapFadeDest_ = 0.0; double mapFadeStart_ = 0.0; double mapFadeLength_ = 0.0; double mapFadeThus_ = 0.0; bool cameraShaking_ = false; vec2i cameraShakeOffset_ { 0, 0 }; bool cameraShakeOn_ = false; Timer cameraShakeTimer_ { 0 }; }; #endif /* end of include guard: EFFECT_SYSTEM_H_0B497B39 */