Beispiel #1
0
DWORD CQHState::OnChangeObjectParent( DWORD size, void *params )
{
	CHANGEOBJECTPARENT *cop = static_cast<CHANGEOBJECTPARENT *>( params );
	VERIFY_MESSAGE_SIZE( sizeof( *cop ), size );

	static const DWORD hashType = CHashString( _T("CQHState") ).GetUniqueID();
	if( cop->objectCompType != NULL &&
		cop->objectCompType->GetUniqueID() != hashType )
	{
		assert( !"Unmatched type" );
		return MSG_ERROR;
	}

	if( *GetName() != *cop->objectName )
	{
		assert( !"Unmatched name" );
		return MSG_ERROR;
	}

	SetParentName( cop->newParentName );
	return MSG_HANDLED_PROCEED;
}
// Read():
bool LWObject_Surface::Read( LWbifstream &in, unsigned long chunk_size ) {
  if( chunk_size == 0 )
    return true;

  // Surface Name
  char buffer[256];
  in.GetString( buffer, 256 );
  SetName( buffer );

  // Parent Name
  in.GetString( buffer, 256 );
  SetParentName( buffer );

  // Sub-Chunk Loop
  streampos chunk_start = in.tellg();
  unsigned long subchunk_id, subchunk_size;

  while( !in.eof() ) {
    // Test for errors
    if( in.bad() || in.fail() )
      throw LWOERROR_ERROR_READING_FILE;

    // Get the basic chunk data
    chunk_start = in.tellg();
    in >> subchunk_id >> subchunk_size;

    // Figure out what kind of chunk this is
    switch( subchunk_id ) {
      case LWObject_SURFChunk_COLR:               // COLR
        color.Read( in, false );
        color_envelope_index = in.ReadVX() - 1;
        break;

      case LWObject_SURFChunk_DIFF:               // DIFF
        in >> diffusion;
        diffusion_envelope_index = in.ReadVX() - 1;
        break;

      case LWObject_SURFChunk_SHRP:               // SHRP
        in >> diffuse_sharpness;
        diffuse_sharpness_envelope_index = in.ReadVX() - 1;
        break;

      case LWObject_SURFChunk_LUMI:               // LUMI
        in >> luminosity;
        luminosity_envelope_index = in.ReadVX() - 1;
        break;

      case LWObject_SURFChunk_SPEC:               // SPEC
        in >> specular;
        specular_envelope_index = in.ReadVX() - 1;
        break;

      case LWObject_SURFChunk_GLOS:               // GLOS
        in >> glossiness;
        glossiness_envelope_index = in.ReadVX() - 1;
        break;

      case LWObject_SURFChunk_REFL:               // REFL
        in >> reflectivity;
        reflectivity_envelope_index = in.ReadVX() - 1;
        break;

      case LWObject_SURFChunk_TRAN:               // TRAN
        in >> transparency;
        transparency_envelope_index = in.ReadVX() - 1;
        break;

      case LWObject_SURFChunk_TRNL:               // TRNL
        in >> translucency;
        translucency_envelope_index = in.ReadVX() - 1;
        break;

      case LWObject_SURFChunk_BUMP:               // BUMP
        in >> bump;
        bump_envelope_index = in.ReadVX() - 1;
        break;

      case LWObject_SURFChunk_SIDE : {            // SIDE
        unsigned short temps;
        in >> temps;
        is_double_sided = (temps == 3) ? true : false;
      } break;

      case LWObject_SURFChunk_SMAN:               // SMAN
        in >> max_smoothing_angle;
        break;

      case LWObject_SURFChunk_RFOP:               // RFOP
        in >> reflection_options;
        break;

      case LWObject_SURFChunk_TROP:               // TROP
        in >> transparency_options;
        break;

      case LWObject_SURFChunk_CLRH:               // CLRH
        in >> color_highlights;
        color_highlights_envelope_index = in.ReadVX() - 1;
        break;

      case LWObject_SURFChunk_CLRF:               // CLRF
        in >> color_filter;
        color_filter_envelope_index = in.ReadVX() - 1;
        break;

      default:                                    // Unknown Chunk
        in.seekg( subchunk_size, ios::cur );
    }

    // Skip another byte if the chunk size is odd (chunks must be even sized)
    if( (chunk_size % 2) > 0 )
      in.seekg( 1, ios::cur );
  }

  return true;
}
// Destructor
LWObject_Surface::~LWObject_Surface() {
  SetName( NULL );
  SetParentName( NULL );
}