Esempio n. 1
0
int 
renderbuffer_drawsprite(struct render_buffer *rb, struct sprite *s) {
	if ((s->flags & SPRFLAG_INVISIBLE) == 0) {
		return drawsprite(rb, s, NULL);
	}
	return 0;
}
Esempio n. 2
0
int
drawsprite(struct render_buffer *rb, struct sprite *s, struct sprite_trans * ts) {
    struct sprite_trans temp;
    struct matrix temp_matrix;
    struct sprite_trans *t = sprite_trans_mul(&s->t, ts, &temp, &temp_matrix);
    switch (s->type) {
    case TYPE_PICTURE:
        return drawquad(rb, s->s.pic, t);
    case TYPE_POLYGON:
        return drawpolygon(rb, s->s.poly, t);
    case TYPE_ANIMATION: {
        struct pack_animation *ani = s->s.ani;
        int frame = s->frame % s->total_frame;
        if (frame < 0) {
            frame += s->total_frame;
        }
        frame += s->start_frame;
        struct pack_frame * pf = OFFSET_TO_POINTER(struct pack_frame, s->pack, ani->frame);
        pf = &pf[frame];
        int i;
        for (i=0; i<pf->n; i++) {
            struct pack_part *pp = OFFSET_TO_POINTER(struct pack_part, s->pack, pf->part);
            pp = &pp[i];
            int index = pp->component_id;
            struct sprite * child = s->data.children[index];
            if (child == NULL || (child->flags & SPRFLAG_INVISIBLE)) {
                continue;
            }
            struct sprite_trans temp2;
            struct matrix temp_matrix2;
            struct sprite_trans *ct = sprite_trans_mul2(s->pack, &pp->t, t, &temp2, &temp_matrix2);
            int r = drawsprite(rb, child, ct);
            if (r)
                return r;
        }
        return 0;
    }
    case TYPE_LABEL:
        if (s->data.rich_text) {
            // don't support draw label to renderbuffer
            return -1;
        }
        return 0;
    case TYPE_ANCHOR:
        if (s->data.anchor->ps) {
            return -1;
        }
        anchor_update(s, t);
        return 0;
    case TYPE_PANNEL:
        if (s->data.scissor) {
            return -1;
        } else {
            return 0;
        }
    }
    return -1;
}
Esempio n. 3
0
void doframe ()
{
   long frameptr, pitch, xdim, ydim;
   startdirectdraw(&frameptr,&pitch,&xdim,&ydim);
   voxsetframebuffer(frameptr,pitch,xdim,ydim);
   setcamera(&ipos,&istr,&ihei,&ifor,xdim*.5,ydim*.5,xdim*.5);
   opticast();

   drawsprite(&desklamp);

   stopdirectdraw();
   nextpage();
   readkeyboard(); if (keystatus[1]) quitloop();
}
Esempio n. 4
0
int main(void)
{
		char dpage=0;
		unsigned char i=0;
		unsigned char j=0;
		
		comm_ioctl_parms_t commparm = {38400,0};
	hires=0;
		/* Disable JTAG port */
		MCUCR |= _BV(JTD);
		MCUCR |= _BV(JTD);
	
	
		DDRA=0;    //all input
		PORTA=0xff;   //pullup
	
		xram_init();  //enable external ram
		
		dev_comm.ioctl(COMM_IOCTL_INITBAUD, &commparm);
		
	//	dev_key.ioctl(KEY_IOCTL_INIT, NULL);
		
	//		
	//	dev_key.ioctl(KEY_IOCTL_INTERRUPT_DISABLE, NULL); /*disable keyboard interrupt */
		vga_init();
		
		sei(); //enable interrupts
		
		
		VGA_DISPLAY(0);
		
				
		
		vga_slow();
		
		SELECT_RAM_BANK(0);
		clearscreen(0);
		SELECT_RAM_BANK(1);
		clearscreen(0);		
		{
			
			char x=0;
			char y=0;
			char pos[] = {0,0};
			char dir=1;
			char scr=0;
			char cposr[]={100,100};
				
			char cpos=100;
					
			while(1) {
				
				VGA_DISPLAY(scr); //show 1 page
	
				SELECT_RAM_BANK(scr^1); //draw on other page;

							
				//undraw what we drew on this page last time
				for (x=30+pos[scr^1];x<100+pos[scr^1];x+=12) {
					for (y=10;y<80;y+=12) {
						drawchar(x,y, ' ', BLACK, BLACK);
						
						
					}
				}
				
				//undraw player position
				
				drawchar(cposr[scr^1], 210, '^', BLACK, TRANSPARENT);
				
				
				//incrment positions
				pos[scr^1] = pos[scr]+dir;
				
				if(pos[scr^1] > 100)
					dir=-1;
					
				if (pos[scr^1] < 1)
					dir = 1;
				
				if(dev_multi_input.kbhit()) {
					char c = dev_multi_input.getc();
					if (c =='a'	)
						cpos-=5;
						
					if (c =='d'	)
						cpos+=5;
					
				}
							
				//draw new stuff
				
				for (x=30+pos[scr^1];x<100+pos[scr^1];x+=12) {
					for (y=10;y<80;y+=12) {
						drawchar(x,y,0xea, YELLOW, TRANSPARENT);
						drawchar(x,y, '^' , RED, TRANSPARENT);	
					}
				}
				
				//draw player position
				cposr[scr^1] = cpos;
				drawchar(cpos, 210, '^', GREEN, TRANSPARENT);
				
					
				scr ^=1; //flip roles
				
			}
			
			
			
		
			while(1){
				drawsprite( x, y, catsprite, 16, 16);			
				
				drawsprite( x, y+20, catsprite, 16, 16);
				drawsprite( x, y+40, catsprite, 16, 16);
				drawsprite( x, y+60, catsprite, 16, 16);
				drawsprite( x, y+80, catsprite, 16, 16);
				drawsprite( x, y+100, catsprite, 16, 16);
				
				drawsprite( x, y+120, catsprite, 16, 16);
				drawsprite( x, y+140, catsprite, 16, 16);
				drawsprite( x, y+160, catsprite, 16, 16);
				
				
				x+=1;
				if (x==0)
					y+=1;
				
					
				
			}
		
		}
		
		#if 1
		{

prints(&dev_keyincommout, "pressenter");
dev_keyincommout.getc();
			
			SELECT_RAM_BANK(0);
			START_FAST_WRITE;
			for(i=0;i<240;i++) {
				
				SELECT_RAM_PAGE(i);
				
				for(j=0;j<240;j++) {
					FAST_WRITE(j,7);
				
				}
			}
			
			vga_fast();
			
			prints(&dev_keyincommout, "pressenter2");
			dev_keyincommout.getc();
			vga_mode(VGA_512);
			
			SELECT_RAM_BANK(1);
			START_FAST_WRITE;
			for(i=0;i<240;i++) {
				SELECT_RAM_PAGE(i);
				for(j=0;j<240;j++) {
					FAST_WRITE(j,63);
					FAST_WRITE(j,63);
					FAST_WRITE(j,63);
					FAST_WRITE(j,63);
					FAST_WRITE(j,63);
					FAST_WRITE(j,63);
					FAST_WRITE(j,63);
				}
			}
			
			END_FAST_WRITE;
		}
		
			prints(&dev_keyincommout, "pressenter3");
			dev_keyincommout.getc();
				
		
			
			
			prints(&dev_keyincommout, "pressenter3");
			dev_keyincommout.getc();
			
			vga_mode(VGA_256);
		
		#endif
			
		VGA_BEGIN_DRAW;	
		for (i=20;i<200;i++)
		{
			
			j=i>>1;
			VGA_DOT(i,j,i);	
		}
		VGA_END_DRAW;
			
		vga_slow();
			
		//keyboard/comm test
		while (1){
			/*
			prints(&dev_comm, "This is a test comm>");
			readline(&dev_comm, str, sizeof(str), 1);
			prints(&dev_comm, "You said ");
			prints(&dev_comm, str);
			while (! dev_comm.kbhit())
				prints(&dev_comm, ".");
			*/
				
			prints(&dev_keyincommout, "This is a test keyb>");
			readline(&dev_keyincommout, str, sizeof(str), 1);
			prints(&dev_keyincommout, "You said ");
			prints(&dev_keyincommout, str);
			while (! dev_keyincommout.kbhit())
				prints(&dev_keyincommout, ".");
				
				
				
			VGA_DISPLAY(dpage);
			
			
			//SELECT_RAM_BANK(dpage);
			
			sprintf(str, "dpage:%d", dpage);
			prints(&dev_comm, str);
			
			dpage++;
			if (dpage==2)
				dpage=0;
				
		}
};
Esempio n. 5
0
/*
 * Map introduction
 *
 * ASM: 1948
 *
 * return: SCREEN_RUNNING, SCREEN_DONE, SCREEN_EXIT
 */
