⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 brushtemplate.c

📁 3D游戏场景编辑器
💻 C
📖 第 1 页 / 共 3 页
字号:
	geFloat		HalfLength = (geFloat)(pTemplate->Length/2);
	Brush		*b, *b2;
	BrushList	*MBList	=BrushList_Create();
	FaceList	*fl;
	Face		*f;
	geVec3d		v, FaceVerts[4];


	if( pTemplate->MakeRamp )
	{
		fl	=FaceList_Create(5);

		geVec3d_Set (&(FaceVerts[3]), -HalfWidth, -HalfHeight, HalfLength);
		geVec3d_Set (&(FaceVerts[2]), HalfWidth,  -HalfHeight, HalfLength);
		geVec3d_Set (&(FaceVerts[1]), HalfWidth,	 HalfHeight,  HalfLength);
		geVec3d_Set (&(FaceVerts[0]), -HalfWidth, HalfHeight,  HalfLength);
		f	=Face_Create(4, FaceVerts, 0);
		if(f)
		{
			FaceList_AddFace(fl, f);
		}

		geVec3d_Set (&(FaceVerts[3]), HalfWidth,  -HalfHeight,  HalfLength);
		geVec3d_Set (&(FaceVerts[2]), -HalfWidth, -HalfHeight,  HalfLength);
		geVec3d_Set (&(FaceVerts[1]), -HalfWidth, -HalfHeight,  -HalfLength);
		geVec3d_Set (&(FaceVerts[0]), HalfWidth,  -HalfHeight,  -HalfLength);
		f	=Face_Create(4, FaceVerts, 0);
		if(f)
		{
			FaceList_AddFace(fl, f);
		}

		geVec3d_Set (&(FaceVerts[3]), -HalfWidth, HalfHeight,   HalfLength);
		geVec3d_Set (&(FaceVerts[2]), HalfWidth,  HalfHeight,   HalfLength);
		geVec3d_Set (&(FaceVerts[1]), HalfWidth,  -HalfHeight,  -HalfLength);
		geVec3d_Set (&(FaceVerts[0]), -HalfWidth, -HalfHeight,  -HalfLength);
		f	=Face_Create(4, FaceVerts, 0);
		if(f)
		{
			FaceList_AddFace(fl, f);
		}

		geVec3d_Set (&(FaceVerts[2]), HalfWidth,  HalfHeight,   HalfLength);
		geVec3d_Set (&(FaceVerts[1]), HalfWidth,  -HalfHeight,  HalfLength);
		geVec3d_Set (&(FaceVerts[0]), HalfWidth,  -HalfHeight,  -HalfLength);
		f	=Face_Create(3, FaceVerts, 0);
		if(f)
		{
			FaceList_AddFace(fl, f);
		}

		geVec3d_Set (&(FaceVerts[0]), -HalfWidth, HalfHeight,   HalfLength);
		geVec3d_Set (&(FaceVerts[1]), -HalfWidth, -HalfHeight,  HalfLength);
		geVec3d_Set (&(FaceVerts[2]), -HalfWidth, -HalfHeight,  -HalfLength);
		f	=Face_Create(3, FaceVerts, 0);
		if(f)
		{
			FaceList_AddFace(fl, f);
		}

		b	=Brush_Create(BRUSH_LEAF, fl, NULL);
	}
	else
	{
		float	StairYSize	=(geFloat)pTemplate->Height/(geFloat)pTemplate->NumberOfStairs;
		float	DZ			=(geFloat)pTemplate->Length/(geFloat)pTemplate->NumberOfStairs;
		float	ZSize		=(geFloat)pTemplate->Length;
		BrushTemplate_Box BoxTemplate;

		BoxTemplate.Solid = 0;
		BoxTemplate.TCut = pTemplate->TCut;
		BoxTemplate.Thickness = 0.0f;
		BoxTemplate.XSizeTop = pTemplate->Width;
		BoxTemplate.XSizeBot = pTemplate->Width;
		BoxTemplate.YSize = StairYSize;

		for(i=0;i < pTemplate->NumberOfStairs;i++)
		{
			BoxTemplate.ZSizeTop = ZSize;
			BoxTemplate.ZSizeBot = ZSize;
			BoxTemplate.TSheet	 = GE_FALSE;	// nasty, nasty, nasty
			b2 = BrushTemplate_CreateBox (&BoxTemplate);
			ZSize	-=DZ;
			geVec3d_Set(&v, 0.0f, i*StairYSize, (i*DZ)/2);
			Brush_Move(b2, &v);
			BrushList_Append(MBList, b2);
		}
		b	=Brush_Create(BRUSH_MULTI, NULL, MBList);
	}

	if(b)
	{
		Brush_SetSubtract(b, pTemplate->TCut);
	}

	return	b;
}


