void CG_AddPMItem( popupMessageType_t type, const char* message, qhandle_t shader ) { pmListItem_t* listItem; char* end; if ( !message || !*message ) { return; } if ( type < 0 || type >= PM_NUM_TYPES ) { CG_Printf( "Invalid popup type: %d\n", type ); return; } listItem = CG_FindFreePMItem(); if ( !listItem ) { return; } if ( shader ) { listItem->shader = shader; } else { listItem->shader = cgs.media.pmImages[type]; } listItem->inuse = true; listItem->type = type; Q_strncpyz( listItem->message, message, sizeof( cg_pmStack[0].message ) ); // rain - moved this: print and THEN chop off the newline, as the // console deals with newlines perfectly. We do chop off the newline // at the end, if any, though. if ( listItem->message[strlen( listItem->message ) - 1] == '\n' ) { listItem->message[strlen( listItem->message ) - 1] = 0; } trap_Print( va( "%s\n", listItem->message ) ); // rain - added parens while ( ( end = strchr( listItem->message, '\n' ) ) ) { *end = '\0'; } // rain - don't eat popups for empty lines if ( *listItem->message == '\0' ) { return; } if ( !cg_pmWaitingList ) { cg_pmWaitingList = listItem; listItem->time = cg.time; } else { pmListItem_t* loop = cg_pmWaitingList; while ( loop->next ) { loop = loop->next; } loop->next = listItem; } }
/** * @brief CG_AddPMItem * @param[in] type * @param[in] message * @param[in] message2 * @param[in] shader * @param[in] weaponShader * @param[in] scaleShader * @param[in] color */ void CG_AddPMItem(popupMessageType_t type, const char *message, const char *message2, qhandle_t shader, qhandle_t weaponShader, int scaleShader, vec3_t color) { pmListItem_t *listItem; char *end; if (!message || !*message) { return; } if (type >= PM_NUM_TYPES) { CG_Printf("Invalid popup type: %d\n", type); return; } listItem = CG_FindFreePMItem(); if (!listItem) { return; } if (shader) { listItem->shader = shader; } else { listItem->shader = -1; } if (message2) { listItem->weaponShader = weaponShader; listItem->scaleShader = scaleShader; } else { listItem->weaponShader = -1; } // colored obituaries listItem->color[0] = listItem->color[1] = listItem->color[2] = 1.f; if (color != NULL) { VectorCopy(color, listItem->color); } listItem->inuse = qtrue; listItem->type = type; Q_strncpyz(listItem->message, message, sizeof(cg_pmStack[0].message)); // print and THEN chop off the newline, as the console deals with newlines perfectly if (listItem->message[strlen(listItem->message) - 1] == '\n') { listItem->message[strlen(listItem->message) - 1] = 0; } // chop off the newline at the end if any while ((end = strchr(listItem->message, '\n'))) { *end = '\0'; } // don't eat popups for empty lines if (*listItem->message == '\0') { return; } if (message2) { Q_strncpyz(listItem->message2, message2, sizeof(cg_pmStack[0].message2)); if (listItem->message[strlen(listItem->message2) - 1] == '\n') { listItem->message[strlen(listItem->message2) - 1] = 0; } while ((end = strchr(listItem->message2, '\n'))) { *end = '\0'; } if (*listItem->message2 == '\0') { return; } } if (!cg_pmWaitingList) { cg_pmWaitingList = listItem; listItem->time = cg.time; } else { pmListItem_t *loop = cg_pmWaitingList; while (loop->next) { loop = loop->next; } loop->next = listItem; } }