Compare commits
5 Commits
e1afdf696a
...
bda335fd6a
Author | SHA1 | Date |
---|---|---|
|
bda335fd6a | |
|
e7c6f9929b | |
|
b980f16def | |
|
6d97272420 | |
|
cd8ec0c7ed |
|
@ -38,6 +38,8 @@
|
||||||
#define GROUND_X_FRICTION 5.8
|
#define GROUND_X_FRICTION 5.8
|
||||||
#define GROUND_Y_FRICTION 1.0
|
#define GROUND_Y_FRICTION 1.0
|
||||||
|
|
||||||
|
#define ARROW_SPEED 350
|
||||||
|
|
||||||
#define MAX_WATER_LEVEL 4
|
#define MAX_WATER_LEVEL 4
|
||||||
#define WATER_BBOX_STEP (TILE_SIZE / MAX_WATER_LEVEL)
|
#define WATER_BBOX_STEP (TILE_SIZE / MAX_WATER_LEVEL)
|
||||||
|
|
||||||
|
|
|
@ -4,12 +4,15 @@
|
||||||
void remove_entity_from_tilemap(EntityManager_t *p_manager, TileGrid_t* tilemap, Entity_t* p_ent)
|
void remove_entity_from_tilemap(EntityManager_t *p_manager, TileGrid_t* tilemap, Entity_t* p_ent)
|
||||||
{
|
{
|
||||||
CTileCoord_t* p_tilecoord = get_component(p_ent, CTILECOORD_COMP_T);
|
CTileCoord_t* p_tilecoord = get_component(p_ent, CTILECOORD_COMP_T);
|
||||||
for (size_t i = 0;i < p_tilecoord->n_tiles; ++i)
|
if (p_tilecoord != NULL)
|
||||||
{
|
{
|
||||||
// Use previously store tile position
|
for (size_t i = 0;i < p_tilecoord->n_tiles; ++i)
|
||||||
// Clear from those positions
|
{
|
||||||
unsigned int tile_idx = p_tilecoord->tiles[i];
|
// Use previously store tile position
|
||||||
sc_map_del_64v(&(tilemap->tiles[tile_idx].entities_set), p_ent->m_id);
|
// Clear from those positions
|
||||||
|
unsigned int tile_idx = p_tilecoord->tiles[i];
|
||||||
|
sc_map_del_64v(&(tilemap->tiles[tile_idx].entities_set), p_ent->m_id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
remove_entity(p_manager, p_ent->m_id);
|
remove_entity(p_manager, p_ent->m_id);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1305,6 +1305,7 @@ void update_tilemap_system(Scene_t* scene)
|
||||||
sc_map_foreach(&scene->ent_manager.component_map[CTILECOORD_COMP_T], ent_idx, p_tilecoord)
|
sc_map_foreach(&scene->ent_manager.component_map[CTILECOORD_COMP_T], ent_idx, p_tilecoord)
|
||||||
{
|
{
|
||||||
Entity_t* p_ent = get_entity(&scene->ent_manager, ent_idx);
|
Entity_t* p_ent = get_entity(&scene->ent_manager, ent_idx);
|
||||||
|
if (!p_ent->m_alive) continue;
|
||||||
CTransform_t* p_ctransform = get_component(p_ent, CTRANSFORM_COMP_T);
|
CTransform_t* p_ctransform = get_component(p_ent, CTRANSFORM_COMP_T);
|
||||||
if (p_ctransform == NULL) continue;
|
if (p_ctransform == NULL) continue;
|
||||||
CBBox_t* p_bbox = get_component(p_ent, CBBOX_COMP_T);
|
CBBox_t* p_bbox = get_component(p_ent, CBBOX_COMP_T);
|
||||||
|
@ -1330,6 +1331,8 @@ void update_tilemap_system(Scene_t* scene)
|
||||||
tile_x2 = (p_ctransform->position.x + p_bbox->size.x - 1) / TILE_SIZE;
|
tile_x2 = (p_ctransform->position.x + p_bbox->size.x - 1) / TILE_SIZE;
|
||||||
tile_y2 = (p_ctransform->position.y + p_bbox->size.y - 1) / TILE_SIZE;
|
tile_y2 = (p_ctransform->position.y + p_bbox->size.y - 1) / TILE_SIZE;
|
||||||
}
|
}
|
||||||
|
tile_x2 = (tile_x2 >= tilemap.width) ? tilemap.width - 1 : tile_x2;
|
||||||
|
tile_y2 = (tile_y2 >= tilemap.height) ? tilemap.width - 1 : tile_y2;
|
||||||
|
|
||||||
for (unsigned int tile_y = tile_y1; tile_y <= tile_y2; tile_y++)
|
for (unsigned int tile_y = tile_y1; tile_y <= tile_y2; tile_y++)
|
||||||
{
|
{
|
||||||
|
@ -1371,6 +1374,8 @@ void hitbox_update_system(Scene_t* scene)
|
||||||
unsigned int tile_y1 = (hitbox_pos.y) / TILE_SIZE;
|
unsigned int tile_y1 = (hitbox_pos.y) / TILE_SIZE;
|
||||||
unsigned int tile_x2 = (hitbox_pos.x + p_hitbox->boxes[i].width - 1) / TILE_SIZE;
|
unsigned int tile_x2 = (hitbox_pos.x + p_hitbox->boxes[i].width - 1) / TILE_SIZE;
|
||||||
unsigned int tile_y2 = (hitbox_pos.y + p_hitbox->boxes[i].height - 1) / TILE_SIZE;
|
unsigned int tile_y2 = (hitbox_pos.y + p_hitbox->boxes[i].height - 1) / TILE_SIZE;
|
||||||
|
tile_x2 = (tile_x2 >= tilemap.width) ? tilemap.width - 1 : tile_x2;
|
||||||
|
tile_y2 = (tile_y2 >= tilemap.height) ? tilemap.width - 1 : tile_y2;
|
||||||
|
|
||||||
for (unsigned int tile_y = tile_y1; tile_y <= tile_y2; tile_y++)
|
for (unsigned int tile_y = tile_y1; tile_y <= tile_y2; tile_y++)
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,14 +2,29 @@
|
||||||
#include "constants.h"
|
#include "constants.h"
|
||||||
#include "raymath.h"
|
#include "raymath.h"
|
||||||
|
|
||||||
static SpriteRenderInfo_t item_sprite_map[3] = {0};
|
static SpriteRenderInfo_t item_sprite_map[17] = {0};
|
||||||
|
|
||||||
bool init_item_creation(Assets_t* assets)
|
bool init_item_creation(Assets_t* assets)
|
||||||
{
|
{
|
||||||
item_sprite_map[0].sprite = get_sprite(assets, "w_crate");
|
item_sprite_map[0].sprite = get_sprite(assets, "w_crate");
|
||||||
item_sprite_map[1].sprite = get_sprite(assets, "m_crate");
|
item_sprite_map[1].sprite = get_sprite(assets, "m_crate");
|
||||||
item_sprite_map[2].sprite = get_sprite(assets, "arrow");
|
item_sprite_map[2].sprite = get_sprite(assets, "r_arrow");
|
||||||
item_sprite_map[2].offset = (Vector2){-8, 4};
|
item_sprite_map[2].offset = (Vector2){-8, 4};
|
||||||
|
item_sprite_map[3].sprite = get_sprite(assets, "u_arrow");
|
||||||
|
item_sprite_map[4].sprite = get_sprite(assets, "l_arrow");
|
||||||
|
item_sprite_map[5].sprite = get_sprite(assets, "d_arrow");
|
||||||
|
item_sprite_map[6].sprite = get_sprite(assets, "bomb");
|
||||||
|
item_sprite_map[6].offset = (Vector2){0, -4};
|
||||||
|
item_sprite_map[7].sprite = get_sprite(assets, "w_ra_crate");
|
||||||
|
item_sprite_map[8].sprite = get_sprite(assets, "m_ra_crate");
|
||||||
|
item_sprite_map[9].sprite = get_sprite(assets, "w_ua_crate");
|
||||||
|
item_sprite_map[10].sprite = get_sprite(assets, "m_ua_crate");
|
||||||
|
item_sprite_map[11].sprite = get_sprite(assets, "w_la_crate");
|
||||||
|
item_sprite_map[12].sprite = get_sprite(assets, "m_la_crate");
|
||||||
|
item_sprite_map[13].sprite = get_sprite(assets, "w_da_crate");
|
||||||
|
item_sprite_map[14].sprite = get_sprite(assets, "m_da_crate");
|
||||||
|
item_sprite_map[15].sprite = get_sprite(assets, "w_b_crate");
|
||||||
|
item_sprite_map[16].sprite = get_sprite(assets, "m_b_crate");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,13 +38,6 @@ Entity_t* create_crate(EntityManager_t* ent_manager, Assets_t* assets, bool meta
|
||||||
p_bbox->solid = true;
|
p_bbox->solid = true;
|
||||||
p_bbox->fragile = !metal;
|
p_bbox->fragile = !metal;
|
||||||
|
|
||||||
if (item == CONTAINER_EMPTY)
|
|
||||||
{
|
|
||||||
CSprite_t* p_cspr = add_component(p_crate, CSPRITE_T);
|
|
||||||
p_cspr->sprites = item_sprite_map;
|
|
||||||
p_cspr->current_idx = metal? 1 : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
CTransform_t* p_ctransform = add_component(p_crate, CTRANSFORM_COMP_T);
|
CTransform_t* p_ctransform = add_component(p_crate, CTRANSFORM_COMP_T);
|
||||||
p_ctransform->grav_delay = 7;
|
p_ctransform->grav_delay = 7;
|
||||||
p_ctransform->shape_factor = metal ? (Vector2){0.7,0.7} : (Vector2){0.8,0.8} ;
|
p_ctransform->shape_factor = metal ? (Vector2){0.7,0.7} : (Vector2){0.8,0.8} ;
|
||||||
|
@ -40,11 +48,24 @@ Entity_t* create_crate(EntityManager_t* ent_manager, Assets_t* assets, bool meta
|
||||||
p_hurtbox->def = metal ? 2 : 1;
|
p_hurtbox->def = metal ? 2 : 1;
|
||||||
p_hurtbox->damage_src = -1;
|
p_hurtbox->damage_src = -1;
|
||||||
|
|
||||||
|
CSprite_t* p_cspr = add_component(p_crate, CSPRITE_T);
|
||||||
|
p_cspr->sprites = item_sprite_map;
|
||||||
if (item != CONTAINER_EMPTY)
|
if (item != CONTAINER_EMPTY)
|
||||||
{
|
{
|
||||||
CContainer_t* p_container = add_component(p_crate, CCONTAINER_T);
|
CContainer_t* p_container = add_component(p_crate, CCONTAINER_T);
|
||||||
p_container->item = item;
|
p_container->item = item;
|
||||||
}
|
}
|
||||||
|
switch(item)
|
||||||
|
{
|
||||||
|
case CONTAINER_RIGHT_ARROW: p_cspr->current_idx = 7; break;
|
||||||
|
case CONTAINER_UP_ARROW: p_cspr->current_idx = 9; break;
|
||||||
|
case CONTAINER_LEFT_ARROW: p_cspr->current_idx = 11; break;
|
||||||
|
case CONTAINER_DOWN_ARROW: p_cspr->current_idx = 13; break;
|
||||||
|
case CONTAINER_BOMB: p_cspr->current_idx = 15; break;
|
||||||
|
default: p_cspr->current_idx = 0; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (metal) p_cspr->current_idx++;
|
||||||
|
|
||||||
return p_crate;
|
return p_crate;
|
||||||
}
|
}
|
||||||
|
@ -95,19 +116,22 @@ Entity_t* create_arrow(EntityManager_t* ent_manager, Assets_t* assets, uint8_t d
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
p_hitbox->boxes[0] = (Rectangle){10, TILE_SIZE / 2 - 5, 10, 5};
|
p_hitbox->boxes[0] = (Rectangle){10, TILE_SIZE / 2 - 5, 10, 5};
|
||||||
p_ctransform->velocity.x = -250;
|
p_ctransform->velocity.x = -ARROW_SPEED;
|
||||||
|
p_cspr->current_idx += 2;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
p_hitbox->boxes[0] = (Rectangle){TILE_SIZE / 2 - 5, 10, 5, 10};
|
p_hitbox->boxes[0] = (Rectangle){TILE_SIZE / 2 - 5, 10, 5, 10};
|
||||||
p_ctransform->velocity.y = -250;
|
p_ctransform->velocity.y = -ARROW_SPEED;
|
||||||
|
p_cspr->current_idx += 1;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
p_hitbox->boxes[0] = (Rectangle){TILE_SIZE / 2 - 5, 10, 5, 10};
|
p_hitbox->boxes[0] = (Rectangle){TILE_SIZE / 2 - 5, 10, 5, 10};
|
||||||
p_ctransform->velocity.y = 250;
|
p_ctransform->velocity.y = ARROW_SPEED;
|
||||||
|
p_cspr->current_idx += 3;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
p_hitbox->boxes[0] = (Rectangle){10, TILE_SIZE / 2 - 5, 10, 5};
|
p_hitbox->boxes[0] = (Rectangle){10, TILE_SIZE / 2 - 5, 10, 5};
|
||||||
p_ctransform->velocity.x = 250;
|
p_ctransform->velocity.x = ARROW_SPEED;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -129,6 +153,10 @@ Entity_t* create_bomb(EntityManager_t* ent_manager, Assets_t* assets, Vector2 la
|
||||||
CContainer_t* p_container = add_component(p_bomb, CCONTAINER_T);
|
CContainer_t* p_container = add_component(p_bomb, CCONTAINER_T);
|
||||||
p_container->item = CONTAINER_EXPLOSION;
|
p_container->item = CONTAINER_EXPLOSION;
|
||||||
|
|
||||||
|
CSprite_t* p_cspr = add_component(p_bomb, CSPRITE_T);
|
||||||
|
p_cspr->sprites = item_sprite_map;
|
||||||
|
p_cspr->current_idx = 6;
|
||||||
|
|
||||||
CTransform_t* p_ctransform = add_component(p_bomb, CTRANSFORM_COMP_T);
|
CTransform_t* p_ctransform = add_component(p_bomb, CTRANSFORM_COMP_T);
|
||||||
p_ctransform->active = true;
|
p_ctransform->active = true;
|
||||||
p_ctransform->shape_factor = (Vector2){0.1, 0.1};
|
p_ctransform->shape_factor = (Vector2){0.1, 0.1};
|
||||||
|
|
|
@ -16,6 +16,21 @@ static void menu_scene_render_func(Scene_t* scene)
|
||||||
EndDrawing();
|
EndDrawing();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void exec_component_function(Scene_t* scene, int sel)
|
||||||
|
{
|
||||||
|
switch(sel)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
change_scene(scene->engine, 1);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
change_scene(scene->engine, 2);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void menu_do_action(Scene_t* scene, ActionType_t action, bool pressed)
|
static void menu_do_action(Scene_t* scene, ActionType_t action, bool pressed)
|
||||||
{
|
{
|
||||||
MenuSceneData_t* data = &(CONTAINER_OF(scene, MenuScene_t, scene)->data);
|
MenuSceneData_t* data = &(CONTAINER_OF(scene, MenuScene_t, scene)->data);
|
||||||
|
@ -53,17 +68,7 @@ static void menu_do_action(Scene_t* scene, ActionType_t action, bool pressed)
|
||||||
data->selected_comp = new_selection;
|
data->selected_comp = new_selection;
|
||||||
if (action == ACTION_CONFIRM && scene->engine != NULL)
|
if (action == ACTION_CONFIRM && scene->engine != NULL)
|
||||||
{
|
{
|
||||||
switch(data->selected_comp)
|
exec_component_function(scene, data->selected_comp);
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
change_scene(scene->engine, 1);
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
change_scene(scene->engine, 2);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -103,14 +108,7 @@ static void gui_loop(Scene_t* scene)
|
||||||
data->buttons[i].pressed = true;
|
data->buttons[i].pressed = true;
|
||||||
if (scene->engine != NULL)
|
if (scene->engine != NULL)
|
||||||
{
|
{
|
||||||
switch(i)
|
exec_component_function(scene, i);
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
change_scene(scene->engine, 1);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
data->selected_comp = i;
|
data->selected_comp = i;
|
||||||
|
@ -149,7 +147,7 @@ void init_menu_scene(MenuScene_t* scene)
|
||||||
};
|
};
|
||||||
scene->data.max_comp = 4;
|
scene->data.max_comp = 4;
|
||||||
scene->data.selected_comp = 0;
|
scene->data.selected_comp = 0;
|
||||||
scene->data.mode = KEYBOARD_MODE;
|
scene->data.mode = MOUSE_MODE;
|
||||||
|
|
||||||
sc_map_put_64(&scene->scene.action_map, KEY_UP, ACTION_UP);
|
sc_map_put_64(&scene->scene.action_map, KEY_UP, ACTION_UP);
|
||||||
sc_map_put_64(&scene->scene.action_map, KEY_DOWN, ACTION_DOWN);
|
sc_map_put_64(&scene->scene.action_map, KEY_DOWN, ACTION_DOWN);
|
||||||
|
|
Loading…
Reference in New Issue