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

#ifndef __GameEntityComponent_H__
#define __GameEntityComponent_H__

typedef struct GameEntityComponent GameEntityComponent;
#define GameEntityComponent_superclass StemObject

#include "stemobject/StemObject.h"

struct GameEntity;

#define GameEntityComponent_ivars \
	StemObject_ivars

#define GameEntityComponent_vtable(self_type) \
	StemObject_vtable(self_type) \
	\
	void (* initCopy)(self_type * self, compat_type(GameEntityComponent *) copy); \
	void (* update)(self_type * self, struct GameEntity * entity);

stemobject_declare(GameEntityComponent)

bool GameEntityComponent_init(GameEntityComponent * self);
void GameEntityComponent_dispose(GameEntityComponent * self);
void GameEntityComponent_initCopy(GameEntityComponent * self, compat_type(GameEntityComponent *) copy);
void GameEntityComponent_update(GameEntityComponent * self, struct GameEntity * entity);

#endif
