#include "pc.h"

#include "constants.h"
#include "goblin.h"
#include "drow.h"
#include "shade.h"
#include "troll.h"
#include "vampire.h"
#include "t_800.h"
#include "assassin.h"
#include "monk.h"
#include "brawler.h"
#include "mr_goose.h"

std::unique_ptr<player_base> init_player(RNG *rng,
                const feature enabled_features, const enum race &r) {
        using std::make_unique;

        switch (r) {
        case GOBLIN:
                return make_unique<goblin>(rng, enabled_features);

        case DROW:
                return make_unique<drow>(rng, enabled_features);

        case SHADE:
                return make_unique<shade>(rng, enabled_features);

        case TROLL:
                return make_unique<troll>(rng, enabled_features);

        case VAMPIRE:
                return make_unique<vampire>(rng, enabled_features);

        case RT_800:
                return make_unique<t_800>(rng, enabled_features);

        case ASSASSIN:
                return make_unique<assassin>(rng, enabled_features);

        case MONK:
                return make_unique<monk>(rng, enabled_features);

        case BRAWLER:
                return make_unique<brawler>(rng, enabled_features);

        case MR_GOOSE:
                return make_unique<mr_goose>(rng, enabled_features);

        default:
                break;
        }

        return nullptr;
}
