// Copyright (c) 2023 Alex Diener. All rights reserved.

#ifndef __VisualEffect_H__
#define __VisualEffect_H__

typedef struct VisualEffect VisualEffect;
#define VisualEffect_superclass StemObject

#include "renderer/RenderableIO.h"
#include "renderer/VertexIO.h"
#include "stemobject/StemObject.h"

#define VisualEffect_ivars \
	StemObject_ivars

#define VisualEffect_vtable(self_type) \
	StemObject_vtable(self_type) \
	\
	void (* update)(self_type * self, double deltaTime); \
	bool (* isFinished)(self_type * self); \
	void (* listRenderables)(self_type * self, RenderableIO * renderableIO, int drawOrderOffset, Rect4i clipBounds); \
	void (* writeVertices)(self_type * self, Vector2f offset, VertexIO * vertexIO);

stemobject_declare(VisualEffect)

bool VisualEffect_init(VisualEffect * self);
void VisualEffect_dispose(VisualEffect * self);

void VisualEffect_update(VisualEffect * self, double deltaTime);
bool VisualEffect_isFinished(VisualEffect * self);
void VisualEffect_listRenderables(VisualEffect * self, RenderableIO * renderableIO, int drawOrderOffset, Rect4i clipBounds);
void VisualEffect_writeVertices(VisualEffect * self, Vector2f offset, VertexIO * vertexIO);

#endif
