void lcLight::UpdatePosition(lcStep Step) { mPosition = CalculateKey(mPositionKeys, Step); mTargetPosition = CalculateKey(mTargetPositionKeys, Step); mAmbientColor = CalculateKey(mAmbientColorKeys, Step); mDiffuseColor = CalculateKey(mDiffuseColorKeys, Step); mSpecularColor = CalculateKey(mSpecularColorKeys, Step); mAttenuation = CalculateKey(mAttenuationKeys, Step); mSpotCutoff = CalculateKey(mSpotCutoffKeys, Step); mSpotExponent = CalculateKey(mSpotExponentKeys, Step); if (IsPointLight()) { mWorldLight = lcMatrix44Identity(); mWorldLight.SetTranslation(-mPosition); } else { lcVector3 FrontVector(mTargetPosition - mPosition); lcVector3 UpVector(1, 1, 1); if (fabs(FrontVector[0]) < fabs(FrontVector[1])) { if (fabs(FrontVector[0]) < fabs(FrontVector[2])) UpVector[0] = -(UpVector[1] * FrontVector[1] + UpVector[2] * FrontVector[2]); else UpVector[2] = -(UpVector[0] * FrontVector[0] + UpVector[1] * FrontVector[1]); } else { if (fabs(FrontVector[1]) < fabs(FrontVector[2])) UpVector[1] = -(UpVector[0] * FrontVector[0] + UpVector[2] * FrontVector[2]); else UpVector[2] = -(UpVector[0] * FrontVector[0] + UpVector[1] * FrontVector[1]); } mWorldLight = lcMatrix44LookAt(mPosition, mTargetPosition, UpVector); } }
{ lcMemFile PieceFile; foreach (const QString& Line, MeshLines) { QByteArray Buffer = Line.toLatin1(); PieceFile.WriteBuffer(Buffer.constData(), Buffer.size()); PieceFile.WriteBuffer("\r\n", 2); } lcLibraryMeshData MeshData; lcArray<lcLibraryTextureMap> TextureStack; PieceFile.Seek(0, SEEK_SET); const char* OldLocale = setlocale(LC_NUMERIC, "C"); bool Ret = lcGetPiecesLibrary()->ReadMeshData(PieceFile, lcMatrix44Identity(), 16, TextureStack, MeshData, LC_MESHDATA_SHARED); setlocale(LC_NUMERIC, OldLocale); if (Ret) lcGetPiecesLibrary()->CreateMesh(this, MeshData); } } bool PieceInfo::IncludesModel(const lcModel* Model) const { if (mFlags & LC_PIECE_MODEL) { if (mModel == Model) return true; return mModel->IncludesModel(Model);