Entity system and rendering types
Posted
by
Papi75
on Game Development
See other posts from Game Development
or by Papi75
Published on 2013-10-17T20:43:49Z
Indexed on
2013/10/17
22:22 UTC
Read the original article
Hit count: 375
I would like to implement entity system in my game and I've got some question about entity system and rendering.
Currently, my renderer got two types of elements:
Current design
- Mesh : A default renderable with a Material, a Geometry and a Transformable
- Sprite : A type of mesh with some methods like "flip" and "setRect" methods and a rect member (With an imposed geometry, a quad)
This objects inherit from "Spacial" class.
Questions:
- How can I handle this two types in an entity system?
- I'm thinking about using "MeshComponent" and "SpriteComponent", but if I do that, an entity could have a Mesh and a Sprite at the same type, it's look stupid, right?
I thought the idea to have a parent "rendering" component : "RenderableComponent" for "MeshComponent" and "SpriteComponent" but it will be difficult to handle "cast" in the game (ex: did I need to ask entity->getComponent or SpineComponent, …)
Thanks a lot for reading me!
My entity system work like that:
---------------------------------------------------------------------------
Entity* entity = world->createEntity();
MeshComponent* mesh = entity->addComponent<MeshComponent>(material);
mesh->loadFromFile("monkey.obj");
PhysicComponent* physic = entity->addComponent<PhysicComponent>();
physic->setMass(5.4f);
physic->setVelocity( 0.5f, 2.f );
---------------------------------------------------------------------------
class RenderingSystem
{
private:
Scene scene;
public:
void onEntityAdded( Entity* entity )
{
scene.addMesh( entity->getComponent<MeshComponent>() );
}
}
class PhysicSystem
{
private:
World world;
public:
void onEntityAdded( Entity* entity )
{
world.addBody( entity->getComponent<PhysicComponent>()->getBody() );
}
void process( Entity* entity )
{
PhysicComponent* physic = entity->getComponent<PhysicComponent>();
}
}
---------------------------------------------------------------------------
© Game Development or respective owner