PA_Keys.h

Go to the documentation of this file.
00001 #ifndef _PA_KEYS
00002 #define _PA_KEYS
00003 
00004 #ifdef __cplusplus
00005 extern "C" {
00006 #endif
00007 
00008 #include "PA9.h"
00014 
00015 // Système pour les touches
00017 
00018 // Keyboard defines
00019 #define PA_BACKSPACE 1    // On va dire que la touche backspace a pour valeur 1...
00020 #define PA_CAPS      2    // 2 pour CAPS
00021 #define PA_ENTER     '\n'    // 3 pour Enter
00022 #define PA_SHIFT     4    // etc
00023 #define PA_RIEN      0    // Si y'a rien, faudra faire comme si on appuye sur rien
00024 #define PA_TAB       3    // tab...
00025 
00026 // Stylus and Pad definitions, will be used by the arm7 to auto-update positions...
00027 
00028 typedef struct {
00029    u8 A, B, X, Y, L, R, Up, Down, Right, Left, Start, Select, Anykey;
00030 } PA_Pad;
00031 
00032 typedef struct {
00033    PA_Pad Held, Released, Newpress; // Pressed si on appuye, Held si on garde appuyé, et Released si on relache
00034 } Pads;
00035 
00036 typedef struct {
00037    u8 Held, Released, Newpress, Newpress0;
00038    s16 X, Y, altX, altY, Pressure, Vx, Vy, oldVx, oldVy, Downtime, Uptime, DblClick;
00039 } PA_Stylus;
00040 
00041 
00042 extern PA_Stylus Stylus;
00043 
00044 extern Pads Pad;
00045 extern PA_Pad* PadPointer;
00046 
00047 // Structure pour les sprites que l'on déplace...
00048 typedef struct {
00049        u8 Moving;
00050        u8 Sprite;
00051        s16 X, Y, Vx, Vy, NextVx, NextVy;
00052        u8 Time; // Si trop longtemps sans bouger le sprite, il décroche...
00053 } PA_movingsprite;
00054 
00055 extern PA_movingsprite PA_MovedSprite;
00056 
00057 extern u8 PA_MoveSpriteType; 
00058 
00059 
00060 // Button info
00061 
00062 
00063 
00064 
00065 
00066 /*
00067 #define PA_UpdatePad() ExPad = CompletePad;\
00068    CompletePad = ~(BUTTONS + (((IPC->buttons)&3) << 10));\
00069    UPDATEPAD(Pad.Held, CompletePad);\
00070    UPDATEPAD(Pad.Released, (ExPad & (~CompletePad)));\
00071    UPDATEPAD(Pad.Newpress, (CompletePad & (~ExPad)));
00072 
00073 #define PA_UpdateStylus() u8 temp = ((~IPC->buttons) >> 6) & 1;\
00074        Stylus.Newpress = temp & (!Stylus.Held);\
00075        Stylus.Released = (!temp) & Stylus.Held;\
00076        Stylus.Held = temp;\
00077        if(Stylus.Held)Stylus.altX =  ((IPC->touchX - 0x0113) / 14);\
00078        if(Stylus.Held)Stylus.altY =  ((IPC->touchY - 0x00E0) / 19);\
00079        if(Stylus.Held)Stylus.X =  IPC->touchXpx;\
00080        if(Stylus.Held)Stylus.Y =  IPC->touchYpx;\
00081        if(Stylus.Held)Stylus.Pressure = (((Stylus.X * IPC->touchZ2) >> 6) / IPC->touchZ1) - (Stylus.X >> 6);
00082 */
00083 //#define BUTTON_AND 16384
00084 //#define BUTTON_OR 0
00085 
00099 void PA_UpdatePad(void);
00100 
00101 
00102 
00109 void PA_UpdateStylus(void);
00110 
00111 
00120 u8 PA_MoveSpritePix(u8 sprite);
00121 
00122 
00123 
00124 
00125 
00126 
00127 
00136 #define PA_MoveSprite(sprite) PA_MoveSpriteEx(PA_Screen, sprite, PA_GetSpriteLx(0, sprite), PA_GetSpriteLy(0, sprite))
00137 
00138 
00139 
00157 u8 PA_MoveSpriteEx(u8 screen, u8 sprite, u8 lx, u8 ly);
00158 
00159 
00171 extern inline u8 PA_MoveSpriteDistance(u8 sprite, u8 distance){
00172        PA_MoveSpriteType = 1; // mode distance
00173        u8 touched = PA_MoveSpriteEx(PA_Screen, sprite, distance, distance);
00174        PA_MoveSpriteType = 0; // normal mode
00175        return touched;
00176 }
00177 /*
00184 extern inline void PA_UpdateMoveSprite(void) {
00185        PA_MovedSprite.Time++;
00186        if ((PA_MovedSprite.Time > 2) || Stylus.Released) {
00187               PA_MovedSprite.Moving = 0;
00188               PA_MovedSprite.Time = 0;
00189        }
00190 }*/
00191 
00192 
00208 extern inline u8 PA_SpriteStylusOverEx(u8 sprite, u8 lx, u8 ly){
00209        return ((Stylus.X > PA_GetSpriteX(PA_Screen, sprite)) && (Stylus.X < PA_GetSpriteX(PA_Screen, sprite) + lx)&& (Stylus.Y > PA_GetSpriteY(PA_Screen, sprite)) && (Stylus.Y < PA_GetSpriteY(PA_Screen, sprite) + ly));
00210 }
00211 
00212 
00213 
00229 extern inline u8 PA_SpriteTouchedEx(u8 sprite, u8 lx, u8 ly){
00230        return (Stylus.Held && PA_SpriteStylusOverEx(sprite, lx, ly));
00231 }
00232 
00233 
00234 
00243 extern inline u8 PA_SpriteTouched(u8 sprite) {
00244        return PA_SpriteTouchedEx(sprite, PA_GetSpriteLx(PA_Screen, sprite), PA_GetSpriteLy(PA_Screen, sprite));
00245 }
00246 
00247 
00248 
00257 extern inline u8 PA_SpriteStylusOver(u8 sprite) {
00258        return PA_SpriteStylusOverEx(sprite, PA_GetSpriteLx(PA_Screen, sprite), PA_GetSpriteLy(PA_Screen, sprite));
00259 }
00260 
00261 
00262 
00263 extern inline u8 PA_SpriteTouchedPix(u8 sprite){
00264        s16 spritex = PA_GetSpriteX(PA_Screen, sprite);
00265        s16 spritey = PA_GetSpriteY(PA_Screen, sprite);
00266        if (spritex >= 458) spritex -=511; // normalize the X coordinate...
00267        if (spritey >= 220) spritey -=256; // normalize the y coordinate...
00268        u16 x = Stylus.X - spritex;
00269        u16 y = Stylus.Y - spritey;
00270        
00271        return (Stylus.Held && (x < spriteanims[PA_Screen][sprite].lx) && (y < spriteanims[PA_Screen][sprite].ly) && PA_GetSpritePixel(PA_Screen, sprite, x, y));
00272 }
00273 
00274 
00275 extern inline u8 PA_Sprite16cTouchedPix(u8 sprite){
00276        s16 spritex = PA_GetSpriteX(PA_Screen, sprite);
00277        s16 spritey = PA_GetSpriteY(PA_Screen, sprite);
00278        if (spritex >= 458) spritex -=511; // normalize the X coordinate...
00279        if (spritey >= 220) spritey -=256; // normalize the y coordinate...
00280        u16 x = Stylus.X - spritex;
00281        u16 y = Stylus.Y - spritey;
00282        
00283        return (Stylus.Held && (x < spriteanims[PA_Screen][sprite].lx) && (y < spriteanims[PA_Screen][sprite].ly) && PA_GetSprite16cPixel(PA_Screen, sprite, x, y));
00284 }
00285 
00303 #define PA_StylusInZone(x1, y1, x2, y2) ((Stylus.X>=x1)&&(Stylus.Y>=y1)&&(Stylus.X<x2)&&(Stylus.Y<y2))
00304  // end of Keys
00306 
00307 
00308 
00309 
00310 
00311 
00312 
00313 
00314 
00315 
00316 
00317 
00318 #ifdef __cplusplus
00319 }
00320 #endif
00321 #endif

Generated on Tue Jan 30 23:00:22 2007 for PAlib by  doxygen 1.5.1-p1