void BrushTemplate_ArchDefaults (BrushTemplate_Arch *pArchTemplate)
{
	pArchTemplate->NumSlits		= 3;
	pArchTemplate->Thickness	= 150;
	pArchTemplate->Width		= 100;
	pArchTemplate->Radius		= 200;
	pArchTemplate->WallSize		= 16;
	pArchTemplate->Style		= 1;		//	0=solid  1=hollow
	pArchTemplate->EndAngle		= 180.0f;
	pArchTemplate->StartAngle	= 0.0f;
	pArchTemplate->TCut			= GE_FALSE;
}

geBoolean BrushTemplate_WriteArch (const BrushTemplate_Arch *pArchTemplate, FILE *f)
{
	if (fprintf (f, "%s\n", "ArchTemplate") < 0) return GE_FALSE;
	if (fprintf (f, "NumSlits %d\n", pArchTemplate->NumSlits) < 0) return GE_FALSE;
	if (fprintf (f, "Thickness %f\n", pArchTemplate->Thickness) < 0) return GE_FALSE;
	if (fprintf (f, "Width %f\n", pArchTemplate->Width) < 0) return GE_FALSE;
	if (fprintf (f, "Radius %f\n", pArchTemplate->Radius) < 0) return GE_FALSE;
	if (fprintf (f, "WallSize %f\n", pArchTemplate->WallSize) < 0) return GE_FALSE;
	if (fprintf (f, "Style %d\n", pArchTemplate->Style) < 0) return GE_FALSE;
	if (fprintf (f, "EndAngle %f\n", pArchTemplate->EndAngle) < 0) return GE_FALSE;
	if (fprintf (f, "StartAngle %f\n", pArchTemplate->StartAngle) < 0) return GE_FALSE;
	if (fprintf (f, "TCut %d\n", pArchTemplate->TCut) < 0) return GE_FALSE;

	return GE_TRUE;
}

#pragma warning (disable:4100)
geBoolean BrushTemplate_LoadArch 
	(
	  BrushTemplate_Arch *pArchTemplate,
	  Parse3dt *Parser, 
	  int VersionMajor, 
	  int VersionMinor, 
	  const char **Expected
	)
{
	if (!Parse3dt_ScanExpectingText (Parser, (*Expected = "ArchTemplate"))) return GE_FALSE;
	if (!Parse3dt_GetInt (Parser, (*Expected = "NumSlits"), &pArchTemplate->NumSlits)) return GE_FALSE;
	if (!Parse3dt_GetFloat (Parser, (*Expected = "Thickness"), &pArchTemplate->Thickness)) return GE_FALSE;
	if (!Parse3dt_GetFloat (Parser, (*Expected = "Width"), &pArchTemplate->Width)) return GE_FALSE;
	if (!Parse3dt_GetFloat (Parser, (*Expected = "Radius"), &pArchTemplate->Radius)) return GE_FALSE;
	if (!Parse3dt_GetFloat (Parser, (*Expected = "WallSize"), &pArchTemplate->WallSize)) return GE_FALSE;
	if (pArchTemplate->WallSize < 1.0f)
	{
		pArchTemplate->WallSize = 1.0f;
	}
	if (!Parse3dt_GetInt (Parser, (*Expected = "Style"), &pArchTemplate->Style)) return GE_FALSE;
	if (!Parse3dt_GetFloat (Parser, (*Expected = "EndAngle"), &pArchTemplate->EndAngle)) return GE_FALSE;
	if (!Parse3dt_GetFloat (Parser, (*Expected = "StartAngle"), &pArchTemplate->StartAngle)) return GE_FALSE;
	if (!Parse3dt_GetInt (Parser, (*Expected = "TCut"), &pArchTemplate->TCut)) return GE_FALSE;

	return GE_TRUE;
}
#pragma warning (default:4100)


void BrushTemplate_BoxDefaults (BrushTemplate_Box *pBoxTemplate)
{
	pBoxTemplate->Solid		= 1;		//	0=solid  1=hollow
	pBoxTemplate->TCut		= GE_FALSE;
	// emperically derived default sizes
	pBoxTemplate->Thickness = 16.0f;
	pBoxTemplate->XSizeBot	= 512.0f;
	pBoxTemplate->XSizeTop	= 512.0f;
	pBoxTemplate->YSize		= 512.0f;
	pBoxTemplate->ZSizeBot	= 512.0f;
	pBoxTemplate->ZSizeTop	= 512.0f;
}

geBoolean BrushTemplate_WriteBox (const BrushTemplate_Box *pBoxTemplate, FILE *f)
{
	if (fprintf (f, "%s\n", "BoxTemplate") < 0) return GE_FALSE;
	if (fprintf (f, "Solid %d\n", pBoxTemplate->Solid) < 0) return GE_FALSE;
	if (fprintf (f, "TCut %d\n", pBoxTemplate->TCut) < 0) return GE_FALSE;
	if (fprintf (f, "TSheet %d\n", pBoxTemplate->TSheet) < 0) return GE_FALSE;
	if (fprintf (f, "Thickness %f\n", pBoxTemplate->Thickness) < 0) return GE_FALSE;
	if (fprintf (f, "XSizeBot %f\n", pBoxTemplate->XSizeBot) < 0) return GE_FALSE;
	if (fprintf (f, "XSizeTop %f\n", pBoxTemplate->XSizeTop) < 0) return GE_FALSE;
	if (fprintf (f, "YSize %f\n", pBoxTemplate->YSize) < 0) return GE_FALSE;
	if (fprintf (f, "ZSizeBot %f\n", pBoxTemplate->ZSizeBot) < 0) return GE_FALSE;
	if (fprintf (f, "ZSizeTop %f\n", pBoxTemplate->ZSizeTop) < 0) return GE_FALSE;

	return GE_TRUE;
}


geBoolean BrushTemplate_LoadBox
	(
	  BrushTemplate_Box *pBoxTemplate,
	  Parse3dt *Parser, 
	  int VersionMajor, 
	  int VersionMinor, 
	  const char **Expected
	)
{
	if (!Parse3dt_ScanExpectingText (Parser, (*Expected = "BoxTemplate"))) return GE_FALSE;
	if (!Parse3dt_GetInt (Parser, (*Expected = "Solid"), &pBoxTemplate->Solid)) return GE_FALSE;
	if (!Parse3dt_GetInt (Parser, (*Expected = "TCut"), &pBoxTemplate->TCut)) return GE_FALSE;
	if ((VersionMajor > 1) || ((VersionMajor == 1) && (VersionMinor >= 29)))
	{
		if (!Parse3dt_GetInt (Parser, (*Expected = "TSheet"), &pBoxTemplate->TSheet)) return GE_FALSE;
	}
	else
	{
		pBoxTemplate->TSheet = 0;
	}
	if (!Parse3dt_GetFloat (Parser, (*Expected = "Thickness"), &pBoxTemplate->Thickness)) return GE_FALSE;
	if (pBoxTemplate->Thickness < 1.0f)
	{
		pBoxTemplate->Thickness = 1.0f;
	}
	if (!Parse3dt_GetFloat (Parser, (*Expected = "XSizeBot"), &pBoxTemplate->XSizeBot)) return GE_FALSE;
	if (!Parse3dt_GetFloat (Parser, (*Expected = "XSizeTop"), &pBoxTemplate->XSizeTop)) return GE_FALSE;
	if (!Parse3dt_GetFloat (Parser, (*Expected = "YSize"), &pBoxTemplate->YSize)) return GE_FALSE;
	if (!Parse3dt_GetFloat (Parser, (*Expected = "ZSizeBot"), &pBoxTemplate->ZSizeBot)) return GE_FALSE;
	if (!Parse3dt_GetFloat (Parser, (*Expected = "ZSizeTop"), &pBoxTemplate->ZSizeTop)) return GE_FALSE;

	return GE_TRUE;
}


