Proyecto X-Soldiers V1 Mayo 2011
src/include/caja.h
00001 #ifndef _CAJA_H_
00002 #define _CAJA_H_
00003 
00004 //puede que utilizemos este fichero para definir una caja de colisiones
00005 struct Caja{
00007     float x, y;
00008 
00010     float w, h;
00011 
00012     float derecha(){ return x + w; }
00013     float abajo(){ return y + h; }
00014 
00015     bool colisionaCon(Caja & B){
00016         if(x > B.x + B.w || B.x > x + w)
00017             return false;
00018 
00019         if(y > B.y + B.h || B.y > y + h)
00020             return false;
00021 
00022         return true;
00023     }
00024 };
00025 
00026 
00027 struct Pj : public Caja{
00028   
00029     //int jug;
00030 
00031     Pj(){
00032         w = h = 48;
00033        // tipo = BLOQUE_VACIO;
00034     }
00035 
00036     int tocado(Caja & B){
00037         if(colisionaCon(B)){
00038             int up, left, right, down;
00039             up = left = right = down = 0;
00040         
00041             if(B.x < x && x < B.derecha() && B.derecha() < derecha()){
00042                 left = x - B.x;
00043             }
00044 
00045             if(x < B.x && B.x < derecha() && derecha() < B.derecha()){
00046                 right = B.derecha() - derecha();
00047             }
00048 
00049             if(B.y < y && y < B.abajo() && B.abajo() < abajo()){
00050                 up = y - B.y;
00051             }
00052 
00053             if(y < B.y && B.y < abajo() && abajo() < B.abajo()){
00054                 down = B.abajo() - abajo();
00055             }
00056 
00057             int horizontal = (left > right)? left : right;
00058             int vertical = (up > down) ? up : down;
00059 
00060             return 1 + (int)(horizontal > vertical);
00061 
00062         }
00063         return 0; 
00064     }
00065 };
00066 /*                                                              //
00067 #define BLOQUE_VACIO 0
00068 #define BLOQUE_NARANJA 1
00069 #define BLOQUE_AZUL 2
00070 #define BLOQUE_VERDE 3
00071 #define BLOQUE_ROJO 4
00072 #define BLOQUE_AMARILLO 5
00073 
00074 struct Bloque : public Caja{
00075   
00076     int tipo;
00077 
00078     Bloque(){
00079         w = h = 48;
00080         tipo = BLOQUE_VACIO;
00081     }
00082 
00083     int tocado(Caja & B){
00084         if(colisionaCon(B)){
00085             int up, left, right, down;
00086             up = left = right = down = 0;
00087         
00088             if(B.x < x && x < B.derecha() && B.derecha() < derecha()){
00089                 left = x - B.x;
00090             }
00091 
00092             if(x < B.x && B.x < derecha() && derecha() < B.derecha()){
00093                 right = B.derecha() - derecha();
00094             }
00095 
00096             if(B.y < y && y < B.abajo() && B.abajo() < abajo()){
00097                 up = y - B.y;
00098             }
00099 
00100             if(y < B.y && B.y < abajo() && abajo() < B.abajo()){
00101                 down = B.abajo() - abajo();
00102             }
00103 
00104             int horizontal = (left > right)? left : right;
00105             int vertical = (up > down) ? up : down;
00106 
00107             return 1 + (int)(horizontal > vertical);
00108 
00109         }
00110         return 0; 
00111     }
00112 };
00113 */
00114 
00115 #endif /* _CAJA_H_ */