Beispiel #1
0
/**
*   \param r->ebx The buffer that will be written to.
*   \param r->ecx The size of the buffer that will be written to.
*/
void Osapi_ReadString(struct regs* r)
{
    char *buffer = (char *)r->ebx;
    unsigned int buffer_size = (unsigned int)r->ecx;
    unsigned char current_char = Keyboard_ReadKey();
    int i = 0;
    do
    {
        switch(current_char)
        {
        case Backspace:
            i = Math_Max(0,--i);
            //kprintf("%c",Backspace);
            //kprintf("%c",Space);
            //kprintf("%c",Backspace);
            buffer[i] = Space;
            break;
        case Enter:
            current_char = '\n';
            buffer[i] = current_char;
            //kprintf("%c",Enter);
            i++;
            break;
        default:
            buffer[i] = current_char;
            kprintf("%c",current_char);
            i++;
        }

        current_char = Keyboard_ReadKey();
    } while(current_char != '\n' && i < buffer_size - 1);
    buffer[buffer_size] = '\0';
}
void Sky_DrawFace (int axis)
{
	glpoly_t	*p;
	MathVector3f_t verts[4];
	int			i, j, start;
	float		di,qi,dj,qj;
	MathVector3f_t v_up, v_right, temp, temp2;

	Sky_SetBoxVert(-1.0f,-1.0f,axis,verts[0]);
	Sky_SetBoxVert(-1.0f,1.0f,axis,verts[1]);
	Sky_SetBoxVert(1.0f,1.0f,axis,verts[2]);
	Sky_SetBoxVert(1.0f,-1.0f,axis,verts[3]);

	start = Hunk_LowMark ();
	p = (glpoly_t*)Hunk_Alloc(sizeof(glpoly_t));

	Math_VectorSubtract(verts[2],verts[3], v_up);
	Math_VectorSubtract(verts[2],verts[1], v_right);

	di = Math_Max((int)r_sky_quality.value,1);
	qi = 1.0f/di;
	dj = (axis < 4) ? di*2 : di; // Subdivide vertically more than horizontally on skybox sides
	qj = 1.0f/dj;

	for (i=0; i<di; i++)
	{
		for (j=0; j<dj; j++)
		{
			if (i*qi < skymins[0][axis]/2+0.5 - qi || i*qi > skymaxs[0][axis]/2+0.5 ||
				j*qj < skymins[1][axis]/2+0.5 - qj || j*qj > skymaxs[1][axis]/2+0.5)
				continue;

			//if (i&1 ^ j&1) continue; //checkerboard test
			Math_VectorScale(v_right, qi*i, temp);
			Math_VectorScale(v_up, qj*j, temp2);
			Math_VectorAdd(temp,temp2,temp);
			Math_VectorAdd(verts[0],temp,p->verts[0]);

			Math_VectorScale(v_up, qj, temp);
			Math_VectorAdd(p->verts[0],temp,p->verts[1]);

			Math_VectorScale(v_right, qi, temp);
			Math_VectorAdd(p->verts[1],temp,p->verts[2]);

			Math_VectorAdd(p->verts[0],temp,p->verts[3]);

			Sky_DrawFaceQuad(p);
		}
	}

	Hunk_FreeToLowMark(start);
}
/*	Must be called whenever vid changes
	Internal use only
*/
void Screen_UpdateSize(void)
{
	float size, scale; //johnfitz -- scale

	vid.bRecalcRefDef = false;

	scr_tileclear_updates = 0; //johnfitz

// bound viewsize
	if(scr_viewsize.value < 30)
		Cvar_Set("viewsize","30");
	else if(scr_viewsize.value > 120)
		Cvar_Set("viewsize","120");

	// Bound fov
	if(scr_fov.value < 10)
		Cvar_Set ("fov","10");
	else if(scr_fov.value > 170)
		Cvar_Set ("fov","170");

	//johnfitz -- rewrote this section
	size = scr_viewsize.value;
	scale = Math_Clamp(1.0, scr_sbarscale.value, (float)glwidth / 320.0);

	if (size >= 120 || cl.intermission || scr_sbaralpha.value < 1) //johnfitz -- scr_sbaralpha.value
		sb_lines = 0;
	else if (size >= 110)
		sb_lines = 24*scale;
	else
		sb_lines = 48*scale;

	size = Math_Min(scr_viewsize.value,100)/100;
	//johnfitz

	//johnfitz -- rewrote this section
	r_refdef.vrect.width = Math_Max(glwidth * size, 96); //no smaller than 96, for icons
	r_refdef.vrect.height = Math_Min(glheight * size, glheight - sb_lines); //make room for sbar
	r_refdef.vrect.x = (glwidth - r_refdef.vrect.width)/2;
	r_refdef.vrect.y = (glheight - sb_lines - r_refdef.vrect.height)/2;
	//johnfitz

	r_refdef.fov_x = scr_fov.value;
	r_refdef.fov_y = CalcFovy (r_refdef.fov_x, r_refdef.vrect.width, r_refdef.vrect.height);

	scr_vrect = r_refdef.vrect;
}
void R_CheckEfrags (void)
{
	efrag_t		*ef;
	int			count;

	if (cls.signon < 2)
		return; //don't spam when still parsing signon packet full of static ents

	for (count=MAX_EFRAGS, ef = cl.free_efrags; ef; count--, ef = ef->entnext)
		;

	if (count > 640 && dev_peakstats.efrags <= 640)
		Con_Warning ("%i efrags exceeds standard limit of 640.\n", count);

	dev_stats.efrags = count;
	dev_peakstats.efrags = Math_Max(count,dev_peakstats.efrags);
}
Beispiel #5
0
   void LayoutRects(wxSize &ioSize)
   {
      int allow_width =  ioSize.x - mBorders;
      int x = mBorders;
      int y = mBorders;
      int max_w = 0;
      int max_h = 0;
      int on_row = 0;
      int prev_separator_size = 0;
      int rows = 1;

      for(int t=0;t<mTools.size();t++)
      {
         ToolBoxTool &tool = *mTools[t];
         if (tool.IsSeparator())
         {
            prev_separator_size = mHGap + mSeparatorSize;
            on_row++;
            continue;
         }


         wxSize s= tool.GetSize();

         // New row ?
         int right = x + prev_separator_size + s.x;
         if (on_row && (right > allow_width) )
         {
            // finish old row ...
            x+= mBorders-mHGap;
            max_w = Math_Max(max_w,x);
            if (on_row>1)
               CentreOnRow(t-on_row,on_row,y,max_h);
            y+=max_h + mVGap;

            // start new row
            x = mBorders;

            // Convert vertical separator, which wouldn't fit, into horizontal
            //  separator ...
            if (prev_separator_size)
            {
               mTools[t-1]->mLayoutPos = wxRect(x,y,0,0);
               //mTools[t-1]->mLayoutPos = wxRect(x,y,max_w,1);
               //y+=1+mVGap;
               prev_separator_size = 0;
            }

            on_row = 0;
            max_h = 0;
            rows++;
         }

         // Add previous separator we delayed until here ...
         if (prev_separator_size)
         {
            mTools[t-1]->mLayoutPos = wxRect(x,y,1,10);
            x+=prev_separator_size;
            prev_separator_size = 0;
         }

         tool.mLayoutPos = wxRect(x,y,s.x,s.y);
         if (max_h<s.y)  max_h = s.y;
         x+=s.x + mHGap;
         on_row++;
      }

      if (prev_separator_size)
      {
         // TODO:
      }

      if (on_row>1)
         CentreOnRow(mTools.size()-on_row,on_row,y,max_h);

      x+= mBorders - mHGap;
      max_w = Math_Max(max_w,x);
      if (rows>1)
         y-=VGap;

      y+=max_h + mBorders;

      for(int i=0;i<mTools.size();i++)
         mTools[i]->SetHorizontalSeparatorSize(max_w);

      ioSize = wxSize( max_w, y );
   }