void BrushTemplate_ConeDefaults (BrushTemplate_Cone *pConeTemplate)
{
	pConeTemplate->Style	= 1;		//	0=solid  1=hollow
	pConeTemplate->Width	= 200;
	pConeTemplate->Height	= 300;
	pConeTemplate->VerticalStrips = 8;
	pConeTemplate->Thickness = 16;
	pConeTemplate->TCut		= GE_FALSE;
}

geBoolean BrushTemplate_WriteCone (const BrushTemplate_Cone *pConeTemplate, FILE *f)
{
	if (fprintf (f, "%s\n", "ConeTemplate") < 0) return GE_FALSE;
	if (fprintf (f, "Style %d\n", pConeTemplate->Style) < 0) return GE_FALSE;
	if (fprintf (f, "Width %f\n", pConeTemplate->Width) < 0) return GE_FALSE;
	if (fprintf (f, "Height %f\n", pConeTemplate->Height) < 0) return GE_FALSE;
	if (fprintf (f, "VerticalStrips %d\n", pConeTemplate->VerticalStrips) < 0) return GE_FALSE;
	if (fprintf (f, "Thickness %f\n", pConeTemplate->Thickness) < 0) return GE_FALSE;
	if (fprintf (f, "TCut %d\n", pConeTemplate->TCut) < 0) return GE_FALSE;

	return GE_TRUE;
}


#pragma warning (disable:4100)
geBoolean BrushTemplate_LoadCone
	(
	  BrushTemplate_Cone *pConeTemplate,
	  Parse3dt *Parser, 
	  int VersionMajor, 
	  int VersionMinor, 
	  const char **Expected
	)
{
	if (!Parse3dt_ScanExpectingText (Parser, (*Expected = "ConeTemplate"))) return GE_FALSE;
	if (!Parse3dt_GetInt (Parser, (*Expected = "Style"), &pConeTemplate->Style)) return GE_FALSE;
	if (!Parse3dt_GetFloat (Parser, (*Expected = "Width"), &pConeTemplate->Width)) return GE_FALSE;
	if (!Parse3dt_GetFloat (Parser, (*Expected = "Height"), &pConeTemplate->Height)) return GE_FALSE;
	if (!Parse3dt_GetInt (Parser, (*Expected = "VerticalStrips"), &pConeTemplate->VerticalStrips)) return GE_FALSE;
	if (!Parse3dt_GetFloat (Parser, (*Expected = "Thickness"), &pConeTemplate->Thickness)) return GE_FALSE;
	if (pConeTemplate->Thickness < 1.0f)
	{
		pConeTemplate->Thickness = 1.0f;
	}
	if (!Parse3dt_GetInt (Parser, (*Expected = "TCut"), &pConeTemplate->TCut)) return GE_FALSE;
	return GE_TRUE;
}
#pragma warning (default:4100)

