📄 keydata.cpp
字号:
// ----------------------------------------------------------------------- //
//
// MODULE : KeyData.cpp
//
// PURPOSE : KeyData implementation for Keyframer class
//
// CREATED : 12/31/97
//
// ----------------------------------------------------------------------- //
#include "KeyData.h"
#include "cpp_server_de.h"
// ----------------------------------------------------------------------- //
//
// ROUTINE: KeyData::KeyData()
//
// PURPOSE: Initialize object
//
// ----------------------------------------------------------------------- //
KeyData::KeyData()
{
ROT_INIT(m_rRot);
VEC_INIT(m_vPos);
m_nKeyType = POSITION_KEY;
m_fTimeStamp = 0.0f;
m_fRealTime = 0.0f;
m_fSoundRadius = 0.0f;
m_bLoopSound = DFALSE;
m_hstrSoundName = NULL;
m_hstrMessageTarget = NULL;
m_hstrMessageName = NULL;
m_hstrBPrintMessage = NULL;
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: KeyData::~KeyData()
//
// PURPOSE: Deallocate object
//
// ----------------------------------------------------------------------- //
KeyData::~KeyData()
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (pServerDE)
{
if (m_hstrSoundName) pServerDE->FreeString (m_hstrSoundName);
if (m_hstrMessageTarget) pServerDE->FreeString (m_hstrMessageTarget);
if (m_hstrMessageName) pServerDE->FreeString (m_hstrMessageName);
if (m_hstrBPrintMessage) pServerDE->FreeString (m_hstrBPrintMessage);
}
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: KeyData::Copy()
//
// PURPOSE: Copy the Key object's data
//
// ----------------------------------------------------------------------- //
DBOOL KeyData::Copy(Key* pKey)
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pKey || !pServerDE) return DFALSE;
pServerDE->GetObjectRotation(pServerDE->ObjectToHandle(pKey), &m_rRot);
pServerDE->GetObjectPos(pServerDE->ObjectToHandle(pKey), &m_vPos);
m_fTimeStamp = pKey->m_fTimeStamp;
m_fSoundRadius = pKey->m_fSoundRadius;
m_bLoopSound = pKey->m_bLoopSound;
// Copy the sound name if applicable...
if (pKey->m_hstrSoundName)
{
m_hstrSoundName = pServerDE->CopyString(pKey->m_hstrSoundName);
m_nKeyType |= SOUND_KEY;
}
// We only care about messages if we have both a target and a message...
if (pKey->m_hstrMessageTarget && pKey->m_hstrMessageName)
{
m_hstrMessageTarget = pServerDE->CopyString(pKey->m_hstrMessageTarget);
m_hstrMessageName = pServerDE->CopyString(pKey->m_hstrMessageName);
m_nKeyType |= MESSAGE_KEY;
}
// Copy the BPrint message...
if (pKey->m_hstrBPrintMessage)
{
m_hstrBPrintMessage = pServerDE->CopyString(pKey->m_hstrBPrintMessage);
m_nKeyType |= BPRINT_KEY;
}
return DTRUE;
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: KeyData::Save
//
// PURPOSE: Save the object
//
// ----------------------------------------------------------------------- //
void KeyData::Save(HMESSAGEWRITE hWrite, DDWORD dwSaveFlags)
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE || !hWrite) return;
pServerDE->WriteToMessageRotation(hWrite, &m_rRot);
pServerDE->WriteToMessageVector(hWrite, &m_vPos);
pServerDE->WriteToMessageDWord(hWrite, m_nKeyType);
pServerDE->WriteToMessageFloat(hWrite, m_fTimeStamp);
pServerDE->WriteToMessageFloat(hWrite, m_fRealTime);
pServerDE->WriteToMessageFloat(hWrite, m_fSoundRadius);
pServerDE->WriteToMessageByte(hWrite, (DBYTE)m_bLoopSound);
pServerDE->WriteToMessageHString(hWrite, m_hstrSoundName);
pServerDE->WriteToMessageHString(hWrite, m_hstrMessageTarget);
pServerDE->WriteToMessageHString(hWrite, m_hstrMessageName);
pServerDE->WriteToMessageHString(hWrite, m_hstrBPrintMessage);
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: KeyData::Load
//
// PURPOSE: Load the object
//
// ----------------------------------------------------------------------- //
void KeyData::Load(HMESSAGEREAD hRead, DDWORD dwLoadFlags)
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE || !hRead) return;
pServerDE->ReadFromMessageRotation(hRead, &m_rRot);
pServerDE->ReadFromMessageVector(hRead, &m_vPos);
m_nKeyType = pServerDE->ReadFromMessageDWord(hRead);
m_fTimeStamp = pServerDE->ReadFromMessageFloat(hRead);
m_fRealTime = pServerDE->ReadFromMessageFloat(hRead);
m_fSoundRadius = pServerDE->ReadFromMessageFloat(hRead);
m_bLoopSound = (DBOOL)pServerDE->ReadFromMessageByte(hRead);
m_hstrSoundName = pServerDE->ReadFromMessageHString(hRead);
m_hstrMessageTarget = pServerDE->ReadFromMessageHString(hRead);
m_hstrMessageName = pServerDE->ReadFromMessageHString(hRead);
m_hstrBPrintMessage = pServerDE->ReadFromMessageHString(hRead);
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: KeyData::CacheFiles
//
// PURPOSE: CacheFiles resources used by this object
//
// ----------------------------------------------------------------------- //
void KeyData::CacheFiles()
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE) return;
// {MD 9/23/98}
if(!(pServerDE->GetServerFlags() & SS_CACHING))
return;
char* pFile = DNULL;
if (m_hstrSoundName)
{
pFile = pServerDE->GetStringData(m_hstrSoundName);
if (pFile)
{
pServerDE->CacheFile(FT_SOUND, pFile);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -