Compare commits

..

No commits in common. "3a4671cecc625801bbb7ec53ac5aa0b2521d1709" and "cb68c6c6f446572ec98f8608cd3069f938566835" have entirely different histories.

6 changed files with 16 additions and 88 deletions

View File

@ -528,7 +528,6 @@ static void spawn_crate(Scene_t* scene, unsigned int tile_idx, bool metal, Conta
{ {
LevelSceneData_t* data = &(CONTAINER_OF(scene, LevelScene_t, scene)->data); LevelSceneData_t* data = &(CONTAINER_OF(scene, LevelScene_t, scene)->data);
Entity_t* p_crate = create_crate(&scene->ent_manager, &scene->engine->assets, metal, item); Entity_t* p_crate = create_crate(&scene->ent_manager, &scene->engine->assets, metal, item);
if (p_crate == NULL) return;
CTransform_t* p_ctransform = get_component(p_crate, CTRANSFORM_COMP_T); CTransform_t* p_ctransform = get_component(p_crate, CTRANSFORM_COMP_T);
p_ctransform->position.x = (tile_idx % data->tilemap.width) * TILE_SIZE; p_ctransform->position.x = (tile_idx % data->tilemap.width) * TILE_SIZE;
@ -540,7 +539,6 @@ static void spawn_boulder(Scene_t* scene, unsigned int tile_idx)
{ {
LevelSceneData_t* data = &(CONTAINER_OF(scene, LevelScene_t, scene)->data); LevelSceneData_t* data = &(CONTAINER_OF(scene, LevelScene_t, scene)->data);
Entity_t* p_boulder = create_boulder(&scene->ent_manager, &scene->engine->assets); Entity_t* p_boulder = create_boulder(&scene->ent_manager, &scene->engine->assets);
if (p_boulder == NULL) return;
CTransform_t* p_ctransform = get_component(p_boulder, CTRANSFORM_COMP_T); CTransform_t* p_ctransform = get_component(p_boulder, CTRANSFORM_COMP_T);
p_ctransform->position.x = (tile_idx % data->tilemap.width) * TILE_SIZE; p_ctransform->position.x = (tile_idx % data->tilemap.width) * TILE_SIZE;
@ -718,7 +716,6 @@ static void restart_editor_level(Scene_t* scene)
{ {
tilemap.tiles[i].solid = NOT_SOLID; tilemap.tiles[i].solid = NOT_SOLID;
tilemap.tiles[i].tile_type = EMPTY_TILE; tilemap.tiles[i].tile_type = EMPTY_TILE;
tilemap.tiles[i].rotation = TILE_NOROTATE;
tilemap.tiles[i].moveable = true; tilemap.tiles[i].moveable = true;
tilemap.tiles[i].max_water_level = 4; tilemap.tiles[i].max_water_level = 4;
tilemap.tiles[i].water_level = 0; tilemap.tiles[i].water_level = 0;
@ -863,8 +860,8 @@ void init_sandbox_scene(LevelScene_t* scene)
sc_array_add(&scene->scene.systems, &sprite_animation_system); sc_array_add(&scene->scene.systems, &sprite_animation_system);
sc_array_add(&scene->scene.systems, &camera_update_system); sc_array_add(&scene->scene.systems, &camera_update_system);
sc_array_add(&scene->scene.systems, &player_dir_reset_system); sc_array_add(&scene->scene.systems, &player_dir_reset_system);
sc_array_add(&scene->scene.systems, &update_water_runner_system);
sc_array_add(&scene->scene.systems, &player_respawn_system); sc_array_add(&scene->scene.systems, &player_respawn_system);
sc_array_add(&scene->scene.systems, &update_water_runner_system);
sc_array_add(&scene->scene.systems, &toggle_block_system); sc_array_add(&scene->scene.systems, &toggle_block_system);
// This avoid graphical glitch, not essential // This avoid graphical glitch, not essential

View File

@ -217,7 +217,6 @@ void free_component_to_mempool(ComponentEnum_t comp_type, unsigned long idx)
void print_mempool_stats(char* buffer) void print_mempool_stats(char* buffer)
{ {
buffer += sprintf(buffer, "Entity free: %u\n", ent_mempool.free_list.count);
for (size_t i = 0; i < N_COMPONENTS; ++i) for (size_t i = 0; i < N_COMPONENTS; ++i)
{ {
buffer += sprintf( buffer += sprintf(

View File

@ -15,7 +15,6 @@ typedef enum EntityTag {
bool init_player_creation(const char* info_file, Assets_t* assets); bool init_player_creation(const char* info_file, Assets_t* assets);
Entity_t* create_player(EntityManager_t* ent_manager, Assets_t* assets); Entity_t* create_player(EntityManager_t* ent_manager, Assets_t* assets);
Entity_t* create_dead_player(EntityManager_t* ent_manager, Assets_t* assets);
bool init_item_creation(Assets_t* assets); bool init_item_creation(Assets_t* assets);

View File

@ -199,27 +199,16 @@ static Vector2 shift_bbox(Vector2 bbox, Vector2 new_bbox, AnchorPoint_t anchor)
void player_respawn_system(Scene_t* scene) void player_respawn_system(Scene_t* scene)
{ {
LevelSceneData_t* data = &(CONTAINER_OF(scene, LevelScene_t, scene)->data);
TileGrid_t tilemap = data->tilemap;
Entity_t* p_player; Entity_t* p_player;
// Cannot create player while looping though the players
// So have to create outside of the loop
sc_map_foreach_value(&scene->ent_manager.entities_map[PLAYER_ENT_TAG], p_player) sc_map_foreach_value(&scene->ent_manager.entities_map[PLAYER_ENT_TAG], p_player)
{ {
if (!p_player->m_alive) if (!p_player->m_alive)
{ {
CTransform_t* p_ct = get_component(p_player, CTRANSFORM_COMP_T);
Entity_t* ent = create_dead_player(&scene->ent_manager, &scene->engine->assets);
if (ent != NULL)
{
CTransform_t* new_ct = get_component(ent, CTRANSFORM_COMP_T);
memcpy(&new_ct->position, &p_ct->position, sizeof(p_ct->position));
}
p_player->m_alive = true; p_player->m_alive = true;
memset(&p_ct->position, 0, sizeof(p_ct->position)); CTransform_t* p_ctransform = get_component(p_player, CTRANSFORM_COMP_T);
memset(&p_ct->velocity, 0, sizeof(p_ct->velocity)); memset(&p_ctransform->position, 0, sizeof(p_ctransform->position));
memset(&p_ct->accel, 0, sizeof(p_ct->accel)); memset(&p_ctransform->velocity, 0, sizeof(p_ctransform->velocity));
memset(&p_ctransform->accel, 0, sizeof(p_ctransform->accel));
} }
} }
} }
@ -456,8 +445,6 @@ void player_bbox_update_system(Scene_t* scene)
p_hitbox->boxes[0].height = p_bbox->size.y + 2; p_hitbox->boxes[0].height = p_bbox->size.y + 2;
//p_hitbox->boxes[1].y = p_bbox->size.y / 4; //p_hitbox->boxes[1].y = p_bbox->size.y / 4;
p_hitbox->boxes[1].height = p_bbox->size.y - 1; p_hitbox->boxes[1].height = p_bbox->size.y - 1;
CHurtbox_t* p_hurtbox = get_component(p_player, CHURTBOX_T);
p_hurtbox->size = p_bbox->size;
} }
} }
@ -1029,10 +1016,7 @@ void player_pushing_system(Scene_t* scene)
{ {
CMovementState_t* p_movement = get_component(p_player, CMOVEMENTSTATE_T); CMovementState_t* p_movement = get_component(p_player, CMOVEMENTSTATE_T);
CPlayerState_t* p_pstate = get_component(p_player, CPLAYERSTATE_T); CPlayerState_t* p_pstate = get_component(p_player, CPLAYERSTATE_T);
if ( if (!(p_movement->ground_state & 1) || p_pstate->player_dir.x == 0) continue;
!(p_movement->ground_state & 1 || p_movement->water_state & 1)
|| p_pstate->player_dir.x == 0
) continue;
CTransform_t* p_ctransform = get_component(p_player, CTRANSFORM_COMP_T); CTransform_t* p_ctransform = get_component(p_player, CTRANSFORM_COMP_T);
CBBox_t* p_bbox = get_component(p_player, CBBOX_COMP_T); CBBox_t* p_bbox = get_component(p_player, CBBOX_COMP_T);
@ -1293,16 +1277,7 @@ void state_transition_update_system(Scene_t* scene)
for (unsigned int tile_x = tile_x1; tile_x <= tile_x2; tile_x++) for (unsigned int tile_x = tile_x1; tile_x <= tile_x2; tile_x++)
{ {
unsigned int tile_idx = tile_y * data->tilemap.width + tile_x; unsigned int tile_idx = tile_y * data->tilemap.width + tile_x;
if (data->tilemap.tiles[tile_idx].water_level == 0) continue; in_water |= data->tilemap.tiles[tile_idx].water_level > 0;
uint32_t water_height = data->tilemap.tiles[tile_idx].water_level * WATER_BBOX_STEP;
Vector2 tl = {tile_x * data->tilemap.tile_size, (tile_y + 1) * data->tilemap.tile_size - water_height};
Vector2 overlap;
in_water |= find_AABB_overlap(
p_ctransform->position, p_bbox->size,
tl, (Vector2){data->tilemap.tile_size, water_height}
, &overlap
) > 0;
} }
} }
} }
@ -1479,18 +1454,10 @@ void hitbox_update_system(Scene_t* scene)
} }
if (p_ent->m_tag != PLAYER_ENT_TAG) if (p_ent->m_tag != PLAYER_ENT_TAG)
{
if (p_other_ent->m_tag == PLAYER_ENT_TAG)
{
p_other_ent->m_alive = false;
}
else
{ {
remove_component(p_other_ent, CHURTBOX_T); remove_component(p_other_ent, CHURTBOX_T);
CLifeTimer_t* p_clifetimer = add_component(p_other_ent, CLIFETIMER_T); CLifeTimer_t* p_clifetimer = add_component(p_other_ent, CLIFETIMER_T);
p_clifetimer->life_time = 6; p_clifetimer->life_time = 8;
}
} }
else else
{ {

View File

@ -34,9 +34,8 @@ bool init_item_creation(Assets_t* assets)
Entity_t* create_crate(EntityManager_t* ent_manager, Assets_t* assets, bool metal, ContainerItem_t item) Entity_t* create_crate(EntityManager_t* ent_manager, Assets_t* assets, bool metal, ContainerItem_t item)
{ {
Entity_t* p_crate = add_entity(ent_manager, CRATES_ENT_TAG); Entity_t* p_crate = add_entity(ent_manager, CRATES_ENT_TAG);
if (p_crate == NULL) return NULL;
CBBox_t* p_bbox = add_component(p_crate, CBBOX_COMP_T); CBBox_t* p_bbox = add_component(p_crate, CBBOX_COMP_T);
set_bbox(p_bbox, TILE_SIZE, TILE_SIZE); set_bbox(p_bbox, TILE_SIZE, TILE_SIZE);
p_bbox->solid = true; p_bbox->solid = true;
p_bbox->fragile = !metal; p_bbox->fragile = !metal;
@ -76,9 +75,8 @@ Entity_t* create_crate(EntityManager_t* ent_manager, Assets_t* assets, bool meta
Entity_t* create_boulder(EntityManager_t* ent_manager, Assets_t* assets) Entity_t* create_boulder(EntityManager_t* ent_manager, Assets_t* assets)
{ {
Entity_t* p_boulder = add_entity(ent_manager, BOULDER_ENT_TAG); Entity_t* p_boulder = add_entity(ent_manager, BOULDER_ENT_TAG);
if (p_boulder == NULL) return NULL;
CBBox_t* p_bbox = add_component(p_boulder, CBBOX_COMP_T); CBBox_t* p_bbox = add_component(p_boulder, CBBOX_COMP_T);
set_bbox(p_bbox, TILE_SIZE, TILE_SIZE); set_bbox(p_bbox, TILE_SIZE, TILE_SIZE);
p_bbox->solid = true; p_bbox->solid = true;
p_bbox->fragile = false; p_bbox->fragile = false;
@ -101,8 +99,6 @@ Entity_t* create_boulder(EntityManager_t* ent_manager, Assets_t* assets)
Entity_t* create_arrow(EntityManager_t* ent_manager, Assets_t* assets, uint8_t dir) Entity_t* create_arrow(EntityManager_t* ent_manager, Assets_t* assets, uint8_t dir)
{ {
Entity_t* p_arrow = add_entity(ent_manager, DESTRUCTABLE_ENT_TAG); Entity_t* p_arrow = add_entity(ent_manager, DESTRUCTABLE_ENT_TAG);
if (p_arrow == NULL) return NULL;
add_component(p_arrow, CTILECOORD_COMP_T); add_component(p_arrow, CTILECOORD_COMP_T);
CHitBoxes_t* p_hitbox = add_component(p_arrow, CHITBOXES_T); CHitBoxes_t* p_hitbox = add_component(p_arrow, CHITBOXES_T);
p_hitbox->n_boxes = 1; p_hitbox->n_boxes = 1;
@ -147,8 +143,6 @@ Entity_t* create_arrow(EntityManager_t* ent_manager, Assets_t* assets, uint8_t d
Entity_t* create_bomb(EntityManager_t* ent_manager, Assets_t* assets, Vector2 launch_dir) Entity_t* create_bomb(EntityManager_t* ent_manager, Assets_t* assets, Vector2 launch_dir)
{ {
Entity_t* p_bomb = add_entity(ent_manager, DESTRUCTABLE_ENT_TAG); Entity_t* p_bomb = add_entity(ent_manager, DESTRUCTABLE_ENT_TAG);
if (p_bomb == NULL) return NULL;
add_component(p_bomb, CTILECOORD_COMP_T); add_component(p_bomb, CTILECOORD_COMP_T);
add_component(p_bomb, CMOVEMENTSTATE_T); add_component(p_bomb, CMOVEMENTSTATE_T);
CHitBoxes_t* p_hitbox = add_component(p_bomb, CHITBOXES_T); CHitBoxes_t* p_hitbox = add_component(p_bomb, CHITBOXES_T);
@ -179,8 +173,6 @@ Entity_t* create_bomb(EntityManager_t* ent_manager, Assets_t* assets, Vector2 la
Entity_t* create_explosion(EntityManager_t* ent_manager, Assets_t* assets) Entity_t* create_explosion(EntityManager_t* ent_manager, Assets_t* assets)
{ {
Entity_t* p_explosion = add_entity(ent_manager, DESTRUCTABLE_ENT_TAG); Entity_t* p_explosion = add_entity(ent_manager, DESTRUCTABLE_ENT_TAG);
if (p_explosion == NULL) return NULL;
add_component(p_explosion, CTILECOORD_COMP_T); add_component(p_explosion, CTILECOORD_COMP_T);
CHitBoxes_t* p_hitbox = add_component(p_explosion, CHITBOXES_T); CHitBoxes_t* p_hitbox = add_component(p_explosion, CHITBOXES_T);
p_hitbox->n_boxes = 1; p_hitbox->n_boxes = 1;
@ -190,9 +182,9 @@ Entity_t* create_explosion(EntityManager_t* ent_manager, Assets_t* assets)
CTransform_t* p_ctransform = add_component(p_explosion, CTRANSFORM_COMP_T); CTransform_t* p_ctransform = add_component(p_explosion, CTRANSFORM_COMP_T);
p_ctransform->movement_mode = KINEMATIC_MOVEMENT; p_ctransform->movement_mode = KINEMATIC_MOVEMENT;
p_ctransform->active = true; p_ctransform->active = true;
p_ctransform->position.x -= 16; p_ctransform->position.x -= 24;
p_ctransform->position.y -= 16; p_ctransform->position.y -= 24;
p_hitbox->boxes[0] = (Rectangle){0, 0, TILE_SIZE + 32, TILE_SIZE + 32}; p_hitbox->boxes[0] = (Rectangle){0, 0, TILE_SIZE + 48, TILE_SIZE + 48};
CSprite_t* p_cspr = add_component(p_explosion, CSPRITE_T); CSprite_t* p_cspr = add_component(p_explosion, CSPRITE_T);
p_cspr->sprites = item_sprite_map; p_cspr->sprites = item_sprite_map;

View File

@ -4,7 +4,7 @@
#include <string.h> #include <string.h>
#include "raymath.h" #include "raymath.h"
#define N_PLAYER_SPRITES 9 #define N_PLAYER_SPRITES 8
enum PlayerSpriteEnum enum PlayerSpriteEnum
{ {
SPR_PLAYER_STAND = 0, SPR_PLAYER_STAND = 0,
@ -15,7 +15,6 @@ enum PlayerSpriteEnum
SPR_PLAYER_CROUCH, SPR_PLAYER_CROUCH,
SPR_PLAYER_CRMOVE, SPR_PLAYER_CRMOVE,
SPR_PLAYER_SWIM, SPR_PLAYER_SWIM,
SPR_PLAYER_DEAD,
}; };
static SpriteRenderInfo_t player_sprite_map[N_PLAYER_SPRITES] = {0}; static SpriteRenderInfo_t player_sprite_map[N_PLAYER_SPRITES] = {0};
@ -26,7 +25,6 @@ static unsigned int player_sprite_transition_func(Entity_t* ent)
CMovementState_t* p_move = get_component(ent, CMOVEMENTSTATE_T); CMovementState_t* p_move = get_component(ent, CMOVEMENTSTATE_T);
CSprite_t* p_spr = get_component(ent, CSPRITE_T); CSprite_t* p_spr = get_component(ent, CSPRITE_T);
CPlayerState_t* p_plr = get_component(ent, CPLAYERSTATE_T); CPlayerState_t* p_plr = get_component(ent, CPLAYERSTATE_T);
if (p_ctrans->velocity.x > 0) p_spr->flip_x = true; if (p_ctrans->velocity.x > 0) p_spr->flip_x = true;
else if (p_ctrans->velocity.x < 0) p_spr->flip_x = false; else if (p_ctrans->velocity.x < 0) p_spr->flip_x = false;
@ -58,8 +56,6 @@ static unsigned int player_sprite_transition_func(Entity_t* ent)
Entity_t* create_player(EntityManager_t* ent_manager, Assets_t* assets) Entity_t* create_player(EntityManager_t* ent_manager, Assets_t* assets)
{ {
Entity_t* p_ent = add_entity(ent_manager, PLAYER_ENT_TAG); Entity_t* p_ent = add_entity(ent_manager, PLAYER_ENT_TAG);
if (p_ent == NULL) return NULL;
CBBox_t* p_bbox = add_component(p_ent, CBBOX_COMP_T); CBBox_t* p_bbox = add_component(p_ent, CBBOX_COMP_T);
set_bbox(p_bbox, PLAYER_WIDTH, PLAYER_HEIGHT); set_bbox(p_bbox, PLAYER_WIDTH, PLAYER_HEIGHT);
@ -90,9 +86,6 @@ Entity_t* create_player(EntityManager_t* ent_manager, Assets_t* assets)
.height = p_bbox->size.y - 1, .height = p_bbox->size.y - 1,
}; };
p_hitbox->atk = 2; p_hitbox->atk = 2;
CHurtbox_t* p_hurtbox = add_component(p_ent, CHURTBOX_T);
p_hurtbox->size = p_bbox->size;
CSprite_t* p_cspr = add_component(p_ent, CSPRITE_T); CSprite_t* p_cspr = add_component(p_ent, CSPRITE_T);
p_cspr->sprites = player_sprite_map; p_cspr->sprites = player_sprite_map;
p_cspr->transition_func = &player_sprite_transition_func; p_cspr->transition_func = &player_sprite_transition_func;
@ -100,25 +93,6 @@ Entity_t* create_player(EntityManager_t* ent_manager, Assets_t* assets)
return p_ent; return p_ent;
} }
Entity_t* create_dead_player(EntityManager_t* ent_manager, Assets_t* assets)
{
Entity_t* p_ent = add_entity(ent_manager, NO_ENT_TAG);
if (p_ent == NULL) return NULL;
CTransform_t* p_ct = add_component(p_ent, CTRANSFORM_COMP_T);
p_ct->active = true;
p_ct->shape_factor = (Vector2){1, 1};
p_ct->velocity.y = -450;
CSprite_t* p_cspr = add_component(p_ent, CSPRITE_T);
p_cspr->sprites = player_sprite_map;
p_cspr->current_idx = SPR_PLAYER_DEAD;
add_component(p_ent, CMOVEMENTSTATE_T);
return p_ent;
}
bool init_player_creation(const char* info_file, Assets_t* assets) bool init_player_creation(const char* info_file, Assets_t* assets)
{ {
static bool already_init = false; static bool already_init = false;