int try_uncrouch(PlayerType * p) { float x1 = p->p.x + 0.45f; float x2 = p->p.x - 0.45f; float y1 = p->p.y + 0.45f; float y2 = p->p.y - 0.45f; float z1 = p->p.z + 2.25f; float z2 = p->p.z - 1.35f; //first check if player can lower feet (in midair) if(p->airborne && !( clipbox(x1, y1, z1) || clipbox(x1, y2, z1) || clipbox(x2, y1, z1) || clipbox(x2, y2, z1))) return(1); //then check if they can raise their head else if(!(clipbox(x1, y1, z2) || clipbox(x1, y2, z2) || clipbox(x2, y1, z2) || clipbox(x2, y2, z2))) { p->p.z -= 0.9f; p->e.z -= 0.9f; return(1); } return(0); }
void draw_pager( GtkWidget *widget ) { if( show_all_ws ) box( bg, TRUE, 0, 0, width, height ); else box( bg, TRUE, -ws_x, -ws_y, width+ws_x, height+ws_y ); /* highlight the current viewport with color hilit background */ if(xmark ==0) box( hilit_bg, TRUE, vp_x, vp_y, vp_width, vp_height ); /* draw the windows */ if(hatch == 0) { for( w = lowest; w >= windows; w-- ) { clipbox( (w->id == focus_id) ? focus_win : win, TRUE, w->w.x+1, w->w.y+1, w->w.width-2, w->w.height-2, &w->c ); clipbox( win_border, FALSE, w->w.x, w->w.y, w->w.width-1, w->w.height-1, &w->c ); } } else { for( w = lowest; w >= windows; w-- ) { int i; if(w->id == focus_id) { for(i=((w->w.width > w->w.height)?w->w.width:w->w.height)>>1; i>=1 ; i-=2) clipbox(focus_win, FALSE, w->w.x+i, w->w.y+1, w->w.width-1-(i<<1), w->w.height-1, &w->c ); } else { for(i=((w->w.width > w->w.height)?w->w.width:w->w.height)>>1; i>=1 ; i-=2) clipbox(win, FALSE, w->w.x+1, w->w.y+i, w->w.width-1, w->w.height-1-(i<<1), &w->c ); } /* for(i=((w->w.width > w->w.height)?w->w.width:w->w.height)>>1; i>=1 ; i-=2) clipbox( (w->id == focus_id) ? focus_win : win, FALSE, w->w.x+i, w->w.y+i, w->w.width-1-(i<<1), w->w.height-1-(i<<1), &w->c ); clipbox( (w->id == focus_id) ? focus_win : win, FALSE, w->w.x+1, w->w.y+1, w->w.width-3, w->w.height-3, &w->c ); clipbox( (w->id == focus_id) ? focus_win : win, FALSE, w->w.x+2, w->w.y+2, w->w.width-5, w->w.height-5, &w->c ); clipbox( (w->id == focus_id) ? focus_win : win, FALSE, w->w.x+3, w->w.y+3, w->w.width-7, w->w.height-7, &w->c ); */ clipbox( win_border, FALSE, w->w.x, w->w.y, w->w.width-1, w->w.height-1, &w->c ); } }
static void WinClipAndDrawLine( EDA_RECT* ClipBox, wxDC* DC, int x1, int y1, int x2, int y2, int width ) { GRLastMoveToX = x2; GRLastMoveToY = y2; if( ClipBox ) { EDA_RECT clipbox(*ClipBox); clipbox.Inflate(width/2); if( clipLine( &clipbox, x1, y1, x2, y2 ) ) return; } DC->DrawLine( x1, y1, x2, y2 ); }
static void WinClipAndDrawLine( EDA_RECT* ClipBox, wxDC* DC, int x1, int y1, int x2, int y2, EDA_COLOR_T Color, int width = 1 ) { GRLastMoveToX = x2; GRLastMoveToY = y2; if( ClipBox ) { EDA_RECT clipbox(*ClipBox); clipbox.Inflate(width/2); if( clipLine( &clipbox, x1, y1, x2, y2 ) ) return; } GRSetColorPen( DC, Color, width ); DC->DrawLine( x1, y1, x2, y2 ); }
//player movement with autoclimb void boxclipmove(PlayerType * p) { float offset, m, f, nx, ny, nz, z; long climb = 0; f = fsynctics*32.f; nx = f*p->v.x+p->p.x; ny = f*p->v.y+p->p.y; if(p->crouch) { offset = 0.45f; m = 0.9f; } else { offset = 0.9f; m = 1.35f; } nz = p->p.z + offset; if(p->v.x < 0) f = -0.45f; else f = 0.45f; z=m; while(z>=-1.36f && !clipbox(nx+f, p->p.y-0.45f, nz+z) && !clipbox(nx+f, p->p.y+0.45f, nz+z)) z-=0.9f; if(z<-1.36f) p->p.x = nx; else if(!p->crouch && p->f.z<0.5f && !p->sprint) { z=0.35f; while(z>=-2.36f && !clipbox(nx+f, p->p.y-0.45f, nz+z) && !clipbox(nx+f, p->p.y+0.45f, nz+z)) z-=0.9f; if(z<-2.36f) { p->p.x = nx; climb=1; } else p->v.x = 0; } else p->v.x = 0; if(p->v.y < 0) f = -0.45f; else f = 0.45f; z=m; while(z>=-1.36f && !clipbox(p->p.x-0.45f, ny+f, nz+z) && !clipbox(p->p.x+0.45f, ny+f, nz+z)) z-=0.9f; if(z<-1.36f) p->p.y = ny; else if(!p->crouch && p->f.z<0.5f && !p->sprint && !climb) { z=0.35f; while(z>=-2.36f && !clipbox(p->p.x-0.45f, ny+f, nz+z) && !clipbox(p->p.x+0.45f, ny+f, nz+z)) z-=0.9f; if(z<-2.36f) { p->p.y = ny; climb=1; } else p->v.y = 0; } else if(!climb) p->v.y = 0; if(climb) { p->v.x *= 0.5f; p->v.y *= 0.5f; p->lastclimb = ftotclk; nz--; m = -1.35f; } else { if(p->v.z < 0) m=-m; nz += p->v.z*fsynctics*32.f; } p->airborne = 1; if(clipbox(p->p.x-0.45f, p->p.y-0.45f, nz+m) || clipbox(p->p.x-0.45f, p->p.y+0.45f, nz+m) || clipbox(p->p.x+0.45f, p->p.y-0.45f, nz+m) || clipbox(p->p.x+0.45f, p->p.y+0.45f, nz+m)) { if(p->v.z >= 0) { p->wade = p->p.z > 61; p->airborne = 0; } p->v.z = 0; } else p->p.z = nz-offset; reposition_player(p, &p->p); }