void new_ipobble_window() { ipobble_gc = pz_get_gc(1); GrSetGCUseBackground(ipobble_gc, GR_TRUE); GrSetGCForeground(ipobble_gc, BLACK); GrSetGCBackground(ipobble_gc, WHITE); ipobble_wid = pz_new_window(0, HEADER_TOPLINE + 1, screen_info.cols, screen_info.rows - HEADER_TOPLINE - 1, ipobble_do_draw, ipobble_handle_event); GrSelectEvents(ipobble_wid, GR_EVENT_MASK_TIMER | GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_KEY_UP | GR_EVENT_MASK_KEY_DOWN); if( screen_info.bpp > 2) { ipodc=1; } score = 0; level = 0; game_status = GAME_STATUS_PLAY; ipobble_create_board(level); ipobble_timer_id = GrCreateTimer(ipobble_wid, DELTA_TIME); GrMapWindow(ipobble_wid); draw_first(); }
void new_invaders_window() { invaders_gc = pz_get_gc(1); GrSetGCUseBackground(invaders_gc, GR_TRUE); GrSetGCBackground(invaders_gc, GR_RGB(255,255,255)); GrSetGCForeground(invaders_gc, GR_RGB(0,0,0)); invaders_score_pix = GrNewPixmap(screen_info.cols, 13, 0); invaders_wid = pz_new_window(0, HEADER_TOPLINE + 1, screen_info.cols, screen_info.rows - HEADER_TOPLINE - 1, invaders_do_draw, invaders_handle_event); GrSelectEvents(invaders_wid, GR_EVENT_MASK_TIMER | GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_KEY_UP | GR_EVENT_MASK_KEY_DOWN); score = 0; level = 0; aliens_rows = (screen_info.rows - 40) / 20; game_status = GAME_STATUS_PLAY; invaders_create_board(level); invaders_timer_id = GrCreateTimer(invaders_wid, 50); GrMapWindow(invaders_wid); draw_first(); }
void text_field::change_data(char const *new_data, int new_cursor, // cursor==-1, does not change it. int active, image *screen) { if (strlen(format)<strlen(new_data)) data=(char *)realloc(data,strlen(new_data)); strcpy(data,new_data); if (new_cursor!=-1) cur=new_cursor; draw_first(screen); draw(active,screen); }
void button::handle_event(event &ev, image *screen, InputManager *im) { if ((ev.type==EV_KEY && ev.key==13) || (ev.type==EV_MOUSE_BUTTON && ev.mouse_button)) { int x1,y1,x2,y2; area(x1,y1,x2,y2); up=!up; draw_first(screen); draw(act,screen); wm->push_event(new event(id,(char *)this)); } }
void tool_picker::remap(palette *pal, image *screen) { delete map; map=new Filter(old_pal,pal); draw_first(screen); }
static int ipobble_handle_event(GR_EVENT *event) { int ret = 0; static int paused = 0; if(game_status) { switch(event->type) { case ( GR_EVENT_TYPE_TIMER ): if (!paused) ipobble_Game_Loop(); break; /* if in game there is 1 status: waiting for direction */ case( GR_EVENT_TYPE_KEY_DOWN ): switch(event->keystroke.ch) { case '\r': /* push button : do fire! */ if(ball_firing) break; do_fire(); ret |= KEY_CLICK; break; case 'l': GrSetGCForeground(ipobble_gc, WHITE); me_draw(current_angle); draw_podzilla(podzilla_bmp_var); if(accel_status>0) accel_status++; else accel_status=1; current_angle = (current_angle >= 80) ? 80 : current_angle + delta_angle * (accel_status / 5 + 1); GrSetGCForeground(ipobble_gc, BLACK); podzilla_bmp_var = !podzilla_bmp_var; draw_podzilla(podzilla_bmp_var); me_draw(current_angle); ret |= KEY_CLICK; break; case 'r': GrSetGCForeground(ipobble_gc, WHITE); me_draw(current_angle); draw_podzilla(podzilla_bmp_var); if (accel_status < 0) accel_status--; else accel_status=-1; current_angle = (current_angle <= -80) ? -80 : current_angle + delta_angle * (accel_status / 5 - 1); GrSetGCForeground(ipobble_gc, BLACK); podzilla_bmp_var = !podzilla_bmp_var; draw_podzilla(podzilla_bmp_var); me_draw(current_angle); ret |= KEY_CLICK; break; case 'm': /* if Menu Button then destroy all dynamically * created */ pz_close_window(ipobble_wid); GrDestroyTimer (ipobble_timer_id); GrDestroyGC(ipobble_gc); break; case 'h': paused = 1; break; default: ret |= KEY_UNUSED; break; } break; case( GR_EVENT_TYPE_KEY_UP ): if (event->keystroke.ch == 'h') paused = 0; break; default: ret |= EVENT_UNUSED; break; } return ret; } /* if game status play */ /* END OF GAME */ if(onetime == 0){ GrSetGCForeground(ipobble_gc, BLACK); GrText(ipobble_wid, ipobble_gc, screen_info.cols / 2 - 36, screen_info.rows / 2 - 24, "GAME OVER", -1, GR_TFASCII); gameover_waitcounter = 30; } onetime = 1; gameover_waitcounter--; switch(event->type) { case( GR_EVENT_TYPE_KEY_DOWN ): switch(event->keystroke.ch) { case '\r': /* push button */ if(gameover_waitcounter <= 0){ score = 0; GrSetGCForeground(ipobble_gc, WHITE); GrFillRect(ipobble_wid, ipobble_gc, 0, 0, screen_info.cols, screen_info.rows); GrSetGCForeground(ipobble_gc, BLACK); level = 0; score = 0; ipobble_create_board(level); game_status = GAME_STATUS_PLAY; draw_first(); ret |= KEY_CLICK; } break; case 'm': /* if Menu Button then destroy all dynamically * created */ pz_close_window(ipobble_wid); GrDestroyTimer(ipobble_timer_id); GrDestroyGC(ipobble_gc); break; default: ret |= KEY_UNUSED; break; } break; default: ret |= EVENT_UNUSED; break; } return ret; }
static int invaders_handle_event(GR_EVENT *event) { int ret = 0; static int paused; if(game_status) { switch(event->type) { case ( GR_EVENT_TYPE_TIMER ): if (!paused) invaders_Game_Loop(); break; case( GR_EVENT_TYPE_KEY_DOWN ): switch(event->keystroke.ch) { case '\r': /* push button */ if(me_firing < ME_MAX_FIRES) { me_firing++; myfire[me_firing - 1].posx = me_posx; myfire[me_firing - 1].posy = me_posy -4; myfire[me_firing - 1].dir = -2; } ret |= KEY_CLICK; break; case 'l': GrSetGCForeground(invaders_gc, GR_RGB(255,255,255)); me_draw(); GrSetGCForeground(invaders_gc, GR_RGB(0,0,0)); if(me_still == 'l'){ me_accel_counter++; me_accel = (me_accel_counter < 20) ? me_accel_counter / 5 : me_accel; } else { me_still = 'l'; me_accel_counter = 0; me_accel = 2; } me_posx = (me_posx <= me_left) ? me_left : (me_posx - me_accel); me_draw(); ret |= KEY_CLICK; break; case 'r': GrSetGCForeground(invaders_gc, GR_RGB(255,255,255)); me_draw(); GrSetGCForeground(invaders_gc, GR_RGB(0,0,0)); if(me_still == 'r'){ me_accel_counter++; me_accel = (me_accel_counter < 20) ? me_accel_counter / 5 : me_accel; } else { me_still = 'r'; me_accel_counter = 0; me_accel = 2; } me_posx = (me_posx >= me_right) ? me_right : me_posx + me_accel; me_draw(); ret |= KEY_CLICK; break; case 'm': /* if Menu Button destroy all dynamically * created */ pz_close_window(invaders_wid); GrDestroyWindow(invaders_score_pix); GrDestroyTimer (invaders_timer_id); GrDestroyGC(invaders_gc); break; case 'h': paused = 1; break; default: me_still = 0; /* for what key? */ ret |= KEY_UNUSED; /* right? */ break; } break; case( GR_EVENT_TYPE_KEY_UP ): switch(event->keystroke.ch) { case 'h': /* push button */ paused = 0; break; default: ret |= KEY_UNUSED; } break; default: ret |= KEY_UNUSED; } return ret; }/* if game status play */ /* END OF GAME */ if(onetime == 0){ char game_over[] = "GAME OVER"; int x = screen_info.cols / 2; int y = ((screen_info.rows - 21) / 4) * 3; int xp = x - (vector_string_pixel_width(game_over, 1, 2) / 2); int yp = y - 8; GrSetGCForeground(invaders_gc, GR_RGB(255,255,255)); GrFillRect(invaders_wid, invaders_gc, xp - 2, yp - 2, (x - xp + 2) * 2, (y - yp + 2) * 2); GrSetGCForeground(invaders_gc, GR_RGB(0,0,0)); vector_render_string(invaders_wid, invaders_gc, game_over, 1, 2, xp, yp); gameover_waitcounter = 30; } onetime = 1; gameover_waitcounter--; switch(event->type) { case( GR_EVENT_TYPE_KEY_DOWN ): switch(event->keystroke.ch) { case '\r': /* push button */ if(gameover_waitcounter <= 0) { score = 0; GrSetGCForeground(invaders_gc, GR_RGB(255,255,255)); GrFillRect(invaders_wid,invaders_gc, 0, 0, screen_info.cols, screen_info.rows); GrSetGCForeground(invaders_gc, GR_RGB(0,0,0)); level = 0; score = 0; invaders_create_board(level); game_status=GAME_STATUS_PLAY; draw_first(); } ret |= KEY_CLICK; break; case 'm': /* if Menu Button then destroy all * dynamically created */ pz_close_window(invaders_wid); GrDestroyWindow(invaders_score_pix); GrDestroyTimer(invaders_timer_id); GrDestroyGC(invaders_gc); break; default: ret |= KEY_UNUSED; break; } break; default: ret |= EVENT_UNUSED; break; } return ret; }
static void fire_update() { int i = 0; int rowhit, colhit; while(i < me_firing) { myfire[i].posy += myfire[i].dir; /* test if hit something */ if(get_rowcol(myfire[i].posx, myfire[i].posy, &rowhit, &colhit)) { if(alien_status[rowhit + colhit * aliens_rows] > 0) { /* when hit, fire out, destroy it * (for now not animation) */ myfire_delete(i); GrSetGCForeground(invaders_gc, GR_RGB(255,255,255)); draw_alien(colhit,rowhit,itest); Dprintf("hit %d,%d,%d\n", colhit,rowhit,itest); Dprintf(" %d,%d\n",alien_maxx-alien_minx, cell_maxx - cell_minx); GrSetGCForeground(invaders_gc, GR_RGB(0,0,0)); alien_status[rowhit + colhit * aliens_rows] = 0; score += colhit * 2; update_score(); aliens_left -= 1; if(aliens_left <= 0) { level++; invaders_create_board(level); draw_first(); return; } continue; } } /* test if out board */ if(myfire[i].posy < board_top) { myfire_delete(i); i--; } i++; } i = 0; while(i < alien_firing) { alienfire[i].posy += alienfire[i].dir; Dprintf("alienfire pos %d\n", alienfire[i].posy); /* test if hit me */ if(alienfire[i].posy < (me_posy + ME_HEIGHT) && alienfire[i].posy >= me_posy && alienfire[i].posx >= me_posx && alienfire[i].posx <= me_posx + ME_WIDTH) { /* End of game */ game_status = GAME_STATUS_END; return; } /* test if out board */ if(alienfire[i].posy >= board_bottom) { alienfire_delete(i); i--; } i++; } }