mirror of
https://github.com/isledecomp/isle.git
synced 2024-11-22 07:37:59 -05:00
Implement/match LegoPhonemePresenter::EndAction (#816)
This commit is contained in:
parent
97b502362d
commit
e7aec124a2
5 changed files with 66 additions and 17 deletions
|
@ -59,6 +59,7 @@ class LegoCharacterManager {
|
||||||
|
|
||||||
void FUN_100832a0();
|
void FUN_100832a0();
|
||||||
MxU32 GetRefCount(LegoROI* p_roi);
|
MxU32 GetRefCount(LegoROI* p_roi);
|
||||||
|
void FUN_10083c30(const char* p_name);
|
||||||
void FUN_10083db0(LegoROI* p_roi);
|
void FUN_10083db0(LegoROI* p_roi);
|
||||||
void FUN_10083f10(LegoROI* p_roi);
|
void FUN_10083f10(LegoROI* p_roi);
|
||||||
MxBool FUN_100849a0(LegoROI* p_roi, LegoTextureInfo* p_textureInfo);
|
MxBool FUN_100849a0(LegoROI* p_roi, LegoTextureInfo* p_textureInfo);
|
||||||
|
|
|
@ -239,6 +239,13 @@ MxU32 LegoCharacterManager::GetRefCount(LegoROI* p_roi)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// STUB: LEGO1 0x10083c30
|
||||||
|
// FUNCTION: BETA10 0x10074701
|
||||||
|
void LegoCharacterManager::FUN_10083c30(const char* p_name)
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x10083db0
|
// FUNCTION: LEGO1 0x10083db0
|
||||||
void LegoCharacterManager::FUN_10083db0(LegoROI* p_roi)
|
void LegoCharacterManager::FUN_10083db0(LegoROI* p_roi)
|
||||||
{
|
{
|
||||||
|
|
|
@ -62,7 +62,7 @@ void LegoPhonemePresenter::StartingTickle()
|
||||||
LegoPhonemeListCursor cursor(phonemeList);
|
LegoPhonemeListCursor cursor(phonemeList);
|
||||||
|
|
||||||
if (!cursor.Find(phoneme)) {
|
if (!cursor.Find(phoneme)) {
|
||||||
LegoTextureInfo* textureInfo = TextureContainer()->AddToList(m_textureInfo);
|
LegoTextureInfo* textureInfo = TextureContainer()->GetCached(m_textureInfo);
|
||||||
|
|
||||||
CharacterManager()->FUN_100849a0(entityROI, textureInfo);
|
CharacterManager()->FUN_100849a0(entityROI, textureInfo);
|
||||||
|
|
||||||
|
@ -117,12 +117,53 @@ void LegoPhonemePresenter::PutFrame()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x1004e870
|
// FUNCTION: LEGO1 0x1004e870
|
||||||
|
// FUNCTION: BETA10 0x100c3c24
|
||||||
void LegoPhonemePresenter::EndAction()
|
void LegoPhonemePresenter::EndAction()
|
||||||
{
|
{
|
||||||
// TODO
|
|
||||||
|
|
||||||
if (m_action != NULL) {
|
if (m_action != NULL) {
|
||||||
MxFlcPresenter::EndAction();
|
MxFlcPresenter::EndAction();
|
||||||
|
|
||||||
|
LegoPhonemeList* phonemeList = VideoManager()->GetPhonemeList();
|
||||||
|
LegoPhoneme* phoneme = new LegoPhoneme(m_roiName.GetData(), 1);
|
||||||
|
|
||||||
|
LegoPhonemeListCursor cursor(phonemeList);
|
||||||
|
|
||||||
|
if (cursor.Find(phoneme)) {
|
||||||
|
LegoPhoneme* newPhoneme = phoneme;
|
||||||
|
cursor.Current(phoneme);
|
||||||
|
delete newPhoneme;
|
||||||
|
|
||||||
|
if (phoneme->VTable0x00() == 1) {
|
||||||
|
LegoROI* roi;
|
||||||
|
|
||||||
|
if (m_unk0x84) {
|
||||||
|
roi = FindROI(m_roiName.GetData());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
roi = CharacterManager()->GetROI(m_roiName.GetData(), TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (roi != NULL) {
|
||||||
|
CharacterManager()->FUN_100849a0(roi, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!m_unk0x84) {
|
||||||
|
CharacterManager()->FUN_10083c30(m_roiName.GetData());
|
||||||
|
}
|
||||||
|
|
||||||
|
TextureContainer()->EraseCached(phoneme->VTable0x10());
|
||||||
|
TextureContainer()->EraseCached(phoneme->VTable0x08());
|
||||||
|
cursor.Destroy();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
phoneme->VTable0x04(phoneme->VTable0x00() - 1);
|
||||||
|
cursor.SetValue(phoneme);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!m_unk0x84) {
|
||||||
|
CharacterManager()->FUN_10083c30(m_roiName.GetData());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,7 @@ LegoTextureContainer::~LegoTextureContainer()
|
||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x100998e0
|
// FUNCTION: LEGO1 0x100998e0
|
||||||
LegoTextureInfo* LegoTextureContainer::AddToList(LegoTextureInfo* p_textureInfo)
|
LegoTextureInfo* LegoTextureContainer::GetCached(LegoTextureInfo* p_textureInfo)
|
||||||
{
|
{
|
||||||
DDSURFACEDESC desc, newDesc;
|
DDSURFACEDESC desc, newDesc;
|
||||||
DWORD width, height;
|
DWORD width, height;
|
||||||
|
@ -27,7 +27,7 @@ LegoTextureInfo* LegoTextureContainer::AddToList(LegoTextureInfo* p_textureInfo)
|
||||||
p_textureInfo->m_surface->Unlock(desc.lpSurface);
|
p_textureInfo->m_surface->Unlock(desc.lpSurface);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (LegoTextureList::iterator it = m_list.begin(); it != m_list.end(); it++) {
|
for (LegoCachedTextureList::iterator it = m_cached.begin(); it != m_cached.end(); it++) {
|
||||||
if ((*it).second == FALSE && (*it).first->m_texture->AddRef() != 0 && (*it).first->m_texture->Release() == 1) {
|
if ((*it).second == FALSE && (*it).first->m_texture->AddRef() != 0 && (*it).first->m_texture->Release() == 1) {
|
||||||
if (!strcmp((*it).first->m_name, p_textureInfo->m_name)) {
|
if (!strcmp((*it).first->m_name, p_textureInfo->m_name)) {
|
||||||
LPDIRECTDRAWSURFACE surface = (*it).first->m_surface;
|
LPDIRECTDRAWSURFACE surface = (*it).first->m_surface;
|
||||||
|
@ -92,7 +92,7 @@ LegoTextureInfo* LegoTextureContainer::AddToList(LegoTextureInfo* p_textureInfo)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
textureInfo->m_texture->SetAppData((DWORD) textureInfo);
|
textureInfo->m_texture->SetAppData((DWORD) textureInfo);
|
||||||
m_list.push_back(LegoTextureListElement(textureInfo, TRUE));
|
m_cached.push_back(LegoCachedTexture(textureInfo, TRUE));
|
||||||
|
|
||||||
textureInfo->m_texture->AddRef();
|
textureInfo->m_texture->AddRef();
|
||||||
|
|
||||||
|
@ -111,24 +111,24 @@ LegoTextureInfo* LegoTextureContainer::AddToList(LegoTextureInfo* p_textureInfo)
|
||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x10099cc0
|
// FUNCTION: LEGO1 0x10099cc0
|
||||||
void LegoTextureContainer::EraseFromList(LegoTextureInfo* p_textureInfo)
|
void LegoTextureContainer::EraseCached(LegoTextureInfo* p_textureInfo)
|
||||||
{
|
{
|
||||||
if (p_textureInfo == NULL) {
|
if (p_textureInfo == NULL) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef COMPAT_MODE
|
#ifdef COMPAT_MODE
|
||||||
LegoTextureList::iterator it;
|
LegoCachedTextureList::iterator it;
|
||||||
for (it = m_list.begin(); it != m_list.end(); it++) {
|
for (it = m_cached.begin(); it != m_cached.end(); it++) {
|
||||||
#else
|
#else
|
||||||
for (LegoTextureList::iterator it = m_list.begin(); it != m_list.end(); it++) {
|
for (LegoCachedTextureList::iterator it = m_cached.begin(); it != m_cached.end(); it++) {
|
||||||
#endif
|
#endif
|
||||||
if ((*it).first == p_textureInfo) {
|
if ((*it).first == p_textureInfo) {
|
||||||
(*it).second = FALSE;
|
(*it).second = FALSE;
|
||||||
|
|
||||||
if (p_textureInfo->m_texture->Release() == TRUE) {
|
if (p_textureInfo->m_texture->Release() == TRUE) {
|
||||||
delete p_textureInfo;
|
delete p_textureInfo;
|
||||||
m_list.erase(it);
|
m_cached.erase(it);
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -98,8 +98,8 @@ class LegoContainer {
|
||||||
// VTABLE: LEGO1 0x100d86d4
|
// VTABLE: LEGO1 0x100d86d4
|
||||||
// class LegoContainer<LegoTextureInfo>
|
// class LegoContainer<LegoTextureInfo>
|
||||||
|
|
||||||
typedef pair<LegoTextureInfo*, BOOL> LegoTextureListElement;
|
typedef pair<LegoTextureInfo*, BOOL> LegoCachedTexture;
|
||||||
typedef list<LegoTextureListElement> LegoTextureList;
|
typedef list<LegoCachedTexture> LegoCachedTextureList;
|
||||||
|
|
||||||
// VTABLE: LEGO1 0x100d86fc
|
// VTABLE: LEGO1 0x100d86fc
|
||||||
// SIZE 0x24
|
// SIZE 0x24
|
||||||
|
@ -108,11 +108,11 @@ class LegoTextureContainer : public LegoContainer<LegoTextureInfo> {
|
||||||
LegoTextureContainer() { m_ownership = TRUE; }
|
LegoTextureContainer() { m_ownership = TRUE; }
|
||||||
~LegoTextureContainer() override;
|
~LegoTextureContainer() override;
|
||||||
|
|
||||||
LegoTextureInfo* AddToList(LegoTextureInfo* p_textureInfo);
|
LegoTextureInfo* GetCached(LegoTextureInfo* p_textureInfo);
|
||||||
void EraseFromList(LegoTextureInfo* p_textureInfo);
|
void EraseCached(LegoTextureInfo* p_textureInfo);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
LegoTextureList m_list; // 0x18
|
LegoCachedTextureList m_cached; // 0x18
|
||||||
};
|
};
|
||||||
|
|
||||||
// TEMPLATE: LEGO1 0x10059c50
|
// TEMPLATE: LEGO1 0x10059c50
|
||||||
|
|
Loading…
Reference in a new issue