void BrushTemplate_CylinderDefaults (BrushTemplate_Cylinder *pCylinderTemplate)
{
	pCylinderTemplate->BotXOffset	= 0.0;
	pCylinderTemplate->BotXSize		= 128.0;
	pCylinderTemplate->BotZOffset	= 0.0;
	pCylinderTemplate->BotZSize		= 128.0;
	pCylinderTemplate->Solid		= 1;		//	0=solid  1=hollow
	pCylinderTemplate->Thickness	= 16.0;
	pCylinderTemplate->TopXOffset	= 0.0;
	pCylinderTemplate->TopXSize		= 128.0;
	pCylinderTemplate->TopZOffset	= 0.0;
	pCylinderTemplate->TopZSize		= 128.0;
	pCylinderTemplate->VerticalStripes = 8;
	pCylinderTemplate->YSize		= 512.0;
	pCylinderTemplate->RingLength	= 3.0;
	pCylinderTemplate->TCut			= GE_FALSE;
}

geBoolean BrushTemplate_WriteCylinder (const BrushTemplate_Cylinder *pCylinderTemplate, FILE *f)
{
	if (fprintf (f, "%s\n", "CylinderTemplate") < 0) return GE_FALSE;
	if (fprintf (f, "BotXOffset %f\n", pCylinderTemplate->BotXOffset) < 0) return GE_FALSE;
	if (fprintf (f, "BotXSize %f\n", pCylinderTemplate->BotXSize) < 0) return GE_FALSE;
	if (fprintf (f, "BotZOffset %f\n", pCylinderTemplate->BotZOffset) < 0) return GE_FALSE;
	if (fprintf (f, "BotZSize %f\n", pCylinderTemplate->BotZSize) < 0) return GE_FALSE;
	if (fprintf (f, "Solid %d\n", pCylinderTemplate->Solid) < 0) return GE_FALSE;
	if (fprintf (f, "Thickness %f\n", pCylinderTemplate->Thickness) < 0) return GE_FALSE;
	if (fprintf (f, "TopXOffset %f\n", pCylinderTemplate->TopXOffset) < 0) return GE_FALSE;
	if (fprintf (f, "TopXSize %f\n", pCylinderTemplate->TopXSize) < 0) return GE_FALSE;
	if (fprintf (f, "TopZOffset %f\n", pCylinderTemplate->TopZOffset) < 0) return GE_FALSE;
	if (fprintf (f, "TopZSize %f\n", pCylinderTemplate->TopZSize) < 0) return GE_FALSE;
	if (fprintf (f, "VerticalStripes %d\n", pCylinderTemplate->VerticalStripes) < 0) return GE_FALSE;
	if (fprintf (f, "YSize %f\n", pCylinderTemplate->YSize) < 0) return GE_FALSE;
	if (fprintf (f, "RingLength %f\n", pCylinderTemplate->RingLength) < 0) return GE_FALSE;
	if (fprintf (f, "TCut %d\n", pCylinderTemplate->TCut) < 0) return GE_FALSE;
	return GE_TRUE;
}


#pragma warning (disable:4100)
geBoolean BrushTemplate_LoadCylinder
	(
	  BrushTemplate_Cylinder *pCylinderTemplate,
	  Parse3dt *Parser, 
	  int VersionMajor, 
	  int VersionMinor, 
	  const char **Expected
	)
{
	if (!Parse3dt_ScanExpectingText (Parser, (*Expected = "CylinderTemplate"))) return GE_FALSE;
	if (!Parse3dt_GetFloat (Parser, (*Expected = "BotXOffset"), &pCylinderTemplate->BotXOffset)) return GE_FALSE;
	if (!Parse3dt_GetFloat (Parser, (*Expected = "BotXSize"), &pCylinderTemplate->BotXSize)) return GE_FALSE;
	if (!Parse3dt_GetFloat (Parser, (*Expected = "BotZOffset"), &pCylinderTemplate->BotZOffset)) return GE_FALSE;
	if (!Parse3dt_GetFloat (Parser, (*Expected = "BotZSize"), &pCylinderTemplate->BotZSize)) return GE_FALSE;
	if (!Parse3dt_GetInt (Parser, (*Expected = "Solid"), &pCylinderTemplate->Solid)) return GE_FALSE;
	if ((VersionMajor > 1) || ((VersionMajor == 1) && (VersionMinor > 22)))
	{
		if (!Parse3dt_GetFloat (Parser, (*Expected = "Thickness"), &pCylinderTemplate->Thickness)) return GE_FALSE;
		if (pCylinderTemplate->Thickness < 1.0f)
		{
			pCylinderTemplate->Thickness = 1.0f;
		}
	}
	if (!Parse3dt_GetFloat (Parser, (*Expected = "TopXOffset"), &pCylinderTemplate->TopXOffset)) return GE_FALSE;
	if (!Parse3dt_GetFloat (Parser, (*Expected = "TopXSize"), &pCylinderTemplate->TopXSize)) return GE_FALSE;
	if (!Parse3dt_GetFloat (Parser, (*Expected = "TopZOffset"), &pCylinderTemplate->TopZOffset)) return GE_FALSE;
	if (!Parse3dt_GetFloat (Parser, (*Expected = "TopZSize"), &pCylinderTemplate->TopZSize)) return GE_FALSE;
	if (!Parse3dt_GetInt (Parser, (*Expected = "VerticalStripes"), &pCylinderTemplate->VerticalStripes)) return GE_FALSE;
	if (!Parse3dt_GetFloat (Parser, (*Expected = "YSize"), &pCylinderTemplate->YSize)) return GE_FALSE;
	if (!Parse3dt_GetFloat (Parser, (*Expected = "RingLength"), &pCylinderTemplate->RingLength)) return GE_FALSE;
	if (!Parse3dt_GetInt (Parser, (*Expected = "TCut"), &pCylinderTemplate->TCut)) return GE_FALSE;

	return GE_TRUE;
}

#pragma warning (default:4100)

void BrushTemplate_SpheroidDefaults (BrushTemplate_Spheroid *pSpheroidTemplate)
{
	pSpheroidTemplate->HorizontalBands	= 4;
	pSpheroidTemplate->VerticalBands	= 8;
	pSpheroidTemplate->YSize			= 256.0;
	pSpheroidTemplate->Solid			= 1;		//	0=solid  1=hollow
	pSpheroidTemplate->Thickness		= 16;
	pSpheroidTemplate->TCut				= GE_FALSE;
}

geBoolean BrushTemplate_WriteSpheroid (const BrushTemplate_Spheroid *pSpheroidTemplate, FILE *f)
{
	if (fprintf (f, "%s\n", "SpheroidTemplate") < 0) return GE_FALSE;
	if (fprintf (f, "HorizontalBands %d\n", pSpheroidTemplate->HorizontalBands) < 0) return GE_FALSE;
	if (fprintf (f, "VerticalBands %d\n", pSpheroidTemplate->VerticalBands) < 0) return GE_FALSE;
	if (fprintf (f, "YSize %f\n", pSpheroidTemplate->YSize) < 0) return GE_FALSE;
	if (fprintf (f, "Solid %d\n", pSpheroidTemplate->Solid) < 0) return GE_FALSE;
	if (fprintf (f, "Thickness %f\n", pSpheroidTemplate->Thickness) < 0) return GE_FALSE;
	if (fprintf (f, "TCut %d\n", pSpheroidTemplate->TCut) < 0) return GE_FALSE;

	return GE_TRUE;
}


