From 94401b4085cbf7a8ad1152bd52cdbe6506f93fac Mon Sep 17 00:00:00 2001 From: Kp Date: Wed, 26 Feb 2020 05:07:34 +0000 Subject: [PATCH] Pass LevelUniqueMorphObjectState to find_morph_data --- common/main/morph.h | 4 +++- similar/main/morph.cpp | 9 +++++---- similar/main/state.cpp | 3 ++- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/common/main/morph.h b/common/main/morph.h index 6a938f6b2..ba5d044bf 100644 --- a/common/main/morph.h +++ b/common/main/morph.h @@ -67,7 +67,9 @@ struct morph_data : prohibit_void_ptr explicit morph_data(object_base &o); }; -std::unique_ptr *find_morph_data(object_base &obj); +struct d_level_unique_morph_object_state; + +std::unique_ptr *find_morph_data(d_level_unique_morph_object_state &LevelUniqueMorphObjectState, object_base &obj); } void morph_start(vmobjptr_t obj); diff --git a/similar/main/morph.cpp b/similar/main/morph.cpp index 6d0914377..c4331f08d 100644 --- a/similar/main/morph.cpp +++ b/similar/main/morph.cpp @@ -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 *find_morph_data(object_base &obj) +std::unique_ptr *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(); diff --git a/similar/main/state.cpp b/similar/main/state.cpp index 9e61f45b1..c2411d79b 100644 --- a/similar/main/state.cpp +++ b/similar/main/state.cpp @@ -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;