U8
screen_introMap(void)
{

//char tutu[50];
//sprintf(tutu,"imap ctrl=%d seq=%d, %d %d          ",control_status,seq, 0 , SCREEN_TIMEOUT);
//slPrint(tutu,slLocate(3,14));

  switch (seq) {
  case 0:
//	slPrint("befor sysvid_clear",slLocate(3,15));
    sysvid_clear();
//	slPrint("after sysvid_clear",slLocate(3,15));
#ifdef GFXPC
    draw_tilesBank = 1;
    draw_filter = 0xAAAA;
#endif
#ifdef GFXST
    draw_tilesBank = 0;
#endif
    draw_tllst = screen_imaptext[game_map];
    draw_setfb(32, 0);
    draw_tilesSubList();

    draw_setfb(32, 96);
#ifdef GFXPC
    draw_filter = 0x5555;
#endif
    draw_tilesList();

    game_rects = NULL;

#ifdef GFXPC
    draw_filter = 0xFFFF;
#endif
//	slPrint("befor init          ",slLocate(3,15));
    init();
//	slPrint("after init          ",slLocate(3,15));
    nextstep();
//	slPrint("after nextstep          ",slLocate(3,15));
    drawcenter();
//	slPrint("after drawcenter          ",slLocate(3,15));
    drawtb();
//	slPrint("after drawtb          ",slLocate(3,15));
    drawlr();
//	slPrint("after drawlr          ",slLocate(3,15));
    drawsprite();
//	slPrint("after drawsprite          ",slLocate(3,15));
    control_last = 0;

    game_rects = &draw_SCREENRECT;

#ifdef ENABLE_SOUND
	game_setmusic(map_maps[game_map].tune, 1);
#endif
//	slPrint("after game_setmusic          ",slLocate(3,15));

	seq = 1;
    break;
  case 1:  /* top and bottom borders */
    drawtb();
    game_rects = &anim_rect;
    seq = 2;
    break;
  case 2:  /* background and sprite */
    anim();
    drawcenter();
    drawsprite();
    game_rects = &anim_rect;
    seq = 3;
    break;
  case 3:  /* all borders */
    drawtb();
    drawlr();
    game_rects = &anim_rect;
    seq = 1;
    break;
  case 4:  /* wait for key release */
    if (!(control_status & CONTROL_FIRE))
      seq = 5;
    else
	  {
	  //control_status =0;
      sys_sleep(50); /* .5s */
	  }
    break;
  }

  if (control_status & CONTROL_FIRE) {  /* end as soon as key pressed */
    seq = 4;
  }

  if (control_status & CONTROL_EXIT)  /* check for exit request */
    return SCREEN_EXIT;

  if (seq == 5) {  /* end as soon as key pressed */
    sysvid_clear();
    seq = 0;
	return SCREEN_DONE;
  }
  else
    return SCREEN_RUNNING;
}