Add direction to arrow spawning
parent
e74f523b7f
commit
7dcff39864
|
@ -19,10 +19,13 @@ enum EntitySpawnSelection {
|
||||||
SPAWN_CRATE,
|
SPAWN_CRATE,
|
||||||
SPAWN_METAL_CRATE,
|
SPAWN_METAL_CRATE,
|
||||||
SPAWN_CRATE_ARROW_L,
|
SPAWN_CRATE_ARROW_L,
|
||||||
|
SPAWN_CRATE_ARROW_R,
|
||||||
|
SPAWN_CRATE_ARROW_U,
|
||||||
|
SPAWN_CRATE_ARROW_D,
|
||||||
SPAWN_BOULDER,
|
SPAWN_BOULDER,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define MAX_SPAWN_TYPE 9
|
#define MAX_SPAWN_TYPE 12
|
||||||
static unsigned int current_spawn_selection = 0;
|
static unsigned int current_spawn_selection = 0;
|
||||||
|
|
||||||
#define SELECTION_TILE_SIZE 32
|
#define SELECTION_TILE_SIZE 32
|
||||||
|
@ -158,6 +161,15 @@ static void level_scene_render_func(Scene_t* scene)
|
||||||
switch (p_container->item)
|
switch (p_container->item)
|
||||||
{
|
{
|
||||||
case CONTAINER_LEFT_ARROW:
|
case CONTAINER_LEFT_ARROW:
|
||||||
|
DrawLine(
|
||||||
|
p_ct->position.x,
|
||||||
|
p_ct->position.y + p_bbox->half_size.y,
|
||||||
|
p_ct->position.x + p_bbox->half_size.x,
|
||||||
|
p_ct->position.y + p_bbox->half_size.y,
|
||||||
|
BLACK
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
case CONTAINER_RIGHT_ARROW:
|
||||||
DrawLine(
|
DrawLine(
|
||||||
p_ct->position.x + p_bbox->half_size.x,
|
p_ct->position.x + p_bbox->half_size.x,
|
||||||
p_ct->position.y + p_bbox->half_size.y,
|
p_ct->position.y + p_bbox->half_size.y,
|
||||||
|
@ -166,22 +178,29 @@ static void level_scene_render_func(Scene_t* scene)
|
||||||
BLACK
|
BLACK
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
|
case CONTAINER_UP_ARROW:
|
||||||
|
DrawLine(
|
||||||
|
p_ct->position.x + p_bbox->half_size.x,
|
||||||
|
p_ct->position.y,
|
||||||
|
p_ct->position.x + p_bbox->half_size.x,
|
||||||
|
p_ct->position.y + p_bbox->half_size.y,
|
||||||
|
BLACK
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
case CONTAINER_DOWN_ARROW:
|
||||||
|
DrawLine(
|
||||||
|
p_ct->position.x + p_bbox->half_size.x,
|
||||||
|
p_ct->position.y + p_bbox->half_size.y,
|
||||||
|
p_ct->position.x + p_bbox->half_size.x,
|
||||||
|
p_ct->position.y + p_bbox->size.y,
|
||||||
|
BLACK
|
||||||
|
);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//if (p_ent->m_tag == ARROW_ENT_TAG)
|
|
||||||
//{
|
|
||||||
// DrawLine(
|
|
||||||
// p_ct->position.x + 10,
|
|
||||||
// p_ct->position.y + p_bbox->half_size.y,
|
|
||||||
// p_ct->position.x + p_bbox->size.x,
|
|
||||||
// p_ct->position.y + p_bbox->half_size.y,
|
|
||||||
// colour
|
|
||||||
// );
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CHurtbox_t* p_hurtbox = get_component(p_ent, CHURTBOX_T);
|
CHurtbox_t* p_hurtbox = get_component(p_ent, CHURTBOX_T);
|
||||||
|
@ -266,7 +285,11 @@ static void level_scene_render_func(Scene_t* scene)
|
||||||
);
|
);
|
||||||
|
|
||||||
Vector2 draw_pos = {data->game_rec.x, data->game_rec.y + data->game_rec.height + SELECTION_GAP};
|
Vector2 draw_pos = {data->game_rec.x, data->game_rec.y + data->game_rec.height + SELECTION_GAP};
|
||||||
const Color draw_colour[MAX_SPAWN_TYPE] = {BLACK, MAROON, ORANGE, ColorAlpha(RAYWHITE, 0.5), ColorAlpha(BLUE, 0.5), BROWN, GRAY, BROWN, ColorAlpha(RAYWHITE, 0.5)};
|
const Color draw_colour[MAX_SPAWN_TYPE] = {
|
||||||
|
BLACK, MAROON, ORANGE, ColorAlpha(RAYWHITE, 0.5), ColorAlpha(BLUE, 0.5),
|
||||||
|
BROWN, GRAY, BROWN, BROWN, BROWN,
|
||||||
|
BROWN, ColorAlpha(RAYWHITE, 0.5)
|
||||||
|
};
|
||||||
for (uint8_t i = 0; i < MAX_SPAWN_TYPE; ++i)
|
for (uint8_t i = 0; i < MAX_SPAWN_TYPE; ++i)
|
||||||
{
|
{
|
||||||
if (i != current_spawn_selection)
|
if (i != current_spawn_selection)
|
||||||
|
@ -282,6 +305,15 @@ static void level_scene_render_func(Scene_t* scene)
|
||||||
DrawCircleV(Vector2Add(draw_pos, half_size), half_size.x, GRAY);
|
DrawCircleV(Vector2Add(draw_pos, half_size), half_size.x, GRAY);
|
||||||
break;
|
break;
|
||||||
case SPAWN_CRATE_ARROW_L:
|
case SPAWN_CRATE_ARROW_L:
|
||||||
|
DrawLine(
|
||||||
|
draw_pos.x,
|
||||||
|
draw_pos.y + half_size.y,
|
||||||
|
draw_pos.x + half_size.x,
|
||||||
|
draw_pos.y + half_size.y,
|
||||||
|
BLACK
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
case SPAWN_CRATE_ARROW_R:
|
||||||
DrawLine(
|
DrawLine(
|
||||||
draw_pos.x + half_size.x,
|
draw_pos.x + half_size.x,
|
||||||
draw_pos.y + half_size.y,
|
draw_pos.y + half_size.y,
|
||||||
|
@ -290,6 +322,24 @@ static void level_scene_render_func(Scene_t* scene)
|
||||||
BLACK
|
BLACK
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
|
case SPAWN_CRATE_ARROW_U:
|
||||||
|
DrawLine(
|
||||||
|
draw_pos.x + half_size.x,
|
||||||
|
draw_pos.y,
|
||||||
|
draw_pos.x + half_size.x,
|
||||||
|
draw_pos.y + half_size.y,
|
||||||
|
BLACK
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
case SPAWN_CRATE_ARROW_D:
|
||||||
|
DrawLine(
|
||||||
|
draw_pos.x + half_size.x,
|
||||||
|
draw_pos.y + half_size.y,
|
||||||
|
draw_pos.x + half_size.x,
|
||||||
|
draw_pos.y + half_size.y * 2,
|
||||||
|
BLACK
|
||||||
|
);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
draw_pos.x += SELECTION_TILE_SIZE;
|
draw_pos.x += SELECTION_TILE_SIZE;
|
||||||
|
@ -311,6 +361,15 @@ static void level_scene_render_func(Scene_t* scene)
|
||||||
DrawCircleV(Vector2Add(draw_pos, half_size), half_size.x, GRAY);
|
DrawCircleV(Vector2Add(draw_pos, half_size), half_size.x, GRAY);
|
||||||
break;
|
break;
|
||||||
case SPAWN_CRATE_ARROW_L:
|
case SPAWN_CRATE_ARROW_L:
|
||||||
|
DrawLine(
|
||||||
|
draw_pos.x,
|
||||||
|
draw_pos.y + half_size.y,
|
||||||
|
draw_pos.x + half_size.x,
|
||||||
|
draw_pos.y + half_size.y,
|
||||||
|
BLACK
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
case SPAWN_CRATE_ARROW_R:
|
||||||
DrawLine(
|
DrawLine(
|
||||||
draw_pos.x + half_size.x,
|
draw_pos.x + half_size.x,
|
||||||
draw_pos.y + half_size.y,
|
draw_pos.y + half_size.y,
|
||||||
|
@ -319,6 +378,24 @@ static void level_scene_render_func(Scene_t* scene)
|
||||||
BLACK
|
BLACK
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
|
case SPAWN_CRATE_ARROW_U:
|
||||||
|
DrawLine(
|
||||||
|
draw_pos.x + half_size.x,
|
||||||
|
draw_pos.y,
|
||||||
|
draw_pos.x + half_size.x,
|
||||||
|
draw_pos.y + half_size.y,
|
||||||
|
BLACK
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
case SPAWN_CRATE_ARROW_D:
|
||||||
|
DrawLine(
|
||||||
|
draw_pos.x + half_size.x,
|
||||||
|
draw_pos.y + half_size.y,
|
||||||
|
draw_pos.x + half_size.x,
|
||||||
|
draw_pos.y + half_size.y * 2,
|
||||||
|
BLACK
|
||||||
|
);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// For DEBUG
|
// For DEBUG
|
||||||
|
@ -437,6 +514,15 @@ static void toggle_block_system(Scene_t* scene)
|
||||||
case SPAWN_CRATE_ARROW_L:
|
case SPAWN_CRATE_ARROW_L:
|
||||||
spawn_crate(scene, tile_idx, false, CONTAINER_LEFT_ARROW);
|
spawn_crate(scene, tile_idx, false, CONTAINER_LEFT_ARROW);
|
||||||
break;
|
break;
|
||||||
|
case SPAWN_CRATE_ARROW_R:
|
||||||
|
spawn_crate(scene, tile_idx, false, CONTAINER_RIGHT_ARROW);
|
||||||
|
break;
|
||||||
|
case SPAWN_CRATE_ARROW_U:
|
||||||
|
spawn_crate(scene, tile_idx, false, CONTAINER_UP_ARROW);
|
||||||
|
break;
|
||||||
|
case SPAWN_CRATE_ARROW_D:
|
||||||
|
spawn_crate(scene, tile_idx, false, CONTAINER_DOWN_ARROW);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
change_a_tile(&tilemap, tile_idx, new_type);
|
change_a_tile(&tilemap, tile_idx, new_type);
|
||||||
last_tile_idx = tile_idx;
|
last_tile_idx = tile_idx;
|
||||||
|
|
|
@ -1805,16 +1805,27 @@ void container_destroy_system(Scene_t* scene)
|
||||||
switch (p_container->item)
|
switch (p_container->item)
|
||||||
{
|
{
|
||||||
case CONTAINER_LEFT_ARROW:
|
case CONTAINER_LEFT_ARROW:
|
||||||
{
|
|
||||||
new_ent = create_arrow(&scene->ent_manager, &scene->engine->assets, 0);
|
new_ent = create_arrow(&scene->ent_manager, &scene->engine->assets, 0);
|
||||||
|
break;
|
||||||
|
case CONTAINER_RIGHT_ARROW:
|
||||||
|
new_ent = create_arrow(&scene->ent_manager, &scene->engine->assets, 1);
|
||||||
|
break;
|
||||||
|
case CONTAINER_UP_ARROW:
|
||||||
|
new_ent = create_arrow(&scene->ent_manager, &scene->engine->assets, 2);
|
||||||
|
break;
|
||||||
|
case CONTAINER_DOWN_ARROW:
|
||||||
|
new_ent = create_arrow(&scene->ent_manager, &scene->engine->assets, 3);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
new_ent = NULL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (new_ent != NULL)
|
||||||
|
{
|
||||||
CTransform_t* new_p_ct = get_component(new_ent, CTRANSFORM_COMP_T);
|
CTransform_t* new_p_ct = get_component(new_ent, CTRANSFORM_COMP_T);
|
||||||
CTransform_t* p_ct = get_component(p_ent, CTRANSFORM_COMP_T);
|
CTransform_t* p_ct = get_component(p_ent, CTRANSFORM_COMP_T);
|
||||||
memcpy(&new_p_ct->position, &p_ct->position, sizeof(Vector2));
|
memcpy(&new_p_ct->position, &p_ct->position, sizeof(Vector2));
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,14 +55,34 @@ Entity_t* create_arrow(EntityManager_t* ent_manager, Assets_t* assets, uint8_t d
|
||||||
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;
|
||||||
p_hitbox->boxes[0] = (Rectangle){TILE_SIZE - 5, TILE_SIZE / 2 - 5, 5, 5};
|
|
||||||
p_hitbox->atk = 3;
|
p_hitbox->atk = 3;
|
||||||
p_hitbox->one_hit = true;
|
p_hitbox->one_hit = true;
|
||||||
|
|
||||||
CTransform_t* p_ctransform = add_component(p_arrow, CTRANSFORM_COMP_T);
|
CTransform_t* p_ctransform = add_component(p_arrow, CTRANSFORM_COMP_T);
|
||||||
p_ctransform->movement_mode = KINEMATIC_MOVEMENT;
|
p_ctransform->movement_mode = KINEMATIC_MOVEMENT;
|
||||||
p_ctransform->velocity.x = 500;
|
|
||||||
p_ctransform->active = true;
|
p_ctransform->active = true;
|
||||||
|
|
||||||
|
//p_hitbox->boxes[0] = (Rectangle){TILE_SIZE - 5, TILE_SIZE / 2 - 5, 5, 5};
|
||||||
|
switch(dir)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
p_hitbox->boxes[0] = (Rectangle){10, TILE_SIZE / 2 - 5, 10, 5};
|
||||||
|
p_ctransform->velocity.x = -250;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
p_hitbox->boxes[0] = (Rectangle){TILE_SIZE / 2 - 5, 10, 5, 10};
|
||||||
|
p_ctransform->velocity.y = -250;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
p_hitbox->boxes[0] = (Rectangle){TILE_SIZE / 2 - 5, 10, 5, 10};
|
||||||
|
p_ctransform->velocity.y = 250;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
p_hitbox->boxes[0] = (Rectangle){10, TILE_SIZE / 2 - 5, 10, 5};
|
||||||
|
p_ctransform->velocity.x = 250;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
return p_arrow;
|
return p_arrow;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue