📄 icezcbbreaker.cpp
字号:
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 + -