Pular para o conteúdo
Baixar

Handles

Ponteiros como Enemy*, devolvidos por spawn, findAt e closest, valem só dentro do passo atual. Se a instância for destruída, o ponteiro guardado passa a apontar para lixo, e usar isso derruba o jogo.

Um handle é uma referência segura: quando a instância some, ele simplesmente fica vazio.

class Turret : public brasa::Entity {
public:
void onSpawn() override {
if (Player* p = closest<Player>()) target_ = p->handle<Player>();
}
void onUpdate() override {
if (Player* p = target_.get()) { // nullptr se o jogador foi destruído
angle = -angleTo(*p);
}
}
private:
brasa::Handle<Player> target_;
};
Função O que faz
Handle<T> handle<T>() const Cria um handle para esta instância.
T* get() const A instância, ou nullptr se ela já foi destruída.
if (handle) O handle vale true enquanto a instância existe.

A câmera usa handles para seguir uma instância: scene().camera.follow(handle());.