Beispiel #1
0
void CAscendedObjectList::WriteToStream (IWriteStream *pStream)

//	WriteToStream
//
//	Write

	{
	int i;

	DWORD dwCount = m_List.GetCount();
	pStream->Write((char *)&dwCount, sizeof(DWORD));

	for (i = 0; i < (int)dwCount; i++)
		{
		try
			{
			m_List[i]->WriteToStream(pStream);
			}
		catch (...)
			{
			CString sError = CONSTLIT("Unable to save ascended object:\r\n");
			ReportCrashObj(&sError, m_List[i]);
			kernelDebugLogMessage(sError);
			return;
			}
		}
	}
void CTranscendenceWnd::ReportCrash (void)

//	ReportCrash
//
//	Report a crash

	{
#ifdef DEBUG_PROGRAMSTATE

	m_sCrashInfo = NULL_STR;

	//	Program state

	switch (g_iProgramState)
		{
		case psAnimating:
			m_sCrashInfo.Append(CONSTLIT("program state: miscellaneous animation\r\n"));
			break;

		case psPaintingSRS:
			m_sCrashInfo.Append(CONSTLIT("program state: painting SRS\r\n"));
			ReportCrashObj(&m_sCrashInfo);
			break;

		case psUpdating:
			m_sCrashInfo.Append(CONSTLIT("program state: updating universe\r\n"));
			break;

		case psUpdatingEvents:
			m_sCrashInfo.Append(CONSTLIT("program state: updating events\r\n"));
			ReportCrashEvent(&m_sCrashInfo);
			break;

		case psUpdatingBehavior:
			m_sCrashInfo.Append(CONSTLIT("program state: updating object behavior\r\n"));
			ReportCrashObj(&m_sCrashInfo);
			break;

		case psUpdatingObj:
			m_sCrashInfo.Append(CONSTLIT("program state: updating object\r\n"));
			ReportCrashObj(&m_sCrashInfo);
			break;

		case psUpdatingHitTest:
			m_sCrashInfo.Append(CONSTLIT("program state: updating object hit test\r\n"));
			ReportCrashObj(&m_sCrashInfo);
			break;

		case psUpdatingMove:
			m_sCrashInfo.Append(CONSTLIT("program state: updating object motion\r\n"));
			ReportCrashObj(&m_sCrashInfo);
			break;

		case psUpdatingEncounters:
			m_sCrashInfo.Append(CONSTLIT("program state: updating random encounters\r\n"));
			break;

		case psDestroyNotify:
			m_sCrashInfo.Append(CONSTLIT("program state: handling OnObjDestroy\r\n"));
			ReportCrashObj(&m_sCrashInfo);
			break;

		case psUpdatingReactorDisplay:
			m_sCrashInfo.Append(CONSTLIT("program state: updating reactor display\r\n"));
			break;

		case psPaintingMap:
			m_sCrashInfo.Append(CONSTLIT("program state: painting map\r\n"));
			break;

		case psPaintingLRS:
			m_sCrashInfo.Append(CONSTLIT("program state: painting LRS\r\n"));
			break;

		case psPaintingArmorDisplay:
			m_sCrashInfo.Append(CONSTLIT("program state: painting armor display\r\n"));
			break;

		case psPaintingMessageDisplay:
			m_sCrashInfo.Append(CONSTLIT("program state: painting message display\r\n"));
			break;

		case psPaintingReactorDisplay:
			m_sCrashInfo.Append(CONSTLIT("program state: painting reactor display\r\n"));
			break;

		case psPaintingTargetDisplay:
			m_sCrashInfo.Append(CONSTLIT("program state: painting target display\r\n"));
			ReportCrashObj(&m_sCrashInfo, (GetPlayer() ? GetPlayer()->GetShip() : NULL));
			break;

		case psPaintingDeviceDisplay:
			m_sCrashInfo.Append(CONSTLIT("program state: painting device display\r\n"));
			break;

		case psStargateEnter:
			m_sCrashInfo.Append(CONSTLIT("program state: entering stargate\r\n"));
			break;

		case psStargateEndGame:
			m_sCrashInfo.Append(CONSTLIT("program state: entering end-game stargate\r\n"));
			break;

		case psStargateLoadingSystem:
			m_sCrashInfo.Append(CONSTLIT("program state: enter stargate, loading destination system\r\n"));
			break;

		case psStargateCreatingSystem:
			m_sCrashInfo.Append(CONSTLIT("program state: enter stargate, creating destination system\r\n"));
			break;

		case psStargateUpdateExtended:
			m_sCrashInfo.Append(CONSTLIT("program state: enter stargate, updating extended\r\n"));
			break;

		case psStargateTransferringGateFollowers:
			m_sCrashInfo.Append(CONSTLIT("program state: enter stargate, transferring gate followers\r\n"));
			break;

		case psStargateSavingSystem:
			m_sCrashInfo.Append(CONSTLIT("program state: enter stargate, saving current system\r\n"));
			break;

		case psStargateFlushingSystem:
			m_sCrashInfo.Append(CONSTLIT("program state: enter stargate, flushing current system\r\n"));
			break;

		case psStargateGarbageCollecting:
			m_sCrashInfo.Append(CONSTLIT("program state: enter stargate, garbage-collecting images\r\n"));
			break;

		case psStargateLoadingBitmaps:
			m_sCrashInfo.Append(CONSTLIT("program state: enter stargate, loading new images\r\n"));
			break;

		case psLoadingImages:
			m_sCrashInfo.Append(CONSTLIT("program state: in LoadImages\r\n"));
			ReportCrashObj(&m_sCrashInfo);
			break;

		case psStargateEnterDone:
			m_sCrashInfo.Append(CONSTLIT("program state: enter stargate done\r\n"));
			break;

		case psOnObjDestroyed:
			m_sCrashInfo.Append(CONSTLIT("program state: in OnObjDestroyed\r\n"));
			ReportCrashObj(&m_sCrashInfo);
			break;

		case psCustomError:
			if (g_sProgramError)
				m_sCrashInfo.Append(*g_sProgramError);
			m_sCrashInfo.Append(CONSTLIT("\r\n"));
			break;

		default:
			m_sCrashInfo.Append(CONSTLIT("program state: unknown\r\n"));
		}

	//	Game state

	switch (m_State)
		{
		case gsInGame:
			m_sCrashInfo.Append(CONSTLIT("game state: in game\r\n"));
			break;

		case gsDocked:
			m_sCrashInfo.Append(CONSTLIT("game state: docked\r\n"));
			break;

		case gsDestroyed:
			m_sCrashInfo.Append(CONSTLIT("game state: destroyed\r\n"));
			break;

		case gsEnteringStargate:
			m_sCrashInfo.Append(CONSTLIT("game state: entering stargate\r\n"));
			break;

		case gsLeavingStargate:
			m_sCrashInfo.Append(CONSTLIT("game state: leaving stargate\r\n"));
			break;

		case gsIntro:
			m_sCrashInfo.Append(CONSTLIT("game state: intro\r\n"));
			break;

		case gsProlog:
			m_sCrashInfo.Append(CONSTLIT("game state: prolog\r\n"));
			break;

		default:
			m_sCrashInfo.Append(CONSTLIT("game state: unknown\r\n"));
		}
#endif

	throw CException(ERR_FAIL);
	}