head 1.1; branch 1.1.1; access ; symbols start:1.1.1.1 PAlibDoc:1.1.1; locks ; strict; comment @# @; 1.1 date 2005.11.02.08.30.22; author jandujar; state Exp; branches 1.1.1.1; next ; 1.1.1.1 date 2005.11.02.08.30.22; author jandujar; state Exp; branches ; next ; desc @@ 1.1 log @Initial revision @ text @ PA_lib: PA_Keys.h Source File

PA_Keys.h

Go to the documentation of this file.
00001 #ifndef _PA_KEYS
00002 #define _PA_KEYS
00003 
00004 #include "PA9.h"
00010 
00011 // Système pour les touches
00013 
00014 
00015 
00016 
00017 
00018 typedef struct {
00019    bool A, B, X, Y, L, R, Up, Down, Right, Left, Start, Select;
00020 } PA_Pad;
00021 
00022 typedef struct {
00023    bool Held, Released, Newpress, Newpress0;
00024    s16 X, Y, altX, altY, Pressure;
00025 } PA_Stylus;
00026 
00027 extern PA_Stylus Stylus;
00028 
00029 typedef struct {
00030    PA_Pad Held, Released, Newpress; // Pressed si on appuye, Held si on garde appuyé, et Released si on relache
00031 } Pads;
00032 
00033 extern Pads Pad;
00034 extern PA_Pad* PadPointer;
00035 
00036 // Structure pour les sprites que l'on déplace...
00037 typedef struct {
00038        bool Moving;
00039        u8 Sprite;
00040        s16 X, Y, Vx, Vy;
00041        u8 Time; // Si trop longtemps sans bouger le sprite, il décroche...
00042 } PA_movingsprite;
00043 
00044 extern PA_movingsprite PA_MovedSprite;
00045 
00046 // Button info
00047 #define PA_BUTTONS (*(volatile u16*)0x04000130)
00048 
00049 #ifndef REG_KEYCNT
00050        #define REG_KEYCNT (*(volatile u16*)0x04000132)
00051 #endif
00052 
00053 #define BUTTON_A 1
00054 #define BUTTON_B 2
00055 #define BUTTON_SELECT 4
00056 #define BUTTON_START 8
00057 #define BUTTON_RIGHT 16
00058 #define BUTTON_LEFT 32
00059 #define BUTTON_UP 64
00060 #define BUTTON_DOWN 128
00061 #define BUTTON_R 256
00062 #define BUTTON_L 512
00063 #define BUTTON_X 1024
00064 #define BUTTON_Y 2048
00065 
00066 
00067 
00068 extern u16 CompletePad, ExPad, TempPad;
00069 #define UPDATEPAD(type, pad)  type.A = pad & BUTTON_A;\
00070    type.B = (pad & BUTTON_B) >> 1;\
00071    type.Select = (pad & BUTTON_SELECT) >> 2;\
00072    type.Start = (pad & BUTTON_START) >> 3;\
00073    type.Right = (pad & BUTTON_RIGHT) >> 4;\
00074    type.Left = (pad & BUTTON_LEFT) >> 5;\
00075    type.Up = (pad & BUTTON_UP) >> 6;\
00076    type.Down = (pad & BUTTON_DOWN) >> 7;\
00077    type.R = (pad & BUTTON_R) >> 8;\
00078    type.L = (pad & BUTTON_L) >> 9;\
00079    type.X = (pad & BUTTON_X) >> 10;\
00080    type.Y = (pad & BUTTON_Y) >> 11;
00081   
00082 #define COPYPAD(new, old)  new.A = old.A;\
00083    new.B = old.B;\
00084    new.Select = old.Select;\
00085    new.Start = old.Start;\
00086    new.Right = old.Right;\
00087    new.Left = old.Left;\
00088    new.Up = old.Up;\
00089    new.Down = old.Down;\
00090    new.R = old.R;\
00091    new.L =  old.L;\
00092    new.X = old.X;\
00093    new.Y = old.Y;
00094 /*
00095 #define PA_UpdatePad() ExPad = CompletePad;\
00096    CompletePad = ~(BUTTONS + (((IPC->buttons)&3) << 10));\
00097    UPDATEPAD(Pad.Held, CompletePad);\
00098    UPDATEPAD(Pad.Released, (ExPad & (~CompletePad)));\
00099    UPDATEPAD(Pad.Newpress, (CompletePad & (~ExPad)));
00100 
00101 #define PA_UpdateStylus() bool temp = ((~IPC->buttons) >> 6) & 1;\
00102        Stylus.Newpress = temp & (!Stylus.Held);\
00103        Stylus.Released = (!temp) & Stylus.Held;\
00104        Stylus.Held = temp;\
00105        if(Stylus.Held)Stylus.altX =  ((IPC->touchX - 0x0113) / 14);\
00106        if(Stylus.Held)Stylus.altY =  ((IPC->touchY - 0x00E0) / 19);\
00107        if(Stylus.Held)Stylus.X =  IPC->touchXpx;\
00108        if(Stylus.Held)Stylus.Y =  IPC->touchYpx;\
00109        if(Stylus.Held)Stylus.Pressure = (((Stylus.X * IPC->touchZ2) >> 6) / IPC->touchZ1) - (Stylus.X >> 6);
00110 */
00111 //#define BUTTON_AND 16384
00112 //#define BUTTON_OR 0
00113 
00125 void PA_UpdatePad(void);
00126 
00127 
00128 
00135 void PA_UpdateStylus(void);
00136 
00145 #define PA_MoveSprite(sprite) PA_MoveSpriteEx(PA_Screen, sprite, PA_GetSpriteLx(0, sprite), PA_GetSpriteLy(0, sprite))
00146 
00147 
00148 
00166 bool PA_MoveSpriteEx(bool screen, u8 sprite, u8 lx, u8 ly);
00167 
00168 
00180 bool PA_MoveSpriteDistance(u8 sprite, u8 distance);
00181 
00188 extern inline void PA_UpdateMoveSprite(void) {
00189        PA_MovedSprite.Time++;
00190        if ((PA_MovedSprite.Time > 2) || Stylus.Released) {
00191               PA_MovedSprite.Moving = 0;
00192               PA_MovedSprite.Time = 0;
00193        }
00194 }
00195 
00196 
00197 
00213 extern inline bool PA_SpriteTouchedEx(u8 sprite, u8 lx, u8 ly){
00214        if ((Stylus.X > PA_GetSpriteX(PA_Screen, sprite)) && (Stylus.X < PA_GetSpriteX(PA_Screen, sprite) + lx)
00215               && (Stylus.Y > PA_GetSpriteY(PA_Screen, sprite)) && (Stylus.Y < PA_GetSpriteY(PA_Screen, sprite) + ly))
00216               return 1;
00217        else return 0;
00218 }
00219 
00220 
00221 
00230 #define PA_SpriteTouched(sprite) PA_SpriteTouchedEx(sprite, PA_GetSpriteLx(PA_Screen, sprite), PA_GetSpriteLy(PA_Screen, sprite))
00231 
00232 
00233 
00251 #define PA_StylusInZone(x1, y1, x2, y2) ((Stylus.X>=x1)&&(Stylus.Y>=y1)&&(Stylus.X<x2)&&(Stylus.Y<y2))
00252  // end of Keys
00254 
00255 
00256 #endif

Generated on Fri Oct 28 23:16:50 2005 for PA_lib by  doxygen 1.3.9.1
@ 1.1.1.1 log @Initial import of PalibDoc, begin on PAlib0.64b @ text @@