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; }
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; }
// 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; }