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

📄 icezcbbreaker.cpp

📁 使用stl技术,(还没看,是听说的)
💻 CPP
📖 第 1 页 / 共 5 页
字号:
bool ZCBBreaker::ImportLights(CustomArray& importer)
{
#ifdef ZCB_PROGRESS_BAR
	gParams->mText = "Importing lights...";
	gParams->mRequestCode = RQ_SET_TEXT_PROGRESS_BAR1;
	GetCallbacksManager()->ExecCallbacks(ICCB_REQUEST, ICCB_REQUEST, gParams);

	gParams->mMin = 0;
	gParams->mMax = mNbLights;
	gParams->mRequestCode = RQ_SET_RANGE_PROGRESS_BAR1;
	GetCallbacksManager()->ExecCallbacks(ICCB_REQUEST, ICCB_REQUEST, gParams);
#endif
	// Are there any lights to import?
	if(mNbLights)
	{
		// Find LITE chunk
		if(importer.GetChunk(mZCBGlobalVersion ? "LITECHUNK" : "LITE"))
		{
			// Get version number back
			mLITEVersion	= importer.GetDword();
			ZCB_CHECKVERSION(mLITEVersion, CHUNK_LITE_VER, "LITE");

			// Log message
			ZCBLog("Importing %d lights...\n", mNbLights);

			for(udword n=0;n<mNbLights;n++)
			{
				// Fill a light structure
				ZCBLightInfo CurLight;

				// Base info
				CurLight.Import(importer);

				// Get light information back
				CurLight.mLightType			= (ZCBLightType)importer.GetDword();	// Light's type
				CurLight.mIsSpot			= importer.GetByte()!=0;				// Is the light a spotlight?
				CurLight.mIsDir				= importer.GetByte()!=0;				// Is the light a directional?
				CurLight.mColor.x			= importer.GetFloat();					// Light's color
				CurLight.mColor.y			= importer.GetFloat();					//
				CurLight.mColor.z			= importer.GetFloat();					//
				CurLight.mIntensity			= importer.GetFloat();					// Light's intensity
				CurLight.mContrast			= importer.GetFloat();					// Light's contrast
				CurLight.mDiffuseSoft		= importer.GetFloat();					// Light's diffuse soft
				CurLight.mLightUsed			= importer.GetByte()!=0;				// Is the light used?
				CurLight.mAffectDiffuse		= importer.GetByte()!=0;				// Does the light affect diffuse?
				CurLight.mAffectSpecular	= importer.GetByte()!=0;				// Does the light affect specular?
				CurLight.mUseAttenNear		= importer.GetByte()!=0;				//
				CurLight.mAttenNearDisplay	= importer.GetByte()!=0;				//
				CurLight.mUseAtten			= importer.GetByte()!=0;				// Is attenuation used?
				CurLight.mShowAtten			= importer.GetByte()!=0;				//
				CurLight.mNearAttenStart	= importer.GetFloat();					// Near atten start
				CurLight.mNearAttenEnd		= importer.GetFloat();					// Near atten end
				CurLight.mAttenStart		= importer.GetFloat();					// Atten start
				CurLight.mAttenEnd			= importer.GetFloat();					// Atten end (use that as a range for non-dir lights)
				CurLight.mDecayType			= importer.GetByte();					// Light's decay type
				CurLight.mHotSpot			= importer.GetFloat();					// Light's hotspot
				CurLight.mFallsize			= importer.GetFloat();					// Light's falloff
				CurLight.mAspect			= importer.GetFloat();					// Light's aspect
				CurLight.mSpotShape			= (ZCBSpotShape)importer.GetDword();	// Light's spot shape
				CurLight.mOvershoot			= importer.GetDword();					// Light's overshoot
				CurLight.mConeDisplay		= importer.GetByte()!=0;				//
				CurLight.mTDist				= importer.GetFloat();					// Distance to target
				CurLight.mShadowType		= importer.GetDword();					// Light's shadow type
				CurLight.mAbsMapBias		= importer.GetDword();					// Light's absolute map bias
				CurLight.mRayBias			= importer.GetFloat();					// Raytrace bias
				CurLight.mMapBias			= importer.GetFloat();					// Map bias
				CurLight.mMapRange			= importer.GetFloat();					// Map range
				CurLight.mMapSize			= importer.GetDword();					// Map size

				if(mLITEVersion>=2)	CurLight.mCastShadows	= importer.GetByte()!=0;	// Cast shadows
				else				CurLight.mCastShadows	= false;

				if(mLITEVersion>=3)
				{
					CurLight.mShadowDensity			= importer.GetFloat();		// Shadow density
					CurLight.mShadowColor.x			= importer.GetFloat();		// Shadow color
					CurLight.mShadowColor.y			= importer.GetFloat();		// Shadow color
					CurLight.mShadowColor.z			= importer.GetFloat();		// Shadow color
					CurLight.mLightAffectsShadow	= importer.GetByte()!=0;	// Light affects shadow or not
				}
				else
				{
					CurLight.mShadowDensity			= 0.0f;
					CurLight.mShadowColor.x			= 0.0f;
					CurLight.mShadowColor.y			= 0.0f;
					CurLight.mShadowColor.z			= 0.0f;
					CurLight.mLightAffectsShadow	= false;
				}

				if(mLITEVersion>=4)
				{
					CurLight.mProjMapID			= importer.GetDword();
					CurLight.mShadowProjMapID	= importer.GetDword();
					PatchTextureID(CurLight.mProjMapID);
					PatchTextureID(CurLight.mShadowProjMapID);
				}
				else
				{
					CurLight.mProjMapID			= -1;
					CurLight.mShadowProjMapID	= -1;
				}

				// Call the app
				NewLight(CurLight);

				UpdateProgressBar1();
			}
		}
		else
		{
			ZCBImportError("Chunk LITE not found!", ZCB_ERROR_CHUNK_NOT_FOUND);
			return false;
		}
	}
	return true;
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
 *	Imports the cropping values & texture matrix.
 *	\param		cvalues		[out] a place to store the cropping values
 *	\param		tmtx		[out] a place to store the texture matrix
 *	\param		importer	[in] the imported array.
 *	\param		wrap_u		[out] 
 *	\param		mirror_u	[out] 
 *	\param		wrap_v		[out] 
 *	\param		mirror_v	[out] 
 *	\return		true if success.
 */
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool ZCBBreaker::ImportCroppingValues(TextureCrop& cvalues, TextureMatrix& tmtx, CustomArray& importer, bool& wrap_u, bool& mirror_u, bool& wrap_v, bool& mirror_v)
{
	// Get cropping values back
	cvalues.mOffsetU	= importer.GetFloat();
	cvalues.mOffsetV	= importer.GetFloat();
	cvalues.mScaleU		= importer.GetFloat();
	cvalues.mScaleV		= importer.GetFloat();

	// Get texture matrix back
	tmtx.m[0][0]		= importer.GetFloat();
	tmtx.m[0][1]		= importer.GetFloat();
	tmtx.m[0][2]		= importer.GetFloat();

	tmtx.m[1][0]		= importer.GetFloat();
	tmtx.m[1][1]		= importer.GetFloat();
	tmtx.m[1][2]		= importer.GetFloat();

	tmtx.m[2][0]		= importer.GetFloat();
	tmtx.m[2][1]		= importer.GetFloat();
	tmtx.m[2][2]		= importer.GetFloat();

	tmtx.m[3][0]		= importer.GetFloat();
	tmtx.m[3][1]		= importer.GetFloat();
	tmtx.m[3][2]		= importer.GetFloat();

	// Export texture tiling
	// CHUNK_TEXM_VER >= 3
	// CHUNK_MATL_VER >= 4
	if(mTEXMVersion >= 3 || mMATLVersion >= 4)
	{
		wrap_u		= importer.GetByte()!=0;
		mirror_u	= importer.GetByte()!=0;
		wrap_v		= importer.GetByte()!=0;
		mirror_v	= importer.GetByte()!=0;
	}
	return true;
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
 *	Imports the materials.
 *	\param		importer		[in] the imported array.
 *	\return		true if success.
 */
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool ZCBBreaker::ImportMaterials(CustomArray& importer)
{
#ifdef ZCB_PROGRESS_BAR
	gParams->mText = "Importing materials...";
	gParams->mRequestCode = RQ_SET_TEXT_PROGRESS_BAR1;
	GetCallbacksManager()->ExecCallbacks(ICCB_REQUEST, ICCB_REQUEST, gParams);

	gParams->mMin = 0;
	gParams->mMax = mNbMaterials;
	gParams->mRequestCode = RQ_SET_RANGE_PROGRESS_BAR1;
	GetCallbacksManager()->ExecCallbacks(ICCB_REQUEST, ICCB_REQUEST, gParams);
#endif
	// Are there any materials to import?
	if(mNbMaterials)
	{
		// Find MATL chunk
		if(importer.GetChunk(mZCBGlobalVersion ? "MATLCHUNK" : "MATL"))
		{
			// Get version number back
			mMATLVersion	= importer.GetDword();
			ZCB_CHECKVERSION(mMATLVersion, CHUNK_MATL_VER, "MATL");
//IceCore::MessageBox(null, _F("MATL version %d", mMATLVersion), "Report", MB_OK);			
			// Log message
			ZCBLog("Importing %d materials...\n", mNbMaterials);

			// Import all materials
			for(udword n=0;n<mNbMaterials;n++)
			{
				// Fill a material structure
				ZCBMaterialInfo CurMaterial;

				// Database information
				CurMaterial.mName.Set((const char*)importer.GetString());	// Material name
				CurMaterial.mID	= importer.GetDword();						// Material ID
//Log("Imported material: %s - %d\n", CurMaterial.mName, CurMaterial.mID);
				PatchMaterialID(CurMaterial.mID);

				// Texture IDs
				CurMaterial.mAmbientMapID			= importer.GetDword();	PatchTextureID(CurMaterial.mAmbientMapID);
				CurMaterial.mDiffuseMapID			= importer.GetDword();	PatchTextureID(CurMaterial.mDiffuseMapID);
				CurMaterial.mSpecularMapID			= importer.GetDword();	PatchTextureID(CurMaterial.mSpecularMapID);
				CurMaterial.mShininessMapID			= importer.GetDword();	PatchTextureID(CurMaterial.mShininessMapID);
				CurMaterial.mShiningStrengthMapID	= importer.GetDword();	PatchTextureID(CurMaterial.mShiningStrengthMapID);
				CurMaterial.mSelfIllumMapID			= importer.GetDword();	PatchTextureID(CurMaterial.mSelfIllumMapID);
				CurMaterial.mOpacityMapID			= importer.GetDword();	PatchTextureID(CurMaterial.mOpacityMapID);
				CurMaterial.mFilterMapID			= importer.GetDword();	PatchTextureID(CurMaterial.mFilterMapID);
				CurMaterial.mBumpMapID				= importer.GetDword();	PatchTextureID(CurMaterial.mBumpMapID);
				CurMaterial.mReflexionMapID			= importer.GetDword();	PatchTextureID(CurMaterial.mReflexionMapID);
				CurMaterial.mRefractionMapID		= importer.GetDword();	PatchTextureID(CurMaterial.mRefractionMapID);
				CurMaterial.mDisplacementMapID		= importer.GetDword();	PatchTextureID(CurMaterial.mDisplacementMapID);

				// Amounts
				CurMaterial.mAmbientCoeff			= importer.GetFloat();
				CurMaterial.mDiffuseCoeff			= importer.GetFloat();
				CurMaterial.mSpecularCoeff			= importer.GetFloat();
				CurMaterial.mShininessCoeff			= importer.GetFloat();
				CurMaterial.mShiningStrengthCoeff	= importer.GetFloat();
				CurMaterial.mSelfIllumCoeff			= importer.GetFloat();
				CurMaterial.mOpacityCoeff			= importer.GetFloat();
				CurMaterial.mFilterCoeff			= importer.GetFloat();
				CurMaterial.mBumpCoeff				= importer.GetFloat();
				CurMaterial.mReflexionCoeff			= importer.GetFloat();
				CurMaterial.mRefractionCoeff		= importer.GetFloat();
				CurMaterial.mDisplacementCoeff		= importer.GetFloat();

				// Colors
				CurMaterial.mMtlAmbientColor.x		= importer.GetFloat();
				CurMaterial.mMtlAmbientColor.y		= importer.GetFloat();
				CurMaterial.mMtlAmbientColor.z		= importer.GetFloat();

				CurMaterial.mMtlDiffuseColor.x		= importer.GetFloat();
				CurMaterial.mMtlDiffuseColor.y		= importer.GetFloat();
				CurMaterial.mMtlDiffuseColor.z		= importer.GetFloat();

				CurMaterial.mMtlSpecularColor.x		= importer.GetFloat();
				CurMaterial.mMtlSpecularColor.y		= importer.GetFloat();
				CurMaterial.mMtlSpecularColor.z		= importer.GetFloat();

				CurMaterial.mMtlFilterColor.x		= importer.GetFloat();
				CurMaterial.mMtlFilterColor.y		= importer.GetFloat();
				CurMaterial.mMtlFilterColor.z		= importer.GetFloat();

				// Static properties
				CurMaterial.mShading				= (ZCBShadingMode)importer.GetDword();
				CurMaterial.mSoften					= importer.GetByte()!=0;
				CurMaterial.mFaceMap				= importer.GetByte()!=0;
				CurMaterial.mTwoSided				= importer.GetByte()!=0;
				CurMaterial.mWire					= importer.GetByte()!=0;
				CurMaterial.mWireUnits				= importer.GetByte()!=0;
				CurMaterial.mFalloffOut				= importer.GetByte()!=0;
				CurMaterial.mTransparencyType		= (ZCBTranspaType)importer.GetDword();

				// Dynamic properties
				CurMaterial.mShininess				= importer.GetFloat();
				CurMaterial.mShiningStrength		= importer.GetFloat();
				CurMaterial.mSelfIllum				= importer.GetFloat();
				CurMaterial.mOpacity				= importer.GetFloat();
				CurMaterial.mOpaFalloff				= importer.GetFloat();
				CurMaterial.mWireSize				= importer.GetFloat();
				CurMaterial.mIOR					= importer.GetFloat();

				CurMaterial.mBounce					= importer.GetFloat();
				CurMaterial.mStaticFriction			= importer.GetFloat();
				CurMaterial.mSlidingFriction		= importer.GetFloat();

				// Cropping values & texture matrix
				if(mMATLVersion>=2)	ImportCroppingValues(CurMaterial.mCValues, CurMaterial.mTMtx, importer, CurMaterial.mWrapU, CurMaterial.mMirrorU, CurMaterial.mWrapV, CurMaterial.mMirrorV);

				// Extended self-illum
				if(mMATLVersion>=3)
				{
					CurMaterial.mSelfIllumOn		= importer.GetByte()!=0;
					CurMaterial.mSelfIllumValue		= importer.GetFloat();
					CurMaterial.mSelfIllumColor.x	= importer.GetFloat();
					CurMaterial.mSelfIllumColor.y	= importer.GetFloat();
					CurMaterial.mSelfIllumColor.z	= importer.GetFloat();
				}

				// Flexporter specific
				if(mMATLVersion>=5)
				{
//Log("Shader address: %d\n", importer.GetAddress());
					const char* ShaderFile = (const char*)importer.GetString();
//Log("UserProps address: %d\n", importer.GetAddress());
					const char* UserProps = (const char*)importer.GetString();
/*Log("Next address: %d\n", importer.GetAddress());
char Buf[21];
ubyte* Ad = (ubyte*)importer.GetAddress();
for(int ppp=0;ppp<20;ppp++)	Buf[ppp] = Ad[ppp];
Buf[20]=0;
Log("Next bytes: %s\n", Buf);
*/
					CurMaterial.mShaderFile.Set(ShaderFile);
					CurMaterial.mUserProps.Set(UserProps);
//Log("%s - %s\n", CurMaterial.mShaderFile, CurMaterial.mUserProps);
				}

				if(mMATLVersion>=6)
				{
					CurMaterial.mDecalMapID = importer.GetDword();
					CurMaterial.mDetailMapID = importer.GetDword();
				}
				if(mMATLVersion>=7)
				{
					CurMaterial.mBillboardMapID = importer.GetDword();
				}

				// Call the app
				NewMaterial(CurMaterial);

				UpdateProgressBar1();
			}
		}
		else
		{
			ZCBImportError("Chunk MATL not found!", ZCB_ERROR_CHUNK_NOT_FOUND);
			return false;
		}
	}
	return true;
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
 *	Imports the textures.
 *	\param		importer		[in] the imported array.
 *	\return		true if success.
 */
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool ZCBBreaker::ImportTextures(CustomArray& importer)
{
#ifdef ZCB_PROGRESS_BAR
	gParams->mText = "Importing textures...";
	gParams->mRequestCode = RQ_SET_TEXT_PROGRESS_BAR1;
	GetCallbacksManager()->ExecCallbacks(ICCB_REQUEST, ICCB_REQUEST, gParams);

⌨️ 快捷键说明

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