Skip to content

Instantly share code, notes, and snippets.

@yashihei
Last active December 20, 2015 16:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yashihei/ef809b03d8328e7cc4b4 to your computer and use it in GitHub Desktop.
Save yashihei/ef809b03d8328e7cc4b4 to your computer and use it in GitHub Desktop.
class Actor {
public:
Actor() = default;
virtual ~Actor() = default;
virtual void update() = 0;
virtual void draw() = 0;
void kill() { enable = false; }
bool isEnabled() const { return enable; }
private:
bool enable = true;
};
template<typename Type>
class ActorManager {
public:
ActorManager() = default;
virtual ~ActorManager() = default;
void add(std::shared_ptr<Type> actor) {
actors.push_back(actor);
}
void clear() {
actors.clear();
}
int size() {
return actors.size();
}
virtual void update(Game* game) {
for (auto& actor : actors) {
actor->update(game);
}
Erase_if(actors, [](std::shared_ptr<Type> actor) { return !actor->isEnabled(); });
}
virtual void draw(Game* game) {
for (auto& actor : actors) {
actor->draw(game);
}
}
typename std::list<std::shared_ptr<Type>>::const_iterator begin() { return actors.begin(); }
typename std::list<std::shared_ptr<Type>>::const_iterator end() { return actors.end(); }
private:
std::list<std::shared_ptr<Type>> actors;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment