mirror of
https://github.com/isledecomp/isle-portable.git
synced 2024-11-22 23:48:12 -05:00
Implement/match ViewLODListManager::Create (#611)
* Implement/match ViewLODListManager::Create * Add stdio.h header * Add remaining annotations
This commit is contained in:
parent
fb6eed9bff
commit
0067c24ead
4 changed files with 85 additions and 24 deletions
|
@ -201,7 +201,7 @@ class LegoOmni : public MxOmni {
|
|||
void DeleteWorld(LegoWorld* p_world);
|
||||
void FUN_1005b4f0(MxBool p_disable, MxU16 p_flags);
|
||||
void CreateBackgroundAudio();
|
||||
void RemoveWorld(const MxAtomId&, MxLong);
|
||||
void RemoveWorld(const MxAtomId& p_atom, MxLong p_objectId);
|
||||
MxResult RegisterScripts();
|
||||
MxS32 GetScriptIndex(const char* p_key);
|
||||
|
||||
|
|
|
@ -19,6 +19,8 @@ class LODObject;
|
|||
// geometric representation than the one preceeding it.
|
||||
//
|
||||
|
||||
// VTABLE: LEGO1 0x100dbdc8
|
||||
// SIZE 0x10
|
||||
class LODListBase {
|
||||
protected:
|
||||
LODListBase(size_t capacity);
|
||||
|
@ -36,6 +38,9 @@ class LODListBase {
|
|||
// maximum number of LODObject* LODListBase can hold
|
||||
size_t Capacity() const;
|
||||
|
||||
// SYNTHETIC: LEGO1 0x100a77b0
|
||||
// LODListBase::`scalar deleting destructor'
|
||||
|
||||
#ifdef _DEBUG
|
||||
virtual void Dump(void (*pTracer)(const char*, ...)) const;
|
||||
#endif
|
||||
|
@ -46,9 +51,9 @@ class LODListBase {
|
|||
LODListBase& operator=(const LODListBase&);
|
||||
|
||||
private:
|
||||
const LODObject** m_ppLODObject;
|
||||
size_t m_capacity;
|
||||
size_t m_size;
|
||||
const LODObject** m_ppLODObject; // 0x04
|
||||
size_t m_capacity; // 0x08
|
||||
size_t m_size; // 0x0c
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -56,6 +61,7 @@ class LODListBase {
|
|||
// LODList
|
||||
//
|
||||
|
||||
// SIZE 0x10
|
||||
template <class T>
|
||||
class LODList : public LODListBase {
|
||||
public:
|
||||
|
@ -174,6 +180,12 @@ inline const T* LODList<T>::PopBack()
|
|||
return static_cast<const T*>(LODListBase::PopBack());
|
||||
}
|
||||
|
||||
// VTABLE: LEGO1 0x100dbdc0
|
||||
// class LODList<ViewLOD>
|
||||
|
||||
// SYNTHETIC: LEGO1 0x100a7740
|
||||
// LODList<ViewLOD>::`scalar deleting destructor'
|
||||
|
||||
// re-enable: identifier was truncated to '255' characters in the debug information
|
||||
#pragma warning(default : 4786)
|
||||
|
||||
|
|
|
@ -2,7 +2,15 @@
|
|||
|
||||
#include "decomp.h"
|
||||
|
||||
DECOMP_SIZE_ASSERT(ViewLODListManager, 0x14);
|
||||
#include <stdio.h>
|
||||
|
||||
DECOMP_SIZE_ASSERT(ViewLODListManager, 0x14)
|
||||
DECOMP_SIZE_ASSERT(LODListBase, 0x10)
|
||||
DECOMP_SIZE_ASSERT(LODList<ViewLOD>, 0x10)
|
||||
DECOMP_SIZE_ASSERT(ViewLODList, 0x18)
|
||||
|
||||
// GLOBAL: LEGO1 0x10101064
|
||||
int g_unk0x10101064 = 0;
|
||||
|
||||
// FUNCTION: LEGO1 0x100a6fd0
|
||||
ViewLODListManager::ViewLODListManager()
|
||||
|
@ -15,7 +23,7 @@ ViewLODListManager::~ViewLODListManager()
|
|||
// TODO
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x100a72c0
|
||||
// FUNCTION: LEGO1 0x100a72c0
|
||||
ViewLODList* ViewLODListManager::Create(const ROIName& rROIName, int lodCount)
|
||||
{
|
||||
// returned ViewLODList has a refCount of 1, i.e. caller must call Release()
|
||||
|
@ -27,12 +35,25 @@ ViewLODList* ViewLODListManager::Create(const ROIName& rROIName, int lodCount)
|
|||
|
||||
assert(!Lookup(rROIName));
|
||||
|
||||
pLODList = new ViewLODList(lodCount);
|
||||
pLODList = new ViewLODList(lodCount, this);
|
||||
refCount = pLODList->AddRef();
|
||||
assert(refCount == 1);
|
||||
|
||||
pROIName = new char[strlen(rROIName) + 1];
|
||||
strcpy(pROIName, rROIName);
|
||||
ViewLODList* list = Lookup(rROIName);
|
||||
if (list != NULL) {
|
||||
list->Release();
|
||||
|
||||
char num[12];
|
||||
sprintf(num, "%d", g_unk0x10101064);
|
||||
pROIName = new char[strlen(rROIName) + strlen(num) + 1];
|
||||
strcpy(pROIName, rROIName);
|
||||
strcat(pROIName, num);
|
||||
g_unk0x10101064++;
|
||||
}
|
||||
else {
|
||||
pROIName = new char[strlen(rROIName) + 1];
|
||||
strcpy(pROIName, rROIName);
|
||||
}
|
||||
|
||||
m_map[pROIName] = pLODList;
|
||||
|
||||
|
|
|
@ -22,13 +22,18 @@ class ViewLODListManager;
|
|||
// ViewLODLists are managed (created and destroyed) by ViewLODListManager.
|
||||
//
|
||||
|
||||
// VTABLE: LEGO1 0x100dbdc4
|
||||
// SIZE 0x18
|
||||
class ViewLODList : public LODList<ViewLOD> {
|
||||
friend ViewLODListManager;
|
||||
|
||||
protected:
|
||||
ViewLODList(size_t capacity);
|
||||
ViewLODList(size_t capacity, ViewLODListManager* owner);
|
||||
~ViewLODList() override;
|
||||
|
||||
// SYNTHETIC: LEGO1 0x100a80f0
|
||||
// ViewLODList::`scalar deleting destructor'
|
||||
|
||||
public:
|
||||
inline int AddRef();
|
||||
inline int Release();
|
||||
|
@ -38,8 +43,8 @@ class ViewLODList : public LODList<ViewLOD> {
|
|||
#endif
|
||||
|
||||
private:
|
||||
int m_refCount;
|
||||
ViewLODListManager* m_owner;
|
||||
int m_refCount; // 0x10
|
||||
ViewLODListManager* m_owner; // 0x14
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -48,7 +53,7 @@ class ViewLODList : public LODList<ViewLOD> {
|
|||
// ??? for now, until we have symbol management
|
||||
typedef const char* ROIName;
|
||||
struct ROINameComparator {
|
||||
bool operator()(const ROIName& rName1, const ROIName& rName2) const
|
||||
unsigned char operator()(const ROIName& rName1, const ROIName& rName2) const
|
||||
{
|
||||
return strcmp((const char*) rName1, (const char*) rName2) > 0;
|
||||
}
|
||||
|
@ -96,28 +101,51 @@ class ViewLODListManager {
|
|||
ViewLODListMap m_map;
|
||||
};
|
||||
|
||||
// clang-format off
|
||||
// FUNCTION: LEGO1 0x1001dde0
|
||||
// _Lockit::~_Lockit
|
||||
|
||||
// clang-format off
|
||||
// TEMPLATE: LEGO1 0x100a7890
|
||||
// _Tree<char const *,pair<char const * const,ViewLODList *>,map<char const *,ViewLODList *,ROINameComparator,allocator<ViewLODList *> >::_Kfn,ROINameComparator,allocator<ViewLODList *> >::~_Tree<char const *,pair<char const * const,ViewLODList *>,map<char c
|
||||
// clang-format on
|
||||
|
||||
// clang-format off
|
||||
// TEMPLATE: LEGO1 0x100a80a0
|
||||
// map<char const *,ViewLODList *,ROINameComparator,allocator<ViewLODList *> >::~map<char const *,ViewLODList *,ROINameComparator,allocator<ViewLODList *> >
|
||||
// clang-format on
|
||||
|
||||
// TEMPLATE: LEGO1 0x100a70e0
|
||||
// Map<char const *,ViewLODList *,ROINameComparator>::~Map<char const *,ViewLODList *,ROINameComparator>
|
||||
|
||||
// TEMPLATE: LEGO1 0x100a77e0
|
||||
// LODListBase::~LODListBase
|
||||
|
||||
// TEMPLATE: LEGO1 0x100a7800
|
||||
// _Tree<char const *,pair<char const * const,ViewLODList *>,map<char const *,ViewLODList *,ROINameComparator,allocator<ViewLODList *> >::_Kfn,ROINameComparator,allocator<ViewLODList *> >::iterator::_Dec
|
||||
|
||||
// TEMPLATE: LEGO1 0x100a7850
|
||||
// _Tree<char const *,pair<char const * const,ViewLODList *>,map<char const *,ViewLODList *,ROINameComparator,allocator<ViewLODList *> >::_Kfn,ROINameComparator,allocator<ViewLODList *> >::iterator::_Inc
|
||||
|
||||
// TEMPLATE: LEGO1 0x100a7890
|
||||
// _Tree<char const *,pair<char const * const,ViewLODList *>,map<char const *,ViewLODList *,ROINameComparator,allocator<ViewLODList *> >::_Kfn,ROINameComparator,allocator<ViewLODList *> >::~_Tree<char const *,pair<char const * const,ViewLODList *>,map<char c
|
||||
|
||||
// TEMPLATE: LEGO1 0x100a7960
|
||||
// _Tree<char const *,pair<char const * const,ViewLODList *>,map<char const *,ViewLODList *,ROINameComparator,allocator<ViewLODList *> >::_Kfn,ROINameComparator,allocator<ViewLODList *> >::erase
|
||||
|
||||
// TEMPLATE: LEGO1 0x100a7db0
|
||||
// _Tree<char const *,pair<char const * const,ViewLODList *>,map<char const *,ViewLODList *,ROINameComparator,allocator<ViewLODList *> >::_Kfn,ROINameComparator,allocator<ViewLODList *> >::_Erase
|
||||
|
||||
// TEMPLATE: LEGO1 0x100a7df0
|
||||
// _Tree<char const *,pair<char const * const,ViewLODList *>,map<char const *,ViewLODList *,ROINameComparator,allocator<ViewLODList *> >::_Kfn,ROINameComparator,allocator<ViewLODList *> >::_Insert
|
||||
|
||||
// TEMPLATE: LEGO1 0x100a80a0
|
||||
// map<char const *,ViewLODList *,ROINameComparator,allocator<ViewLODList *> >::~map<char const *,ViewLODList *,ROINameComparator,allocator<ViewLODList *> >
|
||||
|
||||
// TEMPLATE: LEGO1 0x100a8160
|
||||
// LODList<ViewLOD>::~LODList<ViewLOD>
|
||||
|
||||
// GLOBAL: LEGO1 0x10101068
|
||||
// _Tree<char const *,pair<char const * const,ViewLODList *>,map<char const *,ViewLODList *,ROINameComparator,allocator<ViewLODList *> >::_Kfn,ROINameComparator,allocator<ViewLODList *> >::_Nil
|
||||
// clang-format on
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// ViewLODList implementation
|
||||
|
||||
inline ViewLODList::ViewLODList(size_t capacity) : LODList<ViewLOD>(capacity), m_refCount(0)
|
||||
inline ViewLODList::ViewLODList(size_t capacity, ViewLODListManager* owner) : LODList<ViewLOD>(capacity), m_refCount(0)
|
||||
{
|
||||
m_owner = owner;
|
||||
}
|
||||
|
||||
inline ViewLODList::~ViewLODList()
|
||||
|
|
Loading…
Reference in a new issue