本文整理汇总了C++中TSortMap类的典型用法代码示例。如果您正苦于以下问题:C++ TSortMap类的具体用法?C++ TSortMap怎么用?C++ TSortMap使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了TSortMap类的17个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: Lock
bool CAeonEngine::OpenTableDefinitions (void)
// OpenTableDefinitions
//
// Opens and reads all tables in all volumes. Note that we have no idea what
// could have happened since our last boot--someone could have copied files
// all over the place. We make almost no assumptions.
{
CSmartLock Lock(m_cs);
int i, j;
CString sError;
// Loop over all volumes and end up with a list of tables and volumes
TSortMap<CString, TArray<CString>> Tables;
for (i = 0; i < m_LocalVolumes.GetCount(); i++)
{
CString sVolume = m_LocalVolumes.GetVolume(i);
TArray<CString> Dirs;
fileGetFileList(fileAppend(m_LocalVolumes.GetPath(i), FILESPEC_TABLE_DIR_FILTER), FFL_FLAG_DIRECTORIES_ONLY | FFL_FLAG_RELATIVE_FILESPEC, &Dirs);
for (j = 0; j < Dirs.GetCount(); j++)
{
TArray<CString> *pList = Tables.SetAt(Dirs[j]);
pList->Insert(sVolume);
}
}
// Open all tables
for (i = 0; i < Tables.GetCount(); i++)
{
CString sName = Tables.GetKey(i);
CAeonTable *pTable = new CAeonTable;
if (!pTable->Open(GetProcessCtx(), &m_LocalVolumes, sName, Tables[i], &sError))
{
Log(MSG_LOG_ERROR, strPattern("Unable to load %s: %s", sName, sError));
delete pTable;
continue;
}
m_Tables.Insert(sName, pTable);
}
// Done
return true;
}
开发者ID:gmoromisato,项目名称:Hexarc,代码行数:52,代码来源:CAeonEngine.cpp
示例2:
CComplexStruct::CComplexStruct (const TSortMap<CString, CString> &Src)
// CComplexStruct construtor
{
int i;
for (i = 0; i < Src.GetCount(); i++)
{
const CString &sKey = Src.GetKey(i);
if (!sKey.IsEmpty())
SetElement(sKey, Src.GetValue(i));
}
}
开发者ID:kronosaur,项目名称:Hexarc,代码行数:14,代码来源:IComplexDatum.cpp
示例3: CacheGlobalEvents
void CDesignCollection::CacheGlobalEvents (CDesignType *pType)
// CacheGlobalEvents
//
// Caches global events for the given type
{
DEBUG_TRY
int i, j;
const CEventHandler *pEvents;
TSortMap<CString, SEventHandlerDesc> FullEvents;
pType->GetEventHandlers(&pEvents, &FullEvents);
if (pEvents)
{
SEventHandlerDesc Event;
Event.pExtension = pType->GetExtension();
for (i = 0; i < pEvents->GetCount(); i++)
{
CString sEvent = pEvents->GetEvent(i, &Event.pCode);
for (j = 0; j < evtCount; j++)
if (m_EventsCache[j]->Insert(pType, sEvent, Event))
break;
}
}
else
{
for (i = 0; i < FullEvents.GetCount(); i++)
{
CString sEvent = FullEvents.GetKey(i);
const SEventHandlerDesc &Event = FullEvents[i];
for (j = 0; j < evtCount; j++)
if (m_EventsCache[j]->Insert(pType, sEvent, Event))
break;
}
}
DEBUG_CATCH
}
开发者ID:bmer,项目名称:Mammoth,代码行数:43,代码来源:CDesignCollection.cpp
示例4: AccumulateSystem
void AccumulateSystem (CTopologyNode *pNode, CSystem *pSystem, TSortMap<DWORD, STypeInfo> &AllTypes)
{
int j;
int iSystemLevel = pSystem->GetLevel();
// Add the encounters to the appropriate tables
for (j = 0; j < pSystem->GetObjectCount(); j++)
{
CSpaceObject *pObj = pSystem->GetObject(j);
if (pObj)
{
// Add this encounter to the table
CDesignType *pType;
if ((pType = pObj->GetEncounterInfo()) || (pType = pObj->GetType()))
{
STypeInfo *pInfo = AllTypes.SetAt(pType->GetUNID());
pInfo->iTotalCount++;
pInfo->PerLevel[iSystemLevel]++;
}
// Enumerate the items in this object
CItemListManipulator ItemList(pObj->GetItemList());
ItemList.ResetCursor();
while (ItemList.MoveCursorForward())
{
const CItem &Item(ItemList.GetItemAtCursor());
if (!Item.IsInstalled() && !Item.IsDamaged())
{
STypeInfo *pInfo = AllTypes.SetAt(Item.GetType()->GetUNID());
pInfo->iTotalCount += Item.GetCount();
pInfo->PerLevel[iSystemLevel] += Item.GetCount();
}
}
}
}
}
开发者ID:bmer,项目名称:Transmuter,代码行数:42,代码来源:SimTables.cpp
示例5: OutputTypeTable
ALERROR OutputTypeTable (TSortMap<DWORD, STypeStats> &AllStats, int iSystemSample)
{
ALERROR error;
int i, j;
// Output all items to a well-known file
CTextFileLog Output(TYPE_COUNT_FILENAME);
if (error = Output.Create(FALSE))
{
printf("ERROR: Unable to create output file: %s\n", TYPE_COUNT_FILENAME.GetASCIIZPointer());
return error;
}
for (i = 0; i < AllStats.GetCount(); i++)
{
DWORD dwUNID = AllStats.GetKey(i);
const STypeStats &Stats = AllStats[i];
TArray<TNumberSeries<double>::SHistogramPoint> Histogram;
Stats.PerGame.CalcHistogram(&Histogram);
CString sLine;
sLine = strPatternSubst("0x%x\t%d\t%d", dwUNID, (int)((Stats.PerGame.GetMean() * 1000.0) + 0.5), Histogram.GetCount());
for (j = 0; j < Histogram.GetCount(); j++)
sLine.Append(strPatternSubst("\t%d\t%d", Histogram[j].iValue, (int)(Histogram[j].rPercent * 100.0 + 0.5)));
Output.LogOutput(0, sLine);
}
if (error = Output.Close())
{
printf("ERROR: Unable to create output file: %s\n", TYPE_COUNT_FILENAME.GetASCIIZPointer());
return error;
}
return NOERROR;
}
开发者ID:bmer,项目名称:Transmuter,代码行数:39,代码来源:SimTables.cpp
示例6: AddTypesUsedRecursive
void AddTypesUsedRecursive (CUniverse &Universe, DWORD dwUNID, TSortMap<DWORD, bool> *retTypesUsed)
{
int i;
// If already added, don't bother
if (retTypesUsed->Find(dwUNID))
return;
CDesignType *pType = Universe.FindDesignType(dwUNID);
if (pType == NULL)
return;
retTypesUsed->SetAt(dwUNID, true);
// Recurse
TSortMap<DWORD, bool> TypesUsed;
pType->AddTypesUsed(&TypesUsed);
for (i = 0; i < TypesUsed.GetCount(); i++)
AddTypesUsedRecursive(Universe, TypesUsed.GetKey(i), retTypesUsed);
}
开发者ID:AvanWolf,项目名称:Transcendence,代码行数:22,代码来源:Stats.cpp
示例7: GenerateTypeIslands
void GenerateTypeIslands (CUniverse &Universe, CXMLElement *pCmdLine)
{
int i, j;
bool bExcludeImages = true;
printf("TYPE ISLANDS\n");
printf("------------\n\n");
// Make a list of default types
#if 0
g_DefaultTypes.SetAt(0x00001001, true); // independent sovereign
g_DefaultTypes.SetAt(0x00001002, true); // Commonwealth sovereign
g_DefaultTypes.SetAt(0x00001003, true); // independent sovereign
g_DefaultTypes.SetAt(0x00001007, true); // ares sovereign
g_DefaultTypes.SetAt(0x0000100c, true); // sung slavers sovereign
g_DefaultTypes.SetAt(0x0000100f, true); // auton sovereign
g_DefaultTypes.SetAt(0x00001011, true); // corporate hierarchy
g_DefaultTypes.SetAt(0x00004027, true); // container of frozen supplies
g_DefaultTypes.SetAt(0x0000402c, true); // pteracnium ore
g_DefaultTypes.SetAt(0x000040ae, true); // helium3 reactor assembly
g_DefaultTypes.SetAt(0x000040af, true); // pteracnium fuel
g_DefaultTypes.SetAt(0x000040ca, true); // lancer cannon
g_DefaultTypes.SetAt(0x000040e2, true); // worldship armor
g_DefaultTypes.SetAt(0x00004100, true); // xenotite ore
g_DefaultTypes.SetAt(0x00004109, true); // SN2500 reactor
g_DefaultTypes.SetAt(0x00004167, true); // tetramite ore
g_DefaultTypes.SetAt(0x00005004, true); // wreck ejecta
g_DefaultTypes.SetAt(0x0000500c, true); // blast explosion 2
g_DefaultTypes.SetAt(0x0000500d, true); // blast explosion 3
g_DefaultTypes.SetAt(0x0000500e, true); // blast explosion 4
g_DefaultTypes.SetAt(0x0000500f, true); // thermo explosion 1
g_DefaultTypes.SetAt(0x00005011, true); // thermo explosion 3
g_DefaultTypes.SetAt(0x00005012, true); // thermo explosion 4
g_DefaultTypes.SetAt(0x00009004, true); // shield effect
g_DefaultTypes.SetAt(0x00009007, true); // explosion effect
g_DefaultTypes.SetAt(0x0000900a, true); // fire effect
g_DefaultTypes.SetAt(0x0000A003, true); // dsAbandonedStation
g_DefaultTypes.SetAt(0x0000a017, true); // dock screen?
g_DefaultTypes.SetAt(0x001a200c, true); // wreck of the CSC Europa
g_DefaultTypes.SetAt(0x001a200e, true); // sandstorm wreck
g_DefaultTypes.SetAt(0x001c1002, true); // ares sect in Heretic
g_DefaultTypes.SetAt(0x08020102, true); // huari empire sovereign
g_DefaultTypes.SetAt(0x08040140, true); // gaian processor station
#endif
// Create a reverse index of all type dependencies
ReverseIndexMap ReverseIndex;
for (i = 0; i < Universe.GetDesignTypeCount(); i++)
{
CDesignType *pType = Universe.GetDesignType(i);
// Get the list of UNIDs that this type uses
TSortMap<DWORD, bool> TypesUsed;
pType->AddTypesUsed(&TypesUsed);
for (j = 0; j < TypesUsed.GetCount(); j++)
{
CDesignType *pRequired = Universe.FindDesignType(TypesUsed.GetKey(j));
if (pRequired == NULL)
continue;
// Add to reverse index
TArray<DWORD> *pList = ReverseIndex.SetAt(pRequired->GetUNID());
pList->Insert(pType->GetUNID());
}
}
// We create a list of islands. In each island, all the types refer to
// each other and don't refer to types on any other island.
TArray<IslandMap> AllIslands;
// Loop over all types and add them to an island.
for (i = 0; i < Universe.GetDesignTypeCount(); i++)
{
CDesignType *pType = Universe.GetDesignType(i);
// Exclude images
if (bExcludeImages && pType->GetType() == designImage)
continue;
if (pType->GetType() == designShipTable)
continue;
// Exclude default types
if (g_DefaultTypes.Find(pType->GetUNID()))
continue;
// If this type is already on one of the islands, then we skip it.
#if 0
bool bFound = false;
//.........这里部分代码省略.........
开发者ID:AvanWolf,项目名称:Transcendence,代码行数:101,代码来源:Stats.cpp
示例8: SetShipClassName
void CNewGameSession::SetShipClass (CShipClass *pClass, int x, int y, int cxWidth)
// SetShipClass
//
// Sets the ship class
{
int i;
const CPlayerSettings *pPlayerSettings = pClass->GetPlayerSettings();
const CVisualPalette &VI = m_HI.GetVisuals();
const CG16bitFont &MediumBoldFont = VI.GetFont(fontMediumBold);
const CG16bitFont &SubTitleFont = VI.GetFont(fontSubTitle);
// Ship class name
SetShipClassName(pClass->GetName(), x, y, cxWidth);
SetShipClassDesc(pPlayerSettings->GetDesc(), x, y, cxWidth);
// Offset
int yOffset = SMALL_BUTTON_HEIGHT + SMALL_SPACING_VERT + MediumBoldFont.GetHeight() + 2 * SubTitleFont.GetHeight();
// Ship class image
SetShipClassImage(pClass, x, y + yOffset, cxWidth);
// Delete previous info
DeleteElement(ID_SHIP_CLASS_INFO);
// Create a sequencer for all class info components
CAniSequencer *pClassInfo;
CAniSequencer::Create(CVector(x, y + yOffset + SubTitleFont.GetHeight()), &pClassInfo);
pClassInfo->SetID(ID_SHIP_CLASS_INFO);
// Generate default devices for the ship class
CDeviceDescList Devices;
pClass->GenerateDevices(1, Devices);
// Generate list of all weapons, sorted by level and name
TSortMap<CString, CItem> RightSide;
for (i = 0; i < Devices.GetCount(); i++)
{
CDeviceClass *pDevice = Devices.GetDeviceClass(i);
if (pDevice->GetCategory() == itemcatWeapon ||
pDevice->GetCategory() == itemcatLauncher)
RightSide.Insert(strPatternSubst(CONSTLIT("%02d_%02d_%s"), 1, pDevice->GetLevel(), pDevice->GetName()), CItem(pDevice->GetItemType(), 1));
}
// Add shields
TSortMap<CString, CItem> LeftSide;
CDeviceClass *pShields = Devices.GetNamedDevice(devShields);
if (pShields)
RightSide.Insert(strPatternSubst(CONSTLIT("%02d_%02d_%s"), 2, pShields->GetLevel(), pShields->GetName()), CItem(pShields->GetItemType(), 1));
// Add armor
RightSide.Insert(CONSTLIT("03"), CItem(g_pUniverse->GetItemType(0), SPECIAL_ARMOR));
// Add reactor
LeftSide.Insert(CONSTLIT("01"), CItem(g_pUniverse->GetItemType(0), SPECIAL_REACTOR));
// Add engines
LeftSide.Insert(CONSTLIT("02"), CItem(g_pUniverse->GetItemType(0), SPECIAL_DRIVE));
// Add cargo
LeftSide.Insert(CONSTLIT("03"), CItem(g_pUniverse->GetItemType(0), SPECIAL_CARGO));
// Add misc devices
for (i = 0; i < Devices.GetCount(); i++)
{
CDeviceClass *pDevice = Devices.GetDeviceClass(i);
if (pDevice->GetCategory() == itemcatMiscDevice)
LeftSide.Insert(strPatternSubst(CONSTLIT("%02d_%02d_%s"), 4, pDevice->GetLevel(), pDevice->GetName()), CItem(pDevice->GetItemType(), 1));
}
// Add device slots
LeftSide.Insert(CONSTLIT("05"), CItem(g_pUniverse->GetItemType(0), SPECIAL_DEVICE_SLOTS));
// Set the ship class info. All weapons go to the right of the ship image
int xPos = (cxWidth / 2) + (SHIP_IMAGE_RECT_WIDTH / 2);
int yPos = 0;
int cxInfo = (cxWidth - xPos);
for (i = 0; i < RightSide.GetCount(); i++)
{
int cyInfo;
IAnimatron *pInfo;
//.........这里部分代码省略.........
开发者ID:Sdw195,项目名称:Transcendence,代码行数:101,代码来源:CNewGameSession.cpp
示例9: GenerateTypeDependencies
void GenerateTypeDependencies (CUniverse &Universe, CXMLElement *pCmdLine)
{
int i, j;
bool bRecursive = pCmdLine->GetAttributeBool(CONSTLIT("recursive"));
bool bReverse = pCmdLine->GetAttributeBool(CONSTLIT("reverse"));
// Create a reverse index of all type dependencies
TSortMap<DWORD, TArray<DWORD> > ReverseIndex;
// Types and what they use
if (!bReverse)
{
printf("TYPES AND WHAT THEY USE\n");
printf("-----------------------\n\n");
}
for (i = 0; i < Universe.GetDesignTypeCount(); i++)
{
CDesignType *pType = Universe.GetDesignType(i);
if (!bReverse)
printf("%s\n", (char *)GetTypeDesc(pType));
// Get the list of UNIDs that this type uses
TSortMap<DWORD, bool> TypesUsed;
if (bRecursive)
AddTypesUsedRecursive(Universe, pType->GetUNID(), &TypesUsed);
else
pType->AddTypesUsed(&TypesUsed);
// Output the list
for (j = 0; j < TypesUsed.GetCount(); j++)
{
CDesignType *pRequired = Universe.FindDesignType(TypesUsed.GetKey(j));
if (pRequired == NULL)
continue;
if (!bReverse)
printf("\t%s\n", (char *)GetTypeDesc(pRequired));
// Add to reverse index
TArray<DWORD> *pList = ReverseIndex.SetAt(pRequired->GetUNID());
pList->Insert(pType->GetUNID());
}
}
// Types and what depends on them
if (bReverse)
{
printf("\nTYPES AND WHAT USES THEM\n");
printf( "------------------------\n\n");
for (i = 0; i < ReverseIndex.GetCount(); i++)
{
CDesignType *pType = Universe.FindDesignType(ReverseIndex.GetKey(i));
if (pType == NULL)
continue;
printf("%s\n", (char *)GetTypeDesc(pType));
TArray<DWORD> &List = ReverseIndex.GetValue(i);
for (j = 0; j < List.GetCount(); j++)
{
CDesignType *pRequiredBy = Universe.FindDesignType(List[j]);
if (pRequiredBy)
printf("\t%s\n", (char *)GetTypeDesc(pRequiredBy));
}
}
}
}
开发者ID:AvanWolf,项目名称:Transcendence,代码行数:77,代码来源:Stats.cpp
示例10: GenerateTopology
void GenerateTopology (CUniverse &Universe, CXMLElement *pCmdLine)
{
int i, j, k;
int iCount = pCmdLine->GetAttributeIntegerBounded(COUNT_SWITCH, 1, -1, 1);
STopologyStats Stats;
for (k = 0; k < iCount; k++)
{
if (iCount > 1)
printf("sample %d", k+1);
TSortMap<CString, SNodeInfo> NodeData;
TSortMap<CString, int> AttribCount;
// Initialize the topology
CString sError;
Universe.GetFirstTopologyNode();
// Loop over all nodes
for (i = 0; i < Universe.GetTopologyNodeCount(); i++)
{
CTopologyNode *pNode = Universe.GetTopologyNode(i);
SNodeInfo *pNewNode = NodeData.Insert(pNode->GetID());
pNewNode->sID = pNode->GetID();
pNewNode->sName = pNode->GetSystemName();
pNewNode->dwSystemUNID = pNode->GetSystemDescUNID();
pNewNode->sAttribs = pNode->GetAttributes();
// Add the attributes in this node to the list of
// attributes for this try.
TArray<CString> Attribs;
ParseAttributes(pNewNode->sAttribs, &Attribs);
for (j = 0; j < Attribs.GetCount(); j++)
{
int *pCount = AttribCount.GetAt(Attribs[j]);
if (pCount == NULL)
{
pCount = AttribCount.Insert(Attribs[j]);
*pCount = 0;
}
*pCount = (*pCount) + 1;
}
}
// Compute topology stats
// Add the node count for this try
Stats.NodeCount.Insert(NodeData.GetCount());
// Loop over all attributes that we know about. If one doesn't
// exist in this try, then we set its min to 0
if (k > 0)
{
for (i = 0; i < Stats.Attribs.GetCount(); i++)
{
if (AttribCount.GetAt(Stats.Attribs.GetKey(i)) == NULL)
Stats.Attribs[i].SetMin(0);
}
}
// Loop over all attributes in this try and add them to the stats
SStat *pAttribStat;
for (i = 0; i < AttribCount.GetCount(); i++)
{
// If we have some attributes that no other try had, then
// that means that the minimum value is 0.
if (pAttribStat = Stats.Attribs.GetAt(AttribCount.GetKey(i)))
pAttribStat->Insert(AttribCount[i]);
else
{
pAttribStat = Stats.Attribs.Insert(AttribCount.GetKey(i));
pAttribStat->Insert(AttribCount[i]);
if (k > 0)
pAttribStat->SetMin(0);
}
}
// Output all the nodes
if (iCount == 1)
{
printf("Node\tSystemType\tName\tStargates\tAttributes\n");
for (i = 0; i < NodeData.GetCount(); i++)
{
SNodeInfo *pNode = &NodeData.GetValue(i);
printf("%s\t%08x\t%s\t%d\t%s\n",
pNode->sID.GetASCIIZPointer(),
pNode->dwSystemUNID,
pNode->sName.GetASCIIZPointer(),
pNode->Stargates.GetCount(),
//.........这里部分代码省略.........
开发者ID:Sdw195,项目名称:Transcendence,代码行数:101,代码来源:Topology.cpp
示例11: GenerateEncounterFrequency
void GenerateEncounterFrequency (CUniverse &Universe, CXMLElement *pCmdLine)
{
enum ETypes
{
outputFreq,
outputFillLocations,
};
int i, j;
// Options
int iSystemSample = pCmdLine->GetAttributeIntegerBounded(CONSTLIT("count"), 1, -1, 1);
bool bLogo = !pCmdLine->GetAttributeBool(CONSTLIT("noLogo"));
bool bAll = pCmdLine->GetAttributeBool(CONSTLIT("all"));
bool bRawData = pCmdLine->GetAttributeBool(CONSTLIT("rawData"));
ETypes iType;
if (pCmdLine->GetAttributeBool(CONSTLIT("fillLocations")))
iType = outputFillLocations;
else
iType = outputFreq;
// Additional columns
TArray<CString> Cols;
for (i = 0; i < pCmdLine->GetAttributeCount(); i++)
{
CString sAttrib = pCmdLine->GetAttributeName(i);
if (!IsMainCommandParam(sAttrib)
&& !strEquals(sAttrib, CONSTLIT("count"))
&& !strEquals(sAttrib, CONSTLIT("fillLocations"))
&& !strEquals(sAttrib, CONSTLIT("rawData"))
&& !strEquals(sAttrib, CONSTLIT("encounterfreq")))
{
CString sValue = pCmdLine->GetAttribute(i);
if (!strEquals(sValue, CONSTLIT("true")))
Cols.Insert(strPatternSubst(CONSTLIT("%s:%s"), sAttrib, sValue));
else
Cols.Insert(sAttrib);
}
}
// Generate systems for multiple games
CSystemCreateStats Stats;
for (i = 0; i < iSystemSample; i++)
{
if (bLogo)
printf("pass %d...\n", i+1);
// Initialize the game
CString sError;
if (Universe.InitGame(0, &sError) != NOERROR)
{
printf("%s\n", sError.GetASCIIZPointer());
return;
}
for (j = 0; j < Universe.GetTopologyNodeCount(); j++)
{
CTopologyNode *pNode = Universe.GetTopologyNode(j);
if (pNode->IsEndGame())
continue;
// Create the system
CSystem *pSystem;
if (Universe.CreateStarSystem(pNode, &pSystem, NULL, &Stats) != NOERROR)
{
printf("ERROR: Unable to create star system.\n");
return;
}
// Done with old system
Universe.DestroySystem(pSystem);
}
Universe.Reinit();
}
// Output based on type
if (iType == outputFreq)
{
// Generate a table for each encounter
TSortMap<CStationType *, SEncounterFreqEntry> EncounterFreq;
for (i = 0; i < Stats.GetEncounterTableCount(); i++)
{
const CSystemCreateStats::SEncounterTable &Table = Stats.GetEncounterTable(i);
// Skip if only planets and asteroids
if (!Table.bHasStation && !bAll)
//.........这里部分代码省略.........
开发者ID:bmer,项目名称:Transmuter,代码行数:101,代码来源:EncounterFrequency.cpp
示例12: OutputByShipClass
void OutputByShipClass (SItemTableCtx &Ctx, const SItemTypeList &ItemList, bool bShowUsage)
{
int i, j;
// Make a map of ship classes for each item
TSortMap<DWORD, TArray<CShipClass *>> ItemToShipClass;
for (i = 0; i < g_pUniverse->GetShipClassCount(); i++)
{
CShipClass *pClass = g_pUniverse->GetShipClass(i);
// Skip non-generic ones
if (!pClass->HasLiteralAttribute(CONSTLIT("genericClass")))
continue;
// Add the list of types used by the ship
TSortMap<DWORD, bool> TypesUsed;
pClass->AddTypesUsed(&TypesUsed);
// For each item type, add it to the map
for (j = 0; j < TypesUsed.GetCount(); j++)
{
CDesignType *pType = g_pUniverse->FindDesignType(TypesUsed.GetKey(j));
if (pType && pType->GetType() == designItemType)
{
TArray<CShipClass *> *pList = ItemToShipClass.SetAt(pType->GetUNID());
pList->Insert(pClass);
}
}
}
// If we want to show usage, then we print each item along with the
// ship classes using each item.
if (bShowUsage)
{
for (i = 0; i < ItemList.GetCount(); i++)
{
CItemType *pType = ItemList[i];
printf("%s\n", (LPSTR)pType->GetNounPhrase());
TArray<CShipClass *> *pList = ItemToShipClass.SetAt(pType->GetUNID());
for (j = 0; j < pList->GetCount(); j++)
printf("\t%s\n", (LPSTR)pList->GetAt(j)->GetName());
if (pList->GetCount() == 0)
printf("\t(none)\n");
printf("\n");
}
}
// Otherwise we categorize by ship class
else
{
// Now make a list of all ship classes that have our items
SByShipClassTypeList ByShipClassTable;
for (i = 0; i < ItemList.GetCount(); i++)
{
const CString &sKey = ItemList.GetKey(i);
CItemType *pType = ItemList[i];
// Loop over all ship classes
TArray<CShipClass *> *pList = ItemToShipClass.SetAt(pType->GetUNID());
for (j = 0; j < pList->GetCount(); j++)
{
CString sClassName = pList->GetAt(j)->GetName();
bool bNew;
SShipClassEntry *pEntry = ByShipClassTable.SetAt(sClassName, &bNew);
if (bNew)
pEntry->sShipClassName = sClassName;
pEntry->ItemTable.Insert(sKey, pType);
}
// If no ship class
if (pList->GetCount() == 0)
{
bool bNew;
SShipClassEntry *pEntry = ByShipClassTable.SetAt(CONSTLIT("(none)"), &bNew);
if (bNew)
pEntry->sShipClassName = CONSTLIT("(none)");
pEntry->ItemTable.Insert(sKey, pType);
}
}
// Now loop over all attributes
for (i = 0; i < ByShipClassTable.GetCount(); i++)
{
const SShipClassEntry &Entry = ByShipClassTable[i];
//.........这里部分代码省略.........
开发者ID:bmer,项目名称:Transmuter,代码行数:101,代码来源:ItemTable.cpp
示例13: GenerateSimTables
void GenerateSimTables (CUniverse &Universe, CXMLElement *pCmdLine)
{
ALERROR error;
int i, j, k;
int iSystemSample = pCmdLine->GetAttributeInteger(CONSTLIT("count"));
if (iSystemSample == 0)
iSystemSample = DEFAULT_SYSTEM_SAMPLE;
// Keep track of stats for each type
TSortMap<DWORD, STypeStats> AllStats;
for (i = 0; i < iSystemSample; i++)
{
TSortMap<DWORD, STypeInfo> AllTypes;
printf("sample %d...\n", i+1);
// Initialize the game
CString sError;
if (error = Universe.InitGame(0, &sError))
{
printf("%s\n", sError.GetASCIIZPointer());
return;
}
// Loop over all nodes
for (j = 0; j < Universe.GetTopologyNodeCount(); j++)
{
CTopologyNode *pNode = Universe.GetTopologyNode(j);
// Skip end game nodes
if (pNode->IsEndGame())
continue;
// Create the system
CSystem *pSystem;
if (error = Universe.CreateStarSystem(pNode, &pSystem, &sError))
{
printf("ERROR: Unable to create star system: %s\n", sError.GetASCIIZPointer());
return;
}
// Accumulate
AccumulateSystem(pNode, pSystem, AllTypes);
// Done with old system
Universe.DestroySystem(pSystem);
}
// Now accumulate all stats
for (j = 0; j < Universe.GetDesignTypeCount(); j++)
{
CDesignType *pType = Universe.GetDesignType(j);
STypeStats *pStats = AllStats.SetAt(pType->GetUNID());
STypeInfo *pTypeInfo = AllTypes.GetAt(pType->GetUNID());
if (pTypeInfo)
{
pStats->PerGame.Insert(pTypeInfo->iTotalCount);
for (k = 0; k < MAX_TECH_LEVEL; k++)
pStats->PerLevel[k].Insert(pTypeInfo->PerLevel[k]);
}
else
{
pStats->PerGame.Insert(0);
for (k = 0; k < MAX_TECH_LEVEL; k++)
pStats->PerLevel[k].Insert(0);
}
}
Universe.Reinit();
}
// Output
if (error = OutputTypeTable(AllStats, iSystemSample))
return;
// Create a table with the sum of all items for the game
printf("Total count statistic computed.\n");
}
开发者ID:bmer,项目名称:Transmuter,代码行数:92,代码来源:SimTables.cpp
示例14: strCapitalize
//.........这里部分代码省略.........
CounterArray.GenerateGameStats(Stats);
// Add stat for every weapon fired
m_ItemStats.Reset(i);
while (m_ItemStats.HasMore(i))
{
SItemTypeStats *pStats;
DWORD dwUNID = m_ItemStats.GetNext(i, &pStats);
CItemType *pItemType = g_pUniverse->FindItemType(dwUNID);
if (pItemType == NULL)
continue;
CString sName = pItemType->GetNounPhrase(nounShort);
CString sSort = strPatternSubst(CONSTLIT("%03d%s"), 100 - pItemType->GetLevel(), sName);
// Installed items
if (pStats->dwFirstInstalled != INVALID_TIME)
Stats.Insert(sName, NULL_STR, CONSTLIT("Items installed"), sSort);
if (pStats->iCountFired > 0)
Stats.Insert(sName,
strFormatInteger(pStats->iCountFired, -1, FORMAT_THOUSAND_SEPARATOR | FORMAT_UNSIGNED),
CONSTLIT("Weapons fired"),
sSort);
}
// Stats for player equipment (but only if the game is done)
if (bGameOver)
{
TSortMap<CString, CItem> InstalledItems;
// First we generate a sorted list of installed items
// (We do this in case there are multiple of the same device/armor so that
// we can coalesce them together into a single line).
CItemListManipulator ItemList(pShip->GetItemList());
ItemList.ResetCursor();
while (ItemList.MoveCursorForward())
{
const CItem &Item(ItemList.GetItemAtCursor());
if (Item.IsInstalled())
{
CString sEnhancement = Item.GetEnhancedDesc(pShip);
CString sItemName = Item.GetNounPhrase(nounActual | nounCountOnly | nounShort);
CString sLine = (sEnhancement.IsBlank() ? sItemName : strPatternSubst(CONSTLIT("%s [%s]"), sItemName, sEnhancement));
bool bInserted;
CItem *pEntry = InstalledItems.SetAt(sLine, &bInserted);
if (bInserted)
{
*pEntry = Item;
pEntry->SetCount(1);
}
else
pEntry->SetCount(pEntry->GetCount() + 1);
}
}
// Now add all the installed items to the stats
for (j = 0; j < InstalledItems.GetCount(); j++)
开发者ID:Sdw195,项目名称:Transcendence,代码行数:67,代码来源:CPlayerGameStats.cpp
示例15: GenerateEncounterCount
void GenerateEncounterCount (CUniverse &Universe, CXMLElement *pCmdLine)
{
int i, j, k, l;
// Options
int iSystemSample = pCmdLine->GetAttributeIntegerBounded(CONSTLIT("count"), 1, -1, 1);
bool bLogo = !pCmdLine->GetAttributeBool(CONSTLIT("noLogo"));
bool bAll = pCmdLine->GetAttributeBool(CONSTLIT("all"));
// Additional columns
TArray<CString> Cols;
for (i = 0; i < pCmdLine->GetAttributeCount(); i++)
{
CString sAttrib = pCmdLine->GetAttributeName(i);
if (!IsMainCommandParam(sAttrib)
&& !strEquals(sAttrib, CONSTLIT("count"))
&& !strEquals(sAttrib, CONSTLIT("encountercount")))
{
CString sValue = pCmdLine->GetAttribute(i);
if (!strEquals(sValue, CONSTLIT("true")))
Cols.Insert(strPatternSubst(CONSTLIT("%s:%s"), sAttrib, sValue));
else
Cols.Insert(sAttrib);
}
}
// Generate systems for multiple games
TSortMap<CString, SNodeDesc> NodeTable;
for (i = 0; i < iSystemSample; i++)
{
if (bLogo)
printf("pass %d...\n", i+1);
// Initialize the game
CString sError;
if (Universe.InitGame(0, &sError) != NOERROR)
{
printf("%s\n", sError.GetASCIIZPointer());
return;
}
for (j = 0; j < Universe.GetTopologyNodeCount(); j++)
{
CTopologyNode *pNode = Universe.GetTopologyNode(j);
if (pNode->IsEndGame())
continue;
// Create the system
CSystem *pSystem;
if (Universe.CreateStarSystem(pNode, &pSystem) != NOERROR)
{
printf("ERROR: Unable to create star system.\n");
return;
}
// Create a sort string for this system
CString sSort = strPatternSubst(CONSTLIT("%02d-%s"), pSystem->GetLevel(), pNode->GetID());
// Get the table
bool bNew;
SNodeDesc *pResult = NodeTable.SetAt(sSort, &bNew);
if (bNew)
{
pResult->iLevel = pNode->GetLevel();
pResult->sNodeID = pNode->GetID();
}
// Accumulate data
AddSystemData(pSystem, bAll, pResult);
// Done with old system
Universe.DestroySystem(pSystem);
}
Universe.Reinit();
}
// Header
printf("Level\tNode\tSystemType\tCategory\tSovereign\tEncounter\tCount");
for (i = 0; i < Cols.GetCount(); i++)
printf("\t%s", Cols[i].GetASCIIZPointer());
printf("\n");
// Output all rows
for (i = 0; i < NodeTable.GetCount(); i++)
{
//.........这里部分代码省略.........
开发者ID:AvanWolf,项目名称:Transcendence,代码行数:101,代码来源:EncounterCount.cpp
示例16: LookupEntity
CString ParserCtx::LookupEntity (const CString &sName, bool *retbFound)
{
CString *pValue = EntityTable.GetAt(sName);
if (pValue == NULL)
{
if (m_pParentCtx)
return m_pParentCtx->LookupEntity(sName, retbFound);
else if (m_pController)
return m_pController->ResolveExternalEntity(sName, retbFound);
else
{
if (retbFound) *retbFound = false;
return sName;
}
}
if (retbFound) *retbFound = true;
return *pValue;
}
开发者ID:gmoromisato,项目名称:Hexarc,代码行数:19,代码来源:XMLParser.cpp
示例17: DefineEntity
void ParserCtx::DefineEntity (const CString &sName, const CString &sValue)
{
EntityTable.Insert(sName, sValue);
}
开发者ID:gmoromisato,项目名称:Hexarc,代码行数:4,代码来源:XMLParser.cpp
注:本文中的TSortMap类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论