Split camera initialisation code from P_SetupLevel, make sure the camera has an initial subsector set!

This commit is contained in:
Monster Iestyn 2018-11-12 20:07:45 +00:00
parent c7e58b7cd5
commit e85f73117c

View file

@ -2477,6 +2477,43 @@ static void P_LoadNightsGhosts(void)
free(gpath); free(gpath);
} }
static void P_SetupCamera(void)
{
if (players[displayplayer].mo && (server || addedtogame))
{
camera.x = players[displayplayer].mo->x;
camera.y = players[displayplayer].mo->y;
camera.z = players[displayplayer].mo->z;
camera.angle = players[displayplayer].mo->angle;
camera.subsector = R_PointInSubsector(camera.x, camera.y); // make sure camera has a subsector set -- Monster Iestyn (12/11/18)
}
else
{
mapthing_t *thing;
switch (gametype)
{
case GT_MATCH:
case GT_TAG:
thing = deathmatchstarts[0];
break;
default:
thing = playerstarts[0];
break;
}
if (thing)
{
camera.x = thing->x;
camera.y = thing->y;
camera.z = thing->z;
camera.angle = FixedAngle((fixed_t)thing->angle << FRACBITS);
camera.subsector = R_PointInSubsector(camera.x, camera.y); // make sure camera has a subsector set -- Monster Iestyn (12/11/18)
}
}
}
/** Loads a level from a lump or external wad. /** Loads a level from a lump or external wad.
* *
* \param skipprecip If true, don't spawn precipitation. * \param skipprecip If true, don't spawn precipitation.
@ -2814,37 +2851,7 @@ boolean P_SetupLevel(boolean skipprecip)
if (!dedicated) if (!dedicated)
{ {
if (players[displayplayer].mo && (server || addedtogame)) P_SetupCamera();
{
camera.x = players[displayplayer].mo->x;
camera.y = players[displayplayer].mo->y;
camera.z = players[displayplayer].mo->z;
camera.angle = players[displayplayer].mo->angle;
}
else
{
mapthing_t *thing;
switch (gametype)
{
case GT_MATCH:
case GT_TAG:
thing = deathmatchstarts[0];
break;
default:
thing = playerstarts[0];
break;
}
if (thing)
{
camera.x = thing->x;
camera.y = thing->y;
camera.z = thing->z;
camera.angle = FixedAngle((fixed_t)thing->angle << FRACBITS);
}
}
if (!cv_cam_height.changed) if (!cv_cam_height.changed)
CV_Set(&cv_cam_height, cv_cam_height.defaultvalue); CV_Set(&cv_cam_height, cv_cam_height.defaultvalue);