Pass LevelUniqueMorphObjectState to find_morph_data

This commit is contained in:
Kp 2020-02-26 05:07:34 +00:00
parent 40726aa580
commit 94401b4085
3 changed files with 10 additions and 6 deletions

View file

@ -67,7 +67,9 @@ struct morph_data : prohibit_void_ptr<morph_data>
explicit morph_data(object_base &o);
};
std::unique_ptr<morph_data> *find_morph_data(object_base &obj);
struct d_level_unique_morph_object_state;
std::unique_ptr<morph_data> *find_morph_data(d_level_unique_morph_object_state &LevelUniqueMorphObjectState, object_base &obj);
}
void morph_start(vmobjptr_t obj);

View file

@ -66,9 +66,8 @@ morph_data::morph_data(object_base &o) :
d_level_unique_morph_object_state::~d_level_unique_morph_object_state() = default;
//returns ptr to data for this object, or NULL if none
std::unique_ptr<morph_data> *find_morph_data(object_base &obj)
std::unique_ptr<morph_data> *find_morph_data(d_level_unique_morph_object_state &LevelUniqueMorphObjectState, object_base &obj)
{
auto &LevelUniqueMorphObjectState = LevelUniqueObjectState.MorphObjectState;
auto &morph_objects = LevelUniqueMorphObjectState.morph_objects;
if (Newdemo_state == ND_STATE_PLAYBACK) {
return nullptr;
@ -243,7 +242,8 @@ static void update_points(const polymodel *const pm, const unsigned submodel_num
//process the morphing object for one frame
void do_morph_frame(object &obj)
{
const auto umd = find_morph_data(obj);
auto &LevelUniqueMorphObjectState = LevelUniqueObjectState.MorphObjectState;
const auto umd = find_morph_data(LevelUniqueMorphObjectState, obj);
if (!umd) { //maybe loaded half-morphed from disk
obj.flags |= OF_SHOULD_BE_DEAD; //..so kill it
@ -423,7 +423,8 @@ void draw_morph_object(grs_canvas &canvas, const d_level_unique_light_state &Lev
return;
polymodel *po;
const auto umd = find_morph_data(obj);
auto &LevelUniqueMorphObjectState = LevelUniqueObjectState.MorphObjectState;
const auto umd = find_morph_data(LevelUniqueMorphObjectState, obj);
if (!umd)
throw std::runtime_error("missing morph data");
const auto md = umd->get();

View file

@ -983,6 +983,7 @@ int state_save_all_sub(const char *filename, const char *desc)
auto &Objects = LevelUniqueObjectState.Objects;
auto &vcobjptr = Objects.vcptr;
auto &vmobjptr = Objects.vmptr;
auto &LevelUniqueMorphObjectState = LevelUniqueObjectState.MorphObjectState;
auto &RobotCenters = LevelSharedRobotcenterState.RobotCenters;
auto &Station = LevelUniqueFuelcenterState.Station;
fix tmptime32 = 0;
@ -1120,7 +1121,7 @@ int state_save_all_sub(const char *filename, const char *desc)
{
if (objp->type != OBJ_NONE && objp->render_type == RT_MORPH)
{
if (const auto umd = find_morph_data(objp))
if (const auto umd = find_morph_data(LevelUniqueMorphObjectState, objp))
{
const auto md = umd->get();
md->obj->control_type = md->morph_save_control_type;