Move files about

This commit is contained in:
duncanspumpkin 2018-01-23 18:48:41 +00:00
parent 7a74de9be5
commit 30ce2a65ed
8 changed files with 105 additions and 123 deletions

View File

@ -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];
};

View File

@ -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;

View File

@ -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);
}
}

View File

@ -67,6 +67,7 @@ namespace openloco
};
void move_to(loc16 loc);
void invalidate_sprite();
};
#pragma pack(pop)
}

View File

@ -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);
}
}

View File

@ -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)
}

View File

@ -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;
}

View File

@ -4,6 +4,6 @@
namespace openloco::ui::viewportmgr
{
viewport * begin();
viewport ** begin();
viewport * end();
}