41 lines
2.6 KiB
C
41 lines
2.6 KiB
C
|
|
#pragma once
|
|||
|
|
// -----------------------------------------------------------------------------
|
|||
|
|
// Единственное место, где строковый id движка превращается в вид игры.
|
|||
|
|
//
|
|||
|
|
// Движок (и редактор вместе с ним) знает про сущности только то, что написано
|
|||
|
|
// в assets/catalog/entities.txt: id, цвет, радиус, спрайт. Что такое SHAMBLER
|
|||
|
|
// и чем он бьёт — знание игры, и оно живёт в sim/target.cpp. Таблица ниже
|
|||
|
|
// связывает одно с другим, и других таких таблиц в проекте быть не должно:
|
|||
|
|
// как только их станет две, они разойдутся.
|
|||
|
|
//
|
|||
|
|
// Новая тварь — это строка в каталоге, запись в EnemyDefOf и строка здесь.
|
|||
|
|
// Ни редактор, ни формат комнат при этом не меняются вообще.
|
|||
|
|
// -----------------------------------------------------------------------------
|
|||
|
|
#include <string>
|
|||
|
|
#include <vector>
|
|||
|
|
|
|||
|
|
#include "ecs/ecs.h"
|
|||
|
|
#include "engine/level_gen.h"
|
|||
|
|
#include "sim/items.h"
|
|||
|
|
#include "sim/target.h"
|
|||
|
|
#include "engine/tilemap.h"
|
|||
|
|
|
|||
|
|
// false — такого id в игре нет. Это не авария: комната могла ссылаться на
|
|||
|
|
// сущность, которую из игры убрали, и уровень обязан собраться без неё.
|
|||
|
|
bool EnemyKindOfId(const std::string& id, EnemyKind& out);
|
|||
|
|
bool ItemIdOfId(const std::string& id, ItemId& out);
|
|||
|
|
|
|||
|
|
// Обратный перевод — для отчётов, dev-вывода и записи профиля.
|
|||
|
|
const char* IdOfEnemyKind(EnemyKind kind);
|
|||
|
|
// "-" для ItemId::NONE и для предмета, которого нет в каталоге: пустая ячейка
|
|||
|
|
// в файле профиля обязана быть видимой, а не отсутствующей.
|
|||
|
|
const char* IdOfItem(ItemId item);
|
|||
|
|
|
|||
|
|
// Выкатить в мир то, что нагенерил движок. Возвращает, сколько сущностей
|
|||
|
|
// реально встало; unknown (если передан) — сколько id не опознано.
|
|||
|
|
int SpawnFromLevel(ecs::World& world, const std::vector<LevelSpawn>& list, const Tilemap& map,
|
|||
|
|
int* unknown = nullptr);
|
|||
|
|
|
|||
|
|
// То же для лежащих предметов.
|
|||
|
|
int SpawnLootFromLevel(ecs::World& world, const std::vector<LevelSpawn>& list, int* unknown = nullptr);
|