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

#ifndef __RoomStateUndoStateDelta_H__
#define __RoomStateUndoStateDelta_H__

typedef struct RoomStateUndoStateDelta RoomStateUndoStateDelta;
#define RoomStateUndoStateDelta_superclass UndoStateDelta

#include "utilities/ChunkArray.h"
#include "utilities/UndoStateDelta.h"

#define RoomStateUndoStateDelta_ivars \
	UndoStateDelta_ivars \
	\
	ChunkArray entityChanges;

#define RoomStateUndoStateDelta_vtable(self_type) \
	UndoStateDelta_vtable(self_type)

stemobject_declare(RoomStateUndoStateDelta)

RoomStateUndoStateDelta * RoomStateUndoStateDelta_create(RoomState * roomState, RoomStateUndoData * undoData);
bool RoomStateUndoStateDelta_init(RoomStateUndoStateDelta * self, RoomState * roomState, RoomStateUndoData * undoData);
void RoomStateUndoStateDelta_dispose(RoomStateUndoStateDelta * self);

void RoomStateUndoStateDelta_revert(RoomStateUndoStateDelta * self, void * target);
void RoomStateUndoStateDelta_apply(RoomStateUndoStateDelta * self, void * target);
RoomStateUndoStateDelta * RoomStateUndoStateDelta_copy(RoomStateUndoStateDelta * self);

#endif
