Skip to content

Instantly share code, notes, and snippets.

@alecthomas
Last active August 30, 2015 17:15
Show Gist options
  • Save alecthomas/d6240ccfca9ff307970e to your computer and use it in GitHub Desktop.
Save alecthomas/d6240ccfca9ff307970e to your computer and use it in GitHub Desktop.
EntityX sprite movement example
// Compile with: c++ -std=c++11 -lentityx -lsfml-graphics t.cc
#include "SFML/Graphics.hpp"
#include "entityx/entityx.h"
using namespace entityx;
struct Movement : public Component<Movement> {
sf::Vector2f position, direction;
};
struct Sprite : public Component<Sprite> {
sf::Sprite sprite;
};
struct MovementSystem : public System<MovementSystem> {
void update(entityx::EntityManager &es, entityx::EventManager &events,
double dt) override {
ComponentHandle<Movement> movement;
for (Entity entity : es.entities_with_components(movement)) {
movement->position += movement->direction;
}
}
};
struct SpriteSystem : public System<SpriteSystem> {
void update(entityx::EntityManager &es, entityx::EventManager &events,
double dt) override {
ComponentHandle<Movement> movement;
ComponentHandle<Sprite> sprite;
for (Entity entity : es.entities_with_components(movement, sprite)) {
// Move the sprite to its new position.
sprite->sprite.setPosition(movement->position);
// Do any other sprite-related stuff...
}
}
};
struct Level : public EntityX {
Level() {
systems.add<MovementSystem>();
systems.add<SpriteSystem>();
}
void update(double dt) {
systems.update<MovementSystem>(dt);
systems.update<SpriteSystem>(dt);
}
};
int main() {
Level level;
for (int i = 0; i < 100; i++) {
level.update(0.1);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment