Use unsigned int for boulder checks
parent
d947d95247
commit
45d9e2a5f6
|
@ -1032,18 +1032,19 @@ void moveable_update_system(Scene_t* scene)
|
||||||
//if (p_ctransform->prev_velocity.y <= 0 && p_ctransform->prev_position.x == p_ctransform->position.x) continue;
|
//if (p_ctransform->prev_velocity.y <= 0 && p_ctransform->prev_position.x == p_ctransform->position.x) continue;
|
||||||
|
|
||||||
TileGrid_t tilemap = (CONTAINER_OF(scene, LevelScene_t, scene)->data).tilemap;
|
TileGrid_t tilemap = (CONTAINER_OF(scene, LevelScene_t, scene)->data).tilemap;
|
||||||
|
|
||||||
|
// Point to check is the one row below
|
||||||
Vector2 point_to_check = {
|
Vector2 point_to_check = {
|
||||||
.x = p_ctransform->position.x + p_bbox->half_size.x,
|
.x = p_ctransform->position.x + p_bbox->half_size.x,
|
||||||
.y = p_ctransform->position.y + p_bbox->size.y + 1
|
.y = p_ctransform->position.y + p_bbox->size.y + 1
|
||||||
};
|
};
|
||||||
int tile_x = point_to_check.x / TILE_SIZE;
|
unsigned int tile_x = point_to_check.x / TILE_SIZE;
|
||||||
int tile_y = point_to_check.y / TILE_SIZE;
|
unsigned int tile_y = point_to_check.y / TILE_SIZE;
|
||||||
if (tile_y >= tilemap.height) continue;
|
if (tile_y >= tilemap.height) continue;
|
||||||
|
|
||||||
int tile_idx = tile_y * tilemap.width + tile_x;
|
int tile_idx = tile_y * tilemap.width + tile_x;
|
||||||
unsigned int other_ent_idx;
|
unsigned int other_ent_idx;
|
||||||
bool can_move = false;
|
bool can_move = false;
|
||||||
int tile_y2 = tile_y - 1;
|
|
||||||
sc_map_foreach_key(&tilemap.tiles[tile_idx].entities_set, other_ent_idx)
|
sc_map_foreach_key(&tilemap.tiles[tile_idx].entities_set, other_ent_idx)
|
||||||
{
|
{
|
||||||
if (other_ent_idx == ent_idx) continue;
|
if (other_ent_idx == ent_idx) continue;
|
||||||
|
@ -1063,7 +1064,7 @@ void moveable_update_system(Scene_t* scene)
|
||||||
if (tile_x >= 0 && tile_x < tilemap.width)
|
if (tile_x >= 0 && tile_x < tilemap.width)
|
||||||
{
|
{
|
||||||
unsigned int tile_idx1 = tile_y * tilemap.width + tile_x;
|
unsigned int tile_idx1 = tile_y * tilemap.width + tile_x;
|
||||||
unsigned int tile_idx2 = tile_y2 * tilemap.width + tile_x;
|
unsigned int tile_idx2 = (tile_y - 1) * tilemap.width + tile_x;
|
||||||
if ( tilemap.tiles[tile_idx1].moveable && tilemap.tiles[tile_idx2].moveable )
|
if ( tilemap.tiles[tile_idx1].moveable && tilemap.tiles[tile_idx2].moveable )
|
||||||
{
|
{
|
||||||
bool any_solid = false;
|
bool any_solid = false;
|
||||||
|
@ -1098,7 +1099,7 @@ void moveable_update_system(Scene_t* scene)
|
||||||
if (tile_x >= 0 && tile_x < tilemap.width)
|
if (tile_x >= 0 && tile_x < tilemap.width)
|
||||||
{
|
{
|
||||||
unsigned int tile_idx1 = tile_y * tilemap.width + tile_x;
|
unsigned int tile_idx1 = tile_y * tilemap.width + tile_x;
|
||||||
unsigned int tile_idx2 = tile_y2 * tilemap.width + tile_x;
|
unsigned int tile_idx2 = (tile_y - 1) * tilemap.width + tile_x;
|
||||||
if ( tilemap.tiles[tile_idx1].moveable && tilemap.tiles[tile_idx2].moveable )
|
if ( tilemap.tiles[tile_idx1].moveable && tilemap.tiles[tile_idx2].moveable )
|
||||||
{
|
{
|
||||||
bool any_solid = false;
|
bool any_solid = false;
|
||||||
|
@ -1135,7 +1136,7 @@ void moveable_update_system(Scene_t* scene)
|
||||||
p_moveable->gridmove = true;
|
p_moveable->gridmove = true;
|
||||||
p_bbox->solid = false;
|
p_bbox->solid = false;
|
||||||
p_moveable->prev_pos = p_ctransform->position;
|
p_moveable->prev_pos = p_ctransform->position;
|
||||||
p_moveable->target_pos = Vector2Scale((Vector2){tile_x,tile_y2}, TILE_SIZE);
|
p_moveable->target_pos = Vector2Scale((Vector2){tile_x,tile_y-1}, TILE_SIZE);
|
||||||
memset(&p_ctransform->velocity, 0, sizeof(p_ctransform->velocity));
|
memset(&p_ctransform->velocity, 0, sizeof(p_ctransform->velocity));
|
||||||
memset(&p_ctransform->accel, 0, sizeof(p_ctransform->accel));
|
memset(&p_ctransform->accel, 0, sizeof(p_ctransform->accel));
|
||||||
p_ctransform->movement_mode = KINEMATIC_MOVEMENT;
|
p_ctransform->movement_mode = KINEMATIC_MOVEMENT;
|
||||||
|
|
Loading…
Reference in New Issue