37 lines
1.1 KiB
C++
37 lines
1.1 KiB
C++
#pragma once
|
|
|
|
#include <cstdint>
|
|
|
|
#include "external/fkyaml_node.hpp"
|
|
#include "game/entities/animation_component.hpp"
|
|
#include "game/entities/entity.hpp"
|
|
|
|
// Polvet transitori: efecte purament visual que viu una animació i
|
|
// s'autoelimina (`markDead`) quan acaba. Spawneja el `GameScene` com a
|
|
// reacció a events `player_jumped` i `player_landed` del bus. Les dues
|
|
// variants (despegue / aterratge) viuen al mateix YAML amb dues
|
|
// animacions distintes (`jump` i `land`); l'instància tria una via
|
|
// `setVariant` just després de construir-se.
|
|
class Dust : public Entity {
|
|
public:
|
|
enum class Variant : std::uint8_t {
|
|
JUMP,
|
|
LAND,
|
|
};
|
|
|
|
explicit Dust(const fkyaml::node& yaml);
|
|
|
|
// Tria quina animació es reproduirà. Cal cridar-lo abans del primer
|
|
// `update`; per defecte la variant és JUMP.
|
|
void setVariant(Variant v);
|
|
|
|
// Tickeja l'animació activa. Quan arriba a `completed()`, marquem
|
|
// l'entitat morta perquè l'`EntityManager` la purgue al final del
|
|
// frame.
|
|
void update(float delta_time) override;
|
|
|
|
private:
|
|
AnimationComponent anim_jump_;
|
|
AnimationComponent anim_land_;
|
|
};
|