Drawing

Drawing is handled by the Scar::Objects::Camera class. Each spaces gets a camera by default. On each frame, a space invokes all its cameras' render_view methods. It in return renders all Entities which have a component inheriting from Scar::Components::Drawable (which is essentially a wrapper around SF::Drawable) in the space and calls all systems' and objects' render methods.

You can add multiple cameras to a scene to draw different views.

Drawables

SF::Components::Drawable defines two things: a visible and a sf getter. visible can be used to turn off rendering of this drawable. sf should be a function to return some SF::Drawable. This would be a SF::Sprite, SF::Shape or any other custom subclass of SF::Drawable.

Drawables get drawn without further need of implementing drawing logic. Also an entities' position, scale and rotation are respected when drawing drawables.

Render methods

Systems and Objects contain a #render method. If you want to write custom rendering code, you can do it there.

Drawing Order

Each space and entity has a z attribute. You can set it at initialization or afterwards via the z attribute, though you have to call #reorder_spaces or #reorder_entities on your scene or space to actually update the drawing order.

The scene renders its spaces in increasing z order, and the cameras in the spaces then draw the entities in increasing z order. The systems' render methods get called before the drawable drawing.

Modifying the camera

You can access a spaces' camera by the #camera getter. You can then put the camera into 'advanced' mode by setting cam#simple to false. Now you can alter the SF::View attached to the camera by simply using all the stuff from the SF::View class (more information in the CrSFML documentation), as everything is delegated to it. It gets used for the whole drawing process of the camera.

Camera example

Last updated

Was this helpful?