Pararena2/Sources/PlayerStats.c

1 line
14 KiB
C
Executable File
Raw Permalink Blame History

/*============================================================*/
/*============================================================*/
/*== ==*/
/*== Player Statistics Routines ==*/
/*== ==*/
/*============================================================*/
/*============================================================*/
/*======================================================== Includes */
#include "Globals.h"
#include "UnivUtilities.h"
#include "PlayerStats.h"
/*======================================================== Functions */
/*======================================================== EraseStats */
void EraseStats (short whoBitesIt)
{
theStats[whoBitesIt - 1].tournamentTime = 0L;
theStats[whoBitesIt - 1].bestPlatinumTime = 0L;
theStats[whoBitesIt - 1].copperTitles = 0;
theStats[whoBitesIt - 1].bronzeTitles = 0;
theStats[whoBitesIt - 1].silverTitles = 0;
theStats[whoBitesIt - 1].goldTitles = 0;
theStats[whoBitesIt - 1].platinumTitles = 0;
theStats[whoBitesIt - 1].played = 0;
theStats[whoBitesIt - 1].won = 0;
theStats[whoBitesIt - 1].goals = 0;
theStats[whoBitesIt - 1].fouls = 0;
theStats[whoBitesIt - 1].criticals = 0;
theStats[whoBitesIt - 1].oppGoals = 0;
theStats[whoBitesIt - 1].oppFouls = 0;
theStats[whoBitesIt - 1].oppCriticals = 0;
theStats[whoBitesIt - 1].georgeState = kUnplayedState;
theStats[whoBitesIt - 1].maraState = kUnplayedState;
theStats[whoBitesIt - 1].ottoState = kUnplayedState;
theStats[whoBitesIt - 1].claireState = kUnplayedState;
theStats[whoBitesIt - 1].eazeState = kUnplayedState;
theStats[whoBitesIt - 1].teakState = kUnplayedState;
teaksThreshholds[whoBitesIt - 1] = 50;
}
/*======================================================== DrawStatsPopUpItem */
void DrawStatsPopUpItem (void)
{
#define kBottomMargin 5
Str255 menuItem;
short itemLeftMargin;
InsetRect(&teamsPopUpRect, 1, 1);
EraseRect(&teamsPopUpRect);
InsetRect(&teamsPopUpRect, -1, -1);
GetItem(teamsPopUp, popUpItemSelected, (StringPtr)&menuItem);
itemLeftMargin = (teamsPopUpRect.right - teamsPopUpRect.left -
StringWidth(menuItem)) / 2;
MoveTo(teamsPopUpRect.left + itemLeftMargin, teamsPopUpRect.bottom - kBottomMargin);
DrawString(menuItem);
}
/*======================================================== DrawStatsPopUp */
void DrawStatsPopUp (void)
{
#define kLeftMargin 5
#define kRightMargin 5
FrameRect(&teamsPopUpRect);
MoveTo(teamsPopUpRect.left + 1, teamsPopUpRect.bottom);
LineTo(teamsPopUpRect.right, teamsPopUpRect.bottom);
LineTo(teamsPopUpRect.right, teamsPopUpRect.top + 1);
DrawStatsPopUpItem();
}
/*======================================================== RedrawStatValues */
void RedrawStatValues (void)
{
Str255 tempStr;
Rect tempRect;
PicHandle checkPict, xPict;
short tempShort, i;
if (!isColor)
TextMode(srcXor);
PenMode(patOr);
PenPat(gray);
SetRect(&tempRect, 0, 0, 60, 35);
OffsetRect(&tempRect, 60, 72);
if (theStats[popUpItemSelected - 1].copperTitles == 0)
PaintRect(&tempRect);
else
{
ForeColor(yellowColor);
MoveTo(tempRect.right - 16, tempRect.bottom - 2);
NumToString((long)theStats[popUpItemSelected - 1].copperTitles, tempStr);
DrawString(tempStr);
ForeColor(blackColor);
}
OffsetRect(&tempRect, 66, 0);
if (theStats[popUpItemSelected - 1].bronzeTitles == 0)
PaintRect(&tempRect);
else
{
ForeColor(yellowColor);
MoveTo(tempRect.right - 16, tempRect.bottom - 2);
NumToString((long)theStats[popUpItemSelected - 1].bronzeTitles, tempStr);
DrawString(tempStr);
ForeColor(blackColor);
}
OffsetRect(&tempRect, 66, 0);
if (theStats[popUpItemSelected - 1].silverTitles == 0)
PaintRect(&tempRect);
else
{
ForeColor(yellowColor);
MoveTo(tempRect.right - 16, tempRect.bottom - 2);
NumToString((long)theStats[popUpItemSelected - 1].silverTitles, tempStr);
DrawString(tempStr);
ForeColor(blackColor);
}
OffsetRect(&tempRect, 66, 0);
if (theStats[popUpItemSelected - 1].goldTitles == 0)
PaintRect(&tempRect);
else
{
ForeColor(yellowColor);
MoveTo(tempRect.right - 16, tempRect.bottom - 2);
NumToString((long)theStats[popUpItemSelected - 1].goldTitles, tempStr);
DrawString(tempStr);
ForeColor(blackColor);
}
OffsetRect(&tempRect, 66, 0);
if (theStats[popUpItemSelected - 1].platinumTitles == 0)
PaintRect(&tempRect);
else
{
ForeColor(yellowColor);
MoveTo(tempRect.right - 16, tempRect.bottom - 2);
NumToString((long)theStats[popUpItemSelected - 1].platinumTitles, tempStr);
DrawString(tempStr);
ForeColor(blackColor);
}
PenNormal();
SetRect(&tempRect, 0, 0, 76, 17);
OffsetRect(&tempRect, 148, 120);
FillRect(&tempRect, black);
MoveTo(tempRect.left + 6, tempRect.bottom - 4);
NumToString((long)theStats[popUpItemSelected - 1].played, tempStr);
ForeColor(cyanColor);
DrawString(tempStr);
ForeColor(blackColor);
OffsetRect(&tempRect, 0, 18);
FillRect(&tempRect, black);
MoveTo(tempRect.left + 6, tempRect.bottom - 4);
NumToString((long)theStats[popUpItemSelected - 1].won, tempStr);
ForeColor(cyanColor);
DrawString(tempStr);
ForeColor(blackColor);
OffsetRect(&tempRect, 0, 18);
FillRect(&tempRect, black);
MoveTo(tempRect.left + 6, tempRect.bottom - 4);
tempShort = theStats[popUpItemSelected - 1].played -
theStats[popUpItemSelected - 1].won;
NumToString((long)tempShort, tempStr);
ForeColor(cyanColor);
DrawString(tempStr);
ForeColor(blackColor);
OffsetRect(&tempRect, 0, 18);
FillRect(&tempRect, black);
MoveTo(tempRect.left + 6, tempRect.bottom - 4);
if (theStats[popUpItemSelected - 1].played != 0)
tempShort = (short)((long)theStats[popUpItemSelected - 1].won * 100L /
(long)theStats[popUpItemSelected - 1].played);
else
tempShort = 0;
NumToString((long)tempShort, tempStr);
ForeColor(cyanColor);
DrawString(tempStr);
ForeColor(blackColor);
OffsetRect(&tempRect, 0, 22);
FillRect(&tempRect, black);
MoveTo(tempRect.left + 6, tempRect.bottom - 4);
NumToString((long)theStats[popUpItemSelected - 1].goals, tempStr);
ForeColor(redColor);
DrawString(tempStr);
ForeColor(blackColor);
OffsetRect(&tempRect, 0, 18);
FillRect(&tempRect, black);
MoveTo(tempRect.left + 6, tempRect.bottom - 4);
NumToString((long)theStats[popUpItemSelected - 1].fouls, tempStr);
ForeColor(redColor);
DrawString(tempStr);
ForeColor(blackColor);
OffsetRect(&tempRect, 0, 18);
FillRect(&tempRect, black);
MoveTo(tempRect.left + 6, tempRect.bottom - 4);
NumToString((long)theStats[popUpItemSelected - 1].criticals, tempStr);
ForeColor(redColor);
DrawString(tempStr);
ForeColor(blackColor);
OffsetRect(&tempRect, 0, 22);
FillRect(&tempRect, black);
MoveTo(tempRect.left + 6, tempRect.bottom - 4);
NumToString((long)theStats[popUpItemSelected - 1].oppGoals, tempStr);
ForeColor(magentaColor);
DrawString(tempStr);
ForeColor(blackColor);
OffsetRect(&tempRect, 0, 18);
FillRect(&tempRect, black);
MoveTo(tempRect.left + 6, tempRect.bottom - 4);
NumToString((long)theStats[popUpItemSelected - 1].oppFouls, tempStr);
ForeColor(magentaColor);
DrawString(tempStr);
ForeColor(blackColor);
OffsetRect(&tempRect, 0, 18);
FillRect(&tempRect, black);
MoveTo(tempRect.left + 6, tempRect.bottom - 4);
NumToString((long)theStats[popUpItemSelected - 1].oppCriticals, tempStr);
ForeColor(magentaColor);
DrawString(tempStr);
ForeColor(blackColor);
if (isColor)
{
checkPict = GetPicture(kCheck4PictID);
xPict = GetPicture(kX4PictID);
}
else
{
checkPict = GetPicture(kCheck1PictID);
xPict = GetPicture(kX1PictID);
}
if ((checkPict != kNilPointer) && (xPict != kNilPointer))
{
HLock((Handle)checkPict);
tempRect = (**checkPict).picFrame;
HUnlock((Handle)checkPict);
OffsetRect(&tempRect, -tempRect.left, -tempRect.top);
OffsetRect(&tempRect, 370, 158);
if (theStats[popUpItemSelected - 1].georgeState == kLostState)
DrawPicture(xPict, &tempRect);
else if (theStats[popUpItemSelected - 1].georgeState >= kWonState)
DrawPicture(checkPict, &tempRect);
else
FillRect(&tempRect, black);
OffsetRect(&tempRect, 0, 18);
if (theStats[popUpItemSelected - 1].maraState == kLostState)
DrawPicture(xPict, &tempRect);
else if (theStats[popUpItemSelected - 1].maraState >= kWonState)
DrawPicture(checkPict, &tempRect);
else
FillRect(&tempRect, black);
OffsetRect(&tempRect, 0, 18);
if (theStats[popUpItemSelected - 1].ottoState == kLostState)
DrawPicture(xPict, &tempRect);
else if (theStats[popUpItemSelected - 1].ottoState >= kWonState)
DrawPicture(checkPict, &tempRect);
else
FillRect(&tempRect, black);
OffsetRect(&tempRect, 0, 18);
if (theStats[popUpItemSelected - 1].claireState == kLostState)
DrawPicture(xPict, &tempRect);
else if (theStats[popUpItemSelected - 1].claireState >= kWonState)
DrawPicture(checkPict, &tempRect);
else
FillRect(&tempRect, black);
OffsetRect(&tempRect, 0, 18);
if (theStats[popUpItemSelected - 1].eazeState == kLostState)
DrawPicture(xPict, &tempRect);
else if (theStats[popUpItemSelected - 1].eazeState >= kWonState)
DrawPicture(checkPict, &tempRect);
else
FillRect(&tempRect, black);
OffsetRect(&tempRect, 0, 18);
if (theStats[popUpItemSelected - 1].teakState == kLostState)
DrawPicture(xPict, &tempRect);
else if (theStats[popUpItemSelected - 1].teakState >= kWonState)
DrawPicture(checkPict, &tempRect);
else
FillRect(&tempRect, black);
ReleaseResource((Handle)checkPict);
ReleaseResource((Handle)xPict);
}
}
/*======================================================== UpdateStatsDialog */
void UpdateStatsDialog (DialogPtr theDialog)
{
PicHandle thePict;
Handle iHandle;
Rect iRect;
Str255 theTitle;
short iType;
DrawDialog(theDialog);
GetDItem(theDialog, kStatsTitles, &iType, &iHandle, &iRect);
if (isColor)
thePict = GetPicture(kTitles4PictID);
else
thePict = GetPicture(kTitles1PictID);
if (thePict != kNilPointer)
{
DrawPicture(thePict, &iRect);
ReleaseResource((Handle)thePict);
}
GetDItem(theDialog, kStatsTallys, &iType, &iHandle, &iRect);
if (isColor)
thePict = GetPicture(kTallys4PictID);
else
thePict = GetPicture(kTallys1PictID);
if (thePict != kNilPointer)
{
DrawPicture(thePict, &iRect);
ReleaseResource((Handle)thePict);
}
GetDItem(theDialog, kStatsDefeated, &iType, &iHandle, &iRect);
if (isColor)
thePict = GetPicture(kDefeated4PictID);
else
thePict = GetPicture(kDefeated1PictID);
if (thePict != kNilPointer)
{
DrawPicture(thePict, &iRect);
ReleaseResource((Handle)thePict);
}
GetDItem(theDialog, kStatsBalloon, &iType, &iHandle, &iRect);
if (isColor)
thePict = GetPicture(kBalloon4PictID);
else
thePict = GetPicture(kBalloon1PictID);
if (thePict != kNilPointer)
{
DrawPicture(thePict, &iRect);
ReleaseResource((Handle)thePict);
}
GetIndString(theTitle, rMiscStrings, 5);
if (theTitle[0] == 0)
PasStringCopy((StringPtr)"\pPlayer Stats<74>", (StringPtr)theTitle);
MoveTo(kStatsTitleLeft, kStatsTitleTop);
DrawString(theTitle);
RedrawStatValues();
DrawStatsPopUp();
DrawDefaultButton(theDialog, kStatsOkay);
}
/*======================================================== DoStatsPopUpSelect */
void DoStatsPopUpSelect (DialogPtr theDialog)
{
Point popUpperLeft;
long theChoice;
popUpperLeft.v = teamsPopUpRect.top + 1;
popUpperLeft.h = teamsPopUpRect.left;
LocalToGlobal(&popUpperLeft);
theChoice = PopUpMenuSelect(teamsPopUp, popUpperLeft.v, popUpperLeft.h,
popUpItemSelected);
if (LoWrd(theChoice) > 0)
{
popUpItemSelected = LoWrd(theChoice);
DrawStatsPopUpItem();
UpdateStatsDialog(theDialog);
RedrawStatValues();
}
}
/*======================================================== StatsFilter */
pascal Boolean StatsFilter (DialogPtr theDialog, EventRecord *theEvent, short *itemHit)
{
switch (theEvent->what)
{
case keyDown:
switch ((theEvent->message) & charCodeMask)
{
case kReturnKeyASCII:
case kEnterKeyASCII:
FlashDialogButton(theDialog, kStatsOkay);
*itemHit = kStatsOkay;
return(TRUE);
break;
default:
return(FALSE);
}
break;
case updateEvt:
BeginUpdate((GrafPtr)theDialog);
UpdateStatsDialog(theDialog);
EndUpdate((GrafPtr)theDialog);
theEvent->what = nullEvent;
return(FALSE);
break;
default:
return(FALSE);
break;
}
}
/*======================================================== DoPlayerStats */
Boolean DoPlayerStats (void)
{
DialogPtr statsDialog;
Handle iHandle;
Rect iRect;
short itemHit, iType, i, sheSaid;
Boolean leaveDialog, userOkayed, wasState;
CenterDialog(rStatsDialogID);
if (doZooms)
ZoomOutDialogRect(rStatsDialogID);
statsDialog = GetNewDialog(rStatsDialogID, kNilPointer, kPutInFront);
SetPort((GrafPtr)statsDialog);
ShowWindow((GrafPtr)statsDialog);
teamsPopUp = GetMenu(kStatsPopMenuID);
if (teamsPopUp == kNilPointer)
DeathError(kErrNoResource);
InsertMenu(teamsPopUp, -1);
HLock((Handle)teamsPopUp);
teamsPopUpWidth = StringWidth((**teamsPopUp).menuData);
HUnlock((Handle)teamsPopUp);
for (i = 0; i < 10; i++)
{
SetItem(teamsPopUp, i + 1, (StringPtr)theNames[i]);
}
GetDItem(statsDialog, kStatsPopUp, &iType, &iHandle, &teamsPopUpRect);
popUpItemSelected = whichHumanNumber;
UpdateStatsDialog(statsDialog);
leaveDialog = FALSE;
while (!leaveDialog)
{
ModalDialog(StatsFilter, &itemHit);
switch (itemHit)
{
case kStatsOkay:
whichHumanNumber = popUpItemSelected;
userOkayed = TRUE;
leaveDialog = TRUE;
break;
case kStatsPopUp:
DoStatsPopUpSelect(statsDialog);
break;
case kStatsErase:
CenterAlert(rEraseStatsAlertID);
sheSaid = Alert(rEraseStatsAlertID, kNilPointer);
if (sheSaid != kEraseStatsOkay)
EraseStats(popUpItemSelected);
UpdateStatsDialog(statsDialog);
break;
default:
break;
}
}
DisposDialog(statsDialog);
return (userOkayed);
}
/*======================================================== ResetWorldRecords */
void ResetWorldRecords (void)
{
PasStringCopy((StringPtr)"\pNo one", (StringPtr)mostTitlesName);
GetDateTime((unsigned long *)&mostTitlesDate);
mostTitles = 0;
PasStringCopy((StringPtr)"\pNo one", (StringPtr)mostPointsName);
GetDateTime((unsigned long *)&mostPointsDate);
mostPoints = 0;
PasStringCopy((StringPtr)"\pNo one", (StringPtr)mostFoulsName);
GetDateTime((unsigned long *)&mostFoulsDate);
mostFouls = 0;
PasStringCopy((StringPtr)"\pNo one", (StringPtr)mostCritsName);
GetDateTime((unsigned long *)&mostCritsDate);
mostCrits = 0;
}