Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define POOL_MODE
- #define LOTS
- void sortSprites(aSprite *list[], int count) {
- //insertion sort
- int x,y;
- aSprite *tmp;
- for(x=1;x<count;x++) {
- y=x;
- while(y>0 && (list[y]->posY < list[y-1]->posY)) {
- tmp=list[y];
- list[y]=list[y-1];
- list[y-1]=tmp;
- y--;
- }
- }
- }
- void aSpriteDemo() {
- int x=87;
- int y=136;
- int relX,relY;
- short showdebug=false;
- aSprite demoSpr,demoSpr2,demoSpr3;
- #ifdef POOL_MODE
- #ifdef LOTS
- aSprite demoSpr4,demoSpr5,demoSpr6,demoSpr7,demoSpr8,demoSpr9,demoSprA;
- #endif
- #endif
- Picture ptr,tleft,bright;
- short way1=JOY_UP,way2=JOY_UP;
- uint *drawTable[16];
- uint *drawTablePtr;
- int sortSize;
- spritePool testPool;
- clearFixLayer();
- volMEMWORD(0x401ffe)=0x7bbb; //BG color
- initGfx();
- jobMeterSetup(true);
- aSpriteInit(&demoSpr,&bmary_spr,1,16,x,y,0,FLIP_NONE);
- aSpriteInit(&demoSpr2,&bmary_spr,5,16,160-16,y,0,FLIP_NONE);
- aSpriteInit(&demoSpr3,&bmary_spr,9,16,160+16,y,0,FLIP_NONE);
- #ifdef LOTS
- aSpriteInit(&demoSpr4,&bmary_spr,9,16,160+32,146,0,FLIP_NONE);
- aSpriteInit(&demoSpr5,&bmary_spr,9,16,160-32,156,0,FLIP_NONE);
- aSpriteInit(&demoSpr6,&bmary_spr,9,16,160+48,166,0,FLIP_NONE);
- aSpriteInit(&demoSpr7,&bmary_spr,9,16,160-48,176,0,FLIP_NONE);
- aSpriteInit(&demoSpr8,&bmary_spr,9,16,160+10,186,0,FLIP_NONE);
- aSpriteInit(&demoSpr9,&bmary_spr,9,16,160-10,196,0,FLIP_NONE);
- aSpriteInit(&demoSprA,&bmary_spr,9,16,87,206,0,FLIP_NONE);
- #endif
- palJobPut(16,bmary_spr_Palettes.palCount,&bmary_spr_Palettes.data);
- pictureInit(&ptr,&pointer,200,200,0,224,FLIP_NONE);
- palJobPut(200,pointer_Palettes.palCount,&pointer_Palettes.data);
- pictureInit(&tleft,&topleft,201,201,0,224,FLIP_NONE);
- pictureInit(&bright,&topleft,202,201,0,224,FLIP_XY);
- palJobPut(201,topleft_Palettes.palCount,&topleft_Palettes.data);
- fixPrint(2,3,0,0,"1P \x12\x13\x10\x11: move sprite");
- fixPrint(2,4,0,0,"1P AB: set animation");
- fixPrint(2,5,0,0,"1P C: toggle outline");
- fixPrint(2,6,0,0,"2P ABCD: flip mode");
- #ifdef POOL_MODE
- spritePoolInit(&testPool,10,100);
- drawTablePtr=(int*)drawTable;
- *drawTablePtr++=0;
- *drawTablePtr++=(uint)&demoSpr;
- *drawTablePtr++=(uint)&demoSpr2;
- *drawTablePtr++=(uint)&demoSpr3;
- sortSize=3;
- #ifdef LOTS
- *drawTablePtr++=(uint)&demoSpr4;
- *drawTablePtr++=(uint)&demoSpr5;
- *drawTablePtr++=(uint)&demoSpr6;
- *drawTablePtr++=(uint)&demoSpr7;
- *drawTablePtr++=(uint)&demoSpr8;
- *drawTablePtr++=(uint)&demoSpr9;
- *drawTablePtr++=(uint)&demoSprA;
- sortSize=10;
- #endif
- *drawTablePtr=0;
- sortSprites((aSprite*)&drawTable[1],sortSize);
- spritePoolDrawList(&testPool,&drawTable[1]);
- spritePoolClose(&testPool,false);
- #else
- aSpriteAnimate(&demoSpr);
- aSpriteAnimate(&demoSpr2);
- aSpriteAnimate(&demoSpr3);
- #endif
- SCClose();
- while(1) {
- wait_vblank();
- p1=volMEMBYTE(P1_CURRENT);
- p1e=volMEMBYTE(P1_EDGE);
- p2=volMEMBYTE(P2_EDGE);
- ps=volMEMBYTE(PS_CURRENT);
- if((ps&P1_START)&&(ps&P2_START)) {
- clearSprites(1, 150);
- clearSprites(200, 3);
- SCClose();
- wait_vblank();
- return;
- }
- if(p1&JOY_UP) y--;
- if(p1&JOY_DOWN) y++;
- if(p1&JOY_LEFT) x--;
- if(p1&JOY_RIGHT) x++;
- while((volMEMWORD(0x3c0006)>>7)!=0x120); //wait raster line 16
- jobMeterColor(JOB_BLUE);
- if(p1e&JOY_A) aSpriteSetAnim(&demoSpr,BMARY_SPR_ANIM_IDLE);
- if(p1e&JOY_B) aSpriteSetAnim(&demoSpr,BMARY_SPR_ANIM_WALK);
- if(p1e&JOY_C) {
- if(showdebug) {
- //move debug stuff offscreen
- pictureSetPos(&ptr,0,224);
- pictureSetPos(&tleft,0,224);
- pictureSetPos(&bright,0,224);
- }
- showdebug^=1;
- }
- if(p2&JOY_A) aSpriteSetFlip(&demoSpr,FLIP_NONE);
- if(p2&JOY_B) aSpriteSetFlip(&demoSpr,FLIP_X);
- if(p2&JOY_C) aSpriteSetFlip(&demoSpr,FLIP_Y);
- if(p2&JOY_D) aSpriteSetFlip(&demoSpr,FLIP_XY);
- aSpriteSetPos(&demoSpr,x,y);
- if(way1==JOY_UP) {
- aSpriteMove(&demoSpr2,0,2);
- if(demoSpr2.posY>220) way1=JOY_DOWN;
- } else {
- aSpriteMove(&demoSpr2,0,-2);
- if(demoSpr2.posY<90) way1=JOY_UP;
- }
- if(way2==JOY_UP) {
- aSpriteMove(&demoSpr3,0,1);
- if(demoSpr3.posY>220) way2=JOY_DOWN;
- } else {
- aSpriteMove(&demoSpr3,0,-1);
- if(demoSpr3.posY<90) way2=JOY_UP;
- }
- #ifdef POOL_MODE
- if(testPool.way==WAY_UP) {
- sortSprites(&drawTable[1],sortSize);
- jobMeterColor(JOB_PINK);
- spritePoolDrawList(&testPool,&drawTable[1]);
- } else {
- sortSprites(&drawTable[1],sortSize);
- jobMeterColor(JOB_PINK);
- spritePoolDrawList(&testPool,drawTablePtr);
- }
- #else
- aSpriteAnimate(&demoSpr);
- aSpriteAnimate(&demoSpr2);
- aSpriteAnimate(&demoSpr3);
- #endif
- //aSprite debug info
- jobMeterColor(JOB_BLACK);
- if(showdebug) {
- pictureSetPos(&ptr,x,y);
- if(demoSpr.currentFlip&0x0001) relX=x-((demoSpr.currentFrame->tileWidth<<4)+demoSpr.currentStep->shiftX);
- else relX=x+demoSpr.currentStep->shiftX;
- if(demoSpr.currentFlip&0x0002) relY=y-((demoSpr.currentFrame->tileHeight<<4)+demoSpr.currentStep->shiftY);
- else relY=y+demoSpr.currentStep->shiftY;
- pictureSetPos(&tleft,relX,relY);
- pictureSetPos(&bright,relX+((demoSpr.currentFrame->tileWidth-1)<<4),relY+((demoSpr.currentFrame->tileHeight-1)<<4));
- }
- jobMeterColor(JOB_GREEN);
- #ifdef POOL_MODE
- spritePoolClose(&testPool,false);
- #endif
- jobMeterColor(JOB_GREEN);
- SCClose();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement