Move some stuff to C4GameObjects

stable-5.2
Günther Brammer 2009-04-19 00:23:58 +02:00
parent cb1e6e6a5c
commit 07b58d88f3
4 changed files with 64 additions and 78 deletions

View File

@ -83,6 +83,12 @@ class C4GameObjects : public C4NotifyingObjectList
bool ValidateOwners();
bool AssignInfo();
void AssignPlrViewRange();
void SortByCategory();
void SyncClearance();
void ResetAudibility();
void UpdateTransferZones();
void SetOCF();
protected:
C4Set<C4PropList *> PropLists;
friend class C4PropList;

View File

@ -82,7 +82,6 @@ class C4ObjectList
iterator begin();
const iterator end();
void SortByCategory();
void Default();
void Clear();
void Sort();
@ -98,11 +97,6 @@ class C4ObjectList
void CloseMenus();
void UpdateGraphics(bool fGraphicsChanged);
void UpdateFaces(bool bUpdateShape);
void SyncClearance();
void ResetAudibility();
void UpdateTransferZones();
void SetOCF();
void GetIDList(C4IDList &rList, int32_t dwCategory=C4D_All);
void ClearInfo(C4ObjectInfo *pInfo);
typedef int SortProc(C4Object *, C4Object *);
@ -113,7 +107,6 @@ class C4ObjectList
BOOL AssignInfo();
BOOL ValidateOwners();
BOOL AssignPlrViewRange();
StdStrBuf GetNameList(C4DefList &rDefs, DWORD dwCategory=C4D_All);
BOOL IsClear() const;
BOOL DenumerateRead();

View File

@ -942,3 +942,61 @@ bool C4GameObjects::AssignInfo()
if (!InactiveObjects.AssignInfo()) fSucc = false;
return fSucc;
}
void C4GameObjects::AssignPlrViewRange()
{
C4ObjectLink *cLnk;
for (cLnk=Last; cLnk; cLnk=cLnk->Prev)
if (cLnk->Obj->Status)
cLnk->Obj->AssignPlrViewRange();
}
void C4GameObjects::SortByCategory()
{
C4ObjectLink *cLnk;
BOOL fSorted;
// Sort by category
do
{
fSorted = TRUE;
for (cLnk=First; cLnk && cLnk->Next; cLnk=cLnk->Next)
if ((cLnk->Obj->Category & C4D_SortLimit) < (cLnk->Next->Obj->Category & C4D_SortLimit))
{
RemoveLink(cLnk);
InsertLink(cLnk,cLnk->Next);
fSorted = FALSE;
break;
}
}
while (!fSorted);
}
void C4GameObjects::SyncClearance()
{
C4ObjectLink *cLnk;
for (cLnk=First; cLnk; cLnk=cLnk->Next)
if (cLnk->Obj)
cLnk->Obj->SyncClearance();
}
void C4GameObjects::UpdateTransferZones()
{
C4Object *cobj; C4ObjectLink *clnk;
for (clnk=First; clnk && (cobj=clnk->Obj); clnk=clnk->Next)
cobj->Call(PSF_UpdateTransferZone);
}
void C4GameObjects::ResetAudibility()
{
C4Object *cobj; C4ObjectLink *clnk;
for (clnk=First; clnk && (cobj=clnk->Obj); clnk=clnk->Next)
cobj->Audible=cobj->AudiblePan=0;
}
void C4GameObjects::SetOCF()
{
C4ObjectLink *cLnk;
for (cLnk=First; cLnk; cLnk=cLnk->Next)
if (cLnk->Obj->Status)
cLnk->Obj->SetOCF();
}

View File

@ -608,16 +608,6 @@ BOOL C4ObjectList::AssignInfo()
return TRUE;
}
BOOL C4ObjectList::AssignPlrViewRange()
{
C4ObjectLink *cLnk;
for (cLnk=Last; cLnk; cLnk=cLnk->Prev)
if (cLnk->Obj->Status)
cLnk->Obj->AssignPlrViewRange();
return TRUE;
}
void C4ObjectList::ClearInfo(C4ObjectInfo *pInfo)
{
C4ObjectLink *cLnk;
@ -727,14 +717,6 @@ void C4NotifyingObjectList::RemoveLink(C4ObjectLink *pLnk)
ObjectListChangeListener.OnObjectRemove(this, pLnk);
}
void C4ObjectList::SyncClearance()
{
C4ObjectLink *cLnk;
for (cLnk=First; cLnk; cLnk=cLnk->Next)
if (cLnk->Obj)
cLnk->Obj->SyncClearance();
}
void C4ObjectList::UpdateGraphics(bool fGraphicsChanged)
{
C4ObjectLink *cLnk;
@ -758,17 +740,6 @@ void C4ObjectList::DrawSelectMark(C4TargetFacet &cgo, float Zoom)
cLnk->Obj->DrawSelectMark(cgo, Zoom);
}
void C4ObjectList::GetIDList(C4IDList &rList, int32_t dwCategory)
{
C4ObjectLink *clnk;
C4Def *pDef;
rList.Clear();
for (clnk=First; clnk && clnk->Obj; clnk=clnk->Next)
if (clnk->Obj->Status)
if ((dwCategory==C4D_All) || ( (pDef=C4Id2Def(clnk->Obj->Def->id)) && (pDef->Category & dwCategory) ))
rList.IncreaseIDCount(clnk->Obj->Def->id);
}
void C4ObjectList::CloseMenus()
{
C4Object *cobj; C4ObjectLink *clnk;
@ -776,14 +747,6 @@ void C4ObjectList::CloseMenus()
cobj->CloseMenu(true);
}
void C4ObjectList::SetOCF()
{
C4ObjectLink *cLnk;
for (cLnk=First; cLnk; cLnk=cLnk->Next)
if (cLnk->Obj->Status)
cLnk->Obj->SetOCF();
}
void C4ObjectList::Copy(const C4ObjectList &rList)
{
Clear(); Default();
@ -798,40 +761,6 @@ void C4ObjectList::Default()
pEnumerated=NULL;
}
void C4ObjectList::UpdateTransferZones()
{
C4Object *cobj; C4ObjectLink *clnk;
for (clnk=First; clnk && (cobj=clnk->Obj); clnk=clnk->Next)
cobj->Call(PSF_UpdateTransferZone);
}
void C4ObjectList::ResetAudibility()
{
C4Object *cobj; C4ObjectLink *clnk;
for (clnk=First; clnk && (cobj=clnk->Obj); clnk=clnk->Next)
cobj->Audible=cobj->AudiblePan=0;
}
void C4ObjectList::SortByCategory()
{
C4ObjectLink *cLnk;
BOOL fSorted;
// Sort by category
do
{
fSorted = TRUE;
for (cLnk=First; cLnk && cLnk->Next; cLnk=cLnk->Next)
if ((cLnk->Obj->Category & C4D_SortLimit) < (cLnk->Next->Obj->Category & C4D_SortLimit))
{
RemoveLink(cLnk);
InsertLink(cLnk,cLnk->Next);
fSorted = FALSE;
break;
}
}
while (!fSorted);
}
BOOL C4ObjectList::OrderObjectBefore(C4Object *pObj1, C4Object *pObj2)
{
// safety