Files
Adventura/blockRegistry.hpp
Martin Prokoph 693c389e3f Because of a weird task requirement, folders are not allowed
Who tf came up with this limitation? Seriously...
2025-02-01 19:05:56 +01:00

48 lines
2.1 KiB
C++

#pragma once
#include <vector>
#include <string>
#include "block.hpp"
using std::vector;
using std::string;
class BlockRegistry {
public:
Block AIR = Block(Identifier("adventura", "air"), ' ', BlockSettingsBuilder().nonSolid().build());
Block WATER = Block(Identifier("adventura", "water"), '~', Color::BRIGHT_BLUE, BlockSettingsBuilder().nonSolid().build());
Block PLATFORM = Block(Identifier("adventura", "platform"), '-', BlockSettingsBuilder().build());
Block LADDER = Block(Identifier("adventura", "ladder"), 'H', Color::BRIGHT_MAGENTA, BlockSettingsBuilder().climbableFromBottom().climbableFromTop().build());
Block START = Block(Identifier("adventura", "start"), 'S', BlockSettingsBuilder().nonSolid().build());
Block GOAL = Block(Identifier("adventura", "goal"), 'O', Color::BRIGHT_GREEN, BlockSettingsBuilder().nonSolid().build());
Block WALL = Block(Identifier("adventura", "wall"), '0', BlockSettingsBuilder().collidable().build());
Block SPIKE = Block(Identifier("adventura", "spike"), '^', Color::BRIGHT_RED, BlockSettingsBuilder().lethal().build());
Block BOX = Block(Identifier("adventura", "box"), 'x', Color::BRIGHT_CYAN, BlockSettingsBuilder().pushable().collidable().gravity().build());
Block SAND = Block(Identifier("adventura", "sand"), '*', Color::BRIGHT_YELLOW, BlockSettingsBuilder().brittle().gravity().build());
BlockRegistry() {
registerBlock(AIR);
registerBlock(WATER);
registerBlock(PLATFORM);
registerBlock(LADDER);
registerBlock(START);
registerBlock(GOAL);
registerBlock(WALL);
registerBlock(SPIKE);
registerBlock(BOX);
registerBlock(SAND);
}
const Block getByEncoding(char encoding) {
for (Block block : registeredBlocks) {
if (block.getEncoding() == encoding) return block;
}
return Block(Identifier("decoration", string(1, encoding)), encoding, BlockSettingsBuilder().nonSolid().build()); // Keep other characters as decoration
}
private:
Block registerBlock(Block& block) {
registeredBlocks.push_back(block);
return block;
}
vector<Block> registeredBlocks;
};