void edit_draw(EDIT *edit, int x, int y, int width, int height) { if((width - 4 * SCALE - SCROLL_WIDTH) < 0) { return; } if(utox_window_baseline && y > utox_window_baseline - font_small_lineheight - 4 * SCALE) { y = utox_window_baseline - font_small_lineheight - 4 * SCALE; } edit->width = width -4 * SCALE - (edit->multiline ? SCROLL_WIDTH : 0); edit->height = height - 4 * SCALE; if(!edit->noborder) { framerect(x, y, x + width, y + height, (edit == active_edit) ? BLUE : (edit->mouseover ? C_GRAY2 : C_GRAY)); } drawrect(x + 1, y + 1, x + width - 1, y + height - 1, WHITE); setfont(FONT_TEXT); setcolor(COLOR_TEXT); int yy = y; if(edit->multiline) { pushclip(x + 1, y + 1, width - 2, height - 2); SCROLLABLE *scroll = edit->scroll; scroll->content_height = text_height(width - 4 * SCALE - SCROLL_WIDTH, font_small_lineheight, edit->data, edit->length) + 4 * SCALE; scroll_draw(scroll, x, y, width, height); yy -= scroll_gety(scroll, height); } if(!edit->length && maybe_i18nal_string_is_valid(&edit->empty_str)) { STRING* empty_str_text = maybe_i18nal_string_get(&edit->empty_str); setcolor(C_GRAY2); drawtext(x + 2 * SCALE, yy + 2 * SCALE, empty_str_text->str, empty_str_text->length); } _Bool a = (edit == active_edit); drawtextmultiline(x + 2 * SCALE, x + width - 2 * SCALE - (edit->multiline ? SCROLL_WIDTH : 0), yy + 2 * SCALE, y, y + height, font_small_lineheight, edit->data, edit->length, a ? edit_sel.start : STRING_IDX_MAX, a ? edit_sel.length : STRING_IDX_MAX, edit->multiline); if(edit->multiline) { popclip(); } }
int usb_dnld_hook(){ /* These are global buffers to the packet data, its length, and the block address that it runs to. The stock firmware has a bug in that it assumes the packet size is always 2048 bytes. */ static char *packet=(char*) 0x200199f0;//2.032 static int *packetlen=(int*) 0x2001d20c;//2.032 static int *blockadr=(int*) 0x2001d208;//2.032 static char *dfu_state=(char*) 0x2001d405;//2.032 static char **dfu_target_adr=(char**) 0x2000112c; //2.032 //Don't know what these do. //char *thingy=(char*) 0x2001d276; char *thingy2=(char*) 0x2001d041; /* DFU transfers begin at block 2, and special commands hook block 0. We'll use block 1, because it handily fits in the gap without breaking backward compatibility with the older code. */ if(*blockadr==1){ switch(packet[0]){ case TDFU_DMESG: //The DMESG buffer might move, so this command //sets the target address to the DMESG buffer. *dfu_target_adr=dmesg_start; break; case TDFU_PRINT: // 0x80, u8 x, u8 y, u8 str[]. drawtext((wchar_t *) (packet+3), packet[1],packet[2]); break; } thingy2[0]=0; thingy2[1]=0; thingy2[2]=0; thingy2[3]=3; *dfu_state=3; *blockadr=0; *packetlen=0; return 0; }else{ /* For all other blocks, we default to the internal handler. */ return usb_dnld_handle(); } }
void dropdown_drawactive(void) { DROPDOWN *b = active; if(!b) { return; } int x = active_x, y = active_y, w = active_width, h = active_height; setfont(FONT_TEXT); setcolor(COLOR_TEXT); int i, sign = 1; // Increase width if needed, so that all menu items fit. for(i = 0; i != b->dropcount; i++) { STRING* e = b->ondisplay(i, b); int needed_w = textwidth(e->str, e->length) + 4 * SCALE; if(w < needed_w) { w = needed_w; } } if(y + h * b->dropcount > height) { y -= h * (b->dropcount - 1); sign = -1; } drawrect(x, y, x + w, y + h * b->dropcount, WHITE); framerect(x, y, x + w, y + h * b->dropcount, BLUE); if(sign == -1) { y += h * (b->dropcount - 1); } for(i = 0; i != b->dropcount; i++) { int j = index(b, i); STRING* e = b->ondisplay(j, b); if(j == b->over) { drawrectw(x + 1, y + 1, w - 2, h - 2, C_GRAY); } drawtext(x + 2 * SCALE, y + 2 * SCALE, e->str, e->length); y += sign * h; } }
int luatpt_drawtext(lua_State* l) { char *string; int textx, texty, textred, textgreen, textblue, textalpha; textx = luaL_optint(l, 1, 0); texty = luaL_optint(l, 2, 0); string = luaL_optstring(l, 3, ""); textred = luaL_optint(l, 4, 255); textgreen = luaL_optint(l, 5, 255); textblue = luaL_optint(l, 6, 255); textalpha = luaL_optint(l, 7, 255); if(vid_buf!=NULL){ drawtext(vid_buf, textx, texty, string, textred, textgreen, textblue, textalpha); return 0; } return -1; }
static void draw_rr_pin (int inode, enum color_types color) { /* Draws an IPIN or OPIN rr_node. Note that the pin can appear on more * * than one side of a clb. Also note that this routine can change the * * current color to BLACK. */ int ipin, i, j, iside, iclass, iblk; float xcen, ycen; char str[BUFSIZE]; i = rr_node[inode].xlow; j = rr_node[inode].ylow; ipin = rr_node[inode].ptc_num; setcolor (color); if (clb[i][j].type == CLB) { iclass = clb_pin_class[ipin]; for (iside=0;iside<=3;iside++) { if (pinloc[iside][ipin] == 1) { /* Pin exists on this side. */ get_rr_pin_draw_coords (inode, iside, &xcen, &ycen); fillrect (xcen-pin_size, ycen-pin_size, xcen+pin_size, ycen+pin_size); sprintf (str, "%d", ipin); setcolor (BLACK); drawtext (xcen, ycen, str, 2*pin_size); setcolor (color); } } } else { /* IO pad. */ iblk = clb[i][j].u.io_blocks[ipin]; if (i == 0) iside = RIGHT; else if (j == 0) iside = TOP; else if (i == nx+1) iside = LEFT; else iside = BOTTOM; get_rr_pin_draw_coords (inode, iside, &xcen, &ycen); fillrect (xcen-pin_size, ycen-pin_size, xcen+pin_size, ycen+pin_size); } }
void Transmitter::renderLevels(int width, int height) { char val[50]; const int LEVEL_CORNER_X = 10; const int LEVEL_CORNER_Y = 400; // Draw the numeric degree/sec values from the gyros sprintf(val, "Pitch Rate %4.1f", _lastRotationRate.x); drawtext(LEVEL_CORNER_X, LEVEL_CORNER_Y, 0.10, 0, 1.0, 1, val, 0, 1, 0); sprintf(val, "Yaw Rate %4.1f", _lastRotationRate.y); drawtext(LEVEL_CORNER_X, LEVEL_CORNER_Y + 15, 0.10, 0, 1.0, 1, val, 0, 1, 0); sprintf(val, "Roll Rate %4.1f", _lastRotationRate.z); drawtext(LEVEL_CORNER_X, LEVEL_CORNER_Y + 30, 0.10, 0, 1.0, 1, val, 0, 1, 0); sprintf(val, "Pitch %4.3f", _estimatedRotation.x); drawtext(LEVEL_CORNER_X, LEVEL_CORNER_Y + 45, 0.10, 0, 1.0, 1, val, 0, 1, 0); sprintf(val, "Yaw %4.3f", _estimatedRotation.y); drawtext(LEVEL_CORNER_X, LEVEL_CORNER_Y + 60, 0.10, 0, 1.0, 1, val, 0, 1, 0); sprintf(val, "Roll %4.3f", _estimatedRotation.z); drawtext(LEVEL_CORNER_X, LEVEL_CORNER_Y + 75, 0.10, 0, 1.0, 1, val, 0, 1, 0); // Draw the levels as horizontal lines const int LEVEL_CENTER = 150; const float ACCEL_VIEW_SCALING = 1.f; glLineWidth(2.0); glColor4f(1, 1, 1, 1); glBegin(GL_LINES); // Gyro rates glVertex2f(LEVEL_CORNER_X + LEVEL_CENTER, LEVEL_CORNER_Y - 3); glVertex2f(LEVEL_CORNER_X + LEVEL_CENTER + _lastRotationRate.x, LEVEL_CORNER_Y - 3); glVertex2f(LEVEL_CORNER_X + LEVEL_CENTER, LEVEL_CORNER_Y + 12); glVertex2f(LEVEL_CORNER_X + LEVEL_CENTER + _lastRotationRate.y, LEVEL_CORNER_Y + 12); glVertex2f(LEVEL_CORNER_X + LEVEL_CENTER, LEVEL_CORNER_Y + 27); glVertex2f(LEVEL_CORNER_X + LEVEL_CENTER + _lastRotationRate.z, LEVEL_CORNER_Y + 27); // Acceleration glVertex2f(LEVEL_CORNER_X + LEVEL_CENTER, LEVEL_CORNER_Y + 42); glVertex2f(LEVEL_CORNER_X + LEVEL_CENTER + (int)(_estimatedRotation.x * ACCEL_VIEW_SCALING), LEVEL_CORNER_Y + 42); glVertex2f(LEVEL_CORNER_X + LEVEL_CENTER, LEVEL_CORNER_Y + 57); glVertex2f(LEVEL_CORNER_X + LEVEL_CENTER + (int)(_estimatedRotation.y * ACCEL_VIEW_SCALING), LEVEL_CORNER_Y + 57); glVertex2f(LEVEL_CORNER_X + LEVEL_CENTER, LEVEL_CORNER_Y + 72); glVertex2f(LEVEL_CORNER_X + LEVEL_CENTER + (int)(_estimatedRotation.z * ACCEL_VIEW_SCALING), LEVEL_CORNER_Y + 72); glEnd(); // Draw green vertical centerline glColor4f(0, 1, 0, 0.5); glBegin(GL_LINES); glVertex2f(LEVEL_CORNER_X + LEVEL_CENTER, LEVEL_CORNER_Y - 6); glVertex2f(LEVEL_CORNER_X + LEVEL_CENTER, LEVEL_CORNER_Y + 30); glEnd(); }
/* Text content for settings page */ static void drawsettings_content(int UNUSED(x), int y, int UNUSED(w), int UNUSED(height)) { setcolor(C_TITLE); setfont(FONT_TEXT); drawstr(LIST_RIGHT + SCALE * 5, y + SCALE * 5, NAME); drawstr(LIST_RIGHT + SCALE * 5, y + SCALE * 29, STATUSMESSAGE); drawstr(LIST_RIGHT + SCALE * 5, y + SCALE * 123, AUDIOINPUTDEVICE); drawstr(LIST_RIGHT + SCALE * 190, y + SCALE * 123, AUDIOFILTERING); drawstr(LIST_RIGHT + SCALE * 5, y + SCALE * 147, AUDIOOUTPUTDEVICE); drawstr(LIST_RIGHT + SCALE * 5, y + SCALE * 171, VIDEOINPUTDEVICE); drawstr(LIST_RIGHT + SCALE * 5, y + SCALE * 206, DPI); drawstr(LIST_RIGHT + SCALE * 5, y + SCALE * 230, LANGUAGE); drawstr(LIST_RIGHT + SCALE * 5, y + SCALE * 254, NETWORK); drawstr(LIST_RIGHT + SCALE * 5, y + SCALE * 266, IPV6); drawstr(LIST_RIGHT + SCALE * 5 + 50 * SCALE, y + SCALE * 266, UDP); drawstr(LIST_RIGHT + SCALE * 5, y + SCALE * 278, PROXY); drawstr(LIST_RIGHT + SCALE * 5, y + SCALE * 310, LOGGING); drawtext(LIST_RIGHT + SCALE * 132, y + SCALE * 290, (uint8_t*)":", 1); setfont(FONT_SELF_NAME); drawstr(LIST_RIGHT + SCALE * 5, y + SCALE * 54, TOXID); drawstr(LIST_RIGHT + SCALE * 5, y + SCALE * 76, PREVIEW); drawstr(LIST_RIGHT + SCALE * 5, y + SCALE * 113, DEVICESELECTION); drawstr(LIST_RIGHT + SCALE * 5, y + SCALE * 195, OTHERSETTINGS); setfont(FONT_MISC); setcolor(C_RED); drawstr(LIST_RIGHT + SCALE * 5, y + SCALE * 302, WARNING); setcolor(C_TITLE); setfont(FONT_TEXT); drawstr(LIST_RIGHT + SCALE * 5, y + SCALE * 334, AUDIONOTIFICATIONS); }
void drawmenu(void) { int curpos; Item *item; dc->x = 0; dc->y = 0; dc->h = bh; drawrect(dc, 0, 0, mw, mh, True, normcol->BG); if(prompt && *prompt) { dc->w = promptw; drawtext(dc, prompt, selcol); dc->x = dc->w; } /* draw input field */ dc->w = (lines > 0 || !matches) ? mw - dc->x : inputw; drawtext(dc, text, normcol); if((curpos = textnw(dc, text, cursor) + dc->font.height/2) < dc->w) drawrect(dc, curpos, (dc->h - dc->font.height)/2 + 1, 1, dc->font.height -1, True, normcol->FG); if(!quiet || strlen(text) > 0) { if(lines > 0) { /* draw vertical list */ dc->w = mw - dc->x; for(item = curr; item != next; item = item->right) { dc->y += dc->h; drawtext(dc, item->text, (item == sel) ? selcol : normcol); } } else if(matches) { /* draw horizontal list */ dc->x += inputw; dc->w = textw(dc, "<"); if(curr->left) drawtext(dc, "<", normcol); for(item = curr; item != next; item = item->right) { dc->x += dc->w; dc->w = MIN(textw(dc, item->text), mw - dc->x - textw(dc, ">")); drawtext(dc, item->text, (item == sel) ? selcol : normcol); } dc->w = textw(dc, ">"); dc->x = mw - dc->w; if(next) drawtext(dc, ">", normcol); } } mapdc(dc, win, mw, mh); }
ULONG handleevents(struct Window *win, struct Screen *screen, WORD x, WORD y) { struct IntuiMessage *imsg; WORD y1; struct MsgPort *port = win->UserPort; BOOL terminated = FALSE; ULONG retidcmp = 0; while (!terminated) { if ((imsg = (struct IntuiMessage *)GetMsg(port)) != NULL) { switch (imsg->Class) { case IDCMP_CLOSEWINDOW: terminated = TRUE; break; case IDCMP_INTUITICKS: y1 = drawtext(win, x, y, "Screen position: (%d, %d) ", screen->LeftEdge, screen->TopEdge); y1 = drawtext(win, x, y1, "Mouse position: (%d, %d) ", screen->MouseX, screen->MouseY); y1 = drawtext(win, x, y1, "ViewPort size: %dx%d ", screen->ViewPort.DWidth, screen->ViewPort.DHeight); y1 = drawtext(win, x, y1, "ViewPort position: (%d, %d) ", screen->ViewPort.DxOffset, screen->ViewPort.DyOffset); y1 = drawtext(win, x, y1, "RasInfo position: (%d, %d) ", screen->ViewPort.RasInfo->RxOffset, screen->ViewPort.RasInfo->RyOffset); y1 = drawtext(win, x, y1, "Window position: (%d, %d) ", win->LeftEdge, win->TopEdge); drawtext(win, x, y1, "Window mouse position: (%d, %d) ", win->MouseX, win->MouseY); break; } /* switch (imsg->Class) */ ReplyMsg((struct Message *)imsg); } /* if ((imsg = GetMsg(port)) != NULL) */ else { Wait(1L << port->mp_SigBit); } } /* while (!terminated) */ return retidcmp; } /* HandleEvents() */
static void drawInit( int sizex, int sizey, char* seqName, char* filename, float score) { int i,k=0; int x,y; char* c; c =(char*)malloc(sizeof(char)*1000); /* initialize display */ init_graphics("RNA"); /* still picture drawing allows user to zoom, etc. */ init_world (0.,0.,CELLSIZE*sizex,CELLSIZE*sizey); //event_loop(button_press, drawscreen); /* animation section */ clearscreen(); init_postscript(filename); clearscreen(); sprintf(c, "%s%s%s%d%s%f%s", "RNA: ", seqName, ", length = ", sizex, ", energy = ",-score/1000.0, " kal/mol"); //printf(" output string is %s\n",c); update_message("RNA secondary structure"); flushinput(); drawtext (sizex*CELLSIZE/2,sizey*CELLSIZE/10,c,1.0e6); flushinput(); setcolor (BLACK); setlinewidth(1); setlinestyle (SOLID); for (i=0;i<=sizex;i++) { drawline (i*CELLSIZE,(sizey/2-1)*CELLSIZE,i*CELLSIZE,CELLSIZE*sizey/2); flushinput(); } drawline(0,(sizey/2-1)*CELLSIZE, sizex*CELLSIZE, CELLSIZE*(sizey/2-1)); drawline(0,sizey*CELLSIZE/2, sizex*CELLSIZE, CELLSIZE*sizey/2); flushinput(); free(c); }
uint drawnode(Tnode *t, Image *m, Image *clipr, Point o) { int i; char *fs, *s; uint dy; Point oo; if(t == nil) return 0; t->offset = o; oo = Pt(o.x+Nubwidth+2, o.y); // if(t->draw) // dy = (*t->draw)(t, m, clipr, oo); // else{ fs = nil; if(t->str) s = t->str; // else if(t->strfn) // fs = s = (*t->strfn)(t); else s = "???"; dy = drawtext(s, m, clipr, oo); free(fs); // } if(t->expanded) { if(t->nkid == -1 && t->expand) (*t->expand)(t); oo = Pt(o.x+Nubwidth+(Linewidth-Nubwidth)/2, o.y+dy); for(i=0; i<t->nkid; i++) oo.y += drawnode(t->kid[i], m, clipr, oo); dy = oo.y - o.y; } drawnub(m, clipr, o, t); return dy; }
static void draw_button(control c, rect r) { rect textrect; rgb up, down; font f; rgb old = currentcolour(); clear(c); /* Draw the button name. */ if (isenabled(c)) setcolour(getforeground(c)); else setcolour(Grey); f = gettextfont(c); setfont(f); textrect = r; if (ishighlighted(c)) textrect.x += 1, textrect.y += 1; drawtext(textrect, Center|VCenter, getname(c)); /* Draw button border. */ setlinewidth(1); drawrect(r); r = insetr(r,1); /* Draw button shadow. */ up = White, down = Grey; if (ishighlighted(c)) up = Grey, down = LightGrey; else if (hasfocus(c)) { setcolour(Black); drawrect(r); r = insetr(r,1); } draw_shadow(r, up, down, SHADOW_WIDTH); setcolour(old); }
int renderhold(int h) { int i, j, x, y; const int shape_sz = 18; const int const_h = shape_sz * SHAPE_MAX_H + 6; if (g_state != GAME_STARTED) return h; drawtext(panel, X_MARGIN, h, "\nHolding:", 0xff, 0xff, 0xff, 0xff); h += FONT_H*2 + 3; drawrect(panel, X_MARGIN, h, shape_sz * SHAPE_MAX_W + 6, shape_sz * SHAPE_MAX_H + 6, 0xff, 0xff, 0xff, 0x7f); h += 3; if (g_hold == -1) return h+const_h; for (i = 0; i != g_shape[g_hold].w; ++i) { for (j = 0; j != g_shape[g_hold].h; ++j) { if (g_shape[g_hold].pixels[j][i]) { x = (i + g_shape[g_hold].off_x) * 18; y = j * 18; x += X_MARGIN + 3; y += h; fillrect(panel, x, y, 18, 18, UNPIXRGB(g_shape[g_hold].color), 0xff); } } } return h+const_h; }
int renderqueue(int h) { int i, j, x, y, q = 0; const int nxt_sz = 15; const int oth_sz = 4; if (g_state != GAME_STARTED) return h; drawtext(panel, X_MARGIN, h, "\nNext:", 0xff, 0xff, 0xff, 0xff); h += FONT_H*2 + 3; for (i = 0; i != g_shape[g_queue[q]].w; ++i) { for (j = 0; j != g_shape[g_queue[q]].h; ++j) { if (g_shape[g_queue[q]].pixels[j][i]) { x = (i /*+ g_shape[g_queue[q]].off_x*/) * nxt_sz; y = j * nxt_sz; x += X_MARGIN; y += h; fillrect(panel, x, y, nxt_sz, nxt_sz, UNPIXRGB(g_shape[g_queue[q]].color), 0xff); } } } for (q = 1; q != QUEUE_SIZE; ++q) { for (i = 0; i != g_shape[g_queue[q]].w; ++i) { for (j = 0; j != g_shape[g_queue[q]].h; ++j) { if (g_shape[g_queue[q]].pixels[j][i]) { x = (i /*+ g_shape[g_queue[q]].off_x*/) * oth_sz; y = j * oth_sz; x += X_MARGIN+nxt_sz*SHAPE_MAX_W+10; y += h; fillrect(panel, x, y, oth_sz, oth_sz, UNPIXRGB(g_shape[g_queue[q]].color), 0xff-0xf0*q/QUEUE_SIZE); } } } h += SHAPE_MAX_H * oth_sz + 3; } return h; /* 6*4 + 6 */ }
void draw_timeline(BWAnal *aa) { double off0= (aa->c.off) / aa->rate; double off1= (aa->c.off + aa->c.sx * aa->c.tbase) / aa->rate; double step= (off1 - off0)/5; int log10= (int)floor(log(step) / M_LN10); double step10= exp(M_LN10 * log10); double off; if (step >= step10 * 5) step= step10*5; else if (step >= step10 * 2) step= step10*2; else step= step10; modf((off0 + step * 0.999) / step, &off); off *= step; clear_rect(d_tim_xx, d_tim_yy, d_tim_sx, d_tim_sy, colour[0]); while (off < off1) { int xx= d_tim_xx + (int)((off-off0) / (off1-off0) * d_tim_sx); char buf[32]; vline(xx, d_tim_yy + d_tim_sy/2, d_tim_sy/2, colour[9]); if (log10 < 0) sprintf(buf, "\x8E%.*f", -log10, off); else sprintf(buf, "\x8E%g", off); drawtext(disp_font, xx + 3, d_tim_yy, buf); off += step; } // Update update(d_tim_xx, d_tim_yy, d_tim_sx, d_tim_sy); }
static void drawmenu(void) { Item *item; int rw; /* use default colors */ fprintf(stderr, "\033[0m"); /* place cursor in first column, clear it */ fprintf(stderr, "\033[0G"); fprintf(stderr, "\033[K"); if (prompt) drawtext(prompt, promptw, C_Reverse); drawtext(text, (lines==0 && matches) ? inputw : mw-promptw, C_Normal); if (lines > 0) { if (barpos != 0) resetline(); for (rw = 0, item = curr; item != next; rw++, item = item->right) { fprintf(stderr, "\n"); drawtext(item->text, mw, (item == sel) ? C_Reverse : C_Normal); } for (; rw < lines; rw++) fprintf(stderr, "\n\033[K"); resetline(); } else if (matches) { rw = mw-(4+promptw+inputw); if (curr->left) drawtext("<", 5 /*textw("<")*/, C_Normal); for (item = curr; item != next; item = item->right) { drawtext(item->text, MIN(textw(item->text), rw), (item == sel) ? C_Reverse : C_Normal); if ((rw -= textw(item->text)) <= 0) break; } if (next) { fprintf(stderr, "\033[%iG", mw-5); drawtext(">", 5 /*textw(">")*/, C_Normal); } } fprintf(stderr, "\033[%iG", (int)(promptw+textwn(text, cursor)-1)); }
static void x_unhilight_line(int line) { drawtext(dzen.slave_win.tbuf[line + dzen.slave_win.first_line_vis], 0, line, dzen.slave_win.alignment); XCopyArea(dzen.dpy, dzen.slave_win.drawable[line], dzen.slave_win.line[line], dzen.rgc, 0, 0, dzen.slave_win.width, dzen.line_height, 0, 0); }
// Draw background rectangles for a dropdown void dropdown_drawactive(void) { DROPDOWN *b = active; if(!b) { return; } // load colors for this style uint32_t color_bg, color_border, color_aoptbg, color_aopttext, color_text; switch(b->style) { case AUXILIARY_STYLE: color_bg = COLOR_BACKGROUND_AUX; color_border = COLOR_AUX_EDGE_ACTIVE; color_aoptbg = COLOR_AUX_ACTIVEOPTION_BACKGROUND; color_aopttext = COLOR_AUX_ACTIVEOPTION_TEXT; color_text = COLOR_AUX_TEXT; break; default: color_bg = COLOR_BACKGROUND_MAIN; color_border = COLOR_EDGE_ACTIVE; color_aoptbg = COLOR_ACTIVEOPTION_BACKGROUND; color_aopttext = COLOR_ACTIVEOPTION_TEXT; color_text = COLOR_MAIN_TEXT; break; } int x = active_x, y = active_y, w = active_width, h = active_height; int i, sign = 1; // Increase width if needed, so that all menu items fit. for(i = 0; i != b->dropcount; i++) { STRING* e = b->ondisplay(i, b); int needed_w = textwidth(e->str, e->length) + 4 * SCALE; if(w < needed_w) { w = needed_w; } } if(y + h * b->dropcount > utox_window_height) { y -= h * (b->dropcount - 1); sign = -1; } draw_rect_fill (x, y, w, h * b->dropcount, color_bg); draw_rect_frame(x, y, w, h * b->dropcount, color_border); if(sign == -1) { y += h * (b->dropcount - 1); } for(i = 0; i != b->dropcount; i++) { int j = index(b, i); STRING* e = b->ondisplay(j, b); if(j == b->over) { draw_rect_fill(x + 1, y + 1, w - 2, h - 2, color_aoptbg); setcolor(color_aopttext); } else { setcolor(color_text); } setfont(FONT_TEXT); drawtext(x + 2 * SCALE, y + 2 * SCALE, e->str, e->length); y += sign * h; } }
void Audio::render(int screenWidth, int screenHeight) { if (_stream) { glLineWidth(2.0); glBegin(GL_LINES); glColor3f(1,1,1); int startX = 20.0; int currentX = startX; int topY = screenHeight - 40; int bottomY = screenHeight - 20; float frameWidth = 20.0; float halfY = topY + ((bottomY - topY) / 2.0); // draw the lines for the base of the ring buffer glVertex2f(currentX, topY); glVertex2f(currentX, bottomY); for (int i = 0; i < RING_BUFFER_LENGTH_FRAMES / 2; i++) { glVertex2f(currentX, halfY); glVertex2f(currentX + frameWidth, halfY); currentX += frameWidth; glVertex2f(currentX, topY); glVertex2f(currentX, bottomY); } glEnd(); // Show a bar with the amount of audio remaining in ring buffer beyond current playback float remainingBuffer = 0; timeval currentTime; gettimeofday(¤tTime, NULL); float timeLeftInCurrentBuffer = 0; if (_lastCallbackTime.tv_usec > 0) { timeLeftInCurrentBuffer = AUDIO_CALLBACK_MSECS - diffclock(&_lastCallbackTime, ¤tTime); } if (_ringBuffer.getEndOfLastWrite() != NULL) remainingBuffer = _ringBuffer.diffLastWriteNextOutput() / PACKET_LENGTH_SAMPLES * AUDIO_CALLBACK_MSECS; if (_wasStarved == 0) { glColor3f(0, 1, 0); } else { glColor3f(0.5 + (_wasStarved / 20.0f), 0, 0); _wasStarved--; } glBegin(GL_QUADS); glVertex2f(startX, topY + 2); glVertex2f(startX + (remainingBuffer + timeLeftInCurrentBuffer)/AUDIO_CALLBACK_MSECS*frameWidth, topY + 2); glVertex2f(startX + (remainingBuffer + timeLeftInCurrentBuffer)/AUDIO_CALLBACK_MSECS*frameWidth, bottomY - 2); glVertex2f(startX, bottomY - 2); glEnd(); if (_averagedLatency == 0.0) { _averagedLatency = remainingBuffer + timeLeftInCurrentBuffer; } else { _averagedLatency = 0.99f * _averagedLatency + 0.01f * (remainingBuffer + timeLeftInCurrentBuffer); } // Show a yellow bar with the averaged msecs latency you are hearing (from time of packet receipt) glColor3f(1,1,0); glBegin(GL_QUADS); glVertex2f(startX + _averagedLatency / AUDIO_CALLBACK_MSECS * frameWidth - 2, topY - 2); glVertex2f(startX + _averagedLatency / AUDIO_CALLBACK_MSECS * frameWidth + 2, topY - 2); glVertex2f(startX + _averagedLatency / AUDIO_CALLBACK_MSECS * frameWidth + 2, bottomY + 2); glVertex2f(startX + _averagedLatency / AUDIO_CALLBACK_MSECS * frameWidth - 2, bottomY + 2); glEnd(); char out[40]; sprintf(out, "%3.0f\n", _averagedLatency); drawtext(startX + _averagedLatency / AUDIO_CALLBACK_MSECS * frameWidth - 10, topY - 9, 0.10, 0, 1, 0, out, 1,1,0); // Show a red bar with the 'start' point of one frame plus the jitter buffer glColor3f(1, 0, 0); int jitterBufferPels = (1.f + (float)getJitterBufferSamples() / (float)PACKET_LENGTH_SAMPLES_PER_CHANNEL) * frameWidth; sprintf(out, "%.0f\n", getJitterBufferSamples() / SAMPLE_RATE * 1000.f); drawtext(startX + jitterBufferPels - 5, topY - 9, 0.10, 0, 1, 0, out, 1, 0, 0); sprintf(out, "j %.1f\n", _measuredJitter); if (Menu::getInstance()->getAudioJitterBufferSamples() == 0) { drawtext(startX + jitterBufferPels - 5, bottomY + 12, 0.10, 0, 1, 0, out, 1, 0, 0); } else { drawtext(startX, bottomY + 12, 0.10, 0, 1, 0, out, 1, 0, 0); } glBegin(GL_QUADS); glVertex2f(startX + jitterBufferPels - 2, topY - 2); glVertex2f(startX + jitterBufferPels + 2, topY - 2); glVertex2f(startX + jitterBufferPels + 2, bottomY + 2); glVertex2f(startX + jitterBufferPels - 2, bottomY + 2); glEnd(); } }
int usb_dnld_hook(){ /* These are global buffers to the packet data, its length, and the block address that it runs to. The stock firmware has a bug in that it assumes the packet size is always 2048 bytes. */ static char *packet=(char*) 0x200199f0;//2.032 static int *packetlen=(int*) 0x2001d20c;//2.032 static int *blockadr=(int*) 0x2001d208;//2.032 static char *dfu_state=(char*) 0x2001d405;//2.032 static char **dfu_target_adr=(char**) 0x2000112c; //2.032 //Don't know what these do. //char *thingy=(char*) 0x2001d276; char *thingy2=(char*) 0x2001d041; int state; /* DFU transfers begin at block 2, and special commands hook block 0. We'll use block 1, because it handily fits in the gap without breaking backward compatibility with the older code. */ if(*blockadr==1){ switch(packet[0]){ //Memory commands case TDFU_DMESG: //The DMESG buffer might move, so this command //sets the target address to the DMESG buffer. *dfu_target_adr=dmesg_start; break; //SPI-FLASH commands case TDFU_SPIFLASHGETID: //Re-uses the dmesg transmit buffer. *dfu_target_adr=dmesg_tx_buf; get_spi_flash_type((void *) dmesg_tx_buf); // 0x00aabbcc aa=MANUFACTURER ID, bb,cc Device Identification break; case TDFU_SPIFLASHREAD: //Re-uses the dmesg transmit buffer. *dfu_target_adr=dmesg_tx_buf; uint32_t adr= *((uint32_t*)(packet+1)); printf("Dumping %d bytes from 0x%08x in SPI Flash\n", DMESG_SIZE, adr); md380_spiflash_read(dmesg_tx_buf, adr, DMESG_SIZE); break; case TDFU_SPIFLASHWRITE: //Re-uses the dmesg transmit buffer. *dfu_target_adr=dmesg_tx_buf; adr = *((uint32_t*)(packet+1)); uint32_t size = *((uint32_t*)(packet+5)); memset(dmesg_tx_buf,0,DMESG_SIZE); if (check_spi_flash_type()) { printf ("TDFU_SPIFLASHWRITE %x %d %x\n", adr, size, packet+9); md380_spiflash_write(packet+9, adr, size); } break; case TDFU_SPIFLASHERASE64K: // experimental //Re-uses the dmesg transmit buffer. *dfu_target_adr=dmesg_tx_buf; adr= *((uint32_t*)(packet+1)); memset(dmesg_tx_buf,0,DMESG_SIZE); if (check_spi_flash_type()) { printf ("TDFU_SPIFLASHERASE64K %x \n", adr); // spiflash_wait(); // spiflash_block_erase64k(adr); md380_spiflash_enable(); md380_spi_sendrecv(0x6); md380_spiflash_disable(); md380_spiflash_enable(); md380_spi_sendrecv(0xd8); md380_spi_sendrecv((adr>> 16) & 0xff); md380_spi_sendrecv((adr>> 8) & 0xff); md380_spi_sendrecv(adr & 0xff); md380_spiflash_disable(); } // md380_spiflash_wait(); // this is the problem :( // must be polled via dfu commenad? break; case TDFU_SPIFLASHWRITE_NEW: // not working, this is not the problem //Re-uses the dmesg transmit buffer. *dfu_target_adr=dmesg_tx_buf; adr = *((uint32_t*)(packet+1)); size = *((uint32_t*)(packet+5)); memset(dmesg_tx_buf,0,DMESG_SIZE); if (check_spi_flash_type()) { printf ("DFU_SPIFLASHWRITE_new %x %d %x\n", adr, size, packet+9); // enable write for (int i=0;i<size;i=i+256) { int page_adr; page_adr=adr+i; printf("%d %x\n",i,page_adr); md380_spiflash_wait(); md380_spiflash_enable(); md380_spi_sendrecv(0x6); md380_spiflash_disable(); md380_spiflash_enable(); md380_spi_sendrecv(0x2); printf("%x ", ((page_adr>> 16) & 0xff)); md380_spi_sendrecv((page_adr>> 16) & 0xff); printf("%x ", ((page_adr>> 8) & 0xff)); md380_spi_sendrecv((page_adr>> 8) & 0xff); printf("%x ", (page_adr & 0xff)); md380_spi_sendrecv(page_adr & 0xff); for (int ii=0; ii < 256; ii++) { md380_spi_sendrecv(packet[9+ii+i]); } md380_spiflash_disable(); md380_spiflash_wait(); printf("\n"); } } break; case TDFU_SPIFLASHSECURITYREGREAD: //Re-uses the dmesg transmit buffer. *dfu_target_adr=dmesg_tx_buf; printf("Dumping %d bytes from adr 0 SPI Flash security_registers\n", DMESG_SIZE); md380_spiflash_security_registers_read(dmesg_tx_buf, 0, 3*256); break; //Radio Commands case TDFU_C5000_READREG: //Re-uses the dmesg transmit buffer. *dfu_target_adr=dmesg_tx_buf; memset(dmesg_tx_buf,0,DMESG_SIZE); state=OS_ENTER_CRITICAL(); c5000_spi0_readreg(packet[1],dmesg_tx_buf); OS_EXIT_CRITICAL(state); break; case TDFU_C5000_WRITEREG: //Re-uses the dmesg transmit buffer. *dfu_target_adr=dmesg_tx_buf; memset(dmesg_tx_buf,0,DMESG_SIZE); state=OS_ENTER_CRITICAL(); c5000_spi0_writereg(packet[1],packet[2]); OS_EXIT_CRITICAL(state); break; //Graphics commands. case TDFU_PRINT: // 0x80, u8 x, u8 y, u8 str[]. drawtext((wchar_t *) (packet+3), packet[1],packet[2]); break; case TDFU_BOX: default: printf("Unhandled DFU packet type 0x%02x.\n",packet[0]); } thingy2[0]=0; thingy2[1]=0; thingy2[2]=0; thingy2[3]=3; *dfu_state=3; *blockadr=0; *packetlen=0; return 0; }else{ /* For all other blocks, we default to the internal handler. */ return usb_dnld_handle();
void endingmenu(void) { int count; resetmenuitems(); while (!menuitem[0].active && !windowinfo.shutdown) { glClearColor(0.0f,0.0f,0.0f,0.0f); glClear(GL_COLOR_BUFFER_BIT); numofmenuitems=0; createmenuitem("Next",(640|TEXT_END),0,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_ESC); checksystemmessages(); checkkeyboard(); checkmouse(); checkjoystick(); checkmenuitems(); setuptextdisplay(); glColor4f(1.0f,1.0f,1.0f,1.0f); displaybackground(580); count=192; if (game.exit==GAMEEXIT_WON) { drawbackground(520,(320|TEXT_CENTER),48,256,128,640,480); drawtext(TXT_ENDING_LINE1,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_LINE2,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_LINE3,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_LINE4,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_LINE5,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_LINE6,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; count+=14; drawtext(TXT_ENDING_LINE7,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_LINE8,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_LINE9,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_LINE10,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_LINE11,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_LINE12,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; } if (game.exit==GAMEXIT_WARPZONE) { drawbackground(519,(320|TEXT_CENTER),48,256,128,640,480); drawtext(TXT_ENDING_BAD_LINE1,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_BAD_LINE2,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_BAD_LINE3,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_BAD_LINE4,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_BAD_LINE5,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_BAD_LINE6,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_BAD_LINE7,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; count+=14; drawtext(TXT_ENDING_BAD_LINE8,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_BAD_LINE9,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_BAD_LINE10,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_BAD_LINE11,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_BAD_LINE12,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_BAD_LINE13,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; } drawtext(TXT_TOTAL_POINTS":/i",64,400,16,1.0f,1.0f,1.0f,1.0f,game.totalscore); if (player[playernum].difficulty==1 || player[playernum].difficulty==2) drawtext(TXT_NEW_VS_MODE,64,416,16,1.0f,1.0f,1.0f,1.0f); if (player[playernum].difficulty==2) drawtext(TXT_NEW_VS_LEVEL,64,432,16,1.0f,1.0f,1.0f,1.0f); if (player[playernum].difficulty==3) drawtext(TXT_MINI_GISH_MODE,64,432,16,1.0f,1.0f,1.0f,1.0f); drawmenuitems(); drawmousecursor(768+font.cursornum,mouse.x,mouse.y,16,1.0f,1.0f,1.0f,1.0f); SDL_GL_SwapBuffers(); } resetmenuitems(); while (!menuitem[0].active && !windowinfo.shutdown) { glClearColor(0.0f,0.0f,0.0f,0.0f); glClear(GL_COLOR_BUFFER_BIT); numofmenuitems=0; createmenuitem(TXT_BACK,0,0,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_ESC); checksystemmessages(); checkkeyboard(); checkmouse(); checkjoystick(); checkmenuitems(); setuptextdisplay(); glColor4f(1.0f,1.0f,1.0f,1.0f); displaybackground(560); if (game.exit==GAMEXIT_WARPZONE) drawbackground(256+68,288,320,96,96,640,480); drawmenuitems(); drawmousecursor(768+font.cursornum,mouse.x,mouse.y,16,1.0f,1.0f,1.0f,1.0f); SDL_GL_SwapBuffers(); } resetmenuitems(); }
int main(int argc, char *argv[]){ getinfo(&screen); clear(0); Triangle tri[] = { {-1,0,1, -1,1,1, -2,0,1, 0xFFFF},{-2,1,1, -1,1,1, -2,0,1, 0xFFFF}, {-1,0,0, -1,1,0, -2,0,0, 0xFFFF},{-2,1,0, -1,1,0, -2,0,0, 0xFFFF}, {-1,0,0, -1,0,1, -2,0,0, 0xFFFF},{-2,0,0, -1,0,1, -2,0,1, 0xFFFF}, {-1,1,0, -1,1,1, -2,1,0, 0xFFFF},{-2,1,0, -1,1,1, -2,1,1, 0xFFFF}, {-1,0,0, -1,1,1, -1,0,1, 0xFFFF},{-1,0,0, -1,1,1, -1,1,0, 0xFFFF}, {-2,0,0, -2,1,1, -2,0,1, 0xFFFF},{-2,0,0, -2,1,1, -2,1,0, 0xFFFF} }; Line complex[] = { {2,2,2, 3,2,2, 0xFFFFFF}, {2,2,2, 2,2,3, 0xFFFFFF}, {3,2,2, 3,2,3, 0xFFFFFF}, {2,2,3, 3,2,3, 0xFFFFFF}, {2,2,2, 2.5,1,2.5, 0xFFFFFF}, {2,2,3, 2.5,1,2.5, 0xFFFFFF}, {3,2,2, 2.5,1,2.5, 0xFFFFFF}, {3,2,3, 2.5,1,2.5, 0xFFFFFF} }; Camera defaultcam = {0, 0, -2, 0, 0, 0, 0, 0, 1}; Player p = {defaultcam, {100,2,0.5,0.25, //size defaultcam.cx,defaultcam.cy,defaultcam.cz, //position 0,0,0, //velocity 0,0,0, //force defaultcam.ox,defaultcam.oy,defaultcam.oz, //orientation 0,0,0, //angular speed 0,0,0 //torque }}; int i; Cube c[] = {newCube(0.25, 0, 0, 0, 0xFF), newCube(0.5, 1, 1, 1, 0xFF00), newCube(1, -2, 2, 2, 0xFF0000)}; char update = 1; while(!checkkey(KEYQ)){ if(checkkey(KEYW)) movePlayer(&p, 0, 0, 0.2); if(checkkey(KEYA)) movePlayer(&p, 0.2, 0, 0); if(checkkey(KEYS)) movePlayer(&p, 0, 0, -0.2); if(checkkey(KEYD)) movePlayer(&p, -0.2, 0, 0); if(checkkey(KEYSPACE) & p.o.y==0){ p.o.vy = 0.2; } //if(checkkey(KEYLEFTCONTROL)) movePlayer(&p, 0, -0.2, 0); if(checkkey(KEYK)>0 & p.o.ox < M_PI/2) p.o.ox += 0.05; if(checkkey(KEYI)>0 & p.o.ox > -M_PI/2) p.o.ox -= 0.05; if(checkkey(KEYL)) p.o.oy += 0.05; if(checkkey(KEYJ)) p.o.oy -= 0.05; if(checkkey(KEYE)==1) wireframe = !wireframe; if(checkkey(KEYX)) resetPlayer(&p, defaultcam); updatePlayer(&p); clear(0); drawTriangles3D(tri, sizeof(tri)/sizeof(Triangle), p.c); drawSphere(1,1,-1,0.2,0xFF00FF,p.c); for(i = 0; i < sizeof(c)/sizeof(Cube); i++) drawCube(c[i], p.c); drawLines3D(complex, sizeof(complex)/sizeof(Line), p.c); drawtext(0,0,"Wireframe test. Press q to exit.",0xFFFFFF); drawline(screen.x/2-8,screen.y/2,screen.x/2+8,screen.y/2,0xFFFFFF); drawline(screen.x/2,screen.y/2-8,screen.x/2,screen.y/2+8,0xFFFFFF); for(i = 0; i < 7; i++) hlt(); } reset(); return 0; }
void pregamemenu(void) { int count,count2; int simtimer; int simcount; int startdelay; game.exit=GAMEEXIT_NONE; startdelay=0; simtimer=SDL_GetTicks(); resetmenuitems(); joymenunum=1; while (!menuitem[0].active && !windowinfo.shutdown) { glClearColor(0.0f,0.0f,0.0f,0.0f); glClear(GL_COLOR_BUFFER_BIT); numofmenuitems=0; createmenuitem(TXT_BACK,0,0,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_ESC); createmenuitem(TXT_START,(320|TEXT_CENTER),320,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_S); checksystemmessages(); checkkeyboard(); checkmouse(); checkjoystick(); checkmenuitems(); setuptextdisplay(); glColor4f(1.0f,1.0f,1.0f,1.0f); displaybackground(540); if (game.levelnum<35) { count=(game.levelnum-1)/7+1; count2=(game.levelnum-1)%7+1; if (count==1) drawbackground(521,(320|TEXT_CENTER),48,192,192,640,480); if (count==2) drawbackground(522,(320|TEXT_CENTER),48,192,192,640,480); if (count==3) drawbackground(523,(320|TEXT_CENTER),48,192,192,640,480); if (count==4) drawbackground(524,(320|TEXT_CENTER),48,192,192,640,480); if (count==5) drawbackground(525,(320|TEXT_CENTER),48,192,192,640,480); drawtext("/i-/i",(320|TEXT_CENTER),256,16,1.0f,1.0f,1.0f,1.0f,count,count2); drawtext(TXT_LIVES" /i",(320|TEXT_CENTER),272,16,1.0f,1.0f,1.0f,1.0f,game.numoflives); drawtext(TXT_POINTS" /i",(320|TEXT_CENTER),288,16,1.0f,1.0f,1.0f,1.0f,game.totalscore); } if (game.levelnum==64) { drawbackground(526,(320|TEXT_CENTER),48,192,192,640,480); drawtext(" -1",(320|TEXT_CENTER),256,16,1.0f,1.0f,1.0f,1.0f); } if (game.levelnum==65) { drawbackground(526,(320|TEXT_CENTER),48,192,192,640,480); drawtext(" -2",(320|TEXT_CENTER),256,16,1.0f,1.0f,1.0f,1.0f); } if (game.levelnum==66) { drawbackground(526,(320|TEXT_CENTER),48,192,192,640,480); drawtext(" -3",(320|TEXT_CENTER),256,16,1.0f,1.0f,1.0f,1.0f); } if (game.levelnum==67) { drawbackground(526,(320|TEXT_CENTER),48,192,192,640,480); drawtext(TXT_ISLE_OF_THE,(320|TEXT_CENTER),256,16,1.0f,1.0f,1.0f,1.0f); drawtext(TXT_DEAD,(320|TEXT_CENTER),272,16,1.0f,1.0f,1.0f,1.0f); } if (game.levelnum==68) { drawbackground(526,(320|TEXT_CENTER),48,192,192,640,480); drawtext(TXT_SATANS_LAIR,(320|TEXT_CENTER),256,16,1.0f,1.0f,1.0f,1.0f); } drawmenuitems(); drawmousecursor(768+font.cursornum,mouse.x,mouse.y,16,1.0f,1.0f,1.0f,1.0f); SDL_GL_SwapBuffers(); if (menuitem[1].active)// || startdelay>=150) { loadstorylevel(game.levelnum); gameloop(); if (game.exit==GAMEEXIT_EXITGAME || game.exit==GAMEEXIT_DIED) if (game.levelnum<64) { if (game.numoflives<99) game.numoflives--; if (game.numoflives<0) { if (player[playernum].highscore<game.totalscore) player[playernum].highscore=game.totalscore; game.totalscore=0; game.numoflives=5; if (game.difficulty==1) { count2=(game.levelnum-1)%7+1; if (count2!=7) { count=(game.levelnum-1)/7; game.levelnum=count*7+1; } } if (game.difficulty>=2) game.levelnum=0; gameovermenu(); goto changelevelbypass; } } if (game.levelnum==34) if (game.exit==GAMEEXIT_WON || game.exit==GAMEXIT_WARPZONE) { game.score[0]=10000; if (game.levelnum==34 && game.exit==GAMEEXIT_WON) game.score[0]+=1; game.score[0]+=(object[0].hitpoints/50)*10; postgamemenu(); game.totalscore+=game.score[0]; endingmenu(); menuitem[0].active=1; game.levelnum=35; goto changelevelbypass; } if (game.exit==GAMEEXIT_WON) { //if (!game.bosslevel) if (game.levelnum!=68 || game.dialog==0) { if (game.levelnum==6) game.score[0]=1000; if (game.levelnum==13) game.score[0]=2000; if (game.levelnum==20) game.score[0]=3000; if (game.levelnum==27) game.score[0]=4000; if (game.levelnum==33) game.score[0]=5000; if (game.levelnum==34) game.score[0]=10000; if (game.levelnum==68) game.score[0]=20000; //if (game.levelnum==34 && game.exit==won) // game.score[0]+=10; game.oldschool=0; game.score[0]+=(object[0].hitpoints/50)*10; postgamemenu(); game.totalscore+=game.score[0]; if (game.exit==GAMEEXIT_EXITGAME) { game.exit=GAMEEXIT_WON; menuitem[0].active=1; } } if (game.levelnum<35) game.levelnum++; } if (game.levelnum==64) { game.levelnum=4; if (game.over==3) game.levelnum=22; if (game.over==4) game.levelnum=15; if (game.over==5) game.levelnum=8; goto changelevelbypass; } if (game.levelnum==65) { game.levelnum=9; goto changelevelbypass; } if (game.levelnum==66) { game.levelnum=26; goto changelevelbypass; } if (game.levelnum==67) { if (game.exit==GAMEEXIT_EXITGAME || game.exit==GAMEEXIT_DIED) game.levelnum=19; else game.levelnum=68; goto changelevelbypass; } if (game.levelnum==68) { game.levelnum=19; goto changelevelbypass; } if (game.exit==GAMEXIT_WARPZONE) { game.totalscore+=game.score[0]; if (game.levelnum==3) game.levelnum=64; if (game.levelnum==4) game.levelnum=24; if (game.levelnum==8) game.levelnum=65; if (game.levelnum==18) game.levelnum=67; if (game.levelnum==25) game.levelnum=66; goto changelevelbypass; } changelevelbypass:; simtimer=SDL_GetTicks(); startdelay=0; joymenunum=1; } simcount=0; while (SDL_GetTicks()-simtimer>20 && simcount<5) { simcount++; count=SDL_GetTicks()-simtimer-20; simtimer=SDL_GetTicks()-count; //startdelay++; } if (game.exit==GAMEEXIT_EXITGAME) menuitem[0].active=1; } resetmenuitems(); }
static int filter_frame(AVFilterLink *inlink, AVFrame *insamples) { AVFilterContext *ctx = inlink->dst; AVFilterLink *outlink = ctx->outputs[0]; ShowVolumeContext *s = ctx->priv; int c, i, j, k; double values[VAR_VARS_NB]; if (!s->out || s->out->width != outlink->w || s->out->height != outlink->h) { av_frame_free(&s->out); s->out = ff_get_video_buffer(outlink, outlink->w, outlink->h); if (!s->out) { av_frame_free(&insamples); return AVERROR(ENOMEM); } for (i = 0; i < outlink->h; i++) memset(s->out->data[0] + i * s->out->linesize[0], 0, outlink->w * 4); } s->out->pts = insamples->pts; for (j = 0; j < outlink->h; j++) { uint8_t *dst = s->out->data[0] + j * s->out->linesize[0]; for (k = 0; k < s->w; k++) { dst[k * 4 + 0] = FFMAX(dst[k * 4 + 0] - s->f, 0); dst[k * 4 + 1] = FFMAX(dst[k * 4 + 1] - s->f, 0); dst[k * 4 + 2] = FFMAX(dst[k * 4 + 2] - s->f, 0); dst[k * 4 + 3] = FFMAX(dst[k * 4 + 3] - s->f, 0); } } for (c = 0; c < inlink->channels; c++) { float *src = (float *)insamples->extended_data[c]; float max = 0; uint32_t color; for (i = 0; i < insamples->nb_samples; i++) max = FFMAX(max, src[i]); max = av_clipf(max, 0, 1); values[VAR_VOLUME] = 20.0 * log10(max); values[VAR_CHANNEL] = c; color = av_expr_eval(s->c_expr, values, NULL); for (j = 0; j < s->h; j++) { uint8_t *dst = s->out->data[0] + (c * s->h + c * s->b + j) * s->out->linesize[0]; for (k = 0; k < s->w * max; k++) AV_WN32A(dst + k * 4, color); } if (s->h >= 8 && s->draw_text) drawtext(s->out, 2, c * (s->h + s->b) + (s->h - 8) / 2, av_get_channel_name(av_channel_layout_extract_channel(insamples->channel_layout, c))); } av_frame_free(&insamples); return ff_filter_frame(outlink, av_frame_clone(s->out)); }
void drawlabel(void *wgt) { widget *control = (widget *)wgt; label *data = (label *)control->control; drawtext(data->string, (widget *)control->parent); }
void campaignmenu(void) { int count; loadplayermappack(); resetmenuitems(); joymenunum=1; while (!menuitem[0].active && !windowinfo.shutdown) { glClearColor(0.0f,0.0f,0.0f,0.0f); glClear(GL_COLOR_BUFFER_BIT); numofmenuitems=0; createmenuitem(TXT_BACK,0,0,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_ESC); count=352; if (playermappack[playernum].levelnum>0) { createmenuitem(TXT_CONTINUE,48,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_C); count+=16; } else createmenuitemempty(); createmenuitem(TXT_NEW_GAME,48,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_N); count+=16; checksystemmessages(); checkkeyboard(); checkmouse(); checkjoystick(); checkmenuitems(); setuptextdisplay(); glColor4f(1.0f,1.0f,1.0f,1.0f); displaybackground(620); drawtext(mappack.name,(320|TEXT_CENTER),304,16,1.0f,1.0f,1.0f,1.0f); if (player[playernum].levelnum>0) drawtext(TXT_PLAYER_INFO_MAPPACK,(320|TEXT_CENTER),320,12,1.0f,1.0f,1.0f,1.0f,mappack.levelname[playermappack[playernum].levelnum-1],playermappack[playernum].numoflives,playermappack[playernum].totalscore,playermappack[playernum].highscore); drawmenuitems(); drawmousecursor(768+font.cursornum,mouse.x,mouse.y,16,1.0f,1.0f,1.0f,1.0f); SDL_GL_SwapBuffers(); if (menuitem[1].active || menuitem[2].active) { if (menuitem[2].active) { playerdifficultymenu(); if (game.difficulty==-1) { game.difficulty=0; goto newgamebypass; } playermappack[playernum].difficulty=game.difficulty; playermappack[playernum].levelnum=1; playermappack[playernum].totalscore=0; playermappack[playernum].numoflives=5; if (playermappack[playernum].difficulty==3) playermappack[playernum].numoflives=0; } mappackpregamemenu(); newgamebypass:; } } resetmenuitems(); saveplayermappack(); }
void editlevelobjects(void) { int count,count2; int x,y; int simtimer; int simcount; float vec[3],vec2[3]; simtimer=SDL_GetTicks(); resetmenuitems(); while (!menuitem[0].active && !windowinfo.shutdown) { glClearColor(0.0f,0.0f,0.0f,0.0f); glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE); glStencilMask(~0); glClearStencil(0); glClear(GL_COLOR_BUFFER_BIT|GL_STENCIL_BUFFER_BIT); glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_FALSE); glStencilMask(0); setuptextdisplay(); glColor3fv(level.ambient[3]); if (level.background[0]!=0) displaybackground(660); numofmenuitems=0; createmenuitem("",0,0,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_ESC); if (editor.objectnum!=-1) { createmenuitem("Mass ",(640|TEXT_END),0,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_FLOATINPUT,&level.object[editor.objectnum].mass); setmenuitem(MO_HOTKEY,SCAN_M); createmenuitem("Friction",(640|TEXT_END),32,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_FLOATINPUT,&level.object[editor.objectnum].friction); setmenuitem(MO_HOTKEY,SCAN_F); createmenuitem("LType",(640|TEXT_END),64,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_INTINPUT,&level.object[editor.objectnum].lighttype); createmenuitem("Red ",(640|TEXT_END),96,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_FLOATINPUT,&level.object[editor.objectnum].lightcolor[0]); createmenuitem("Green",(640|TEXT_END),128,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_FLOATINPUT,&level.object[editor.objectnum].lightcolor[1]); createmenuitem("Blue ",(640|TEXT_END),160,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_FLOATINPUT,&level.object[editor.objectnum].lightcolor[2]); createmenuitem("Inten",(640|TEXT_END),192,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_FLOATINPUT,&level.object[editor.objectnum].lightintensity); } checksystemmessages(); checkkeyboard(); checkmouse(); checkmenuitems(); view.zoom=10.0f; if (keyboard[SCAN_EQUALS]) view.zoom=20.0f; if (keyboard[SCAN_MINUS]) view.zoom=5.0f; view.zoomx=view.zoom+0.5f; view.zoomy=view.zoom*0.75f+0.5f; setuporthoviewport(0,0,640,480,view.zoom,view.zoom*0.75f,20.0f); setupviewpoint(view.position,view.orientation); setupframelighting(); rendershadows(); renderlevelback(); renderlevel(); //renderlevelfore(); renderlevelfore(); renderlevelobjects(); if (keyboard[SCAN_L]) renderlevellines(); setuptextdisplay(); drawtext(TXT_OBJECTSET":/i",0,352,16,1.0f,1.0f,1.0f,1.0f,editor.objecttype); drawtext(TXT_OBJECTNUM":/i",0,368,16,1.0f,1.0f,1.0f,1.0f,editor.objectnum); if (editor.objectnum!=-1) drawtext(TXT_OBJECTYPE":/i",0,384,16,1.0f,1.0f,1.0f,1.0f,level.object[editor.objectnum].type); drawtext(TXT_OBJECTS":/i",0,400,16,1.0f,1.0f,1.0f,1.0f,level.numofobjects); drawtext(TXT_ROPES":/i",0,416,16,1.0f,1.0f,1.0f,1.0f,level.numofropes); if (editor.objectnum!=-1) { drawtext(TXT_LINK":/i",0,432,16,1.0f,1.0f,1.0f,1.0f,level.object[editor.objectnum].link); } drawmenuitems(); drawmousecursor(768+font.cursornum,mouse.x,mouse.y,16,1.0f,1.0f,1.0f,1.0f); SDL_GL_SwapBuffers(); if (mouse.x<512 || mouse.y>224) { x=view.position[0]+(float)(mouse.x-320)/32.0f; y=view.position[1]+(float)(240-mouse.y)/32.0f; if (!keyboard[SCAN_K]) { if (mouse.lmb && !prevmouse.lmb) { if (!keyboard[SCAN_H]) { vec[0]=(float)x+0.5f; vec[1]=(float)y+0.5f; vec[2]=0.0f; } else { vec[0]=(float)x; vec[1]=(float)y; vec[2]=0.0f; } memset(&level.object[level.numofobjects],0,sizeof(level.object[level.numofobjects])); level.object[level.numofobjects].type=editor.objecttype; level.object[level.numofobjects].link=-1; copyvector(level.object[level.numofobjects].position,vec); if (editor.objectnum==-1 || level.object[level.numofobjects].type!=level.object[editor.objectnum].type) { level.object[level.numofobjects].texturenum=0; level.object[level.numofobjects].size[0]=1.0f; level.object[level.numofobjects].size[1]=1.0f; level.object[level.numofobjects].mass=1.0f; level.object[level.numofobjects].friction=0.8f; level.object[level.numofobjects].lightcolor[0]=1.0f; level.object[level.numofobjects].lightcolor[1]=1.0f; level.object[level.numofobjects].lightcolor[2]=1.0f; level.object[level.numofobjects].lightintensity=16.0f; } else { level.object[level.numofobjects].texturenum=level.object[editor.objectnum].texturenum; level.object[level.numofobjects].size[0]=level.object[editor.objectnum].size[0]; level.object[level.numofobjects].size[1]=level.object[editor.objectnum].size[1]; level.object[level.numofobjects].mass=level.object[editor.objectnum].mass; level.object[level.numofobjects].friction=level.object[editor.objectnum].friction; level.object[level.numofobjects].lighttype=level.object[editor.objectnum].lighttype; level.object[level.numofobjects].lightcolor[0]=level.object[editor.objectnum].lightcolor[0]; level.object[level.numofobjects].lightcolor[1]=level.object[editor.objectnum].lightcolor[1]; level.object[level.numofobjects].lightcolor[2]=level.object[editor.objectnum].lightcolor[2]; level.object[level.numofobjects].lightintensity=level.object[editor.objectnum].lightintensity; } editor.objectnum=level.numofobjects; level.numofobjects++; } } if (keyboard[SCAN_K]) { vec[0]=view.position[0]+(float)(mouse.x-320)/32.0f; vec[1]=view.position[1]+(float)(240-mouse.y)/32.0f; vec[2]=0.0f; if (mouse.lmb && !prevmouse.lmb) { if (editor.objectnum!=-1) for (count=0;count<level.numofobjects;count++) { subtractvectors(vec2,vec,level.object[count].position); if (vectorlength(vec2)<0.5f) level.object[editor.objectnum].link=count; } } if (mouse.rmb && !prevmouse.rmb) level.object[editor.objectnum].link=-1; } if (mouse.rmb && !prevmouse.rmb) { vec[0]=view.position[0]+(float)(mouse.x-320)/32.0f; vec[1]=view.position[1]+(float)(240-mouse.y)/32.0f; vec[2]=0.0f; editor.objectnum=-1; for (count=0;count<level.numofobjects;count++) { subtractvectors(vec2,vec,level.object[count].position); if (vectorlength(vec2)<0.5f) editor.objectnum=count; } } } if (!menuinputkeyboard) { if (editor.objectnum!=-1) { vec[0]=1.0f; if (level.object[editor.objectnum].type==6 || level.object[editor.objectnum].type==7 || level.object[editor.objectnum].type==17) vec[0]=0.2f; if (keyboard[SCAN_HOME] && !prevkeyboard[SCAN_HOME]) if (level.numofobjects>1) { count2=0; if (keyboard[SCAN_SHIFT]) count2=2; memcpy(&level.object[255],&level.object[count2],sizeof(level.object[0])); memcpy(&level.object[count2],&level.object[editor.objectnum],sizeof(level.object[0])); memcpy(&level.object[editor.objectnum],&level.object[255],sizeof(level.object[0])); for (count=0;count<level.numofobjects;count++) { if (level.object[count].link==count2) level.object[count].link=editor.objectnum; else if (level.object[count].link==editor.objectnum) level.object[count].link=count2; } for (count=0;count<level.numofropes;count++) { if (level.rope[count].obj1==count2) level.rope[count].obj1=editor.objectnum; else if (level.rope[count].obj1==editor.objectnum) level.rope[count].obj1=count2; if (level.rope[count].obj2==count2) level.rope[count].obj2=editor.objectnum; else if (level.rope[count].obj2==editor.objectnum) level.rope[count].obj2=count2; } editor.objectnum=count2; } if (keyboard[SCAN_END] && !prevkeyboard[SCAN_END]) if (level.numofobjects>2) { count2=1; if (keyboard[SCAN_SHIFT]) count2=3; memcpy(&level.object[255],&level.object[count2],sizeof(level.object[0])); memcpy(&level.object[count2],&level.object[editor.objectnum],sizeof(level.object[0])); memcpy(&level.object[editor.objectnum],&level.object[255],sizeof(level.object[0])); for (count=0;count<level.numofobjects;count++) { if (level.object[count].link==count2) level.object[count].link=editor.objectnum; else if (level.object[count].link==editor.objectnum) level.object[count].link=count2; } for (count=0;count<level.numofropes;count++) { if (level.rope[count].obj1==count2) level.rope[count].obj1=editor.objectnum; else if (level.rope[count].obj1==editor.objectnum) level.rope[count].obj1=count2; if (level.rope[count].obj2==count2) level.rope[count].obj2=editor.objectnum; else if (level.rope[count].obj2==editor.objectnum) level.rope[count].obj2=count2; } editor.objectnum=count2; } if (keyboard[SCAN_LEFT] && !prevkeyboard[SCAN_LEFT]) if (level.object[editor.objectnum].size[0]>vec[0]) level.object[editor.objectnum].size[0]-=vec[0]; if (keyboard[SCAN_RIGHT] && !prevkeyboard[SCAN_RIGHT]) if (level.object[editor.objectnum].size[0]<16.0f) level.object[editor.objectnum].size[0]+=vec[0]; if (keyboard[SCAN_DOWN] && !prevkeyboard[SCAN_DOWN]) if (level.object[editor.objectnum].size[1]>vec[0]) level.object[editor.objectnum].size[1]-=vec[0]; if (keyboard[SCAN_UP] && !prevkeyboard[SCAN_UP]) if (level.object[editor.objectnum].size[1]<16.0f) level.object[editor.objectnum].size[1]+=vec[0]; if (keyboard[SCAN_LFT_BRACKET] && !prevkeyboard[SCAN_LFT_BRACKET]) { if (!keyboard[SCAN_SHIFT]) level.object[editor.objectnum].texturenum--; else level.object[editor.objectnum].texturenum-=10; if (level.object[editor.objectnum].texturenum<0) level.object[editor.objectnum].texturenum=0; } if (keyboard[SCAN_RGT_BRACKET] && !prevkeyboard[SCAN_RGT_BRACKET]) { if (!keyboard[SCAN_SHIFT]) level.object[editor.objectnum].texturenum++; else level.object[editor.objectnum].texturenum+=10; if (level.object[editor.objectnum].texturenum>255) level.object[editor.objectnum].texturenum=255; } } if (keyboard[SCAN_Q] && !prevkeyboard[SCAN_Q]) { if (!keyboard[SCAN_SHIFT]) editor.objecttype++; else editor.objecttype+=10; if (editor.objecttype>255) editor.objecttype=255; } if (keyboard[SCAN_Z] && !prevkeyboard[SCAN_Z]) { if (!keyboard[SCAN_SHIFT]) editor.objecttype--; else editor.objecttype-=10; if (editor.objecttype<0) editor.objecttype=0; } if (keyboard[SCAN_DELETE] && !prevkeyboard[SCAN_DELETE]) deletelevelobject(editor.objectnum); if (keyboard[SCAN_F5] && !prevkeyboard[SCAN_F5]) { setuplevel(); setupgame(); } } simcount=0; while (SDL_GetTicks()-simtimer>20 && simcount<5) { simcount++; count=SDL_GetTicks()-simtimer-20; simtimer=SDL_GetTicks()-count; if (!menuinputkeyboard) { if (keyboard[SCAN_W]) view.position[1]+=0.2f; if (keyboard[SCAN_S]) view.position[1]-=0.2f; if (keyboard[SCAN_A]) view.position[0]-=0.2f; if (keyboard[SCAN_D]) view.position[0]+=0.2f; } } } resetmenuitems(); }
void Audio::render(int screenWidth, int screenHeight) { if (initialized) { glBegin(GL_LINES); glColor3f(1,1,1); int startX = 50.0; int currentX = startX; int topY = screenHeight - 90; int bottomY = screenHeight - 50; float frameWidth = 50.0; float halfY = topY + ((bottomY - topY) / 2.0); // draw the lines for the base of the ring buffer glVertex2f(currentX, topY); glVertex2f(currentX, bottomY); for (int i = 0; i < RING_BUFFER_FRAMES; i++) { glVertex2f(currentX, halfY); glVertex2f(currentX + frameWidth, halfY); currentX += frameWidth; glVertex2f(currentX, topY); glVertex2f(currentX, bottomY); } glEnd(); // Show a bar with the amount of audio remaining in ring buffer beyond current playback float remainingBuffer = 0; timeval currentTime; gettimeofday(¤tTime, NULL); float timeLeftInCurrentBuffer = 0; if (audioData->lastCallback.tv_usec > 0) { timeLeftInCurrentBuffer = AUDIO_CALLBACK_MSECS - diffclock(&audioData->lastCallback, ¤tTime); } // /(1000.0*(float)BUFFER_LENGTH_SAMPLES/(float)SAMPLE_RATE) * frameWidth if (audioData->ringBuffer->getEndOfLastWrite() != NULL) remainingBuffer = audioData->ringBuffer->diffLastWriteNextOutput() / PACKET_LENGTH_SAMPLES * AUDIO_CALLBACK_MSECS; if (audioData->wasStarved == 0) glColor3f(0, 1, 0); else { glColor3f(0.5 + (float)audioData->wasStarved/20.0, 0, 0); audioData->wasStarved--; } glBegin(GL_QUADS); glVertex2f(startX, topY + 5); glVertex2f(startX + (remainingBuffer + timeLeftInCurrentBuffer)/AUDIO_CALLBACK_MSECS*frameWidth, topY + 5); glVertex2f(startX + (remainingBuffer + timeLeftInCurrentBuffer)/AUDIO_CALLBACK_MSECS*frameWidth, bottomY - 5); glVertex2f(startX, bottomY - 5); glEnd(); if (audioData->averagedLatency == 0.0) audioData->averagedLatency = remainingBuffer + timeLeftInCurrentBuffer; else audioData->averagedLatency = 0.99*audioData->averagedLatency + 0.01*((float)remainingBuffer + (float)timeLeftInCurrentBuffer); // Show a yellow bar with the averaged msecs latency you are hearing (from time of packet receipt) glColor3f(1,1,0); glBegin(GL_QUADS); glVertex2f(startX + audioData->averagedLatency/AUDIO_CALLBACK_MSECS*frameWidth - 2, topY - 2); glVertex2f(startX + audioData->averagedLatency/AUDIO_CALLBACK_MSECS*frameWidth + 2, topY - 2); glVertex2f(startX + audioData->averagedLatency/AUDIO_CALLBACK_MSECS*frameWidth + 2, bottomY + 2); glVertex2f(startX + audioData->averagedLatency/AUDIO_CALLBACK_MSECS*frameWidth - 2, bottomY + 2); glEnd(); char out[40]; sprintf(out, "%3.0f\n", audioData->averagedLatency); drawtext(startX + audioData->averagedLatency/AUDIO_CALLBACK_MSECS*frameWidth - 10, topY-10, 0.08, 0, 1, 0, out, 1,1,0); //drawtext(startX + 0, topY-10, 0.08, 0, 1, 0, out, 1,1,0); // Show a Cyan bar with the most recently measured jitter stdev int jitterPels = (float) audioData->measuredJitter/ ((1000.0*(float)PACKET_LENGTH_SAMPLES/(float)SAMPLE_RATE)) * (float)frameWidth; glColor3f(0,1,1); glBegin(GL_QUADS); glVertex2f(startX + jitterPels - 2, topY - 2); glVertex2f(startX + jitterPels + 2, topY - 2); glVertex2f(startX + jitterPels + 2, bottomY + 2); glVertex2f(startX + jitterPels - 2, bottomY + 2); glEnd(); sprintf(out,"%3.1f\n", audioData->measuredJitter); drawtext(startX + jitterPels - 5, topY-10, 0.08, 0, 1, 0, out, 0,1,1); sprintf(out, "%3.1fms\n", JITTER_BUFFER_LENGTH_MSECS); drawtext(startX - 10, bottomY + 20, 0.1, 0, 1, 0, out, 1, 0, 0); sprintf(out, "%hd samples\n", JITTER_BUFFER_SAMPLES); drawtext(startX - 10, bottomY + 35, 0.1, 0, 1, 0, out, 1, 0, 0); } }
void postgamemenu(void) { int count; int scoretemp; int scorecountdelay; int simtimer; int simcount; savereplay(game.levelnum+100); scoretemp=game.totalscore; scorecountdelay=0; simtimer=SDL_GetTicks(); resetmenuitems(); joymenunum=1; while (!menuitem[0].active && !menuitem[1].active && !windowinfo.shutdown) { glClearColor(0.0f,0.0f,0.0f,0.0f); glClear(GL_COLOR_BUFFER_BIT); numofmenuitems=0; createmenuitem(TXT_BACK,0,0,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_ESC); if (game.levelnum!=34) { createmenuitem(TXT_NEXTLEVEL,(640|TEXT_END),0,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_N); } else { createmenuitem(TXT_ENDING,(640|TEXT_END),0,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_N); } checksystemmessages(); checkkeyboard(); checkmouse(); checkjoystick(); checkmenuitems(); soundsimulation(view.position,view.orientation); setuptextdisplay(); glColor4f(1.0f,1.0f,1.0f,1.0f); displaybackground(580); drawbackground(468,(320|TEXT_CENTER),48,384,64,640,480); drawbackground(469,400,160,128,128,640,480); if (!game.bosslevel) { count=128; drawtext(TXT_SMALL_AMBER" /i///i",64,count,16,1.0f,1.0f,1.0f,1.0f,game.bonus[5],game.numofbonus[5]); count+=16; drawtext(TXT_MEDIUM_AMBER" /i///i",64,count,16,1.0f,1.0f,1.0f,1.0f,game.bonus[6],game.numofbonus[6]); count+=16; drawtext(TXT_LARGE_AMBER" /i///i",64,count,16,1.0f,1.0f,1.0f,1.0f,game.bonus[7],game.numofbonus[7]); count+=16; drawtext(TXT_TARBALLS" /i///i",64,count,16,1.0f,1.0f,1.0f,1.0f,game.bonus[4],game.numofbonus[4]); count+=16; drawtext(TXT_EXTRA_LIVES" /i///i",64,count,16,1.0f,1.0f,1.0f,1.0f,game.bonus[3],game.numofbonus[3]); count+=16; drawtext(TXT_SECRETS" /i///i",64,count,16,1.0f,1.0f,1.0f,1.0f,game.bonus[8],game.numofbonus[8]); count+=16; drawtext(TXT_LIFE_BONUS":/i",64,352,16,1.0f,1.0f,1.0f,1.0f,(object[0].hitpoints/50)*10); drawtext(TXT_LEVEL_POINTS":/i",64,368,16,1.0f,1.0f,1.0f,1.0f,game.score[0]-(object[0].hitpoints/50)*10); } else { if (game.levelnum==34 && game.exit==GAMEEXIT_WON) drawtext(TXT_GF_RESCUING_BONUS,64,336,16,1.0f,1.0f,1.0f,1.0f); drawtext(TXT_LIFE_BONUS":/i",64,352,16,1.0f,1.0f,1.0f,1.0f,(object[0].hitpoints/50)*10); if (game.levelnum==34 && game.exit==GAMEEXIT_WON) drawtext(TXT_BOSS_POINTS":/i",64,368,16,1.0f,1.0f,1.0f,1.0f,game.score[0]-(object[0].hitpoints/50)*10-1); else drawtext(TXT_BOSS_POINTS":/i",64,368,16,1.0f,1.0f,1.0f,1.0f,game.score[0]-(object[0].hitpoints/50)*10); } drawtext(TXT_TOTAL_POINTS":/i",64,384,16,1.0f,1.0f,1.0f,1.0f,scoretemp); drawtext("+/i",64+19*16,384,16,1.0f,1.0f,1.0f,1.0f,game.score[0]-(scoretemp-game.totalscore)); drawmenuitems(); drawmousecursor(768+font.cursornum,mouse.x,mouse.y,16,1.0f,1.0f,1.0f,1.0f); SDL_GL_SwapBuffers(); simcount=0; while (SDL_GetTicks()-simtimer>20 && simcount<5) { simcount++; count=SDL_GetTicks()-simtimer-20; simtimer=SDL_GetTicks()-count; scorecountdelay++; if (scorecountdelay>=25) if (scoretemp<game.totalscore+game.score[0]) { if (scoretemp<=game.totalscore+game.score[0]-10) scoretemp+=10; else scoretemp++; if ((scorecountdelay&1)==1) playsound(15,view.position,NULL,0.2f,0,1.0f,-1,0); } } } if (menuitem[0].active) { game.exit=GAMEEXIT_EXITGAME; } for (count=numofsounds-1;count>=0;count--) deletesound(count); resetmenuitems(); }
void newmappackmenu(void) { int count; joystickmenu=0; resetmenuitems(); while (!menuitem[0].active && !menuitem[1].active && !windowinfo.shutdown) { glClearColor(0.0f,0.0f,0.0f,0.0f); glClear(GL_COLOR_BUFFER_BIT); numofmenuitems=0; createmenuitem(TXT_BACK,0,0,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_ESC); createmenuitem(TXT_SAVE,(640|TEXT_END),0,16,1.0f,1.0f,1.0f,1.0f); createmenuitem(TXT_ADD_LEVEL,(640|TEXT_END),464,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_A); createmenuitem(TXT_DELETE_LEVEL,0,464,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_DELETE); createmenuitem(TXT_FILENAME" ",0,32,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_STRINGINPUT,mappack.filename); setmenuitem(MO_HOTKEY,SCAN_ENTER); createmenuitem(TXT_NAME" ",0,64,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_STRINGINPUT,mappack.name); createmenuitem(TXT_LEVEL" "TXT_FILENAME" ",0,128,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_STRINGINPUT,mappack.level[mappack.numoflevels]); setmenuitem(MO_HOTKEY,SCAN_F); createmenuitem(TXT_LEVELNAME" ",0,160,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_STRINGINPUT,mappack.levelname[mappack.numoflevels]); checksystemmessages(); checkkeyboard(); checkmouse(); checkjoystick(); checkmenuitems(); setuptextdisplay(); drawtext(TXT_FILENAME,320,52,12,1.0f,1.0f,1.0f,1.0f); drawtext(TXT_LEVELNAME,480,52,12,1.0f,1.0f,1.0f,1.0f); for (count=0;count<mappack.numoflevels;count++) { drawtext(mappack.level[count],320,64+count*12,12,1.0f,1.0f,1.0f,1.0f); drawtext(mappack.levelname[count],480,64+count*12,12,1.0f,1.0f,1.0f,1.0f); } drawmenuitems(); drawmousecursor(768+font.cursornum,mouse.x,mouse.y,16,1.0f,1.0f,1.0f,1.0f); SDL_GL_SwapBuffers(); if (menuitem[2].active) { if (mappack.level[mappack.numoflevels][0]!=0) if (mappack.numoflevels<63) { strcpy(mappack.level[mappack.numoflevels+1],mappack.level[mappack.numoflevels]); strcpy(mappack.levelname[mappack.numoflevels+1],mappack.levelname[mappack.numoflevels]); mappack.numoflevels++; } menuitem[2].active=0; } if (menuitem[3].active) { if (mappack.numoflevels>0) mappack.numoflevels--; menuitem[3].active=0; } } if (menuitem[1].active) savemappack(); resetmenuitems(); joystickmenu=1; }