aboutsummaryrefslogtreecommitdiffstats
path: root/src/entity.c
diff options
context:
space:
mode:
authornathan <nathansmith@disroot.org>2025-12-26 14:14:54 +0000
committernathan <nathansmith@disroot.org>2025-12-26 14:14:54 +0000
commitc9ae1941816183553c8c4313eac27cc831cbefba (patch)
tree053ab2ca0819f3c9021574bcce9a24fc69cadc95 /src/entity.c
parenta5443e22bfce9ac00fdc6e746e17eb4aa68565f2 (diff)
downloadFindThings-c9ae1941816183553c8c4313eac27cc831cbefba.tar.gz
FindThings-c9ae1941816183553c8c4313eac27cc831cbefba.tar.bz2
FindThings-c9ae1941816183553c8c4313eac27cc831cbefba.zip
Working on buildings
Diffstat (limited to 'src/entity.c')
-rw-r--r--src/entity.c211
1 files changed, 190 insertions, 21 deletions
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);
+ }
+}