]> icculus.org git repositories - divverent/nexuiz.git/blob - data/source/control/data/value.qc
give menu source its own directory
[divverent/nexuiz.git] / data / source / control / data / value.qc
1 // DP/Nex Menu
2 // control/data/value.qc
3
4 /*
5 ===================
6 Item_DataLink_Value_Clamp
7 ===================
8 */
9 void() Item_DataLink_Value_Clamp =
10 {
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 );
17 };
18
19 /*
20 ===================
21 Item_DataLink_ClampText
22 ===================
23 */
24 string() Item_DataLink_ClampedValue =
25 {
26         local float lLen;
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 );
39 }
40
41 /*
42 ===================
43 Item_DataLink_Value_DataEvent
44 ===================
45 */
46 void( float pEvent ) Item_DataLink_Value_DataEvent =
47 {
48         Item_DataLink_Update();
49
50         if( pEvent == ITEM_DATALINK_SET ) {
51                 Item_DataLink_Value_Clamp();
52                 if( self._link ) {
53                         self._link._realValue = self._realValue;
54                         String_EntitySet( self._link, value, ftos( self._realValue ) );
55                         Raise_DataEvent( self._link, ITEM_DATALINK_SET );
56                 }
57         } else if( !self._link )
58                 return;
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();
64         } else
65                 Raise_DataEvent( self._link, pEvent );
66 };
67
68 /*
69 ===================
70 Item_DataLink_Value_Spawn
71 ===================
72 */
73 void() Item_DataLink_Value_Spawn =
74 {
75         Item_DataLink_Init();
76
77         if( self.stepValue == 0.0 )
78                 self.stepValue = 1;
79
80         self._dataEvent = Item_DataLink_Value_DataEvent;
81 };
82