// Copyright (c) 2023 Alex Diener. All rights reserved. #ifndef __EntityWallCrawler_H__ #define __EntityWallCrawler_H__ typedef struct EntityWallCrawler EntityWallCrawler; #define EntityWallCrawler_superclass GameEntity #include "PROJECT_NAME/EntityComponent_attack.h" #include "PROJECT_NAME/EntityComponent_collidable.h" #include "PROJECT_NAME/EntityComponent_facing.h" #include "PROJECT_NAME/EntityComponent_movement.h" #include "PROJECT_NAME/EntityComponent_position.h" #include "PROJECT_NAME/EntityComponent_sprite.h" #include "PROJECT_NAME/EntityComponent_facingSteering.h" #include "PROJECT_NAME/GameEntity.h" #define EntityWallCrawler_ivars \ GameEntity_ivars \ \ Vector2i initialPosition; \ FacingDirection initialFacing; \ EntityComponent_position positionComponent; \ EntityComponent_sprite spriteComponent; \ EntityComponent_facing facingComponent; \ EntityComponent_movement movementComponent; \ EntityComponent_facingSteering steeringComponent; \ EntityComponent_collidable collidableComponent; \ EntityComponent_attack attackComponent; #define EntityWallCrawler_vtable(self_type) \ GameEntity_vtable(self_type) stemobject_declare(EntityWallCrawler) EntityWallCrawler * EntityWallCrawler_create(Vector2i position, FacingDirection facing, struct RoomState * roomState); bool EntityWallCrawler_init(EntityWallCrawler * self, Vector2i position, FacingDirection facing, struct RoomState * roomState); EntityWallCrawler * EntityWallCrawler_createWithEncodedState(struct memreadContext * memreadContext, struct RoomState * roomState); void EntityWallCrawler_initWithEncodedState(EntityWallCrawler * self, struct memreadContext * memreadContext, struct RoomState * roomState); EntityWallCrawler * EntityWallCrawler_copy(EntityWallCrawler * self, struct RoomState * roomState); void EntityWallCrawler_initCopy(EntityWallCrawler * self, compat_type(EntityWallCrawler *) original, struct RoomState * roomState); void EntityWallCrawler_dispose(EntityWallCrawler * self); void EntityWallCrawler_postinit(EntityWallCrawler * self); compat_type(GameEntityComponent *) EntityWallCrawler_getComponent(EntityWallCrawler * self, ComponentType type); void EntityWallCrawler_roomEntered(EntityWallCrawler * self); void EntityWallCrawler_advanceTurn(EntityWallCrawler * self); bool EntityWallCrawler_isEqual(EntityWallCrawler * self, EntityWallCrawler * compare); void EntityWallCrawler_enumerateProperties(EntityWallCrawler * self, bool transient, GameEntity_enumeratePropertiesCallback callback, void * context); void EntityWallCrawler_undoActionPerformed(EntityWallCrawler * self); #endif