2 <TITLE>File: filtros.pas </TITLE>
\r
3 <META NAME="GENERATOR" CONTENT="PasToHTML(Bystricky Vladimir)">
\r
5 <BODY BGCOLOR="#FFFFFF">
\r
6 <A NAME=filtros.pas><CENTER><H3>filtros.pas</H3></A><I> from <A HREF=/proyecto/doc/src-html/AlgoWars.html> Project: AlgoWars.dpr</A></I></CENTER>
\r
9 <I><FONT COLOR="Navy">{** Se implementan varios filtro en diferentes direcciones.<br>
\r
12 09/12/00: Se agrega la clase cFiltroMapa.
\r
14 <B>unit</B> Filtros;
\r
27 <I><FONT COLOR="Navy">{** Implementa un filtro que "ve" hacia adelante.}</FONT></I>
\r
28 cFiltroFrontal = <B>class</B>( cFiltro )
\r
30 <I><FONT COLOR="Navy">{** Verifica que un objeto volador pueda ser visto por la cámara}</FONT></I>
\r
31 <B>function</B> <A HREF="#cFiltroFrontal.mVisible">mVisible</A>( ov: cObjetoVolador ): boolean; <B>override</B>;
\r
34 <I><FONT COLOR="Navy">{** Implementa un filtro que "ve" hacia la izquierda.}</FONT></I>
\r
35 cFiltroLatIzq = <B>class</B>( cFiltro )
\r
37 <I><FONT COLOR="Navy">{** Verifica que un objeto volador pueda ser visto por la cámara}</FONT></I>
\r
38 <B>function</B> <A HREF="#cFiltroLatIzq.mVisible">mVisible</A>( ov: cObjetoVolador ): boolean; <B>override</B>;
\r
41 <I><FONT COLOR="Navy">{** Implementa un filtro que "ve" hacia la derecha.}</FONT></I>
\r
42 cFiltroLatDer = <B>class</B>( cFiltro )
\r
44 <I><FONT COLOR="Navy">{** Verifica que un objeto volador pueda ser visto por la cámara}</FONT></I>
\r
45 <B>function</B> <A HREF="#cFiltroLatDer.mVisible">mVisible</A>( ov: cObjetoVolador ): boolean; <B>override</B>;
\r
48 <I><FONT COLOR="Navy">{** Implementa un filtro que "ve" hacia atrás.}</FONT></I>
\r
49 cFiltroTrasero = <B>class</B>( cFiltro )
\r
51 <I><FONT COLOR="Navy">{** Verifica que un objeto volador pueda ser visto por la cámara}</FONT></I>
\r
52 <B>function</B> <A HREF="#cFiltroTrasero.mVisible">mVisible</A>( ov: cObjetoVolador ): boolean; <B>override</B>;
\r
55 <I><FONT COLOR="Navy">{** Implementa un filtro que "ve" hacia arriba.}</FONT></I>
\r
56 cFiltroArriba = <B>class</B>( cFiltro )
\r
58 <I><FONT COLOR="Navy">{** Verifica que un objeto volador pueda ser visto por la cámara}</FONT></I>
\r
59 <B>function</B> <A HREF="#cFiltroArriba.mVisible">mVisible</A>( ov: cObjetoVolador ): boolean; <B>override</B>;
\r
62 <I><FONT COLOR="Navy">{** Implementa un filtro que "ve" hacia abajo.}</FONT></I>
\r
63 cFiltroAbajo = <B>class</B>( cFiltro )
\r
65 <I><FONT COLOR="Navy">{** Verifica que un objeto volador pueda ser visto por la cámara}</FONT></I>
\r
66 <B>function</B> <A HREF="#cFiltroAbajo.mVisible">mVisible</A>( ov: cObjetoVolador ): boolean; <B>override</B>;
\r
69 <I><FONT COLOR="Navy">{** Implementa un filtro que "ve" hacia abajo pero desde arriba a una cierta distancia
\r
70 del observador. Es como si observara al observador mismo.}</FONT></I>
\r
71 cFiltroMapa = <B>class</B>( cFiltro )
\r
73 <I><FONT COLOR="Navy">{** Verifica que un objeto volador pueda ser visto por la cámara}</FONT></I>
\r
74 <B>function</B> <A HREF="#cFiltroMapa.mVisible">mVisible</A>( ov: cObjetoVolador ): boolean; <B>override</B>;
\r
77 <I><FONT COLOR="Navy">{** Implementa un filtro que "ve" hacia adelante y que además sólo puede
\r
78 ver objetos del tipo cNave y cMeteorito.}</FONT></I>
\r
79 cFiltroLock = <B>class</B>( cFiltroFrontal )
\r
81 <I><FONT COLOR="Navy">{** Verifica que un objeto volador pueda ser visto por la cámara}</FONT></I>
\r
82 <B>function</B> <A HREF="#cFiltroLock.mVisible">mVisible</A>( ov: cObjetoVolador ): boolean; <B>override</B>;
\r
85 <B>implementation</B>
\r
91 <I><FONT COLOR="Navy">{ cFiltroFrontal }</FONT></I>
\r
93 <I><FONT COLOR="Navy">{** Verifica que un objeto volador pueda ser visto por la cámara
\r
94 @param ov Objeto volador que se quiere verificar si es visto por la cámara.
\r
95 @return <i>True</i> si lo ve, <i>False</i> si no.}</FONT></I>
\r
96 <B>function</B> <A NAME=cFiltroFrontal.mVisible>cFiltroFrontal.mVisible</A>(ov: cObjetoVolador): boolean;
\r
98 posRel, <I><FONT COLOR="Navy">// vector posicion del objeto volador relativo a la camara </FONT></I>
\r
99 posCam, <I><FONT COLOR="Navy">// Posision del cameraman </FONT></I>
\r
100 dirCam: cVector; <I><FONT COLOR="Navy">// vector con la direccion en la que apunta la camara </FONT></I>
\r
101 dist: tLongitud; <I><FONT COLOR="Navy">// Distancia entre la camara y el objeto </FONT></I>
\r
102 cosAlfa: tAngulo; <I><FONT COLOR="Navy">// Coseno del angulo que forman la dir de la camara y la pos del objeto </FONT></I>
\r
105 <B>try</B> <I><FONT COLOR="Navy">// Probamos que el cameraman no este destruido </FONT></I>
\r
106 dist := mGetObservador.mGetDistancia( ov );
\r
107 <B>except</B> <I><FONT COLOR="Navy">// Si esta destruido cae en una excepcion </FONT></I>
\r
108 on e: EAccessViolation <B>do</B>
\r
109 <B>raise</B> EObservadorDestruido.create; <I><FONT COLOR="Navy">// Creamos una nueva excepcion especial </FONT></I>
\r
111 <B>if</B> ( dist > mGetRadioMinimo ) <B>and</B>
\r
112 ( dist < mGetRadioMaximo ) <B>then</B> <B>begin</B> <I><FONT COLOR="Navy">// Esta dentro de la distancia minima y maxima </FONT></I>
\r
113 <I><FONT COLOR="Navy">// posRel es el vector posicion del objeto volador relativo a la camara: posRel = posOV - posCam </FONT></I>
\r
114 posRel := ov.mGetPosicion;
\r
115 posCam := mGetObservador.mGetPosicion;
\r
116 posRel.mRestar( posCam );
\r
117 dirCam := mGetObservador.mGetI;
\r
118 <I><FONT COLOR="Navy">// Calcula el angulo entre las 2 posiciones ( A . B / |A| . |B| ) </FONT></I>
\r
119 cosAlfa := posRel.mMultiplicarEsc( dirCam ) / ( posRel.mGetModulo * dirCam.mGetModulo);
\r
120 <I><FONT COLOR="Navy">// Ahora se comparan los cosenos, ya que es una funcion decreciente entre 0 y PI </FONT></I>
\r
121 <B>if</B> cosAlfa > mGetCosApertura <B>then</B> <I><FONT COLOR="Navy">// Esta dentro del angulo de vision </FONT></I>
\r
129 <I><FONT COLOR="Navy">{ cFiltroLatIzq }</FONT></I>
\r
131 <I><FONT COLOR="Navy">{** Verifica que un objeto volador pueda ser visto por la cámara
\r
132 @param ov Objeto volador que se quiere verificar si es visto por la cámara.
\r
133 @return <i>True</i> si lo ve, <i>False</i> si no.}</FONT></I>
\r
134 <B>function</B> <A NAME=cFiltroLatIzq.mVisible>cFiltroLatIzq.mVisible</A>(ov: cObjetoVolador): boolean;
\r
136 posRel, <I><FONT COLOR="Navy">// vector posicion del objeto volador relativo a la camara </FONT></I>
\r
137 posCam, <I><FONT COLOR="Navy">// Posision del cameraman </FONT></I>
\r
138 dirCam: cVector; <I><FONT COLOR="Navy">// vector con la direccion en la que apunta la camara </FONT></I>
\r
139 dist: tLongitud; <I><FONT COLOR="Navy">// Distancia entre la camara y el objeto </FONT></I>
\r
140 cosAlfa: tAngulo; <I><FONT COLOR="Navy">// Coseno del angulo que forman la dir de la camara y la pos del objeto </FONT></I>
\r
143 <B>try</B> <I><FONT COLOR="Navy">// Probamos que el cameraman no este destruido </FONT></I>
\r
144 dist := mGetObservador.mGetDistancia( ov );
\r
145 <B>except</B> <I><FONT COLOR="Navy">// Si esta destruido cae en una excepcion </FONT></I>
\r
146 on e: EAccessViolation <B>do</B>
\r
147 <B>raise</B> EObservadorDestruido.create; <I><FONT COLOR="Navy">// Creamos una nueva excepcion especial </FONT></I>
\r
149 <B>if</B> ( dist > mGetRadioMinimo ) <B>and</B>
\r
150 ( dist < mGetRadioMaximo ) <B>then</B> <B>begin</B> <I><FONT COLOR="Navy">// Esta dentro de la distancia minima y maxima </FONT></I>
\r
151 <I><FONT COLOR="Navy">// posRel es el vector posicion del objeto volador relativo a la camara: posRel = posOV - posCam </FONT></I>
\r
152 posRel := ov.mGetPosicion;
\r
153 posCam := mGetObservador.mGetPosicion;
\r
154 posRel.mRestar( posCam );
\r
155 dirCam := mGetObservador.mGetJ;
\r
156 <I><FONT COLOR="Navy">// Calcula el angulo entre las 2 posiciones ( A . B / |A| . |B| ) </FONT></I>
\r
157 cosAlfa := posRel.mMultiplicarEsc( dirCam ) / ( posRel.mGetModulo * dirCam.mGetModulo);
\r
158 <I><FONT COLOR="Navy">// Ahora se comparan los cosenos, ya que es una funcion decreciente entre 0 y PI </FONT></I>
\r
159 <B>if</B> cosAlfa > mGetCosApertura <B>then</B> <I><FONT COLOR="Navy">// Esta dentro del angulo de vision </FONT></I>
\r
167 <I><FONT COLOR="Navy">{ cFiltroLatDer }</FONT></I>
\r
169 <B>function</B> <A NAME=cFiltroLatDer.mVisible>cFiltroLatDer.mVisible</A>(ov: cObjetoVolador): boolean;
\r
171 posRel, <I><FONT COLOR="Navy">// vector posicion del objeto volador relativo a la camara </FONT></I>
\r
172 posCam, <I><FONT COLOR="Navy">// Posision del cameraman </FONT></I>
\r
173 dirCam: cVector; <I><FONT COLOR="Navy">// vector con la direccion en la que apunta la camara </FONT></I>
\r
174 dist: tLongitud; <I><FONT COLOR="Navy">// Distancia entre la camara y el objeto </FONT></I>
\r
175 cosAlfa: tAngulo; <I><FONT COLOR="Navy">// Coseno del angulo que forman la dir de la camara y la pos del objeto </FONT></I>
\r
178 <B>try</B> <I><FONT COLOR="Navy">// Probamos que el cameraman no este destruido </FONT></I>
\r
179 dist := mGetObservador.mGetDistancia( ov );
\r
180 <B>except</B> <I><FONT COLOR="Navy">// Si esta destruido cae en una excepcion </FONT></I>
\r
181 on e: EAccessViolation <B>do</B>
\r
182 <B>raise</B> EObservadorDestruido.create; <I><FONT COLOR="Navy">// Creamos una nueva excepcion especial </FONT></I>
\r
184 <B>if</B> ( dist > mGetRadioMinimo ) <B>and</B>
\r
185 ( dist < mGetRadioMaximo ) <B>then</B> <B>begin</B> <I><FONT COLOR="Navy">// Esta dentro de la distancia minima y maxima </FONT></I>
\r
186 <I><FONT COLOR="Navy">// posRel es el vector posicion del objeto volador relativo a la camara: posRel = posOV - posCam </FONT></I>
\r
187 posRel := ov.mGetPosicion;
\r
188 posCam := mGetObservador.mGetPosicion;
\r
189 posRel.mRestar( posCam );
\r
190 dirCam := mGetObservador.mGetJ.mMultiplicar(-1);
\r
191 <I><FONT COLOR="Navy">// Calcula el angulo entre las 2 posiciones ( A . B / |A| . |B| ) </FONT></I>
\r
192 cosAlfa := posRel.mMultiplicarEsc( dirCam ) / ( posRel.mGetModulo * dirCam.mGetModulo);
\r
193 <I><FONT COLOR="Navy">// Ahora se comparan los cosenos, ya que es una funcion decreciente entre 0 y PI </FONT></I>
\r
194 <B>if</B> cosAlfa > mGetCosApertura <B>then</B> <I><FONT COLOR="Navy">// Esta dentro del angulo de vision </FONT></I>
\r
202 <I><FONT COLOR="Navy">{ cFiltroTrasero }</FONT></I>
\r
204 <B>function</B> <A NAME=cFiltroTrasero.mVisible>cFiltroTrasero.mVisible</A>(ov: cObjetoVolador): boolean;
\r
206 posRel, <I><FONT COLOR="Navy">// vector posicion del objeto volador relativo a la camara </FONT></I>
\r
207 posCam, <I><FONT COLOR="Navy">// Posision del cameraman </FONT></I>
\r
208 dirCam: cVector; <I><FONT COLOR="Navy">// vector con la direccion en la que apunta la camara </FONT></I>
\r
209 dist: tLongitud; <I><FONT COLOR="Navy">// Distancia entre la camara y el objeto </FONT></I>
\r
210 cosAlfa: tAngulo; <I><FONT COLOR="Navy">// Coseno del angulo que forman la dir de la camara y la pos del objeto </FONT></I>
\r
213 <B>try</B> <I><FONT COLOR="Navy">// Probamos que el cameraman no este destruido </FONT></I>
\r
214 dist := mGetObservador.mGetDistancia( ov );
\r
215 <B>except</B> <I><FONT COLOR="Navy">// Si esta destruido cae en una excepcion </FONT></I>
\r
216 on e: EAccessViolation <B>do</B>
\r
217 <B>raise</B> EObservadorDestruido.create; <I><FONT COLOR="Navy">// Creamos una nueva excepcion especial </FONT></I>
\r
219 <B>if</B> ( dist > mGetRadioMinimo ) <B>and</B>
\r
220 ( dist < mGetRadioMaximo ) <B>then</B> <B>begin</B> <I><FONT COLOR="Navy">// Esta dentro de la distancia minima y maxima </FONT></I>
\r
221 <I><FONT COLOR="Navy">// posRel es el vector posicion del objeto volador relativo a la camara: posRel = posOV - posCam </FONT></I>
\r
222 posRel := ov.mGetPosicion;
\r
223 posCam := mGetObservador.mGetPosicion;
\r
224 posRel.mRestar( posCam );
\r
225 dirCam := mGetObservador.mGetI.mMultiplicar(-1);
\r
226 <I><FONT COLOR="Navy">// Calcula el angulo entre las 2 posiciones ( A . B / |A| . |B| ) </FONT></I>
\r
227 cosAlfa := posRel.mMultiplicarEsc( dirCam ) / ( posRel.mGetModulo * dirCam.mGetModulo);
\r
228 <I><FONT COLOR="Navy">// Ahora se comparan los cosenos, ya que es una funcion decreciente entre 0 y PI </FONT></I>
\r
229 <B>if</B> cosAlfa > mGetCosApertura <B>then</B> <I><FONT COLOR="Navy">// Esta dentro del angulo de vision </FONT></I>
\r
237 <I><FONT COLOR="Navy">{ cFiltroArriba }</FONT></I>
\r
239 <B>function</B> <A NAME=cFiltroArriba.mVisible>cFiltroArriba.mVisible</A>(ov: cObjetoVolador): boolean;
\r
241 posRel, <I><FONT COLOR="Navy">// vector posicion del objeto volador relativo a la camara </FONT></I>
\r
242 posCam, <I><FONT COLOR="Navy">// Posision del cameraman </FONT></I>
\r
243 dirCam: cVector; <I><FONT COLOR="Navy">// vector con la direccion en la que apunta la camara </FONT></I>
\r
244 dist: tLongitud; <I><FONT COLOR="Navy">// Distancia entre la camara y el objeto </FONT></I>
\r
245 cosAlfa: tAngulo; <I><FONT COLOR="Navy">// Coseno del angulo que forman la dir de la camara y la pos del objeto </FONT></I>
\r
248 <B>try</B> <I><FONT COLOR="Navy">// Probamos que el cameraman no este destruido </FONT></I>
\r
249 dist := mGetObservador.mGetDistancia( ov );
\r
250 <B>except</B> <I><FONT COLOR="Navy">// Si esta destruido cae en una excepcion </FONT></I>
\r
251 on e: EAccessViolation <B>do</B>
\r
252 <B>raise</B> EObservadorDestruido.create; <I><FONT COLOR="Navy">// Creamos una nueva excepcion especial </FONT></I>
\r
254 <B>if</B> ( dist > mGetRadioMinimo ) <B>and</B>
\r
255 ( dist < mGetRadioMaximo ) <B>then</B> <B>begin</B> <I><FONT COLOR="Navy">// Esta dentro de la distancia minima y maxima </FONT></I>
\r
256 <I><FONT COLOR="Navy">// posRel es el vector posicion del objeto volador relativo a la camara: posRel = posOV - posCam </FONT></I>
\r
257 posRel := ov.mGetPosicion;
\r
258 posCam := mGetObservador.mGetPosicion;
\r
259 posRel.mRestar( posCam );
\r
260 dirCam := mGetObservador.mGetK;
\r
261 <I><FONT COLOR="Navy">// Calcula el angulo entre las 2 posiciones ( A . B / |A| . |B| ) </FONT></I>
\r
262 cosAlfa := posRel.mMultiplicarEsc( dirCam ) / ( posRel.mGetModulo * dirCam.mGetModulo);
\r
263 <I><FONT COLOR="Navy">// Ahora se comparan los cosenos, ya que es una funcion decreciente entre 0 y PI </FONT></I>
\r
264 <B>if</B> cosAlfa > mGetCosApertura <B>then</B> <I><FONT COLOR="Navy">// Esta dentro del angulo de vision </FONT></I>
\r
272 <I><FONT COLOR="Navy">{ cFiltroAbajo }</FONT></I>
\r
274 <B>function</B> <A NAME=cFiltroAbajo.mVisible>cFiltroAbajo.mVisible</A>(ov: cObjetoVolador): boolean;
\r
276 posRel, <I><FONT COLOR="Navy">// vector posicion del objeto volador relativo a la camara </FONT></I>
\r
277 posCam, <I><FONT COLOR="Navy">// Posision del cameraman </FONT></I>
\r
278 dirCam: cVector; <I><FONT COLOR="Navy">// vector con la direccion en la que apunta la camara </FONT></I>
\r
279 dist: tLongitud; <I><FONT COLOR="Navy">// Distancia entre la camara y el objeto </FONT></I>
\r
280 cosAlfa: tAngulo; <I><FONT COLOR="Navy">// Coseno del angulo que forman la dir de la camara y la pos del objeto </FONT></I>
\r
283 <B>try</B> <I><FONT COLOR="Navy">// Probamos que el cameraman no este destruido </FONT></I>
\r
284 dist := mGetObservador.mGetDistancia( ov );
\r
285 <B>except</B> <I><FONT COLOR="Navy">// Si esta destruido cae en una excepcion </FONT></I>
\r
286 on e: EAccessViolation <B>do</B>
\r
287 <B>raise</B> EObservadorDestruido.create; <I><FONT COLOR="Navy">// Creamos una nueva excepcion especial </FONT></I>
\r
289 <B>if</B> ( dist > mGetRadioMinimo ) <B>and</B>
\r
290 ( dist < mGetRadioMaximo ) <B>then</B> <B>begin</B> <I><FONT COLOR="Navy">// Esta dentro de la distancia minima y maxima </FONT></I>
\r
291 <I><FONT COLOR="Navy">// posRel es el vector posicion del objeto volador relativo a la camara: posRel = posOV - posCam </FONT></I>
\r
292 posRel := ov.mGetPosicion;
\r
293 posCam := mGetObservador.mGetPosicion;
\r
294 posRel.mRestar( posCam );
\r
295 dirCam := mGetObservador.mGetK.mMultiplicar(-1);
\r
296 <I><FONT COLOR="Navy">// Calcula el angulo entre las 2 posiciones ( A . B / |A| . |B| ) </FONT></I>
\r
297 cosAlfa := posRel.mMultiplicarEsc( dirCam ) / ( posRel.mGetModulo * dirCam.mGetModulo);
\r
298 <I><FONT COLOR="Navy">// Ahora se comparan los cosenos, ya que es una funcion decreciente entre 0 y PI </FONT></I>
\r
299 <B>if</B> cosAlfa > mGetCosApertura <B>then</B> <I><FONT COLOR="Navy">// Esta dentro del angulo de vision </FONT></I>
\r
307 <I><FONT COLOR="Navy">{ cFiltroMapa }</FONT></I>
\r
309 <B>function</B> <A NAME=cFiltroMapa.mVisible>cFiltroMapa.mVisible</A>(ov: cObjetoVolador): boolean;
\r
311 desplazamiento, <I><FONT COLOR="Navy">// desplazamiento del filtro respecto del observador </FONT></I>
\r
312 posTmp, <I><FONT COLOR="Navy">// Vector posicion temporal </FONT></I>
\r
313 posRel, <I><FONT COLOR="Navy">// vector posicion del objeto volador relativo a la camara </FONT></I>
\r
314 posCam, <I><FONT COLOR="Navy">// Posision del cameraman </FONT></I>
\r
315 dirCam: cVector; <I><FONT COLOR="Navy">// vector con la direccion en la que apunta la camara </FONT></I>
\r
316 dist: tLongitud; <I><FONT COLOR="Navy">// Distancia entre la camara y el objeto </FONT></I>
\r
317 cosAlfa: tAngulo; <I><FONT COLOR="Navy">// Coseno del angulo que forman la dir de la camara y la pos del objeto </FONT></I>
\r
320 <B>try</B> <I><FONT COLOR="Navy">// Probamos que el cameraman no este destruido </FONT></I>
\r
321 desplazamiento := mGetObservador.mGetk.mSetModulo( 3000 ); <I><FONT COLOR="Navy">// Esta 3000 metros alejado del observador </FONT></I>
\r
322 <B>except</B> <I><FONT COLOR="Navy">// Si esta destruido cae en una excepcion </FONT></I>
\r
323 on e: EAccessViolation <B>do</B>
\r
324 <B>raise</B> EObservadorDestruido.create; <I><FONT COLOR="Navy">// Creamos una nueva excepcion especial </FONT></I>
\r
326 posCam := mGetObservador.mGetPosicion.mSumar( desplazamiento );
\r
327 desplazamiento.free;
\r
328 posTmp := ov.mGetPosicion;
\r
329 dist := posCam.mGetDistancia( posTmp );
\r
331 <B>if</B> ( dist > mGetRadioMinimo ) <B>and</B>
\r
332 ( dist < mGetRadioMaximo ) <B>then</B> <B>begin</B> <I><FONT COLOR="Navy">// Esta dentro de la distancia minima y maxima </FONT></I>
\r
333 <I><FONT COLOR="Navy">// posRel es el vector posicion del objeto volador relativo a la camara: posRel = posOV - posCam </FONT></I>
\r
334 posRel := ov.mGetPosicion;
\r
335 posRel.mRestar( posCam );
\r
336 dirCam := mGetObservador.mGetK.mMultiplicar(-1);
\r
337 <I><FONT COLOR="Navy">// Calcula el angulo entre las 2 posiciones ( A . B / |A| . |B| ) </FONT></I>
\r
338 cosAlfa := posRel.mMultiplicarEsc( dirCam ) / ( posRel.mGetModulo * dirCam.mGetModulo);
\r
339 <I><FONT COLOR="Navy">// Ahora se comparan los cosenos, ya que es una funcion decreciente entre 0 y PI </FONT></I>
\r
340 <B>if</B> cosAlfa > mGetCosApertura <B>then</B> <I><FONT COLOR="Navy">// Esta dentro del angulo de vision </FONT></I>
\r
348 <I><FONT COLOR="Navy">{ cFiltroLock }</FONT></I>
\r
350 <I><FONT COLOR="Navy">{** Verifica que un objeto volador pueda ser visto por la cámara}</FONT></I>
\r
351 <B>function</B> <A NAME=cFiltroLock.mVisible>cFiltroLock.mVisible</A>(ov: cObjetoVolador): boolean;
\r
354 <B>if</B> (ov <B>is</B> cNave) <B>or</B> (ov <B>is</B> cMeteorito) <B>then</B>
\r
355 result := <B>inherited</B> mVisible( ov );
\r