#include <src/Ext/House/Body.h>
List of all members.
Classes |
class | ExtData |
Public Types |
enum | RequirementStatus { Forbidden = 1,
Incomplete = 2,
Complete = 3,
Overridden = 4
} |
enum | BuildLimitStatus { ReachedPermanently = -1,
ReachedTemporarily = 0,
NotReached = 1
} |
typedef HouseClass | TT |
Static Public Member Functions |
static signed int | BuildLimitRemaining (HouseClass *pHouse, TechnoTypeClass *pItem) |
static BuildLimitStatus | CheckBuildLimit (HouseClass *pHouse, TechnoTypeClass *pItem, bool IncludeQueued) |
static RequirementStatus | RequirementsMet (HouseClass *pHouse, TechnoTypeClass *pItem) |
static bool | PrerequisitesMet (HouseClass *pHouse, TechnoTypeClass *pItem) |
static bool | PrerequisitesListed (Prereqs::BTypeList *List, TechnoTypeClass *pItem) |
static bool | HasNeededFactory (HouseClass *pHouse, TechnoTypeClass *pItem) |
static signed int | PrereqValidate (HouseClass *pHouse, TechnoTypeClass *pItem, bool BuildLimitOnly, bool IncludeQueued) |
Static Public Attributes |
static Container< HouseExt > | ExtMap |
Member Typedef Documentation
Member Enumeration Documentation
- Enumerator:
ReachedPermanently |
|
ReachedTemporarily |
|
NotReached |
|
- Enumerator:
Forbidden |
|
Incomplete |
|
Complete |
|
Overridden |
|
Member Function Documentation
signed int HouseExt::BuildLimitRemaining |
( |
HouseClass * |
pHouse, |
|
|
TechnoTypeClass * |
pItem |
|
) |
| [static] |
{
int BuildLimit = pItem->BuildLimit;
if(BuildLimit >= 0) {
BuildLimit -= pHouse->CountOwnedNow(pItem);
} else {
BuildLimit = abs(BuildLimit);
BuildLimit -= pHouse->CountOwnedEver(pItem);
}
return std::min(BuildLimit, 0x7FFFFFFF);
}
HouseExt::BuildLimitStatus HouseExt::CheckBuildLimit |
( |
HouseClass * |
pHouse, |
|
|
TechnoTypeClass * |
pItem, |
|
|
bool |
IncludeQueued |
|
) |
| [static] |
bool HouseExt::HasNeededFactory |
( |
HouseClass * |
pHouse, |
|
|
TechnoTypeClass * |
pItem |
|
) |
| [static] |
{
DWORD ItemOwners = pItem->GetOwners();
eAbstractType WhatAmI = pItem->WhatAmI();
for(int i = 0; i < pHouse->Buildings.Count; ++i) {
auto pBld = pHouse->Buildings[i];
if(!pBld->InLimbo && pBld->HasPower) {
if(pBld->Type->Factory == WhatAmI) {
if(pBld->GetCurrentMission() != mission_Selling && pBld->QueuedMission != mission_Selling) {
if((pBld->Type->GetOwners() & ItemOwners) != 0) {
return true;
}
}
}
}
}
return false;
}
bool HouseExt::PrerequisitesListed |
( |
Prereqs::BTypeList * |
List, |
|
|
TechnoTypeClass * |
pItem |
|
) |
| [static] |
bool HouseExt::PrerequisitesMet |
( |
HouseClass * |
pHouse, |
|
|
TechnoTypeClass * |
pItem |
|
) |
| [static] |
signed int HouseExt::PrereqValidate |
( |
HouseClass * |
pHouse, |
|
|
TechnoTypeClass * |
pItem, |
|
|
bool |
BuildLimitOnly, |
|
|
bool |
IncludeQueued |
|
) |
| [static] |
{
if(!BuildLimitOnly) {
RequirementStatus ReqsMet = HouseExt::RequirementsMet(pHouse, pItem);
if(ReqsMet == Forbidden || ReqsMet == Incomplete) {
return 0;
}
if(!pHouse->IsHumanoid()) {
if(Ares::GlobalControls::AllowBypassBuildLimit[pHouse->AIDifficulty]) {
return 1;
} else {
return (signed int)HouseExt::CheckBuildLimit(pHouse, pItem, IncludeQueued);
}
}
if(ReqsMet == Complete) {
if(!HouseExt::PrerequisitesMet(pHouse, pItem)) {
return 0;
}
}
}
if(!HouseExt::HasNeededFactory(pHouse, pItem)) {
Debug::DevLog(Debug::Error, "[NCO Bug detected] "
"House %ls meets all requirements to build %s, but doesn't have a suitable factory!\n",
pHouse->UIName, pItem->ID);
return 0;
}
return (signed int)HouseExt::CheckBuildLimit(pHouse, pItem, IncludeQueued);
}
Member Data Documentation
The documentation for this class was generated from the following files: