// Return the value, looking up any indirect ref. void MHGenericObjectRef::GetValue(MHObjectRef &ref, MHEngine *engine) const { if (m_fIsDirect) ref.Copy(m_ObjRef); else { MHUnion result; MHRoot *pBase = engine->FindObject(m_Indirect); pBase->GetVariableValue(result, engine); result.CheckType(MHUnion::U_ObjRef); ref.Copy(result.m_ObjRefVal); } }
// Return the value, looking up any indirect ref. void MHGenericObjectRef::GetValue(MHObjectRef &ref, MHEngine *engine) const { if (m_fIsDirect) { ref.Copy(m_ObjRef); } else { // LVR - Hmm I don't think this is right. Should be: ref.Copy(m_Indirect); // But it's used in several places so workaround in Stream::MHActionGenericObjectRefFix MHUnion result; MHRoot *pBase = engine->FindObject(m_Indirect); pBase->GetVariableValue(result, engine); result.CheckType(MHUnion::U_ObjRef); ref.Copy(result.m_ObjRefVal); } }
// Fix for MHActionGenericObjectRef void MHActionGenericObjectRefFix::Perform(MHEngine *engine) { MHObjectRef ref; if (m_RefObject.m_fIsDirect) m_RefObject.GetValue(ref, engine); else ref.Copy(*m_RefObject.GetReference()); CallAction(engine, Target(engine), engine->FindObject(ref)); }