Beispiel #1
0
void P_Ticker (void)
{
  int i;

  /* pause if in menu and at least one tic has been run
   *
   * killough 9/29/98: note that this ties in with basetic,
   * since G_Ticker does the pausing during recording or
   * playback, and compenates by incrementing basetic.
   *
   * All of this complicated mess is used to preserve demo sync.
   */

  if (paused || (menuactive && !demoplayback && !netgame &&
     players[consoleplayer].viewz != 1))
  {
    if (walkcamera.type)
    {
      P_ResetWalkcam();
    }
    return;
  }

  R_UpdateInterpolations ();

  P_MapStart();
               // not if this is an intermission screen
  if(gamestate==GS_LEVEL)
  for (i=0; i<MAXPLAYERS; i++)
    if (playeringame[i])
      P_PlayerThink(&players[i]);

  P_RunThinkers();
  P_UpdateSpecials();
  P_RespawnSpecials();
  P_MapEnd();
  leveltime++;                       // for par times
}
Beispiel #2
0
void R_InterpolateView(player_t *player)
{
  static mobj_t *oviewer;
  fixed_t frac;

  dboolean NoInterpolate = (paused && !walkcamera.type) || (menuactive && !demoplayback);

  viewplayer = player;

  if (player->mo != oviewer || NoInterpolate)
  {
    R_ResetViewInterpolation();
    oviewer = player->mo;
  }
  tic_vars.frac = I_GetTimeFrac();
  if (NoInterpolate)
    tic_vars.frac = FRACUNIT;

  frac = tic_vars.frac;

  if (movement_smooth)
  {
    if (NoInterpolateView)
    {
      NoInterpolateView = false;

      player->prev_viewz = player->viewz;
      player->prev_viewangle = player->mo->angle + viewangleoffset;
      player->prev_viewpitch = player->mo->pitch;

      P_ResetWalkcam();
    }

    if (walkcamera.type != 2)
    {
      viewx = player->mo->PrevX + FixedMul (frac, player->mo->x - player->mo->PrevX);
      viewy = player->mo->PrevY + FixedMul (frac, player->mo->y - player->mo->PrevY);
      viewz = player->prev_viewz + FixedMul (frac, player->viewz - player->prev_viewz);
    }
    else
    {
      viewx = walkcamera.PrevX + FixedMul (frac, walkcamera.x - walkcamera.PrevX);
      viewy = walkcamera.PrevY + FixedMul (frac, walkcamera.y - walkcamera.PrevY);
      viewz = walkcamera.PrevZ + FixedMul (frac, walkcamera.z - walkcamera.PrevZ);
    }

    if (walkcamera.type)
    {
      viewangle = walkcamera.PrevAngle + FixedMul (frac, walkcamera.angle - walkcamera.PrevAngle);
      viewpitch = walkcamera.PrevPitch + FixedMul (frac, walkcamera.pitch - walkcamera.PrevPitch);
    }
    else
    {
      viewangle = player->prev_viewangle + FixedMul (frac, R_SmoothPlaying_Get(player) + viewangleoffset - player->prev_viewangle);
      viewpitch = player->prev_viewpitch + FixedMul (frac, player->mo->pitch - player->prev_viewpitch);
    }
  }
  else
  {
    if (walkcamera.type != 2)
    {
      viewx = player->mo->x;
      viewy = player->mo->y;
      viewz = player->viewz;
    }
    else
    {
      viewx = walkcamera.x;
      viewy = walkcamera.y;
      viewz = walkcamera.z;
    }
    if (walkcamera.type)
    {
      viewangle = walkcamera.angle;
      viewpitch = walkcamera.pitch;
    }
    else
    {
      viewangle = R_SmoothPlaying_Get(player);
      viewpitch = player->mo->pitch;
    }
  }

  if (!paused && movement_smooth)
  {
    int i;

    didInterp = tic_vars.frac != FRACUNIT;
    if (didInterp)
    {
      for (i = numinterpolations - 1; i >= 0; i--)
      {
        R_DoAnInterpolation (i, tic_vars.frac);
      }
    }
  }
}
Beispiel #3
0
void R_InterpolateView (player_t *player, fixed_t frac)
{
  if (movement_smooth)
  {
    if (NoInterpolateView)
    {
      NoInterpolateView = false;
      original_view_vars.viewx = player->mo->x;
      original_view_vars.viewy = player->mo->y;
      original_view_vars.viewz = player->viewz;

      original_view_vars.viewangle = player->mo->angle + viewangleoffset;
      original_view_vars.viewpitch = player->mo->pitch;

      if(walkcamera.type)
      {
        P_ResetWalkcam();
      }
    }

    if (walkcamera.type != 2)
    {
      viewx = original_view_vars.viewx + FixedMul (frac, player->mo->x - original_view_vars.viewx);
      viewy = original_view_vars.viewy + FixedMul (frac, player->mo->y - original_view_vars.viewy);
      viewz = original_view_vars.viewz + FixedMul (frac, player->viewz - original_view_vars.viewz);
    }
    else
    {
      viewx = walkcamera.PrevX + FixedMul (frac, walkcamera.x - walkcamera.PrevX);
      viewy = walkcamera.PrevY + FixedMul (frac, walkcamera.y - walkcamera.PrevY);
      viewz = walkcamera.PrevZ + FixedMul (frac, walkcamera.z - walkcamera.PrevZ);
    }

    if (walkcamera.type)
    {
      viewangle = walkcamera.PrevAngle + FixedMul (frac, walkcamera.angle - walkcamera.PrevAngle);
      viewpitch = walkcamera.PrevPitch + FixedMul (frac, walkcamera.pitch - walkcamera.PrevPitch);
    }
    else
    {
      viewangle = original_view_vars.viewangle + FixedMul (frac, R_SmoothPlaying_Get(player->mo->angle) + viewangleoffset - original_view_vars.viewangle);
      viewpitch = original_view_vars.viewpitch + FixedMul (frac, player->mo->pitch - original_view_vars.viewpitch);
    }
  }
  else
  {
    if (walkcamera.type != 2)
    {
      viewx = player->mo->x;
      viewy = player->mo->y;
      viewz = player->viewz;
    }
    else
    {
      viewx = walkcamera.x;
      viewy = walkcamera.y;
      viewz = walkcamera.z;
    }
    if (walkcamera.type)
    {
      viewangle = walkcamera.angle;
      viewpitch = walkcamera.pitch;
    }
    else
    {
      viewangle = R_SmoothPlaying_Get(player->mo->angle);
      viewpitch = player->mo->pitch;
    }
  }
}