Bug #792 Select the right number of split screens for multiplayer

git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@5167 30fe4595-0a0c-4342-8851-515496e4dcbd

Former-commit-id: a75bef212489cecd27f03730381c9485eb4d9fa1
Former-commit-id: 4ed8da6bc02bbc2cfcbb4fb9b1442b14e6413f9f
This commit is contained in:
mungewell 2013-02-22 03:31:15 +00:00
parent efe7d51550
commit 0d5c13333e

View file

@ -621,6 +621,7 @@ initCars(tSituation *s)
tCarElt *elt; tCarElt *elt;
void *hdle; void *hdle;
const char *pszSpanSplit; const char *pszSpanSplit;
int grNbSuggestedScreens = 0;
TRACE_GL("initCars: start"); TRACE_GL("initCars: start");
@ -649,7 +650,6 @@ initCars(tSituation *s)
grInitSkidmarks(elt); grInitSkidmarks(elt);
} }
grNbActiveScreens = 0;
for (i = 0; i < s->_ncars; i++) { for (i = 0; i < s->_ncars; i++) {
elt = s->cars[i]; elt = s->cars[i];
index = elt->index; index = elt->index;
@ -671,24 +671,30 @@ initCars(tSituation *s)
// Pre-assign each human driver (if any) to a different screen // Pre-assign each human driver (if any) to a different screen
// (set him as the "current driver" for this screen). // (set him as the "current driver" for this screen).
if (grNbActiveScreens < GR_NB_MAX_SCREEN if (grNbSuggestedScreens < GR_NB_MAX_SCREEN
&& elt->_driverType == RM_DRV_HUMAN && !elt->_networkPlayer) && elt->_driverType == RM_DRV_HUMAN && !elt->_networkPlayer)
{ {
grScreens[grNbActiveScreens]->setCurrentCar(elt); grScreens[grNbSuggestedScreens]->setCurrentCar(elt);
GfLogTrace("Screen #%d : Assigned to %s\n", grNbActiveScreens, elt->_name); GfLogTrace("Screen #%d : Assigned to %s\n", grNbSuggestedScreens, elt->_name);
grNbActiveScreens++; grNbSuggestedScreens++;
} }
} }
// Load the real number of active screens and the arrangment.
grNbActiveScreens = (int)GfParmGetNum(grHandle, GR_SCT_DISPMODE, GR_ATT_NB_SCREENS, NULL, 1.0);
grNbArrangeScreens = (int)GfParmGetNum(grHandle, GR_SCT_DISPMODE, GR_ATT_ARR_SCREENS, NULL, 1.0);
/* Check whether view should be spanned across vertical splits */ /* Check whether view should be spanned across vertical splits */
pszSpanSplit = GfParmGetStr(grHandle, GR_SCT_GRAPHIC, GR_ATT_SPANSPLIT, GR_VAL_NO); pszSpanSplit = GfParmGetStr(grHandle, GR_SCT_GRAPHIC, GR_ATT_SPANSPLIT, GR_VAL_NO);
grSpanSplit = strcmp(pszSpanSplit, GR_VAL_YES) ? 0 : 1; grSpanSplit = strcmp(pszSpanSplit, GR_VAL_YES) ? 0 : 1;
if (grSpanSplit == 0 && grNbSuggestedScreens > 1) {
// Mulitplayer, so ignore the stored number of screens
grNbActiveScreens = grNbSuggestedScreens;
grNbArrangeScreens = 0;
} else {
// Load the real number of active screens and the arrangment.
grNbActiveScreens = (int)GfParmGetNum(grHandle, GR_SCT_DISPMODE, GR_ATT_NB_SCREENS, NULL, 1.0);
grNbArrangeScreens = (int)GfParmGetNum(grHandle, GR_SCT_DISPMODE, GR_ATT_ARR_SCREENS, NULL, 0.0);
}
// Initialize the cameras for all the screens. // Initialize the cameras for all the screens.
for (i = 0; i < GR_NB_MAX_SCREEN; i++) { for (i = 0; i < GR_NB_MAX_SCREEN; i++) {
grScreens[i]->initCams(s); grScreens[i]->initCams(s);