Introduce new variable gMapVirtualFloorVisible to determine visibility.

This addresses compilation issues for projects that contain no UI code.
Also working towards better invalidation for the software renderer.
This commit is contained in:
Aaron van Geffen 2018-01-06 19:02:12 +01:00
parent 4246b84130
commit 84026529b4
3 changed files with 25 additions and 8 deletions

View File

@ -169,7 +169,11 @@ void input_handle_keyboard(bool isTitle)
}
}
if (!(gInputPlaceObjectModifier & (PLACE_OBJECT_MODIFIER_COPY_Z | PLACE_OBJECT_MODIFIER_SHIFT_Z)))
if (gInputPlaceObjectModifier & (PLACE_OBJECT_MODIFIER_COPY_Z | PLACE_OBJECT_MODIFIER_SHIFT_Z))
{
map_enable_virtual_floor();
}
else
{
map_remove_virtual_floor();
}

View File

@ -88,6 +88,7 @@ uint8 gMapSelectArrowDirection;
uint16 gMapVirtualFloorBaseSize = 5*32;
uint16 gMapVirtualFloorHeight;
bool gMapVirtualFloorVisible = false;
uint8 gMapGroundFlags;
@ -4737,7 +4738,7 @@ uint8 tile_element_get_ride_index(const rct_tile_element * tileElement)
void map_set_virtual_floor_height(sint16 height)
{
if (!input_test_place_object_modifier(PLACE_OBJECT_MODIFIER_COPY_Z | PLACE_OBJECT_MODIFIER_SHIFT_Z))
if (!gMapVirtualFloorVisible)
{
// If the modifiers are not set we do not actually care as the floor is invisible.
return;
@ -4750,19 +4751,29 @@ void map_set_virtual_floor_height(sint16 height)
}
}
void map_enable_virtual_floor()
{
gMapVirtualFloorVisible = true;
}
void map_remove_virtual_floor()
{
if (gMapVirtualFloorHeight != 0)
if (!gMapVirtualFloorVisible)
{
gVirtualFloorLastLocation.z = -1;
map_invalidate_virtual_floor_tiles();
gMapVirtualFloorHeight = 0;
return;
}
// Force invalidation, even if the position hasn't changed.
gVirtualFloorLastLocation.z = -1;
map_invalidate_virtual_floor_tiles();
gMapVirtualFloorHeight = 0;
gMapVirtualFloorVisible = false;
}
void map_invalidate_virtual_floor_tiles()
{
if (gMapVirtualFloorHeight == 0)
if (!gMapVirtualFloorVisible)
{
return;
}
@ -4811,7 +4822,7 @@ void map_invalidate_virtual_floor_tiles()
bool map_tile_is_part_of_virtual_floor(sint16 x, sint16 y)
{
if (gMapVirtualFloorHeight == 0)
if (!gMapVirtualFloorVisible)
{
return false;
}

View File

@ -385,6 +385,7 @@ extern uint8 gMapSelectArrowDirection;
extern uint16 gMapVirtualFloorHeight;
extern uint16 gMapVirtualFloorBaseSize;
extern bool gMapVirtualFloorVisible;
extern uint8 gMapGroundFlags;
@ -460,6 +461,7 @@ bool map_check_free_elements_and_reorganise(sint32 num_elements);
rct_tile_element *tile_element_insert(sint32 x, sint32 y, sint32 z, sint32 flags);
bool tile_element_check_address(const rct_tile_element * const element);
void map_set_virtual_floor_height(sint16 height);
void map_enable_virtual_floor();
void map_remove_virtual_floor();
void map_invalidate_virtual_floor_tiles();
bool map_tile_is_part_of_virtual_floor(sint16 x, sint16 y);