#pragma once #include "StarMixer.hpp" #include "StarEntityRenderingTypes.hpp" #include "StarParticle.hpp" #include "StarDrawable.hpp" #include "StarLightSource.hpp" #include "StarGameTypes.hpp" namespace Star { STAR_CLASS(RenderCallback); // Callback interface for entities to produce light sources, particles, // drawables, and sounds on render. Everything added is expected to already be // translated into world space. class RenderCallback { public: virtual ~RenderCallback(); virtual void addDrawable(Drawable drawable, EntityRenderLayer renderLayer) = 0; virtual void addLightSource(LightSource lightSource) = 0; virtual void addParticle(Particle particle) = 0; virtual void addAudio(AudioInstancePtr audio) = 0; virtual void addTilePreview(PreviewTile preview) = 0; virtual void addOverheadBar(OverheadBar bar) = 0; // Convenience non-virtuals void addDrawables(List drawables, EntityRenderLayer renderLayer, Vec2F translate = Vec2F()); void addLightSources(List lightSources, Vec2F translate = Vec2F()); void addParticles(List particles, Vec2F translate = Vec2F()); void addAudios(List audios, Vec2F translate = Vec2F()); void addTilePreviews(List previews); void addOverheadBars(List bars, Vec2F translate = Vec2F()); }; }