CMGDK r49-rc2
|
00001 # i f n d e f H G L _ A S T A R _ F I N D P A T H _ I N C L U D E 00002 00003 # d e f i n e H G L _ A S T A R _ F I N D P A T H _ I N C L U D E 00004 00005 00006 00007 # i n c l u d e < h g l / t y p e / L i s t . H > 00008 00009 # i n c l u d e < h g l / u t / F i n d P a t h . H > 00010 00011 # i n c l u d e < m a t h . h > 00012 00013 n a m e s p a c e h g l 00014 00015 { 00016 00017 n a m e s p a c e f i n d p a t h 00018 00019 { 00020 00021 s t r u c t F i n d I t e m 00022 00023 { 00024 00025 F i n d I t e m * p r e v ; 00026 00027 00028 00029 L i s t < F i n d I t e m * > s u b ; 00030 00031 00032 00033 i n t x , y ; 00034 00035 i n t s t e p ; 00036 00037 00038 00039 f l o a t l e n g t h ; 00040 00041 00042 00043 F i n d I t e m ( ) 00044 00045 { 00046 00047 p r e v = N U L L ; 00048 00049 x = - 1 ; 00050 00051 y = - 1 ; 00052 00053 s t e p = - 1 ; 00054 00055 l e n g t h = - 1 ; 00056 00057 } 00058 00059 00060 00061 v o i d S e t ( F i n d I t e m * p , i n t c x , i n t c y , f l o a t l e n ) 00062 00063 { 00064 00065 p r e v = p ; 00066 00067 00068 00069 s u b . C l e a r D a t a ( ) ; 00070 00071 00072 00073 x = c x ; 00074 00075 y = c y ; 00076 00077 00078 00079 i f ( p ) 00080 00081 s t e p = p - > s t e p + 1 ; 00082 00083 e l s e 00084 00085 s t e p = 0 ; 00086 00087 00088 00089 l e n g t h = l e n ; 00090 00091 } 00092 00093 } ; 00094 00095 00096 00097 c l a s s A S t a r F i n d P a t h : p u b l i c F i n d P a t h 00098 00099 { 00100 00101 p r i v a t e : 00102 00103 00104 00105 F i n d I t e m * * * f i n d ; / / hNk N*N<hP[ 00106 Nvg~by(uNh]~gǏN 00107 00108 00109 00110 L i s t < F i n d I t e m * > f i n d l i s t ; / / g~bvR 00111 00112 / / f i n d l i s t /fNSOHQv͑p1uN(Wk!kg~b-N R`vte'Y\͑RMQ[\O9'YϑC P U e0 00113 00114 / / g:Nt`ve_/ffbc:Nh 00115 00116 00117 00118 F i n d I t e m * f i n d _ b u f f e r ; / / >eeQ~gR(uvpenccMRRMNcGSHe 00119 00120 i n t f i n d _ b u f f e r _ i n d e x ; / / Q"}_ 00121 00122 00123 00124 p r i v a t e : 00125 00126 00127 00128 _ _ i n l i n e b o o l c h e c k p o i n t ( i n t x , i n t y , i n t p x , i n t p y ) 00129 00130 { 00131 00132 r e t u r n C a l l E v e n t ( C h e c k P o i n t , ( x , y , p x , p y ) ) ; 00133 00134 } 00135 00136 00137 00138 _ _ i n l i n e f l o a t c o m p _ l e n g t h ( i n t x , i n t y ) 00139 00140 { 00141 00142 / / r e t u r n s q r t ( ( E n d X - x ) * ( E n d X - x ) + ( E n d Y - y ) * ( E n d Y - y ) ) ; 00143 00144 / / r e t u r n ( E n d X - x ) * ( E n d X - x ) + ( E n d Y - y ) * ( E n d Y - y ) ; 00145 00146 r e t u r n a b s ( f l o a t ( E n d X - x ) ) + f a b s ( f l o a t ( E n d Y - y ) ) ; 00147 00148 } 00149 00150 00151 00152 _ _ i n l i n e F i n d I t e m * G e t I t e m ( F i n d I t e m * p , i n t c x , i n t c y , f l o a t l e n ) 00153 00154 { 00155 00156 F i n d I t e m * r e s u l t = f i n d _ b u f f e r + ( f i n d _ b u f f e r _ i n d e x + + ) ; 00157 00158 00159 00160 r e s u l t - > S e t ( p , c x , c y , l e n ) ; 00161 00162 00163 00164 r e t u r n r e s u l t ; 00165 00166 } 00167 00168 00169 00170 v o i d c l e a r ( ) ; 00171 00172 00173 00174 F i n d I t e m * i n s e r t ( F i n d I t e m * p f d , i n t x , i n t y ) ; 00175 00176 00177 00178 v i r t u a l v o i d c r e a t e _ s u b ( i n t x , i n t y , i n t p x , i n t p y , S t e p L i s t & ) = 0 ; 00179 00180 00181 00182 b o o l f i n d _ p a t h ( ) ; 00183 00184 00185 00186 p u b l i c : 00187 00188 00189 00190 A S t a r F i n d P a t h ( i n t , i n t ) ; 00191 00192 ~ A S t a r F i n d P a t h ( ) ; 00193 00194 00195 00196 v o i d I n i t ( ) ; 00197 00198 } ; 00199 00200 } / / n a m e s p a c e f i n d p a t h 00201 00202 } / / n a m e s p a c e h g l 00203 00204 # e n d i f / / H G L _ A S T A R _ F I N D P A T H _ I N C L U D E 00205 00206 00207 00208