fix(ecs): killing an entity twice makes spawnEntity return the same id twice

Aberta Para iniciantes
#479 0 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
2/5
Tempo estimado
1-3 horas
Facilidade para iniciantes
85/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
cpp
Domínio
game-dev

Direção de pesquisa

Leia os dois trechos vinculados em modules/ecs/wasm/Registry.hpp (linhas 142–151 e 172–177) e, em seguida, examine os testes em modules/ecs/test. Verifique como os IDs de entidade são alocados e como as entidades mortas são registradas. Adicione testes para matar a mesma entidade duas vezes e para rejeitar um ID maior ou igual a _next_entity; o objetivo é atingido quando spawns repetidos retornam IDs distintos e mortes inválidas não corrompem a alocação.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

bug modules:ecs
Which package is this bug report for?

ecs

Issue description

kill_entity pushes to _dead_entities with no check. A second kill of the same entity (gameplay, then scene unload or the editor) leaves [e, e], so the next two spawn_entity() calls return the same id and two live entities share components. An id >= _next_entity is accepted too.

Where:

Evidence:

void kill_entity(Entity const &entity)
{
    _dead_entities.push_back(entity);
    for (...) remove_function(*this, entity);
}

Suggested fix: Return early when entity >= _next_entity or the entity is already dead (a std::vector<bool> alive flag makes the check O(1)). Add a double-kill test in modules/ecs/test.

Found during a code audit of main at be72076.

Code sample

No response

Versions
  • Engine main at be72076
  • pnpm 12.0.0, Node.js 26, Bun 1.3.14
Issue priority

High (immediate attention needed)

I have tested this issue on a development release

be72076

Linguagem predominante
TypeScript
Estrelas
7
Forks
2
Merge médio
1d 17h
PRs com merge (30d)
17

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de NanoForge-dev/Engine

Todas as issues de NanoForge-dev/Engine

Issues semelhantes

Mais issues de TypeScript

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.