Pass LevelUniqueMorphObjectState to find_morph_data
This commit is contained in:
parent
40726aa580
commit
94401b4085
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue