本文整理汇总了C++中CSystem::GetOwnerOfSystem方法的典型用法代码示例。如果您正苦于以下问题:C++ CSystem::GetOwnerOfSystem方法的具体用法?C++ CSystem::GetOwnerOfSystem怎么用?C++ CSystem::GetOwnerOfSystem使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CSystem
的用法示例。
在下文中一共展示了CSystem::GetOwnerOfSystem方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ClearAssemblyList
// Funktion löscht einen Eintrag aus der Bauliste, wenn das Gebäude fertig wurde oder wir den ersten
// Eintrag manuell löschen möchten. Nach Aufruf dieser Funktion muß unbedingt die Funktion
// CalculateVariables() aufgerufen werden.
void CAssemblyList::ClearAssemblyList(const CPoint &ko, std::vector<CSystem>& systems)
{
// Alle prozentualen Anteile eines womöglich früheren Bauauftrages aus den Ressourcenrouten löschen
CSystem* system = &systems.at(ko.x+(ko.y)*STARMAP_SECTORS_HCOUNT);
CArray<CPoint> routesFrom;
ULONG resourcesFromRoutes[DERITIUM + 1];
ULONG nResInDistSys[DERITIUM + 1];
CPoint ptResourceDistributorKOs[DERITIUM + 1];
for (int i = 0; i <= DERITIUM; i++)
{
resourcesFromRoutes[i] = 0;
nResInDistSys[i] = 0;
ptResourceDistributorKOs[i] = CPoint(-1,-1);
}
// Ressourcenrouten durchgehen und womöglich die möglichen max. zusätzlichen Ressourcen erfragen
for (int y = 0; y < STARMAP_SECTORS_VCOUNT; y++)
{
for (int x = 0; x < STARMAP_SECTORS_HCOUNT; x++)
{
if (systems.at(x+(y)*STARMAP_SECTORS_HCOUNT).GetOwnerOfSystem() == system->GetOwnerOfSystem() && CPoint(x,y) != ko)
{
for (int i = 0; i < systems.at(x+(y)*STARMAP_SECTORS_HCOUNT).GetResourceRoutes()->GetSize(); i++)
{
if (systems.at(x+(y)*STARMAP_SECTORS_HCOUNT).GetResourceRoutes()->GetAt(i).GetKO() == ko)
{
// prozentualen Anteil vom alten Auftrag zurücksetzen
systems.at(x+(y)*STARMAP_SECTORS_HCOUNT).GetResourceRoutes()->ElementAt(i).SetPercent(0);
// Ressourcen über Route holen
if (systems.at(x+(y)*STARMAP_SECTORS_HCOUNT).GetBlockade() == NULL && systems.at(ko.x+(ko.y)*STARMAP_SECTORS_HCOUNT).GetBlockade() == NULL)
{
routesFrom.Add(CPoint(x,y));
BYTE res = systems.at(x+(y)*STARMAP_SECTORS_HCOUNT).GetResourceRoutes()->GetAt(i).GetResource();
resourcesFromRoutes[res] += systems.at(x+(y)*STARMAP_SECTORS_HCOUNT).GetResourceStore(res);
}
}
}
// gilt nicht bei Blockaden
if (systems.at(x+(y)*STARMAP_SECTORS_HCOUNT).GetBlockade() == NULL && systems.at(ko.x+(ko.y)*STARMAP_SECTORS_HCOUNT).GetBlockade() == NULL)
{
for (int res = TITAN; res <= DERITIUM; res++)
{
if (systems.at(x+(y)*STARMAP_SECTORS_HCOUNT).GetProduction()->GetResourceDistributor(res))
{
ptResourceDistributorKOs[res] = CPoint(x,y);
nResInDistSys[res] = systems.at(x+(y)*STARMAP_SECTORS_HCOUNT).GetResourceStore(res);
}
}
}
}
}
}
// AssemblyList Eintrag des gebauten Gebäudes/Updates/Schiffes löschen, wenn wir noch den
// Eintrag an der nächsten Stelle haben (sprich AssemblyList[1] != 0), dann alle
// anderen Einträge um eins nach vorn verschieben -> letzter wird frei
m_iEntry[0] = 0;
m_iNeededIndustryInAssemblyList[0] = 0;
m_iNeededTitanInAssemblyList[0] = 0;
m_iNeededDeuteriumInAssemblyList[0]= 0;
m_iNeededDuraniumInAssemblyList[0] = 0;
m_iNeededCrystalInAssemblyList[0] = 0;
m_iNeededIridiumInAssemblyList[0] = 0;
m_iNeededDeritiumInAssemblyList[0]= 0;
for (int i = 0; i < ALE - 1; i++)
{
// wenn der nächste Eintrag ungleich 0 ist
if (m_iEntry[i + 1] != 0)
{
m_iEntry[i] = m_iEntry[i + 1];
m_iNeededIndustryInAssemblyList[i] = m_iNeededIndustryInAssemblyList[i + 1];
m_iNeededTitanInAssemblyList[i] = m_iNeededTitanInAssemblyList[i + 1];
m_iNeededDeuteriumInAssemblyList[i]= m_iNeededDeuteriumInAssemblyList[i + 1];
m_iNeededDuraniumInAssemblyList[i] = m_iNeededDuraniumInAssemblyList[i + 1];
m_iNeededCrystalInAssemblyList[i] = m_iNeededCrystalInAssemblyList[i + 1];
m_iNeededIridiumInAssemblyList[i] = m_iNeededIridiumInAssemblyList[i + 1];
m_iNeededDeritiumInAssemblyList[i]= m_iNeededDeritiumInAssemblyList[i + 1];
// den Nachfolger überall auf NULL setzen
m_iEntry[i + 1] = 0;
m_iNeededIndustryInAssemblyList[i + 1] = 0;
m_iNeededTitanInAssemblyList[i + 1] = 0;
m_iNeededDeuteriumInAssemblyList[i + 1]= 0;
m_iNeededDuraniumInAssemblyList[i + 1] = 0;
m_iNeededCrystalInAssemblyList[i + 1] = 0;
m_iNeededIridiumInAssemblyList[i + 1] = 0;
}
else
break;
}
// Checken, ob der nächste Eintrag auch baubar ist -> genügend RES im Lager
// normalerweise kann man in der Bauliste ja nur Einträge vornehmen, wenn
// man genügend RES hat. Also sollte er auch baubar sein, wenn die IP
//.........这里部分代码省略.........
示例2: MakeEntry
BOOLEAN CAssemblyList::MakeEntry(int runningNumber, const CPoint &ko, std::vector<CSystem>& systems, bool bOnlyTest)
{
// Die Assemblylist durchgehen, ob wir einen Eintrag finden, der noch 0 ist
// dort können wir den nächsten speichern, gibt es keinen, dann ist die
// Bauliste voll
int entry = -1;
if (!bOnlyTest)
{
for (int i = 0; i < ALE; i++)
{
if (m_iEntry[i] == 0)
{
entry = i;
break;
}
}
// prüfen ob Bauliste schon voll!
if (entry == -1)
return FALSE;
}
CSystem* system = &systems.at(ko.x+(ko.y)*STARMAP_SECTORS_HCOUNT);
// Ressourcenrouten durchgehen und womöglich die möglichen max. zusätzlichen Ressourcen erfragen
CArray<CPoint> routesFrom;
ULONG resourcesFromRoutes[DERITIUM + 1];
ULONG nResInDistSys[DERITIUM + 1];
CPoint ptResourceDistributorKOs[DERITIUM + 1];
for (int i = 0; i <= DERITIUM; i++)
{
resourcesFromRoutes[i] = 0;
nResInDistSys[i] = 0;
ptResourceDistributorKOs[i] = CPoint(-1,-1);
}
for (int y = 0; y < STARMAP_SECTORS_VCOUNT; y++)
{
for (int x = 0; x < STARMAP_SECTORS_HCOUNT; x++)
{
if (systems.at(x+(y)*STARMAP_SECTORS_HCOUNT).GetOwnerOfSystem() == system->GetOwnerOfSystem() && CPoint(x,y) != ko)
{
for (int i = 0; i < systems.at(x+(y)*STARMAP_SECTORS_HCOUNT).GetResourceRoutes()->GetSize(); i++)
{
if (systems.at(x+(y)*STARMAP_SECTORS_HCOUNT).GetResourceRoutes()->GetAt(i).GetKO() == ko)
{
if (systems.at(x+(y)*STARMAP_SECTORS_HCOUNT).GetBlockade() == NULL && systems.at(ko.x+(ko.y)*STARMAP_SECTORS_HCOUNT).GetBlockade() == NULL)
{
routesFrom.Add(CPoint(x,y));
BYTE res = systems.at(x+(y)*STARMAP_SECTORS_HCOUNT).GetResourceRoutes()->GetAt(i).GetResource();
resourcesFromRoutes[res] += systems.at(x+(y)*STARMAP_SECTORS_HCOUNT).GetResourceStore(res);
}
}
}
// gilt nicht bei Blockaden
if (systems.at(x+(y)*STARMAP_SECTORS_HCOUNT).GetBlockade() == NULL && systems.at(ko.x+(ko.y)*STARMAP_SECTORS_HCOUNT).GetBlockade() == NULL)
{
for (int res = TITAN; res <= DERITIUM; res++)
{
if (systems.at(x+(y)*STARMAP_SECTORS_HCOUNT).GetProduction()->GetResourceDistributor(res))
{
ptResourceDistributorKOs[res] = CPoint(x,y);
nResInDistSys[res] = systems.at(x+(y)*STARMAP_SECTORS_HCOUNT).GetResourceStore(res);
}
}
}
}
}
}
// Überprüfen, ob wir genügend Rohstoffe in dem Lager haben
for (int res = TITAN; res <= DERITIUM; res++)
{
UINT nNeededRes = this->GetNeededResourceForBuild(res);
if (*system->GetResourceStorages(res) + resourcesFromRoutes[res] < nNeededRes && nResInDistSys[res] < nNeededRes)
return FALSE;
}
if (bOnlyTest)
return TRUE;
// Ansonsten gibt es genügend Rohstoffe
m_iEntry[entry] = runningNumber;
// Was wir für das notwendige Projekt alles so brauchen speichern
m_iNeededIndustryInAssemblyList[entry] = m_iNeededIndustryForBuild;
m_iNeededTitanInAssemblyList[entry] = m_iNeededTitanForBuild;
m_iNeededDeuteriumInAssemblyList[entry]= m_iNeededDeuteriumForBuild;
m_iNeededDuraniumInAssemblyList[entry] = m_iNeededDuraniumForBuild;
m_iNeededCrystalInAssemblyList[entry] = m_iNeededCrystalForBuild;
m_iNeededIridiumInAssemblyList[entry] = m_iNeededIridiumForBuild;
m_iNeededDeritiumInAssemblyList[entry]= m_iNeededDeritiumForBuild;
// Nur wenn es der erste Eintrag im Baumenü ist wird alles abgezogen
// ansonsten erst, nachdem das Projekt im ersten Eintrag fertig ist
if (entry == 0)
{
for (int res = TITAN; res <= DERITIUM; res++)
{
UINT nNeededRes = this->GetNeededResourceForBuild(res);
if (nNeededRes > 0)
{
// Ressource wird aus eigenem System bzw. über Ressourcenroute geholt
if (*system->GetResourceStorages(res) + resourcesFromRoutes[res] >= nNeededRes)
//.........这里部分代码省略.........