]> code.citadel.org Git - citadel.git/blob - shaggy/roomMap.java
don't use libtool -avoid-version for libcitserver - this might help for
[citadel.git] / shaggy / roomMap.java
1 import java.util.*;
2
3 public class roomMap {
4     Vector      f_list;
5     Hashtable   floors, rooms;
6
7     floor               cur_floor;
8     mainPanel   mp;
9
10     public roomMap( mainPanel mp ) {
11         f_list = new Vector();
12         floors = new Hashtable();
13         rooms = new Hashtable();
14         this.mp = mp;
15     }
16
17     public void floors( citReply r ) {
18         int             i = 0;
19         String  line;
20
21         floors = new Hashtable();
22     
23         while( (line = r.getLine( i++ ) ) != null ) {
24             floor       f = new floor( line );
25             floors.put( f.num, f );
26             floors.put( f.name, f );
27             f_list.addElement( f );
28         }
29     }
30
31     public void new_rooms( citReply rep ) {
32         int             i = 0;
33         String  line;
34
35         while( (line = rep.getLine( i++ ) ) != null ) {
36             room        r, rr = new room( line );
37             r = (room)rooms.get( rr.name() );
38             if( r == null ) {
39                 rr.setNew();
40                 rooms.put( rr.name, rr );
41                 addToFloor( rr );
42             } else 
43                 r.setNew();
44         }
45     }
46
47     public void old_rooms( citReply rep ) {
48         int             i = 0;
49         String  line;
50
51         while( (line = rep.getLine( i++ )) != null ) {
52             room        r = new room( line );
53             rooms.put( r.name(), r );
54             addToFloor( r );
55         }
56     }
57
58     public void addToFloor( room r ) {
59         floor   f = (floor)floors.get( r.fname );
60         if( f != null )
61             f.addRoom( r );
62     }
63
64     public floor nextFloor() {
65         int     c = f_list.indexOf( cur_floor );
66         c++;
67
68         try {
69             cur_floor = (floor)f_list.elementAt( c );
70         } catch( Exception e ) {
71             cur_floor = (floor)f_list.firstElement();
72         }
73
74         setFloor( cur_floor );
75         return cur_floor;
76     }
77     
78     public floor getFloor() {
79         if( cur_floor == null ) cur_floor = (floor)f_list.firstElement();
80
81         return cur_floor;
82     }
83
84   public floor getFloor( int num ) {
85     return getFloor( "" +  num );
86   }
87
88     public floor getFloor( String name ) {
89         return (floor)floors.get( name );
90     }
91
92     public floor getFloor( room rm ) {
93         return getFloor( rm.fname );
94     }
95
96     public void setFloor( floor f ) {
97         cur_floor = f;
98         mp.setFloor( f );
99         mp.updateLists( f.name() );
100     }
101
102     public room nextNewRoom() {
103         floor   c = getFloor();
104
105         do {
106             for( Enumeration e = getFloor().rooms.elements(); e.hasMoreElements(); ) {
107                 room    r = (room)e.nextElement();
108                 if( r.hasNew() ) return r;
109             }
110             nextFloor();
111         } while( c != getFloor() );
112
113         System.out.println( "No more new rooms... refreshing list" );
114
115         citadel.me.networkEvent( "LKRN", new CallBack() {
116             public void run( citReply r ) {
117                 new_rooms( r );
118                 room    rm = getRoom( "Lobby" );
119                 setFloor( getFloor( rm ) );
120         
121             } } );
122
123         room    r = getRoom( "Lobby" );
124         setFloor( getFloor( r ) );
125
126         return r;
127     }
128
129     public room getRoom( String name ) {
130         return (room)rooms.get(name);
131     }
132
133     public room forgotRoom( roomInfo ri ) {
134         room    r = (room)rooms.remove( ri.name );
135         if( r == null ) return nextNewRoom();
136         floor   f = getFloor( ri.rm );
137         if( f == null ) return nextNewRoom();
138         f.rooms.removeElement( ri.rm );
139         return nextNewRoom();
140     }
141     
142 }
143
144
145
146
147