#pragma once
#include <vector>
#include <algorithm>
#include <string>
bool compareById(const GameObject& a, const GameObject& b) {
return a.id > b.id;
}
class GameDatabase {
private:
int Get_Index(ObjectId id) {
for (unsigned int i = 0; i < db_.size(); i++) {
if (db_[i].id == id)
return i;
}
return -1;
}
std::vector<GameObject> db_;
public:
GameDatabase() = default;
void Insert(ObjectId id, string name, size_t x, size_t y) {
int new_id = Get_Index(id);
if (new_id == -1) {
db_.push_back({ id, name, x, y });
} else {
db_[new_id] = {id, name, x, y};
}
}
void Remove(ObjectId id) {
int new_id = Get_Index(id);
if (new_id != -1)
db_.erase(db_.begin() + new_id);
}
vector<GameObject> DataByName(string name) const {
vector<GameObject> v;
for (auto x : db_)
if (x.name == name)
v.push_back(x);
std::sort(v.begin(), v.end(), compareById);
return v;
}
vector<GameObject> DataByPosition(size_t x, size_t y) const {
vector<GameObject> v;
for (auto i : db_)
if (i.x == x && i.y == y)
v.push_back(i);
std::sort(v.begin(), v.end(), compareById);
return v;
}
vector<GameObject> Data() const {
vector<GameObject> v = db_;
std::sort(v.begin(), v.end(), compareById);
return v;
}
};