]> icculus.org git repositories - divverent/nexuiz.git/blob - scmenu/source/system/gc.qc
restructure
[divverent/nexuiz.git] / scmenu / source / system / gc.qc
1 // DP/Nex Menu
2 // system/gc.qc
3
4 void() Menu_InitGarbageStats =
5 {
6         Menu_GarbageFrameCount = 0;
7         Menu_GarbageToggleCount = 0;
8 };
9
10 void() Menu_ResetGarbageStats =
11 {
12         if( Menu_GarbageFrameCount )
13                 print( "Menu: GC: ", ftos( Menu_GarbageFrameCount ), " items marked for frame deletion but couldnt be reached!\n" );
14         if( Menu_GarbageToggleCount )
15                 print( "Menu: GC: ", ftos( Menu_GarbageToggleCount ), " items marked for toggle delition but couldnt be reached!\n" );
16
17         Menu_GarbageFrameCount = 0;
18         Menu_GarbageToggleCount = 0;
19 };
20
21 bool( entity pItem ) Menu_CheckForGarbage =
22 {
23         if( Menu_HasRunFlag( pItem, RUNFLAG_DELETEFRAME ) ) {
24                 Menu_RemoveItem( pItem );
25                 --Menu_GarbageFrameCount;
26                 return true;
27         }
28         return false;
29 };
30
31 void( bool pToggle ) Menu_CollectGarbage =
32 {
33         local entity lNode;
34
35         lNode = null_entity;
36         if( pToggle ) {
37                 while( (Menu_GarbageFrameCount || Menu_GarbageToggleCount) && (lNode = nextent( lNode )) != null_entity )
38                         if( Menu_HasRunFlag( lNode, RUNFLAG_DELETEFRAME ) ) {
39                                 Menu_RemoveItem( lNode );
40                                 --Menu_GarbageFrameCount;
41                         } else if( Menu_HasRunFlag( lNode, RUNFLAG_DELETETOGGLE ) ) {
42                                 Menu_RemoveItem( lNode );
43                                 --Menu_GarbageToggleCount;
44                         }
45         } else while( Menu_GarbageFrameCount && (lNode = nextent( lNode )) != null_entity )
46                 if( Menu_HasRunFlag( lNode, RUNFLAG_DELETEFRAME ) ) {
47                         Menu_RemoveItem( lNode );
48                         --Menu_GarbageFrameCount;
49                 }
50 };
51
52 void( entity pItem ) Menu_DeleteAfterFrame =
53 {
54         if( !Menu_HasRunFlag( pItem, RUNFLAG_DELETEFRAME ) ) {
55                 if( Menu_HasRunFlag( pItem, RUNFLAG_DELETETOGGLE ) ) {
56                         pItem._runFlag = pItem._runFlag + RUNFLAG_DELETEFRAME - RUNFLAG_DELETETOGGLE;
57                         --Menu_GarbageToggleCount;
58                 } else
59                         pItem._runFlag = pItem._runFlag + RUNFLAG_DELETEFRAME;
60                 ++Menu_GarbageFrameCount;
61         }
62 };
63
64 void( entity pItem ) Menu_DeleteAfterToggle =
65 {
66         if( Menu_HasRunFlag( pItem, RUNFLAG_DELETEFRAME )
67                 || Menu_HasRunFlag( pItem, RUNFLAG_DELETETOGGLE ) )
68                 return;
69         pItem._runFlag = self._runFlag + RUNFLAG_DELETETOGGLE;
70         ++Menu_GarbageToggleCount;
71 };
72