From c9ae1941816183553c8c4313eac27cc831cbefba Mon Sep 17 00:00:00 2001 From: nathan Date: Fri, 26 Dec 2025 07:14:54 -0700 Subject: Working on buildings --- src/entity.c | 211 +++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 190 insertions(+), 21 deletions(-) (limited to 'src/entity.c') diff --git a/src/entity.c b/src/entity.c index e25cc90..f6d51bf 100644 --- a/src/entity.c +++ b/src/entity.c @@ -3,27 +3,156 @@ #include "entitiesInclude.h" const EntityEntry entityEntries[ENTITY_COUNT] = { - (EntityEntry){"Old Mint", initOldMint, updateOldMint, NULL, NULL, false, - true}, - (EntityEntry){"Sticky Nickel", initStickyNickel, updateStickyNickel, NULL, - NULL, false, true}, - (EntityEntry){"Tree", initTree, updateTree, NULL, NULL, false, true}, - (EntityEntry){"Bush", initBush, updateBush, NULL, NULL, false, true}, - (EntityEntry){"Flower", initFlower, updateFlower, NULL, NULL, false, true}, - (EntityEntry){"Pond", initPond, updatePond, NULL, NULL, true, true}, - (EntityEntry){"Utility Pole", initUtilityPole, NULL, NULL, NULL, false, - false}, - (EntityEntry){"Samantha", initSamantha, updateSamantha, closeSamantha, - interactWithSamantha, false, true}, - (EntityEntry){"Samantha's Spot", initSamanthasSpot, updateSamanthasSpot, - NULL, NULL, true, false}, - (EntityEntry){"Trashcan", initTrashcan, updateTrashcan, NULL, NULL, false, - true}, - (EntityEntry){"Trash", initTrash, updateTrash, NULL, NULL, false, true}, - (EntityEntry){"Medical Trash", initMedicalTrash, updateMedicalTrash, NULL, - NULL, false, true}, - (EntityEntry){"John", initJohn, updateJohn, NULL, NULL, false, true}, - (EntityEntry){"Ron", initRon, updateRon, NULL, interactWithRon, false, true} + (EntityEntry){ + .name = "Old Mint", + .initCallback = initOldMint, + .updateCallback = updateOldMint, + .closeCallback = NULL, + .interactionCallback = NULL, + .isPlace = false, + .isBuilding = false, + .canBeSelected = true + }, + (EntityEntry){ + .name = "Sticky Nickel", + .initCallback = initStickyNickel, + .updateCallback = updateStickyNickel, + .closeCallback = NULL, + .interactionCallback = NULL, + .isPlace = false, + .isBuilding = false, + .canBeSelected = true + }, + (EntityEntry){ + .name = "Tree", + .initCallback = initTree, + .updateCallback = updateTree, + .closeCallback = NULL, + .interactionCallback = NULL, + .isPlace = false, + .isBuilding = false, + .canBeSelected = true + }, + (EntityEntry){ + .name = "Bush", + .initCallback = initBush, + .updateCallback = updateBush, + .closeCallback = NULL, + .interactionCallback = NULL, + .isPlace = false, + .isBuilding = false, + .canBeSelected = true + }, + (EntityEntry){ + .name = "Flower", + .initCallback = initFlower, + .updateCallback = updateFlower, + .closeCallback = NULL, + .interactionCallback = NULL, + .isPlace = false, + .isBuilding = false, + .canBeSelected = true + }, + (EntityEntry){ + .name = "Pond", + .initCallback = initPond, + .updateCallback = updatePond, + .closeCallback = NULL, + .interactionCallback = NULL, + .isPlace = true, + .isBuilding = false, + .canBeSelected = true + }, + (EntityEntry){ + .name = "Utility Pole", + .initCallback = initUtilityPole, + .updateCallback = NULL, + .closeCallback = NULL, + .interactionCallback = NULL, + .isPlace = false, + .isBuilding = false, + .canBeSelected = false + }, + (EntityEntry){ + .name = "Samantha", + .initCallback = initSamantha, + .updateCallback = updateSamantha, + .closeCallback = closeSamantha, + .interactionCallback = interactWithSamantha, + .isPlace = false, + .isBuilding = false, + .canBeSelected = true + }, + (EntityEntry){ + .name = "Samantha's Spot", + .initCallback = initSamanthasSpot, + .updateCallback = updateSamanthasSpot, + .closeCallback = NULL, + .interactionCallback = NULL, + .isPlace = true, + .isBuilding = false, + .canBeSelected = false + }, + (EntityEntry){ + .name = "Trashcan", + .initCallback = initTrashcan, + .updateCallback = updateTrashcan, + .closeCallback = NULL, + .interactionCallback = NULL, + .isPlace = false, + .isBuilding = false, + .canBeSelected = true + }, + (EntityEntry){ + .name = "Trash", + .initCallback = initTrash, + .updateCallback = updateTrash, + .closeCallback = NULL, + .interactionCallback = NULL, + .isPlace = false, + .isBuilding = false, + .canBeSelected = true + }, + (EntityEntry){ + .name = "Medical Trash", + .initCallback = initMedicalTrash, + .updateCallback = updateMedicalTrash, + .closeCallback = NULL, + .interactionCallback = NULL, + .isPlace = false, + .isBuilding = false, + .canBeSelected = true + }, + (EntityEntry){ + .name = "John", + .initCallback = initJohn, + .updateCallback = updateJohn, + .closeCallback = NULL, + .interactionCallback = NULL, + .isPlace = false, + .isBuilding = false, + .canBeSelected = true + }, + (EntityEntry){ + .name = "John's store", + .initCallback = initJohnsStore, + .updateCallback = updateJohnsStore, + .closeCallback = closeJohnsStore, + .interactionCallback = NULL, + .isPlace = true, + .isBuilding = true, + .canBeSelected = false + }, + (EntityEntry){ + .name = "Ron", + .initCallback = initRon, + .updateCallback = updateRon, + .closeCallback = NULL, + .interactionCallback = interactWithRon, + .isPlace = false, + .isBuilding = false, + .canBeSelected = true + } }; Entity createEntity(EntityId id, Vector3 position) @@ -117,6 +246,16 @@ bool entityIsPlace(EntityId id) return entityEntries[id].isPlace; } +bool entityIsBuilding(EntityId id) +{ + if (id == ENTITY_NONE) + { + return false; + } + + return entityEntries[id].isBuilding; +} + bool entityCanBeSelected(EntityId id) { if (id == ENTITY_NONE) @@ -171,3 +310,33 @@ BoundingBox entityBoxFromScale(float scale, float width, float height) .max = (Vector3){size.x, size.y, size.x} }; } + +EntityBuilding* createEntityBuilding(Image heightmap) +{ + EntityBuilding* entityBuilding = + (EntityBuilding*)FT_MALLOC(sizeof(EntityBuilding)); + + if (entityBuilding == NULL) + { + ALLOCATION_ERROR; + return NULL; + } + + *entityBuilding = (EntityBuilding){ + .model = LoadModelFromMesh(GenMeshCubicmap(heightmap, + ENTITY_BUILDING_CUBE_SIZE)), + .pixelMap = LoadImageColors(heightmap) + }; + + return entityBuilding; +} + +void freeEntityBuilding(EntityBuilding* entityBuilding) +{ + if (entityBuilding != NULL) + { + UnloadModel(entityBuilding->model); + UnloadImageColors(entityBuilding->pixelMap); + FT_FREE(entityBuilding); + } +} -- cgit v1.2.3