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);
|
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);
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue