]> icculus.org git repositories - divverent/nexuiz.git/blob - data/menuqc/control/_fx/vector.qc
give menu source its own directory
[divverent/nexuiz.git] / data / menuqc / control / _fx / vector.qc
1 // DP/Nex Menu
2 // control/fx/vector.qc
3
4 //////////////////////
5 // Item_Effect_Vector
6 ///
7
8 void( InterpolFunction pFunction, bool pForward ) _IEV_Interpolate =
9 {
10         local vector lCopy;
11         local float lT;
12
13         lT = Timer_Time - self._presstime;
14         lCopy = self._parent.self.targetVector;
15         if( pForward ) {
16                 lCopy_x = pFunction( self.startVector_x, self.endVector_x, self.time_x, lT, lCopy_x );
17                 lCopy_y = pFunction( self.startVector_y, self.endVector_y, self.time_x, lT, lCopy_y );
18                 lCopy_z = pFunction( self.startVector_z, self.endVector_z, self.time_x, lT, lCopy_z );
19         } else {
20                 lCopy_x = pFunction( self.endVector_x, self.startVector_x, self.time_y, lT, lCopy_x );
21                 lCopy_y = pFunction( self.endVector_y, self.startVector_y, self.time_y, lT, lCopy_y );
22                 lCopy_z = pFunction( self.endVector_z, self.startVector_z, self.time_y, lT, lCopy_z );
23         }
24         self._parent.self.targetVector = lCopy;
25 };
26
27 void() Item_Effect_Vector_Update =
28 {
29         if( self._state == ITEM_STATE_FORWARD ) {
30                 if( self._presstime + self.time_x < Timer_Time ) {
31                         self._parent.self.targetVector = self.endVector;
32                         self._presstime = Timer_Time;
33                         self._state = ITEM_STATE_BACKWARD;
34                 } else
35                         _IEV_Interpolate( self.interpolForward, true );
36         } else {
37                 if( self._presstime + self.time_y < Timer_Time ) {
38                         self._parent.self.targetVector = self.startVector;
39                         self._presstime = Timer_Time;
40                         self._state = ITEM_STATE_FORWARD;
41                 } else
42                         _IEV_Interpolate( self.interpolBackward, false );
43         }
44
45         // Check the task state
46         if( ( self.time_y == -1 && self._state == ITEM_STATE_BACKWARD ) ||
47                 ( self.time_z >= 0 && self.time_z >= Timer_Time ) )
48                         if( self.time_z == -2 )
49                                 self._runFlag = self._runFlag | RUNFLAG_CHILDDRAWONLY | FLAG_DRAWONLY;
50                         else
51                                 Menu_DeleteAfterFrame( self );
52
53 };
54
55 void() Item_Effect_Vector_Reinit =
56 {
57         self._parent.self.targetVector = self.startVector;
58         self._presstime = Timer_Time;
59         self._state = ITEM_STATE_FORWARD;
60         if( self.flag & FLAG_DRAWONLY )
61                 self.flag = self.flag - FLAG_DRAWONLY;
62 };
63
64 void() Item_Effect_Vector_Spawn =
65 {
66         self.flag = self.flag | FLAG_HIDDEN;
67
68         self._update = Item_Effect_Vector_Update;
69         self._reinit = Item_Effect_Vector_Reinit;
70 };
71