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); 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); 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; d_level_unique_morph_object_state::~d_level_unique_morph_object_state() = default;
//returns ptr to data for this object, or NULL if none //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; auto &morph_objects = LevelUniqueMorphObjectState.morph_objects;
if (Newdemo_state == ND_STATE_PLAYBACK) { if (Newdemo_state == ND_STATE_PLAYBACK) {
return nullptr; 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 //process the morphing object for one frame
void do_morph_frame(object &obj) 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 if (!umd) { //maybe loaded half-morphed from disk
obj.flags |= OF_SHOULD_BE_DEAD; //..so kill it 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; return;
polymodel *po; polymodel *po;
const auto umd = find_morph_data(obj); auto &LevelUniqueMorphObjectState = LevelUniqueObjectState.MorphObjectState;
const auto umd = find_morph_data(LevelUniqueMorphObjectState, obj);
if (!umd) if (!umd)
throw std::runtime_error("missing morph data"); throw std::runtime_error("missing morph data");
const auto md = umd->get(); 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 &Objects = LevelUniqueObjectState.Objects;
auto &vcobjptr = Objects.vcptr; auto &vcobjptr = Objects.vcptr;
auto &vmobjptr = Objects.vmptr; auto &vmobjptr = Objects.vmptr;
auto &LevelUniqueMorphObjectState = LevelUniqueObjectState.MorphObjectState;
auto &RobotCenters = LevelSharedRobotcenterState.RobotCenters; auto &RobotCenters = LevelSharedRobotcenterState.RobotCenters;
auto &Station = LevelUniqueFuelcenterState.Station; auto &Station = LevelUniqueFuelcenterState.Station;
fix tmptime32 = 0; 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 (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(); const auto md = umd->get();
md->obj->control_type = md->morph_save_control_type; md->obj->control_type = md->morph_save_control_type;