DoorKnob::DoorKnob() : Prop() { m_dwUsrFlgs |= USRFLG_CAN_ACTIVATE; m_pDebrisOverride = "Metal small"; // Do not allow gadget targets to transition... DestroyTransitionAggregate(); }
void Prop::Load(ILTMessage_Read *pMsg, uint32 dwLoadFlags) { if (!pMsg) return; m_ActivateTypeHandler.Load( pMsg ); LOAD_FLOAT(m_fAlpha); LOAD_BOOL(m_bMoveToFloor); LOAD_BOOL(m_bFirstUpdate); LOAD_bool( m_bCanDeactivate ); LOAD_VECTOR(m_vScale); LOAD_VECTOR(m_vObjectColor); m_damage.Load(pMsg, dwLoadFlags); LOAD_BOOL(m_bTouchable); LOAD_DWORD_CAST(m_eState, EnumAIStateType); /* THESE SHOULD NOT NEED TO BE SAVED - THEY ARE USED FOR INITIALIZING THE OBJECT ONLY!!! // 8/4/02 - Remove after testing LOAD_DWORD(m_dwUsrFlgs); LOAD_DWORD(m_dwFlags); LOAD_DWORD(m_dwFlags2); */ HMODELANIM hWorldAnim; uint32 cWorldAnims; LOAD_DWORD(cWorldAnims); for( uint32 iWorldAnim = 0; iWorldAnim < cWorldAnims; ++iWorldAnim ) { LOAD_DWORD(hWorldAnim); m_lstWorldAnims.push_back(hWorldAnim); } if (pMsg->Readbool()) { if(m_pDisturb == LTNULL) { m_pDisturb = debug_new(PropDisturbStruct); } m_pDisturb->Load(pMsg); } LOAD_bool( m_bActivatedOn ); char szString[1024]; LOAD_CHARSTRING( szString, ARRAY_LEN( szString )); m_sActivateOnCommand = szString; LOAD_CHARSTRING( szString, ARRAY_LEN( szString )); m_sActivateOffCommand = szString; LOAD_bool( m_bAttachmentShotOff ); LOAD_HOBJECT( m_hAttachmentOwner ); LOAD_FLOAT( m_fPitch ); LOAD_FLOAT( m_fYaw ); LOAD_FLOAT( m_fRoll ); LOAD_FLOAT( m_fPitchVel ); LOAD_FLOAT( m_fYawVel ); LOAD_FLOAT( m_fRollVel ); LOAD_bool( m_bRotatedToRest ); LOAD_bool( m_bRotating ); LOAD_bool( m_bFading ); LOAD_FLOAT( m_fFadeStartTime ); LOAD_FLOAT( m_fFadeDuration ); LOAD_FLOAT( m_fStartAlpha ); LOAD_FLOAT( m_fEndAlpha ); LOAD_bool( m_bFadeRemoveWhenDone ); LOAD_bool( m_bCanTransition ); // We must remove aggregates before sending the message to the base classs... if( !m_bCanTransition ) { // Disallow transitioning of this object through TransAMs... DestroyTransitionAggregate(); } }
uint32 Prop::EngineMessageFn(uint32 messageID, void *pData, LTFLOAT fData) { switch(messageID) { case MID_TOUCHNOTIFY: { if(m_bTouchable) { HOBJECT hToucher = (HOBJECT)pData; if( IsCharacterHitBox( hToucher ) ) { CCharacterHitBox* pHB = (CCharacterHitBox*)g_pLTServer->HandleToObject(hToucher); hToucher = pHB->GetModelObject(); } // Could be a body. if( IsCharacter(hToucher) ) { HandleTouch( hToucher ); } } else if( m_bAttachmentShotOff ) { HandleAttachmentTouch( (HOBJECT)pData ); } } break; case MID_UPDATE: { Update(); } break; case MID_MODELSTRINGKEY : { HandleModelString( (ArgList*)pData ); } break; case MID_PRECREATE: { if (fData == PRECREATE_WORLDFILE || fData == PRECREATE_STRINGPROP) { ObjectCreateStruct* pStruct = (ObjectCreateStruct*)pData; ReadProp(pStruct); // If this prop is spawned, assume it should be visible (if they // specify Visible 0, our parent class will handle it ;) if (fData == PRECREATE_STRINGPROP) { m_dwFlags |= FLAG_VISIBLE; } } // We must remove aggregates before sending the message to the base classs... if( !m_bCanTransition ) { // Disallow transitioning of this object through TransAMs... DestroyTransitionAggregate(); } uint32 dwRet = GameBase::EngineMessageFn(messageID, pData, fData); PostPropRead((ObjectCreateStruct*)pData); return dwRet; } break; case MID_INITIALUPDATE: { if (fData != INITIALUPDATE_SAVEGAME) { InitialUpdate(); } } break; case MID_SAVEOBJECT: { Save((ILTMessage_Write*)pData, (uint32)fData); } break; case MID_LOADOBJECT: { Load((ILTMessage_Read*)pData, (uint32)fData); } break; default : break; } return GameBase::EngineMessageFn(messageID, pData, fData); }
GameBase::~GameBase() { DestroyTransitionAggregate(); }