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 @
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