コード例 #1
0
ファイル: REFRRecordAPI.cpp プロジェクト: Ormin/CBash
bool REFRRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, uint32_t ArraySize)
{
    Data.Load();
    switch(FieldID)
    {
    case 1: //flags1
        SetHeaderFlagMask(*(uint32_t *)FieldValue);
        break;
    case 3: //flags2
        SetHeaderUnknownFlagMask(*(uint32_t *)FieldValue);
        break;
    case 4: //eid
        Data->EDID.Copy((char *)FieldValue);
        break;
    case 5: //base
        Data->NAME.value = *(FORMID *)FieldValue;
        return true;
    case 6: //destination
        Data->XTEL.Load();
        Data->XTEL->destinationFid = *(FORMID *)FieldValue;
        return true;
    case 7: //destinationPosX
        Data->XTEL.Load();
        Data->XTEL->destination.posX = *(float *)FieldValue;
        break;
    case 8: //destinationPosY
        Data->XTEL.Load();
        Data->XTEL->destination.posY = *(float *)FieldValue;
        break;
    case 9: //destinationPosZ
        Data->XTEL.Load();
        Data->XTEL->destination.posZ = *(float *)FieldValue;
        break;
    case 10: //destinationRotX
        Data->XTEL.Load();
        Data->XTEL->destination.rotX = *(float *)FieldValue;
        break;
    case 11: //destinationRotY
        Data->XTEL.Load();
        Data->XTEL->destination.rotY = *(float *)FieldValue;
        break;
    case 12: //destinationRotZ
        Data->XTEL.Load();
        Data->XTEL->destination.rotZ = *(float *)FieldValue;
        break;
    case 13: //lockLevel
        Data->XLOC.Load();
        Data->XLOC->level = *(uint8_t *)FieldValue;
        break;
    case 14: //unused1
        if(ArraySize != 3)
            break;
        Data->XLOC.Load();
        Data->XLOC->unused1[0] = ((UINT8ARRAY)FieldValue)[0];
        Data->XLOC->unused1[1] = ((UINT8ARRAY)FieldValue)[1];
        Data->XLOC->unused1[2] = ((UINT8ARRAY)FieldValue)[2];
        break;
    case 15: //lockKey
        Data->XLOC.Load();
        Data->XLOC->key = *(FORMID *)FieldValue;
        return true;
    case 16: //unused2
        if(ArraySize != 4)
            break;
        Data->XLOC.Load();
        Data->XLOC->unused2[0] = ((UINT8ARRAY)FieldValue)[0];
        Data->XLOC->unused2[1] = ((UINT8ARRAY)FieldValue)[1];
        Data->XLOC->unused2[2] = ((UINT8ARRAY)FieldValue)[2];
        Data->XLOC->unused2[3] = ((UINT8ARRAY)FieldValue)[3];
        break;
    case 17: //lockFlags
        SetLockFlagMask(*(uint8_t *)FieldValue);
        break;
    case 18: //unused3
        if(ArraySize != 3)
            break;
        Data->XLOC.Load();
        Data->XLOC->unused3[0] = ((UINT8ARRAY)FieldValue)[0];
        Data->XLOC->unused3[1] = ((UINT8ARRAY)FieldValue)[1];
        Data->XLOC->unused3[2] = ((UINT8ARRAY)FieldValue)[2];
        break;
    case 19: //owner
        Data->Ownership.Load();
        Data->Ownership->XOWN.value = *(FORMID *)FieldValue;
        return true;
    case 20: //rank
        Data->Ownership.Load();
        Data->Ownership->XRNK.Load();
        *Data->Ownership->XRNK.value = *(int32_t *)FieldValue;
        break;
    case 21: //globalVariable
        Data->Ownership.Load();
        Data->Ownership->XGLB.value = *(FORMID *)FieldValue;
        return true;
    case 22: //parent
        Data->XESP.Load();
        Data->XESP->parent = *(FORMID *)FieldValue;
        return true;
    case 23: //parentFlags
        SetParentFlagMask(*(uint8_t *)FieldValue);
        break;
    case 24: //unused4
        if(ArraySize != 3)
            break;
        Data->XESP.Load();
        Data->XESP->unused1[0] = ((UINT8ARRAY)FieldValue)[0];
        Data->XESP->unused1[1] = ((UINT8ARRAY)FieldValue)[1];
        Data->XESP->unused1[2] = ((UINT8ARRAY)FieldValue)[2];
        break;
    case 25: //target
        Data->XTRG.value = *(FORMID *)FieldValue;
        return true;
    case 26: //seed
        Data->XSED.Load();
        //Borrowing ArraySize to flag if the new value is an offset
        if(ArraySize)
        {
            Data->XSED->isOffset = true;
            Data->XSED->offset = *(uint8_t *)FieldValue;
        }
        else
        {
            Data->XSED->isOffset = false;
            Data->XSED->seed = *(uint32_t *)FieldValue;
        }
        break;
    case 27: //lod1
        Data->XLOD.Load();
        Data->XLOD->lod1 = *(float *)FieldValue;
        break;
    case 28: //lod2
        Data->XLOD.Load();
        Data->XLOD->lod2 = *(float *)FieldValue;
        break;
    case 29: //lod3
        Data->XLOD.Load();
        Data->XLOD->lod3 = *(float *)FieldValue;
        break;
    case 30: //charge
        Data->XCHG.value = *(float *)FieldValue;
        break;
    case 31: //health
        Data->XHLT.value = *(int32_t *)FieldValue;
        break;
    case 32: //unknownXPCIFormID
        Data->XPCI.Load();
        Data->XPCI->XPCI.value = *(FORMID *)FieldValue;
        return true;
    case 33: //unknownXPCIString
        Data->XPCI.Load();
        Data->XPCI->FULL.Copy((char *)FieldValue);
        break;
    case 34: //levelMod
        Data->XLCM.value = *(int32_t *)FieldValue;
        break;
    case 35: //unknownXRTMFormID
        Data->XRTM.value = *(FORMID *)FieldValue;
        return true;
    case 36: //actionFlags
        SetActionFlagMask(*(uint32_t *)FieldValue);
        break;
    case 37: //count
        Data->XCNT.value = *(int32_t *)FieldValue;
        break;
    case 38: //markerFlags
        SetMapFlagMask(*(uint8_t *)FieldValue);
        break;
    case 39: //markerName
        Data->Marker.Load();
        Data->Marker->FULL.Copy((char *)FieldValue);
        break;
    case 40: //markerType
        SetMarkerType(*(uint8_t *)FieldValue);
        break;
    case 41: //markerUnused
        if(ArraySize != 1)
            break;
        Data->Marker.Load();
        Data->Marker->TNAM.value.unused1 = ((UINT8ARRAY)FieldValue)[0];
        break;
    case 42: //scale
        Data->XSCL.Load();
        Data->XSCL.value = *(float *)FieldValue;
        break;
    case 43: //soulType
        SetSoul(*(uint8_t *)FieldValue);
        break;
    case 44: //posX
        Data->DATA.value.posX = *(float *)FieldValue;
        break;
    case 45: //posY
        Data->DATA.value.posY = *(float *)FieldValue;
        break;
    case 46: //posZ
        Data->DATA.value.posZ = *(float *)FieldValue;
        break;
    case 47: //rotX
        Data->DATA.value.rotX = *(float *)FieldValue;
        break;
    case 48: //rotY
        Data->DATA.value.rotY = *(float *)FieldValue;
        break;
    case 49: //rotZ
        Data->DATA.value.rotZ = *(float *)FieldValue;
        break;
    default:
        break;
    }
    return false;
}
コード例 #2
0
ファイル: CMarker.cpp プロジェクト: pombredanne/openvice
bool CMarker::ReadSpecialData ( void )
{
    // Grab the "posX" data
    if ( !GetCustomDataFloat ( "posX", m_vecPosition.fX, true ) )
    {
        CLogger::ErrorPrintf ( "Bad/missing 'posX' attribute in <marker> (line %u)\n", m_uiLine );
        return false;
    }

    // Grab the "posY" data
    if ( !GetCustomDataFloat ( "posY", m_vecPosition.fY, true ) )
    {
        CLogger::ErrorPrintf ( "Bad/missing 'posY' attribute in <marker> (line %u)\n", m_uiLine );
        return false;
    }

    // Grab the "posZ" data
    if ( !GetCustomDataFloat ( "posZ", m_vecPosition.fZ, true ) )
    {
        CLogger::ErrorPrintf ( "Bad/missing 'posZ' attribute in <marker> (line %u)\n", m_uiLine );
        return false;
    }

    // Set the position in the col object
    if ( m_pCollision )
        m_pCollision->SetPosition ( m_vecPosition );

    // Grab the "type" data
    char szBuffer [128];
    unsigned char ucType;
    if ( GetCustomDataString ( "type", szBuffer, 128, true ) )
    {
        // Convert it to a type
        ucType = static_cast < unsigned char > ( CMarkerManager::StringToType ( szBuffer ) );
        if ( ucType == CMarker::TYPE_INVALID )
        {
            CLogger::LogPrintf ( "WARNING: Unknown 'type' value specified in <marker>; defaulting to \"default\" (line %u)\n", m_uiLine );
            ucType = CMarker::TYPE_CHECKPOINT;
        }
    }
    else
    {
        ucType = CMarker::TYPE_CHECKPOINT;
    }
    SetMarkerType(ucType);

    // Grab the "color" data
    if ( GetCustomDataString ( "color", szBuffer, 128, true ) )
    {
        // Convert the HTML-style color to RGB
        if ( !XMLColorToInt ( szBuffer, m_Color.R, m_Color.G, m_Color.B, m_Color.A ) )
        {
            CLogger::ErrorPrintf ( "Bad 'color' specified in <marker> (line %u)\n", m_uiLine );
            return false;
        }
    }
    else
    {
        SetColor ( SColorRGBA( 255, 0, 0, 255 ) );
    }

    float fSize;
    if ( GetCustomDataFloat ( "size", fSize, true ) )
        m_fSize = fSize;

    int iTemp;
    if ( GetCustomDataInt ( "dimension", iTemp, true ) )
        m_usDimension = static_cast < unsigned short > ( iTemp );

    if ( GetCustomDataInt ( "interior", iTemp, true ) )
        m_ucInterior = static_cast < unsigned char > ( iTemp );

    // Success
    return true;
}
コード例 #3
0
ファイル: XYChart.cpp プロジェクト: robertjolson/ifcb-acq
// Result here is rounded down to zero for the data set items
int		CXYChart::InterpretDataSetPopupMenuItem( int whichDataSet, int result )
{
	int			dataID = m_DataID[whichDataSet];

	// result is chart type
	if( result >= kMenuChartType && result < kMenuLineSize )
	{
		// These correlate perfectly
		SetChartType( dataID, result - kMenuChartType );

		return kPopupUpdate;
	}

	// result is line size
	if( result - kMenuLineSize >= 0 && result < kMenuLineSize + nLineSizes )
	{
		SetDataLineSize( dataID, result - kMenuLineSize + 1 );

		return kPopupUpdate;
	}

	// result is line style
	if( result - kMenuLineStyle >= 0 && result < kMenuLineStyle + 5 )
	{
		SetDataLineStyle( dataID, result - kMenuLineStyle );

		return kPopupUpdate;
	}

	// result is marker type
	if( result - kMenuMarker >= 0 && result - kMenuMarker < kMarkerTypeCount )
	{
		SetMarkerType( dataID, result - kMenuMarker );
		return kPopupUpdate;
	}

	// marker fill item
	if( result - kMenuMarker == kMenuMarkerFill )
	{
		SetMarkerFillState( dataID, !GetMarkerFillState(dataID) );
		return kPopupUpdate;
	}

	// marker size popup
	if( result - kMenuMarker >= kMenuMarkerSize && result - kMenuMarker < kMenuMarkerSize+nMarkerSizes )
	{
		SetMarkerSize( dataID, 10 * (result - (kMenuMarkerFill + kMenuMarker)) );
		return kPopupUpdate;
	}


	// marker frequency
	if( result - kMenuMarker >= kMenuMarkerFrequency && result - kMenuMarker < kMenuMarkerFrequency + 3 )
	{
		int			tempResult = result - kMenuMarkerFrequency - kMenuMarker;
		int			freq = abs(GetMarkerFrequency(dataID));

		if( freq == 1 ) freq = 10;

		switch( tempResult )
		{
		case 0: SetMarkerFrequency( dataID, 1 ); break;
		case 1: SetMarkerFrequency( dataID, freq ); break;
		case 2: SetMarkerFrequency( dataID, -freq ); break;
		default: break;
		}

		return kPopupUpdate;
	}


	return kPopupNoAction;
}