#ifndef block_h #define block_h #include #include typedef enum block_id_struct { block_air = 0, block_dirt = 1, block_grass = 2, block_stone = 3, block_wood = 4, block_type_count } block_id_struct; typedef struct block_render_data_struct { struct Color color; bool is_transparent; struct { uint8_t top; uint8_t bottom; uint8_t front; uint8_t back; uint8_t left; uint8_t right; } texture; } block_render_data_struct; /** * Retrieves the rendering data and metadata for a specific block identifier. * * This function acts as a safe accessor for the global block library. It * performs bounds checking on the provided identifier to ensure it exists * within the library's memory range. If the identifier is invalid or * out of bounds, it returns the data for 'block_air' as a safe default * to prevent segmentation faults or undefined rendering behavior. * * @param id_to_look_up The unique identifier of the block to retrieve. * @return The rendering data structure corresponding to the block identifier. */ block_render_data_struct get_block_data(block_id_struct id_to_look_up); /** * Calculates the texture coordinates (UVs) for a specific face of a block. * This function maps a block's texture index to a 2D position within a 16x16 * texture atlas and handles the V-axis inversion required for OpenGL. */ void get_block_face_texture_coordinates(block_id_struct block_id, int32_t face_direction, float texture_coordinates[4][2]); #endif