Move files about
This commit is contained in:
parent
7a74de9be5
commit
30ce2a65ed
|
@ -14,7 +14,7 @@ namespace openloco::objectmgr
|
|||
loco_global_array<rock_object *, 8, 0x0050C658> _rockObjects;
|
||||
loco_global_array<water_object *, 1, 0x0050C678> _waterObjects;
|
||||
loco_global_array<land_object *, 32, 0x0050C67C> _landObjects;
|
||||
loco_global_array<town_name_object *, 1, 0x0050C6FC> _townNameObjects;
|
||||
loco_global_array<town_names_object *, 1, 0x0050C6FC> _townNamesObjects;
|
||||
loco_global_array<cargo_object *, 32, 0x0050C700> _cargoObjects;
|
||||
loco_global_array<wall_object *, 32, 0x0050C780> _wallObjects;
|
||||
loco_global_array<train_signal_object *, 16, 0x0050C800> _trainSignalObjects;
|
||||
|
@ -60,41 +60,42 @@ namespace openloco::objectmgr
|
|||
|
||||
size_t get_max_objects(object_type type)
|
||||
{
|
||||
static size_t counts[] = {
|
||||
1, // interface,
|
||||
128, // sound,
|
||||
1, // currency,
|
||||
32, // steam,
|
||||
8, // rock,
|
||||
1, // water,
|
||||
32, // surface,
|
||||
1, // town_name,
|
||||
32, // cargo,
|
||||
32, // wall,
|
||||
16, // train_signal,
|
||||
4, // level_crossing,
|
||||
1, // street_light,
|
||||
16, // tunnel,
|
||||
8, // bridge,
|
||||
16, // train_station,
|
||||
8, // track_extra,
|
||||
8, // track,
|
||||
16, // road_station,
|
||||
4, // road_extra,
|
||||
8, // road,
|
||||
8, // airport,
|
||||
8, // dock,
|
||||
224, // vehicle,
|
||||
64, // tree,
|
||||
1, // snow,
|
||||
1, // climate,
|
||||
1, // hill_shapes,
|
||||
128, // building,
|
||||
1, // scaffolding,
|
||||
16, // industry,
|
||||
1, // region,
|
||||
32, // competitors,
|
||||
1 // scenario_text,
|
||||
static size_t counts[] =
|
||||
{
|
||||
1, // interface,
|
||||
128, // sound,
|
||||
1, // currency,
|
||||
32, // steam,
|
||||
8, // rock,
|
||||
1, // water,
|
||||
32, // surface,
|
||||
1, // town_names,
|
||||
32, // cargo,
|
||||
32, // wall,
|
||||
16, // train_signal,
|
||||
4, // level_crossing,
|
||||
1, // street_light,
|
||||
16, // tunnel,
|
||||
8, // bridge,
|
||||
16, // train_station,
|
||||
8, // track_extra,
|
||||
8, // track,
|
||||
16, // road_station,
|
||||
4, // road_extra,
|
||||
8, // road,
|
||||
8, // airport,
|
||||
8, // dock,
|
||||
224, // vehicle,
|
||||
64, // tree,
|
||||
1, // snow,
|
||||
1, // climate,
|
||||
1, // hill_shapes,
|
||||
128, // building,
|
||||
1, // scaffolding,
|
||||
16, // industry,
|
||||
1, // region,
|
||||
32, // competitors,
|
||||
1 // scenario_text,
|
||||
};
|
||||
return counts[(size_t)type];
|
||||
};
|
||||
|
|
|
@ -52,7 +52,7 @@ namespace openloco
|
|||
struct rock_object;
|
||||
struct water_object;
|
||||
struct land_object;
|
||||
struct town_name_object;
|
||||
struct town_names_object;
|
||||
struct wall_object;
|
||||
struct train_signal_object;
|
||||
struct level_crossing_object;
|
||||
|
|
|
@ -1,9 +1,14 @@
|
|||
#include "thing.h"
|
||||
#include <algorithm>
|
||||
#include "../graphics/gfx.h"
|
||||
#include "../interop/interop.hpp"
|
||||
#include "../viewportmgr.h"
|
||||
#include "thing.h"
|
||||
|
||||
using namespace openloco;
|
||||
using namespace openloco::interop;
|
||||
|
||||
loco_global<uint8_t, 0x0050AF25> thing_zoom_max;
|
||||
|
||||
// 0x0046FC83
|
||||
void thing::move_to(loc16 loc)
|
||||
{
|
||||
|
@ -14,3 +19,60 @@ void thing::move_to(loc16 loc)
|
|||
regs.esi = (int32_t)this;
|
||||
call(0x0046FC83, regs);
|
||||
}
|
||||
|
||||
// 0x004CBB01
|
||||
void openloco::thing::invalidate_sprite()
|
||||
{
|
||||
if (sprite_left == (int16_t)0x8000u)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int16_t left = sprite_left;
|
||||
int16_t top = sprite_top;
|
||||
int16_t right = sprite_right;
|
||||
int16_t bottom = sprite_bottom;
|
||||
for (auto viewport_arr = openloco::ui::viewportmgr::begin();
|
||||
*viewport_arr != nullptr;
|
||||
viewport_arr++)
|
||||
{
|
||||
auto viewport = *viewport_arr;
|
||||
if (viewport->zoom > thing_zoom_max)
|
||||
continue;
|
||||
|
||||
if (sprite_right <= viewport->view_x)
|
||||
continue;
|
||||
|
||||
if (sprite_bottom <= viewport->view_y)
|
||||
continue;
|
||||
|
||||
if (sprite_left >= viewport->view_x + viewport->view_width)
|
||||
continue;
|
||||
|
||||
left = std::max(sprite_left, viewport->view_x);
|
||||
right = std::min<int16_t>(sprite_right, viewport->view_x + viewport->view_width);
|
||||
|
||||
if (sprite_top >= viewport->view_y + viewport->view_height)
|
||||
continue;
|
||||
|
||||
bottom = std::max(sprite_bottom, viewport->view_y);
|
||||
top = std::min<int16_t>(sprite_top, viewport->view_y + viewport->view_height);
|
||||
|
||||
left -= viewport->view_x;
|
||||
bottom -= viewport->view_y;
|
||||
right -= viewport->view_x;
|
||||
top -= viewport->view_y;
|
||||
|
||||
left >>= viewport->zoom;
|
||||
bottom >>= viewport->zoom;
|
||||
right >>= viewport->zoom;
|
||||
top >>= viewport->zoom;
|
||||
|
||||
left += viewport->x;
|
||||
bottom += viewport->y;
|
||||
right += viewport->x;
|
||||
top += viewport->y;
|
||||
|
||||
openloco::gfx::set_dirty_blocks(left, top, right, bottom);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -67,6 +67,7 @@ namespace openloco
|
|||
};
|
||||
|
||||
void move_to(loc16 loc);
|
||||
void invalidate_sprite();
|
||||
};
|
||||
#pragma pack(pop)
|
||||
}
|
||||
|
|
|
@ -21,13 +21,6 @@ loco_global<vehicle *, 0x01136128> vehicle_1136128;
|
|||
loco_global<uint32_t, 0x01136130> vehicle_var_1136130;
|
||||
loco_global<uint8_t, 0x01136237> vehicle_var_1136237; // var_28 related?
|
||||
loco_global<uint8_t, 0x01136238> vehicle_var_1136238; // var_28 related?
|
||||
<<<<<<< a292391919882a169ee318fdd348add509376bb3
|
||||
loco_global<unk_113D758 *, 0x0113D820> vehicle_var_113D820;
|
||||
loco_global<uint8_t, 0x0050AF25> vehicle_var_50AF25;
|
||||
=======
|
||||
|
||||
loco_global<uint8_t, 0x0050AF25> vehicle_zoom_max;
|
||||
>>>>>>> Use OpenRCT2 viewport names
|
||||
|
||||
vehicle * vehicle::next_vehicle()
|
||||
{
|
||||
|
@ -253,60 +246,3 @@ void openloco::vehicle::sub_4AAC4E()
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 0x4CBB01
|
||||
void openloco::vehicle::invalidate_sprite()
|
||||
{
|
||||
if (sprite_left == 0x8000)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int16_t left = sprite_left;
|
||||
int16_t top = sprite_top;
|
||||
int16_t right = sprite_right;
|
||||
int16_t bottom = sprite_bottom;
|
||||
for (auto viewport = openloco::ui::viewportmgr::begin();
|
||||
viewport != nullptr;
|
||||
viewport++)
|
||||
{
|
||||
if (viewport->zoom > vehicle_zoom_max)
|
||||
continue;
|
||||
|
||||
if (sprite_right <= viewport->view_x)
|
||||
continue;
|
||||
|
||||
if (sprite_bottom <= viewport->view_y)
|
||||
continue;
|
||||
|
||||
if (sprite_left >= viewport->view_x + viewport->view_width)
|
||||
continue;
|
||||
|
||||
left = std::max(sprite_left, viewport->view_x);
|
||||
right = std::min<int16_t>(sprite_right, viewport->view_x + viewport->view_width);
|
||||
|
||||
if (sprite_top >= viewport->view_y + viewport->view_height)
|
||||
continue;
|
||||
|
||||
bottom = std::max(sprite_bottom, viewport->view_y);
|
||||
top = std::min<int16_t>(sprite_top, viewport->view_y + viewport->view_height);
|
||||
|
||||
left -= viewport->view_x;
|
||||
bottom -= viewport->view_y;
|
||||
right -= viewport->view_x;
|
||||
top -= viewport->view_y;
|
||||
|
||||
left >>= viewport->zoom;
|
||||
bottom >>= viewport->zoom;
|
||||
right >>= viewport->zoom;
|
||||
top >>= viewport->zoom;
|
||||
|
||||
left += viewport->x;
|
||||
bottom += viewport->y;
|
||||
right += viewport->x;
|
||||
top += viewport->y;
|
||||
|
||||
openloco::gfx::set_dirty_blocks(left, top, right, bottom);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -24,24 +24,6 @@ namespace openloco
|
|||
void sub_4BAA76();
|
||||
int32_t sub_4AA1D0();
|
||||
void sub_4AAC4E();
|
||||
void invalidate_sprite();
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
#pragma pack(push, 1)
|
||||
struct unk_113D758
|
||||
{
|
||||
uint16_t var_00;
|
||||
uint16_t var_02;
|
||||
int16_t var_04;
|
||||
int16_t var_06;
|
||||
int16_t x; // 0x08
|
||||
int16_t y; // 0x0A
|
||||
int16_t width; // 0x0C
|
||||
int16_t height; // 0x0E
|
||||
uint8_t zoom_level;
|
||||
uint8_t pad_11;
|
||||
uint16_t var_12;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
}
|
||||
|
|
|
@ -7,9 +7,9 @@
|
|||
using namespace openloco::ui;
|
||||
using namespace openloco::interop;
|
||||
|
||||
loco_global<viewport *, 0x0113D820> _viewports;
|
||||
loco_global_array<viewport *, 10, 0x0113D820> _viewports;
|
||||
|
||||
viewport * openloco::ui::viewportmgr::begin()
|
||||
viewport ** openloco::ui::viewportmgr::begin()
|
||||
{
|
||||
return _viewports;
|
||||
}
|
||||
|
|
|
@ -4,6 +4,6 @@
|
|||
|
||||
namespace openloco::ui::viewportmgr
|
||||
{
|
||||
viewport * begin();
|
||||
viewport ** begin();
|
||||
viewport * end();
|
||||
}
|
Loading…
Reference in New Issue