void CNdasUnitDevice::OnUnmounted() { _SetStatus(NDAS_UNITDEVICE_STATUS_NOT_MOUNTED); CNdasDevicePtr pParentDevice(m_pParentDevice); pParentDevice->OnUnitDeviceUnmounted(shared_from_this()); }
extern void TellReachedLabel( label_handle lbl ) /**************************************************/ { optbegin _ValidLbl( lbl ); _SetStatus( lbl, REACHED ); optend }
extern void TellKeepLabel( label_handle lbl ) /***********************************************/ { optbegin _ValidLbl( lbl ); _SetStatus( lbl, KEEPLABEL ); optend }
extern void TellCommonLabel( label_handle lbl, unsigned hdl ) /***************************************************************/ { optbegin _ValidLbl( lbl ); lbl->lbl.sym = (cg_sym_handle)(pointer_int)hdl; _SetStatus( lbl, COMMON_LBL ); optend }
//根据当前状态刷新摄像机 VOID CCamera_Scene::_UpdateCurStatus( fVector3& vEyePos, fVector3& vLookatPos) { switch(m_status) { // 普通状态 case NORMAL_STATUS: { return; } break; // 震荡状态 case VIBRATION_STATUS: { //---------------------------------------------------------------------- // 说明:更新相机震动动画 [6/13/2010 陈军龙] // 原理:将时间映射到曲线函数Sin上 // 映射公式: (2 * PI) / (1 / Frequency) = x / Age // 计算偏移量公式: offset = Amplitude * Sin(x) * (1 - Age / Duration) //---------------------------------------------------------------------- // 记录当前累计震动时间 m_CurVibParam.fAge += CGameProcedure::s_pTimeSystem->GetDeltaTime() / 1000; // 若超时则归位 if(m_CurVibParam.fAge > m_CurVibParam.fDuration) { _SetStatus(NORMAL_STATUS); return; } // 按照公式求偏移量 FLOAT offset = m_CurVibParam.fAmplitude * Ogre::Math::Sin(m_CurVibParam.fAge * Ogre::Math::TWO_PI * m_CurVibParam.fFrequency) * (1 - m_CurVibParam.fAge / m_CurVibParam.fDuration); // 进行偏移产生震动效果 vLookatPos.y += offset; vEyePos.y += offset; return; } break; default: KLAssert(0); return; } return; }
void AddLblDef( ins_entry *instr ) /***********************************/ { label_handle lbl; optbegin _LblRef( instr ) = NULL; lbl = _Label( instr ); for(;;) { _SetStatus( lbl, CODELABEL ); lbl->ins = instr; lbl = lbl->alias; if( lbl == NULL ) break; } optend }
//设置加入一次震荡 VOID CCamera_Scene::AddOneVib(FLOAT fAmplitude, FLOAT fDuration, UINT fFrequency) { if( fAmplitude <=0 || fDuration <= 0 || fFrequency<=0) return; if(m_status == VIBRATION_STATUS) { //以后再考虑多个震荡的融合 return; } m_CurVibParam.fAmplitude = fAmplitude; m_CurVibParam.fDuration = fDuration; m_CurVibParam.fFrequency = fFrequency; // 对持续时间进行约数,保证震动保持在周期的整数倍 int times = (int)fDuration * fFrequency; m_CurVibParam.fDuration = (times > 0 ? times : 1) / fDuration; _SetStatus(VIBRATION_STATUS); }
void CNdasUnitDevice::OnMounted() { _SetStatus(NDAS_UNITDEVICE_STATUS_MOUNTED); }
extern void TellProcLabel( label_handle lbl ) /***********************************************/ { _ValidLbl( lbl ); _SetStatus( lbl, PROCEDURE ); }