#pragma warning (disable:4100)
geBoolean BrushTemplate_LoadSpheroid
	(
	  BrushTemplate_Spheroid *pSpheroidTemplate,
	  Parse3dt *Parser, 
	  int VersionMajor, 
	  int VersionMinor, 
	  const char **Expected
	)
{
	if (!Parse3dt_ScanExpectingText (Parser, (*Expected = "SpheroidTemplate"))) return GE_FALSE;
	if (!Parse3dt_GetInt (Parser, (*Expected = "HorizontalBands"), &pSpheroidTemplate->HorizontalBands)) return GE_FALSE;
	if (!Parse3dt_GetInt (Parser, (*Expected = "VerticalBands"), &pSpheroidTemplate->VerticalBands)) return GE_FALSE;
	if (!Parse3dt_GetFloat (Parser, (*Expected = "YSize"), &pSpheroidTemplate->YSize)) return GE_FALSE;
	if (!Parse3dt_GetInt (Parser, (*Expected = "Solid"), &pSpheroidTemplate->Solid)) return GE_FALSE;
	if (!Parse3dt_GetFloat (Parser, (*Expected = "Thickness"), &pSpheroidTemplate->Thickness)) return GE_FALSE;
	if (pSpheroidTemplate->Thickness < 1.0f)
	{
		pSpheroidTemplate->Thickness = 1.0f;
	}
	if (!Parse3dt_GetInt (Parser, (*Expected = "TCut"), &pSpheroidTemplate->TCut)) return GE_FALSE;

	return GE_TRUE;
}
#pragma warning (default:4100)

void BrushTemplate_StaircaseDefaults (BrushTemplate_Staircase *pStaircaseTemplate)
{
	pStaircaseTemplate->Height		= 128.0;
	pStaircaseTemplate->Length		= 128.0;
	pStaircaseTemplate->NumberOfStairs = 8;
	pStaircaseTemplate->Width		= 64.0;
	pStaircaseTemplate->MakeRamp	= GE_FALSE;
	pStaircaseTemplate->TCut		= GE_FALSE;
}

geBoolean BrushTemplate_WriteStaircase (const BrushTemplate_Staircase *pStaircaseTemplate, FILE *f)
{
	if (fprintf (f, "%s\n", "StaircaseTemplate") < 0) return GE_FALSE;
	if (fprintf (f, "Height %f\n", pStaircaseTemplate->Height) < 0) return GE_FALSE;
	if (fprintf (f, "Length %f\n", pStaircaseTemplate->Length) < 0) return GE_FALSE;
	if (fprintf (f, "NumberOfStairs %d\n", pStaircaseTemplate->NumberOfStairs) < 0) return GE_FALSE;
	if (fprintf (f, "Width %f\n", pStaircaseTemplate->Width) < 0) return GE_FALSE;
	if (fprintf (f, "MakeRamp %d\n", pStaircaseTemplate->MakeRamp) < 0) return GE_FALSE;
	if (fprintf (f, "TCut %d\n", pStaircaseTemplate->TCut) < 0) return GE_FALSE;

	return GE_TRUE;
}

#pragma warning (disable:4100)
geBoolean BrushTemplate_LoadStaircase
	(
	  BrushTemplate_Staircase *pStaircaseTemplate,
	  Parse3dt *Parser, 
	  int VersionMajor, 
	  int VersionMinor, 
	  const char **Expected
	)
{
	if (!Parse3dt_ScanExpectingText (Parser, (*Expected = "StaircaseTemplate"))) return GE_FALSE;
	if (!Parse3dt_GetFloat (Parser, (*Expected = "Height"), &pStaircaseTemplate->Height)) return GE_FALSE;
	if (!Parse3dt_GetFloat (Parser, (*Expected = "Length"), &pStaircaseTemplate->Length)) return GE_FALSE;
	if (!Parse3dt_GetInt (Parser, (*Expected = "NumberOfStairs"), &pStaircaseTemplate->NumberOfStairs)) return GE_FALSE;
	if (!Parse3dt_GetFloat (Parser, (*Expected = "Width"), &pStaircaseTemplate->Width)) return GE_FALSE;
	if (!Parse3dt_GetInt (Parser, (*Expected = "MakeRamp"), &pStaircaseTemplate->MakeRamp)) return GE_FALSE;
	if (!Parse3dt_GetInt (Parser, (*Expected = "TCut"), &pStaircaseTemplate->TCut)) return GE_FALSE;
	return GE_TRUE;
}
#pragma warning (default:4100)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -