PA_Keys.h

Aller à la documentation de ce fichier.
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 
00019 
00020 
00021 
00022 typedef struct {
00023    bool A, B, X, Y, L, R, Up, Down, Right, Left, Start, Select;
00024 } PA_Pad;
00025 
00026 typedef struct {
00027    bool Held, Released, Newpress, Newpress0;
00028    s16 X, Y, altX, altY, Pressure;
00029 } PA_Stylus;
00030 
00031 extern PA_Stylus Stylus;
00032 
00033 typedef struct {
00034    PA_Pad Held, Released, Newpress; // Pressed si on appuye, Held si on garde appuyé, et Released si on relache
00035 } Pads;
00036 
00037 extern Pads Pad;
00038 extern PA_Pad* PadPointer;
00039 
00040 // Structure pour les sprites que l'on déplace...
00041 typedef struct {
00042        bool Moving;
00043        u8 Sprite;
00044        s16 X, Y, Vx, Vy;
00045        u8 Time; // Si trop longtemps sans bouger le sprite, il décroche...
00046 } PA_movingsprite;
00047 
00048 extern PA_movingsprite PA_MovedSprite;
00049 
00050 extern bool PA_MoveSpriteType; 
00051 
00052 
00053 // Button info
00054 #define PA_BUTTONS (*(volatile u16*)0x04000130)
00055 
00056 #ifndef REG_KEYCNT
00057        #define REG_KEYCNT (*(volatile u16*)0x04000132)
00058 #endif
00059 
00060 #define BUTTON_A 1
00061 #define BUTTON_B 2
00062 #define BUTTON_SELECT 4
00063 #define BUTTON_START 8
00064 #define BUTTON_RIGHT 16
00065 #define BUTTON_LEFT 32
00066 #define BUTTON_UP 64
00067 #define BUTTON_DOWN 128
00068 #define BUTTON_R 256
00069 #define BUTTON_L 512
00070 #define BUTTON_X 1024
00071 #define BUTTON_Y 2048
00072 
00073 
00074 
00075 extern u16 CompletePad, ExPad, TempPad;
00076 #define UPDATEPAD(type, pad)  type.A = pad & BUTTON_A;\
00077    type.B = (pad & BUTTON_B) >> 1;\
00078    type.Select = (pad & BUTTON_SELECT) >> 2;\
00079    type.Start = (pad & BUTTON_START) >> 3;\
00080    type.Right = (pad & BUTTON_RIGHT) >> 4;\
00081    type.Left = (pad & BUTTON_LEFT) >> 5;\
00082    type.Up = (pad & BUTTON_UP) >> 6;\
00083    type.Down = (pad & BUTTON_DOWN) >> 7;\
00084    type.R = (pad & BUTTON_R) >> 8;\
00085    type.L = (pad & BUTTON_L) >> 9;\
00086    type.X = (pad & BUTTON_X) >> 10;\
00087    type.Y = (pad & BUTTON_Y) >> 11;
00088   
00089 #define COPYPAD(new, old)  new.A = old.A;\
00090    new.B = old.B;\
00091    new.Select = old.Select;\
00092    new.Start = old.Start;\
00093    new.Right = old.Right;\
00094    new.Left = old.Left;\
00095    new.Up = old.Up;\
00096    new.Down = old.Down;\
00097    new.R = old.R;\
00098    new.L =  old.L;\
00099    new.X = old.X;\
00100    new.Y = old.Y;
00101 /*
00102 #define PA_UpdatePad() ExPad = CompletePad;\
00103    CompletePad = ~(BUTTONS + (((IPC->buttons)&3) << 10));\
00104    UPDATEPAD(Pad.Held, CompletePad);\
00105    UPDATEPAD(Pad.Released, (ExPad & (~CompletePad)));\
00106    UPDATEPAD(Pad.Newpress, (CompletePad & (~ExPad)));
00107 
00108 #define PA_UpdateStylus() bool temp = ((~IPC->buttons) >> 6) & 1;\
00109        Stylus.Newpress = temp & (!Stylus.Held);\
00110        Stylus.Released = (!temp) & Stylus.Held;\
00111        Stylus.Held = temp;\
00112        if(Stylus.Held)Stylus.altX =  ((IPC->touchX - 0x0113) / 14);\
00113        if(Stylus.Held)Stylus.altY =  ((IPC->touchY - 0x00E0) / 19);\
00114        if(Stylus.Held)Stylus.X =  IPC->touchXpx;\
00115        if(Stylus.Held)Stylus.Y =  IPC->touchYpx;\
00116        if(Stylus.Held)Stylus.Pressure = (((Stylus.X * IPC->touchZ2) >> 6) / IPC->touchZ1) - (Stylus.X >> 6);
00117 */
00118 //#define BUTTON_AND 16384
00119 //#define BUTTON_OR 0
00120 
00132 void PA_UpdatePad(void);
00133 
00134 
00135 
00142 void PA_UpdateStylus(void);
00143 
00152 #define PA_MoveSprite(sprite) PA_MoveSpriteEx(PA_Screen, sprite, PA_GetSpriteLx(0, sprite), PA_GetSpriteLy(0, sprite))
00153 
00154 
00155 
00173 bool PA_MoveSpriteEx(bool screen, u8 sprite, u8 lx, u8 ly);
00174 
00175 
00187 extern inline bool PA_MoveSpriteDistance(u8 sprite, u8 distance){
00188        PA_MoveSpriteType = 1; // mode distance
00189        bool touched = PA_MoveSpriteEx(PA_Screen, sprite, distance, distance);
00190        PA_MoveSpriteType = 0; // normal mode
00191        return touched;
00192 }
00193 
00200 extern inline void PA_UpdateMoveSprite(void) {
00201        PA_MovedSprite.Time++;
00202        if ((PA_MovedSprite.Time > 2) || Stylus.Released) {
00203               PA_MovedSprite.Moving = 0;
00204               PA_MovedSprite.Time = 0;
00205        }
00206 }
00207 
00208 
00209 
00225 extern inline bool PA_SpriteTouchedEx(u8 sprite, u8 lx, u8 ly){
00226        if ((Stylus.X > PA_GetSpriteX(PA_Screen, sprite)) && (Stylus.X < PA_GetSpriteX(PA_Screen, sprite) + lx)
00227               && (Stylus.Y > PA_GetSpriteY(PA_Screen, sprite)) && (Stylus.Y < PA_GetSpriteY(PA_Screen, sprite) + ly))
00228               return 1;
00229        else return 0;
00230 }
00231 
00232 
00233 
00242 #define PA_SpriteTouched(sprite) PA_SpriteTouchedEx(sprite, PA_GetSpriteLx(PA_Screen, sprite), PA_GetSpriteLy(PA_Screen, sprite))
00243 
00244 
00245 
00263 #define PA_StylusInZone(x1, y1, x2, y2) ((Stylus.X>=x1)&&(Stylus.Y>=y1)&&(Stylus.X<x2)&&(Stylus.Y<y2))
00264  // end of Keys
00266 
00267 #ifdef __cplusplus
00268 }
00269 #endif
00270 #endif

Généré le Sun Jan 22 11:46:50 2006 pour PAlib par  doxygen 1.3.9.1