Files
2025-09-29 00:52:08 +02:00

252 lines
6.7 KiB
Scheme
Executable File

/// HUD_TEXT.sch
/// Used for displaying text onto the hud and scrolling it while fading out
/// AUTHOR : John R. Diaz
USING "minigames_helpers.sch"
CONST_INT NUM_TEXT_REPS 5
CONST_FLOAT TAXI_HUD_TEXT_POSX 0.469
CONST_FLOAT TAXI_HUD_TEXT_POSY 0.387
CONST_FLOAT TAXI_HUD_TEXT_POSY_END 0.273 // DESTROY HEIGHT
CONST_INT TAXI_HUD_TEXT_ALPHA 255
CONST_FLOAT CONST_HUD_TEXT_XSCALE 0.9
CONST_FLOAT CONST_HUD_TEXT_YSCALE 0.9
//STRUCT HUD_2D_TEXT
//
// STRING sign
//
// FLOAT posX
// FLOAT posY
//
// FLOAT frameTime
//
// INT alpha
//
// INT ptValue
//
// BOOL bActive
//
// HUD_COLOURS color
//ENDSTRUCT
//
//STRUCT HUD_2D_STRING
// FLOAT posX
// FLOAT posY
//
// INT r
// INT g
// INT b
// INT a
//
// STRING sValue
// FLOAT fScale
//ENDSTRUCT
STRUCT HUD_2D_INT
FLOAT posX
FLOAT posY
INT r
INT g
INT b
INT a
INT iValue
FLOAT fScale
ENDSTRUCT
//INT m_iActiveSPT
/// PURPOSE:Gets a string from an int
///
/// PARAMS:
/// i - The int to convert
/// RETURNS: The int value as a string
///
#IF IS_DEBUG_BUILD
FUNC STRING TAXI_UTILS_GET_STRING_FROM_INT_SP(INT i)
TEXT_LABEL_31 tl23
tl23 += i
RETURN GET_FIRST_N_CHARACTERS_OF_LITERAL_STRING(tl23, GET_LENGTH_OF_LITERAL_STRING(tl23))
ENDFUNC
FUNC STRING TAXI_UTILS_GET_STRING_FROM_FLOAT_SP(FLOAT i)
TEXT_LABEL_31 tl23
tl23 += ROUND(i)
RETURN GET_FIRST_N_CHARACTERS_OF_LITERAL_STRING(tl23, GET_LENGTH_OF_LITERAL_STRING(tl23))
ENDFUNC
#ENDIF // IS_DEBUG_BUILD
PROC SET_HUD_INT_VALUE(HUD_2D_INT &thisNum, INT iData, FLOAT fPosX, FLOAT fPosY, FLOAT fScale = 1.0, INT iR = 255, INT iG = 255, INT iB= 255, INT iA = 255 )
thisNum.posX = fPosX
thisNum.posY = fPosY
thisNum.fScale = fScale
thisNum.r = iR
thisNum.g = iG
thisNum.b = iB
thisNum.a = iA
thisNum.iValue = iData
ENDPROC
PROC HUD_2D_NUM_DRAW(HUD_2D_INT &thisNum)
IF thisNum.iValue < 0
thisNum.iValue = 0
ENDIF
SET_TEXT_SCALE(thisNum.fScale, thisNum.fScale)
SET_TEXT_COLOUR(thisNum.r, thisNum.g, thisNum.b, thisNum.a)
SET_TEXT_DROPSHADOW(0, 0, 0, 0, 0)
SET_TEXT_EDGE(0, 0, 0, 0, 0)
DISPLAY_TEXT_WITH_NUMBER(thisNum.posX,thisNum.posY, "NUMBER", thisNum.iValue)
ENDPROC
//PROC SET_HUD_STRING_VALUE(HUD_2D_STRING &thisString, STRING sData, FLOAT fPosX, FLOAT fPosY, FLOAT fScale = 1.0, INT iR = 255, INT iG = 255, INT iB= 255, INT iA = 255 )
//
// thisString.posX = fPosX
// thisString.posY = fPosY
//
// thisString.fScale = fScale
// thisString.r = iR
// thisString.g = iG
// thisString.b = iB
// thisString.a = iA
// thisString.sValue = sData
//ENDPROC
/*
PROC HUD_2D_STRING_DRAW_LITERAL(HUD_2D_STRING &thisString)
IF NOT IS_STRING_EMPTY(thisString.sValue)
SET_TEXT_SCALE(thisString.fScale, thisString.fScale)
SET_TEXT_COLOUR(thisString.r, thisString.g, thisString.b, thisString.a)
SET_TEXT_DROPSHADOW(0, 0, 0, 0, 0)
SET_TEXT_EDGE(0, 0, 0, 0, 0)
DISPLAY_TEXT_WITH_LITERAL_STRING(thisString.posX,thisString.posY, "STRING", thisString.sValue)
ENDIF
ENDPROC
PROC HUD_2D_STRING_DRAW(HUD_2D_STRING &thisString)
IF NOT IS_STRING_EMPTY(thisString.sValue)
SET_TEXT_SCALE(thisString.fScale, thisString.fScale)
SET_TEXT_COLOUR(thisString.r, thisString.g, thisString.b, thisString.a)
SET_TEXT_DROPSHADOW(0, 0, 0, 0, 0)
SET_TEXT_EDGE(0, 0, 0, 0, 0)
DISPLAY_TEXT(thisString.posX,thisString.posY, thisString.sValue)
ENDIF
ENDPROC
PROC HUD_2D_AddToQueue(HUD_2D_TEXT &hudTextQueue[], INT iValue,HUD_COLOURS txtColor, STRING whatSign, FLOAT posX = TAXI_HUD_TEXT_POSX, FLOAT posY = TAXI_HUD_TEXT_POSY )
// Make sure we don't array overrun
IF m_iActiveSPT >= NUM_TEXT_REPS
// TODO: Check if 0 is still active before we do this..
m_iActiveSPT = 0
ENDIF
// Create the new object
hudTextQueue[m_iActiveSPT].sign = whatSign
hudTextQueue[m_iActiveSPT].posx = posX
hudTextQueue[m_iActiveSPT].posY = posY
hudTextQueue[m_iActiveSPT].alpha = TAXI_HUD_TEXT_ALPHA
hudTextQueue[m_iActiveSPT].ptValue = iValue
hudTextQueue[m_iActiveSPT].bActive = TRUE
hudTextQueue[m_iActiveSPT].frameTime = 0
hudTextQueue[m_iActiveSPT].color = txtColor
#IF IS_DEBUG_BUILD
DEBUG_MESSAGE("AddToSPTQueue -- Adding new SPT to queue with value of: ",TAXI_UTILS_GET_STRING_FROM_INT_SP(hudTextQueue[m_iActiveSPT].ptValue))
#ENDIF
m_iActiveSPT++
ENDPROC
/// PURPOSE: Pass in the HUD object to make render with the scroll/fade effect
/// NOTES: Helper function for TAXI_HUD_UpdateText
///
/// PARAMS:
/// sptObj - The HUD text object
/// RETURNS: TRUE when it's done displaying
///
FUNC BOOL HUD_2D_Text_Scroll(HUD_2D_TEXT &sptObj, FLOAT fStartPosY = TAXI_HUD_TEXT_POSY, FLOAT fEndPosY = TAXI_HUD_TEXT_POSY_END)
FLOAT fStart,fEnd
FLOAT fInterpTime
// Increment our frame count
sptObj.frameTime += GET_FRAME_TIME()
// Find out how much we should be flipping
fInterpTime = sptObj.frameTime / CONST_SPT_LENGTH
// Keep going until we reach 1.0 (means we are at our destination)
IF fInterpTime < 1.0
// Lerp the position
fStart = fStartPosY
fEnd = fEndPosY
sptObj.posY = fStart + (fEnd - fStart) * fInterpTime
// Lerp the alpha
fStart = TAXI_HUD_TEXT_ALPHA
fEnd = 0
sptObj.alpha = ROUND(fStart + (fEnd - fStart) * fInterpTime)
RETURN FALSE
ELSE
// Dissapear!
sptObj.alpha = 0
DEBUG_MESSAGE("SPT_Scroll -- Done Scrolling!!")
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Updates our Scrolling Point Text.
/// To be Used in TAXI_HUD_Draw2D_Text as a helper.
PROC HUD_2D_UpdateText(HUD_2D_TEXT &hudTextQueue[])
INT iIter
// Scroll the text up after its been displayed
REPEAT NUM_TEXT_REPS iIter
// Is this active
IF hudTextQueue[iIter].bActive
IF HUD_2D_Text_Scroll(hudTextQueue[iIter])
hudTextQueue[iIter].bActive = FALSE
ENDIF
ENDIF
ENDREPEAT
ENDPROC
/// PURPOSE:
/// Draws the players points when he gains/loses driving points
PROC HUD_2D_Draw_Text(HUD_2D_TEXT &hudTextQueue[])
INT iIter
// Update all of the text
HUD_2D_UpdateText(hudTextQueue)
REPEAT NUM_TEXT_REPS iIter
IF hudTextQueue[iIter].bActive
IF (hudTextQueue[iIter].ptValue <> 0)
DISPLAY_TEXT_LABEL_WITH_NUMBER(hudTextQueue[iIter].sign, hudTextQueue[iIter].posX, hudTextQueue[iIter].posY,
CONST_HUD_TEXT_XSCALE, CONST_HUD_TEXT_YSCALE, 1.0, 1.0, GetTextColor(hudTextQueue[iIter].color, hudTextQueue[iIter].alpha),
hudTextQueue[iIter].ptValue)
ELSE
DISPLAY_TEXT_LABEL(hudTextQueue[iIter].sign, hudTextQueue[iIter].posX, hudTextQueue[iIter].posY,
CONST_HUD_TEXT_XSCALE, CONST_HUD_TEXT_YSCALE, 1.0, 1.0, GetTextColor(hudTextQueue[iIter].color, hudTextQueue[iIter].alpha))
ENDIF
ENDIF
ENDREPEAT
ENDPROC
*/
//EOF