2 // control/data/value.qc
6 Item_DataLink_Value_Clamp
9 void() Item_DataLink_Value_Clamp =
11 if( self._realValue > self.maxValue && self.maxValue > self.minValue )
12 self._realValue = self.maxValue;
13 else if( self._realValue < self.minValue )
14 self._realValue = self.minValue;
15 else // clamp it to(?) stepValue
16 self._realValue = self.minValue + self.stepValue * rint( ( self._realValue - self.minValue ) / self.stepValue );
21 Item_DataLink_ClampText
24 string() Item_DataLink_ClampedValue =
27 local float lClampedStep;
28 local float lInverseClamped;
29 lClampedStep = self.stepValue - floor( self.stepValue );
30 if( lClampedStep == 0.0 )
31 return ftos( self._realValue );
32 // get the integer length
33 lLen = strlen( ftos( floor( self._realValue ) ) );
34 // Example data: 0.1 -> 10 - 1 = 9; 0.9 -> 1.^1 - 0.1 = 1.0^1 ; 0.01 -> 100 - 1 = 99 ; 0.09 -> 11.^1 - 0.1 = 10.0^1
35 lInverseClamped = 1.0 / lClampedStep - 0.1;
36 // add the fraction length and 1 for the .
37 lLen += strlen( ftos( floor( lInverseClamped ) ) ) + 1;
38 return substring( ftos( self._realValue + 0.0001 ), 0, lLen );
43 Item_DataLink_Value_DataEvent
46 void( float pEvent ) Item_DataLink_Value_DataEvent =
48 Item_DataLink_Update();
50 if( pEvent == ITEM_DATALINK_SET ) {
51 Item_DataLink_Value_Clamp();
53 self._link._realValue = self._realValue;
54 String_EntitySet( self._link, value, ftos( self._realValue ) );
55 Raise_DataEvent( self._link, ITEM_DATALINK_SET );
57 } else if( !self._link )
59 else if( pEvent == ITEM_DATALINK_GET ) {
60 Raise_DataEvent( self._link, ITEM_DATALINK_GET );
61 self._realValue = stof( self._link.value );
62 String_EntitySet( self, value, Item_DataLink_ClampedValue() );
63 Item_DataLink_Value_Clamp();
65 Raise_DataEvent( self._link, pEvent );
70 Item_DataLink_Value_Spawn
73 void() Item_DataLink_Value_Spawn =
77 if( self.stepValue == 0.0 )
80 self._dataEvent = Item_DataLink_Value_DataEvent;