parent
d3db15a018
commit
3520715655
|
@ -14,6 +14,7 @@ enum ComponentEnum {
|
||||||
CWATERRUNNER_T,
|
CWATERRUNNER_T,
|
||||||
CAIRTIMER_T,
|
CAIRTIMER_T,
|
||||||
CEMITTER_T,
|
CEMITTER_T,
|
||||||
|
CSQUISHABLE_T
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct _CMovementState_t {
|
typedef struct _CMovementState_t {
|
||||||
|
@ -171,3 +172,7 @@ typedef struct _CEmitter_t
|
||||||
EmitterHandle handle;
|
EmitterHandle handle;
|
||||||
Vector2 offset;
|
Vector2 offset;
|
||||||
} CEmitter_t;
|
} CEmitter_t;
|
||||||
|
|
||||||
|
typedef struct _CSquishable_t {
|
||||||
|
bool active; //< Dummy variable
|
||||||
|
} CSquishable_t;
|
||||||
|
|
|
@ -15,6 +15,7 @@ DEFINE_COMP_MEMPOOL_BUF(CLifeTimer_t, MAX_COMP_POOL_SIZE)
|
||||||
DEFINE_COMP_MEMPOOL_BUF(CWaterRunner_t, 32)
|
DEFINE_COMP_MEMPOOL_BUF(CWaterRunner_t, 32)
|
||||||
DEFINE_COMP_MEMPOOL_BUF(CAirTimer_t, 8)
|
DEFINE_COMP_MEMPOOL_BUF(CAirTimer_t, 8)
|
||||||
DEFINE_COMP_MEMPOOL_BUF(CEmitter_t, 32)
|
DEFINE_COMP_MEMPOOL_BUF(CEmitter_t, 32)
|
||||||
|
DEFINE_COMP_MEMPOOL_BUF(CSquishable_t, MAX_COMP_POOL_SIZE)
|
||||||
|
|
||||||
// Component mempools are added in the order of the component enums
|
// Component mempools are added in the order of the component enums
|
||||||
BEGIN_DEFINE_COMP_MEMPOOL
|
BEGIN_DEFINE_COMP_MEMPOOL
|
||||||
|
@ -30,4 +31,5 @@ BEGIN_DEFINE_COMP_MEMPOOL
|
||||||
ADD_COMP_MEMPOOL(CWaterRunner_t)
|
ADD_COMP_MEMPOOL(CWaterRunner_t)
|
||||||
ADD_COMP_MEMPOOL(CAirTimer_t)
|
ADD_COMP_MEMPOOL(CAirTimer_t)
|
||||||
ADD_COMP_MEMPOOL(CEmitter_t)
|
ADD_COMP_MEMPOOL(CEmitter_t)
|
||||||
|
ADD_COMP_MEMPOOL(CSquishable_t)
|
||||||
END_DEFINE_COMP_MEMPOOL
|
END_DEFINE_COMP_MEMPOOL
|
||||||
|
|
|
@ -583,13 +583,16 @@ void player_crushing_system(Scene_t* scene)
|
||||||
{
|
{
|
||||||
LevelSceneData_t* data = &(CONTAINER_OF(scene, LevelScene_t, scene)->data);
|
LevelSceneData_t* data = &(CONTAINER_OF(scene, LevelScene_t, scene)->data);
|
||||||
|
|
||||||
Entity_t* p_player;
|
//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)
|
CSquishable_t* p_squish;
|
||||||
|
unsigned int ent_idx;
|
||||||
|
sc_map_foreach(&scene->ent_manager.component_map[CSQUISHABLE_T], ent_idx, p_squish)
|
||||||
{
|
{
|
||||||
CBBox_t* p_bbox = get_component(p_player, CBBOX_COMP_T);
|
Entity_t* p_ent = get_entity(&scene->ent_manager, ent_idx);
|
||||||
|
CBBox_t* p_bbox = get_component(p_ent, CBBOX_COMP_T);
|
||||||
|
|
||||||
uint8_t edges = check_bbox_edges(
|
uint8_t edges = check_bbox_edges(
|
||||||
&data->tilemap, p_player,
|
&data->tilemap, p_ent,
|
||||||
p_bbox->size, true
|
p_bbox->size, true
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -601,14 +604,14 @@ void player_crushing_system(Scene_t* scene)
|
||||||
uint8_t collide = 0;
|
uint8_t collide = 0;
|
||||||
CollideEntity_t ent =
|
CollideEntity_t ent =
|
||||||
{
|
{
|
||||||
.p_ent = p_player,
|
.p_ent = p_ent,
|
||||||
.bbox = (Rectangle){p_player->position.x, p_player->position.y, p_bbox->size.x, 1},
|
.bbox = (Rectangle){p_ent->position.x, p_ent->position.y, p_bbox->size.x, 1},
|
||||||
.prev_bbox = (Rectangle){p_player->position.x, p_player->position.y, p_bbox->size.x, p_bbox->size.y},
|
.prev_bbox = (Rectangle){p_ent->position.x, p_ent->position.y, p_bbox->size.x, p_bbox->size.y},
|
||||||
.area = (TileArea_t){
|
.area = (TileArea_t){
|
||||||
.tile_x1 = (p_player->position.x) / TILE_SIZE,
|
.tile_x1 = (p_ent->position.x) / TILE_SIZE,
|
||||||
.tile_y1 = (p_player->position.y) / TILE_SIZE,
|
.tile_y1 = (p_ent->position.y) / TILE_SIZE,
|
||||||
.tile_x2 = (p_player->position.x + p_bbox->size.x - 1) / TILE_SIZE,
|
.tile_x2 = (p_ent->position.x + p_bbox->size.x - 1) / TILE_SIZE,
|
||||||
.tile_y2 = (p_player->position.y + p_bbox->size.y - 1) / TILE_SIZE,
|
.tile_y2 = (p_ent->position.y + p_bbox->size.y - 1) / TILE_SIZE,
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -619,7 +622,7 @@ void player_crushing_system(Scene_t* scene)
|
||||||
collide |= 1 << 1;
|
collide |= 1 << 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ent.bbox.y = p_player->position.y + p_bbox->size.y;
|
ent.bbox.y = p_ent->position.y + p_bbox->size.y;
|
||||||
collide_type = check_collision_line(&ent, &data->tilemap, true);
|
collide_type = check_collision_line(&ent, &data->tilemap, true);
|
||||||
if (collide_type == 1)
|
if (collide_type == 1)
|
||||||
{
|
{
|
||||||
|
@ -628,7 +631,14 @@ void player_crushing_system(Scene_t* scene)
|
||||||
|
|
||||||
if (collide != 0)
|
if (collide != 0)
|
||||||
{
|
{
|
||||||
p_player->m_alive = false;
|
if (p_ent->m_tag == PLAYER_ENT_TAG)
|
||||||
|
{
|
||||||
|
p_ent->m_alive = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
destroy_entity(scene, &data->tilemap, p_ent);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -638,14 +648,14 @@ void player_crushing_system(Scene_t* scene)
|
||||||
uint8_t collide = 0;
|
uint8_t collide = 0;
|
||||||
CollideEntity_t ent =
|
CollideEntity_t ent =
|
||||||
{
|
{
|
||||||
.p_ent = p_player,
|
.p_ent = p_ent,
|
||||||
.bbox = (Rectangle){p_player->position.x, p_player->position.y, 1, p_bbox->size.y},
|
.bbox = (Rectangle){p_ent->position.x, p_ent->position.y, 1, p_bbox->size.y},
|
||||||
.prev_bbox = (Rectangle){p_player->position.x, p_player->position.y, p_bbox->size.x, p_bbox->size.y},
|
.prev_bbox = (Rectangle){p_ent->position.x, p_ent->position.y, p_bbox->size.x, p_bbox->size.y},
|
||||||
.area = (TileArea_t){
|
.area = (TileArea_t){
|
||||||
.tile_x1 = (p_player->position.x) / TILE_SIZE,
|
.tile_x1 = (p_ent->position.x) / TILE_SIZE,
|
||||||
.tile_y1 = (p_player->position.y) / TILE_SIZE,
|
.tile_y1 = (p_ent->position.y) / TILE_SIZE,
|
||||||
.tile_x2 = (p_player->position.x + p_bbox->size.x - 1) / TILE_SIZE,
|
.tile_x2 = (p_ent->position.x + p_bbox->size.x - 1) / TILE_SIZE,
|
||||||
.tile_y2 = (p_player->position.y + p_bbox->size.y - 1) / TILE_SIZE,
|
.tile_y2 = (p_ent->position.y + p_bbox->size.y - 1) / TILE_SIZE,
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -657,7 +667,7 @@ void player_crushing_system(Scene_t* scene)
|
||||||
}
|
}
|
||||||
|
|
||||||
//Right
|
//Right
|
||||||
ent.bbox.x = p_player->position.x + p_bbox->size.x; // 2 to account for the previous subtraction
|
ent.bbox.x = p_ent->position.x + p_bbox->size.x; // 2 to account for the previous subtraction
|
||||||
collide_type = check_collision_line(&ent, &data->tilemap, false);
|
collide_type = check_collision_line(&ent, &data->tilemap, false);
|
||||||
if (collide_type == 1)
|
if (collide_type == 1)
|
||||||
{
|
{
|
||||||
|
@ -666,7 +676,14 @@ void player_crushing_system(Scene_t* scene)
|
||||||
|
|
||||||
if (collide != 0)
|
if (collide != 0)
|
||||||
{
|
{
|
||||||
p_player->m_alive = false;
|
if (p_ent->m_tag == PLAYER_ENT_TAG)
|
||||||
|
{
|
||||||
|
p_ent->m_alive = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
destroy_entity(scene, &data->tilemap, p_ent);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -268,12 +268,13 @@ Entity_t* create_urchin(EntityManager_t* ent_manager)
|
||||||
CHitBoxes_t* p_hitbox = add_component(p_urchin, CHITBOXES_T);
|
CHitBoxes_t* p_hitbox = add_component(p_urchin, CHITBOXES_T);
|
||||||
p_hitbox->n_boxes = 1;
|
p_hitbox->n_boxes = 1;
|
||||||
p_hitbox->boxes[0] = (Rectangle){3, 3, 26, 26};
|
p_hitbox->boxes[0] = (Rectangle){3, 3, 26, 26};
|
||||||
p_hitbox->atk = 1;
|
p_hitbox->atk = 2;
|
||||||
|
|
||||||
CSprite_t* p_cspr = add_component(p_urchin, CSPRITE_T);
|
CSprite_t* p_cspr = add_component(p_urchin, CSPRITE_T);
|
||||||
p_cspr->sprites = item_sprite_map;
|
p_cspr->sprites = item_sprite_map;
|
||||||
p_cspr->current_idx = 21;
|
p_cspr->current_idx = 21;
|
||||||
|
|
||||||
|
add_component(p_urchin, CSQUISHABLE_T);
|
||||||
|
|
||||||
return p_urchin;
|
return p_urchin;
|
||||||
}
|
}
|
||||||
|
|
|
@ -115,6 +115,8 @@ Entity_t* create_player(EntityManager_t* ent_manager)
|
||||||
CEmitter_t* p_emitter = add_component(p_ent, CEMITTER_T);
|
CEmitter_t* p_emitter = add_component(p_ent, CEMITTER_T);
|
||||||
p_emitter->offset = (Vector2){7,0};
|
p_emitter->offset = (Vector2){7,0};
|
||||||
|
|
||||||
|
add_component(p_ent, CSQUISHABLE_T);
|
||||||
|
|
||||||
return p_ent;
|
return p_ent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue