mirror of
https://github.com/softdorothy/Pararena2.git
synced 2024-10-31 22:06:48 +00:00
806b9b47db
This project was originally compiled with THINK C for the Macintosh. The project file is a THINK C project file. Then there is the assembly static library (SMS) that is linked in to provide fast, 4-channel sound (written by Patrick Buckland). Resource files, a balloon file for “balloon help” when it was a thing…. Good luck to anyone trying to bring this beast back to life.
1 line
19 KiB
C
Executable File
1 line
19 KiB
C
Executable File
/*============================================================*/
|
||
/*============================================================*/
|
||
/*== ==*/
|
||
/*== Team Set-Up Routines ==*/
|
||
/*== ==*/
|
||
/*============================================================*/
|
||
/*============================================================*/
|
||
|
||
|
||
/*======================================================== Includes */
|
||
|
||
#include "Globals.h"
|
||
#include "UnivUtilities.h"
|
||
#include "TeamSetUp.h"
|
||
#include "MainWindow.h"
|
||
#include "Menu.h"
|
||
|
||
|
||
/*======================================================== Local Variables */
|
||
|
||
Rect leftStandRect, rightStandRect, teamsLabelRect, teamsPopUpRect;
|
||
Rect iconRects[8];
|
||
MenuHandle teamsPopUp;
|
||
short leftSelected, rightSelected, teamsPopUpWidth, popUpItemSelected;
|
||
|
||
|
||
/*======================================================== Functions */
|
||
/*======================================================== WhosOnFirst */
|
||
|
||
void WhosOnFirst (void)
|
||
|
||
{
|
||
if (leftPlayerNumber == kHumanPlayer)
|
||
{
|
||
leftGoalIsPlayers = TRUE;
|
||
thePlayer.persona = kHumanPlayer;
|
||
theOpponent.persona = rightPlayerNumber;
|
||
thePlayer.whichGoal = kLeftGoal;
|
||
theOpponent.whichGoal = kRightGoal;
|
||
disableBoardCursor = FALSE;
|
||
leftGoalLeague = isLeague;
|
||
if (netGameInSession)
|
||
rightGoalLeague = theirLeague;
|
||
else
|
||
rightGoalLeague = kProfessional;
|
||
|
||
if (arenaSize == kLargeArena)
|
||
{
|
||
thePlayer.initXPos = kLgInitLeftXPos;
|
||
thePlayer.initZPos = kLgInitLeftZPos;
|
||
theOpponent.initXPos = kLgInitRightXPos;
|
||
theOpponent.initZPos = kLgInitRightZPos;
|
||
}
|
||
else
|
||
{
|
||
thePlayer.initXPos = kSmInitLeftXPos;
|
||
thePlayer.initZPos = kSmInitLeftZPos;
|
||
theOpponent.initXPos = kSmInitRightXPos;
|
||
theOpponent.initZPos = kSmInitRightZPos;
|
||
}
|
||
}
|
||
else if (rightPlayerNumber == kHumanPlayer)
|
||
{
|
||
leftGoalIsPlayers = FALSE;
|
||
thePlayer.persona = kHumanPlayer;
|
||
theOpponent.persona = leftPlayerNumber;
|
||
thePlayer.whichGoal = kRightGoal;
|
||
theOpponent.whichGoal = kLeftGoal;
|
||
disableBoardCursor = FALSE;
|
||
|
||
rightGoalLeague = isLeague;
|
||
if (netGameInSession)
|
||
leftGoalLeague = theirLeague;
|
||
else
|
||
leftGoalLeague = kProfessional;
|
||
|
||
if (arenaSize == kLargeArena)
|
||
{
|
||
thePlayer.initXPos = kLgInitRightXPos;
|
||
thePlayer.initZPos = kLgInitRightZPos;
|
||
theOpponent.initXPos = kLgInitLeftXPos;
|
||
theOpponent.initZPos = kLgInitLeftZPos;
|
||
}
|
||
else
|
||
{
|
||
thePlayer.initXPos = kSmInitRightXPos;
|
||
thePlayer.initZPos = kSmInitRightZPos;
|
||
theOpponent.initXPos = kSmInitLeftXPos;
|
||
theOpponent.initZPos = kSmInitLeftZPos;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
leftGoalIsPlayers = TRUE;
|
||
thePlayer.persona = leftPlayerNumber;
|
||
theOpponent.persona = rightPlayerNumber;
|
||
thePlayer.whichGoal = kLeftGoal;
|
||
theOpponent.whichGoal = kRightGoal;
|
||
leftGoalLeague = kProfessional;
|
||
rightGoalLeague = kProfessional;
|
||
disableBoardCursor = TRUE;
|
||
|
||
if (arenaSize == kLargeArena)
|
||
{
|
||
thePlayer.initXPos = kLgInitLeftXPos;
|
||
thePlayer.initZPos = kLgInitLeftZPos;
|
||
theOpponent.initXPos = kLgInitRightXPos;
|
||
theOpponent.initZPos = kLgInitRightZPos;
|
||
}
|
||
else
|
||
{
|
||
thePlayer.initXPos = kSmInitLeftXPos;
|
||
thePlayer.initZPos = kSmInitLeftZPos;
|
||
theOpponent.initXPos = kSmInitRightXPos;
|
||
theOpponent.initZPos = kSmInitRightZPos;
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
/*======================================================== UpdateLeftStand */
|
||
|
||
void UpdateLeftStand (DialogPtr theDialog)
|
||
|
||
{
|
||
Rect theRect;
|
||
CIconHandle theCIcon;
|
||
Handle itemHandle, theIcon;
|
||
short itemType;
|
||
|
||
GetDItem(theDialog, kLeftStandItem, &itemType, &itemHandle, &theRect);
|
||
if (isColor)
|
||
{
|
||
if ((leftSelected == kNetHuman) && (!canNetwork))
|
||
theCIcon = GetCIcon(1009);
|
||
else
|
||
theCIcon = GetCIcon(1001 + leftSelected);
|
||
PlotCIcon(&theRect, theCIcon);
|
||
DisposCIcon(theCIcon);
|
||
}
|
||
else
|
||
{
|
||
if ((leftSelected == kNetHuman) && (!canNetwork))
|
||
theIcon = GetIcon(1009);
|
||
else
|
||
theIcon = GetIcon(1001 + leftSelected);
|
||
PlotIcon(&theRect, theIcon);
|
||
}
|
||
}
|
||
|
||
|
||
/*======================================================== UpdateRightStand */
|
||
|
||
void UpdateRightStand (DialogPtr theDialog)
|
||
|
||
{
|
||
Rect theRect;
|
||
CIconHandle theCIcon;
|
||
Handle itemHandle, theIcon;
|
||
short itemType;
|
||
|
||
GetDItem(theDialog, kRightStandItem, &itemType, &itemHandle, &theRect);
|
||
if (isColor)
|
||
{
|
||
if ((rightSelected == kNetHuman) && (!canNetwork))
|
||
theCIcon = GetCIcon(1009);
|
||
else
|
||
theCIcon = GetCIcon(1001 + rightSelected);
|
||
PlotCIcon(&theRect, theCIcon);
|
||
DisposCIcon(theCIcon);
|
||
}
|
||
else
|
||
{
|
||
if ((rightSelected == kNetHuman) && (!canNetwork))
|
||
theIcon = GetIcon(1009);
|
||
else
|
||
theIcon = GetIcon(1001 + rightSelected);
|
||
PlotIcon(&theRect, theIcon);
|
||
}
|
||
}
|
||
|
||
|
||
/*======================================================== DrawTeamsPopUpItem */
|
||
|
||
void DrawTeamsPopUpItem (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);
|
||
}
|
||
|
||
|
||
/*======================================================== DrawTeamsPopUp */
|
||
|
||
void DrawTeamsPopUp (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);
|
||
|
||
teamsLabelRect.top = teamsPopUpRect.top + 1;
|
||
teamsLabelRect.left = teamsPopUpRect.left - teamsPopUpWidth -
|
||
kLeftMargin - kRightMargin;
|
||
teamsLabelRect.right = teamsPopUpRect.left;
|
||
teamsLabelRect.bottom = teamsPopUpRect.bottom;
|
||
|
||
DrawTeamsPopUpItem();
|
||
}
|
||
|
||
|
||
/*======================================================== RedrawStandNames */
|
||
|
||
void RedrawStandNames (DialogPtr theDialog)
|
||
|
||
{
|
||
Str255 theName;
|
||
Rect theRect, eraseArea;
|
||
Handle itemHandle;
|
||
short itemType, i, isWide;
|
||
|
||
TextFont(geneva);
|
||
TextSize(9);
|
||
|
||
GetDItem(theDialog, kLeftStandItem, &itemType, &itemHandle, &theRect);
|
||
SetRect(&eraseArea, 0, 0, 64, 12);
|
||
OffsetRect(&eraseArea, theRect.left - 16, theRect.bottom + 2);
|
||
EraseRect(&eraseArea);
|
||
GetIndString(theName, rNamesStringID, leftSelected + 1);
|
||
isWide = StringWidth(theName);
|
||
MoveTo(theRect.left + 16 - (isWide / 2), theRect.bottom + 12);
|
||
DrawString(theName);
|
||
|
||
GetDItem(theDialog, kRightStandItem, &itemType, &itemHandle, &theRect);
|
||
SetRect(&eraseArea, 0, 0, 64, 12);
|
||
OffsetRect(&eraseArea, theRect.left - 16, theRect.bottom + 2);
|
||
EraseRect(&eraseArea);
|
||
GetIndString(theName, rNamesStringID, rightSelected + 1);
|
||
isWide = StringWidth(theName);
|
||
MoveTo(theRect.left + 16 - (isWide / 2), theRect.bottom + 12);
|
||
DrawString(theName);
|
||
|
||
TextFont(systemFont);
|
||
TextSize(12);
|
||
}
|
||
|
||
|
||
/*======================================================== RedrawNetIcon */
|
||
|
||
void RedrawNetIcon (DialogPtr theDialog)
|
||
|
||
{
|
||
Rect theRect;
|
||
CIconHandle theCIcon;
|
||
Handle itemHandle, theIcon;
|
||
short itemType;
|
||
|
||
GetDItem(theDialog, kNetIconItem, &itemType, &itemHandle, &theRect);
|
||
if (!canNetwork)
|
||
{
|
||
if (isColor)
|
||
{
|
||
theCIcon = GetCIcon(1009);
|
||
PlotCIcon(&theRect, theCIcon);
|
||
DisposCIcon(theCIcon);
|
||
}
|
||
else
|
||
{
|
||
theIcon = GetIcon(1009);
|
||
PlotIcon(&theRect, theIcon);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (isColor)
|
||
{
|
||
theCIcon = GetCIcon(1008);
|
||
PlotCIcon(&theRect, theCIcon);
|
||
DisposCIcon(theCIcon);
|
||
}
|
||
else
|
||
{
|
||
theIcon = GetIcon(1008);
|
||
PlotIcon(&theRect, theIcon);
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
/*======================================================== GrayOutIcons */
|
||
|
||
void GrayOutIcons (DialogPtr theDialog)
|
||
|
||
{
|
||
Rect theRect;
|
||
Handle itemHandle;
|
||
short itemType, i;
|
||
|
||
PenNormal();
|
||
PenPat(gray);
|
||
PenMode(srcBic);
|
||
#if kDemoVersion
|
||
for (i = 2; i <= 6; i++)
|
||
{
|
||
GetDItem(theDialog, kUserIconItem + i, &itemType, &itemHandle, &theRect);
|
||
PaintRect(&theRect);
|
||
}
|
||
#else
|
||
for (i = 1; i <= 6; i++)
|
||
{
|
||
GetDItem(theDialog, kUserIconItem + i, &itemType, &itemHandle, &theRect);
|
||
PaintRect(&theRect);
|
||
}
|
||
#endif
|
||
PenNormal();
|
||
}
|
||
|
||
|
||
/*======================================================== UpdateTeamsDialog */
|
||
|
||
void UpdateTeamsDialog (DialogPtr theDialog)
|
||
|
||
{
|
||
Str255 theName;
|
||
Rect theRect;
|
||
PicHandle thePict;
|
||
CIconHandle theCIcon;
|
||
Handle itemHandle, theIcon;
|
||
short itemType, i, isWide;
|
||
|
||
DrawDialog((GrafPtr)theDialog);
|
||
RedrawNetIcon(theDialog);
|
||
|
||
GetDItem(theDialog, kPowBalloonItem, &itemType, &itemHandle, &theRect);
|
||
if (isColor)
|
||
thePict = GetPicture(kBalloon4PictID);
|
||
else
|
||
thePict = GetPicture(kBalloon1PictID);
|
||
if (thePict != kNilPointer)
|
||
{
|
||
DrawPicture(thePict, &theRect);
|
||
ReleaseResource((Handle)thePict);
|
||
}
|
||
|
||
GetDItem(theDialog, kStandsItem, &itemType, &itemHandle, &theRect);
|
||
if (isColor)
|
||
thePict = GetPicture(rTeamsStandPictID4);
|
||
else
|
||
thePict = GetPicture(rTeamsStandPictID1);
|
||
if (thePict != kNilPointer)
|
||
{
|
||
DrawPicture(thePict, &theRect);
|
||
ReleaseResource((Handle)thePict);
|
||
}
|
||
|
||
GetDItem(theDialog, kSeperatorItem, &itemType, &itemHandle, &theRect);
|
||
if (isColor)
|
||
thePict = GetPicture(rTeamsSeperatorPictID4);
|
||
else
|
||
thePict = GetPicture(rTeamsSeperatorPictID1);
|
||
if (thePict != kNilPointer)
|
||
{
|
||
DrawPicture(thePict, &theRect);
|
||
ReleaseResource((Handle)thePict);
|
||
}
|
||
|
||
UpdateLeftStand(theDialog);
|
||
UpdateRightStand(theDialog);
|
||
DrawTeamsPopUp();
|
||
|
||
GetDItem(theDialog, kArenaFrameItem, &itemType, &itemHandle, &theRect);
|
||
FrameRect(&theRect);
|
||
|
||
GetIndString(theName, rMiscStrings, 13);
|
||
if (theName[0] == 0)
|
||
PasStringCopy((StringPtr)"\pSelect Opponent<6E>", (StringPtr)theName);
|
||
MoveTo(kTeamsTitleLeft, kTeamsTitleTop);
|
||
DrawString(theName);
|
||
|
||
TextFont(geneva);
|
||
TextSize(9);
|
||
for (i = 1; i < 9; i++)
|
||
{
|
||
GetDItem(theDialog, i + 3, &itemType, &itemHandle, &theRect);
|
||
GetIndString(theName, rNamesStringID, i);
|
||
isWide = StringWidth(theName);
|
||
MoveTo(theRect.left + 16 - (isWide / 2), theRect.bottom + 12);
|
||
DrawString(theName);
|
||
}
|
||
TextFont(systemFont);
|
||
TextSize(12);
|
||
|
||
if (netOnly)
|
||
GrayOutIcons(theDialog);
|
||
|
||
#if kDemoVersion
|
||
GrayOutIcons(theDialog);
|
||
#endif
|
||
|
||
RedrawStandNames(theDialog);
|
||
|
||
DrawDefaultButton(theDialog, kButtItemOkay);
|
||
}
|
||
|
||
|
||
/*======================================================== DoDragIcon */
|
||
|
||
void DoDragIcon (DialogPtr theDialog, Point mousePt, short whichIcon)
|
||
|
||
{
|
||
Rect srcRect, dragRect;
|
||
Point dragPt;
|
||
|
||
srcRect = iconRects[whichIcon];
|
||
|
||
PenMode(patOr);
|
||
PenPat(gray);
|
||
PaintRect(&srcRect);
|
||
|
||
dragRect = srcRect;
|
||
PenMode(patXor);
|
||
FrameRect(&dragRect);
|
||
|
||
while (Button())
|
||
{
|
||
GetMouse(&dragPt);
|
||
if ((dragPt.h != mousePt.h) || (dragPt.v != mousePt.v))
|
||
{
|
||
FrameRect(&dragRect);
|
||
if (PtInRect(mousePt, &leftStandRect) !=
|
||
PtInRect(dragPt, &leftStandRect))
|
||
{
|
||
PenPat(black);
|
||
PenSize(2, 2);
|
||
InsetRect(&leftStandRect, -3, -3);
|
||
FrameRect(&leftStandRect);
|
||
InsetRect(&leftStandRect, 3, 3);
|
||
PenSize(1, 1);
|
||
PenPat(gray);
|
||
}
|
||
else if (PtInRect(mousePt, &rightStandRect) !=
|
||
PtInRect(dragPt, &rightStandRect))
|
||
{
|
||
PenPat(black);
|
||
PenSize(2, 2);
|
||
InsetRect(&rightStandRect, -3, -3);
|
||
FrameRect(&rightStandRect);
|
||
InsetRect(&rightStandRect, 3, 3);
|
||
PenSize(1, 1);
|
||
PenPat(gray);
|
||
}
|
||
OffsetRect(&dragRect, dragPt.h - mousePt.h, dragPt.v - mousePt.v);
|
||
FrameRect(&dragRect);
|
||
mousePt = dragPt;
|
||
}
|
||
}
|
||
|
||
FrameRect(&dragRect);
|
||
DrawDialog(theDialog);
|
||
if (netOnly)
|
||
GrayOutIcons(theDialog);
|
||
#if kDemoVersion
|
||
GrayOutIcons(theDialog);
|
||
#endif
|
||
RedrawNetIcon(theDialog);
|
||
|
||
if (PtInRect(dragPt, &leftStandRect))
|
||
{
|
||
PenPat(black);
|
||
PenSize(2, 2);
|
||
InsetRect(&leftStandRect, -3, -3);
|
||
FrameRect(&leftStandRect);
|
||
InsetRect(&leftStandRect, 3, 3);
|
||
PenNormal();
|
||
leftSelected = whichIcon;
|
||
UpdateLeftStand(theDialog);
|
||
}
|
||
else if (PtInRect(dragPt, &rightStandRect))
|
||
{
|
||
PenPat(black);
|
||
PenSize(2, 2);
|
||
InsetRect(&rightStandRect, -3, -3);
|
||
FrameRect(&rightStandRect);
|
||
InsetRect(&rightStandRect, 3, 3);
|
||
PenNormal();
|
||
rightSelected = whichIcon;
|
||
UpdateRightStand(theDialog);
|
||
}
|
||
else
|
||
{
|
||
if (rightSelected == kHumanPlayer)
|
||
{
|
||
if (whichIcon != kHumanPlayer)
|
||
{
|
||
leftSelected = whichIcon;
|
||
UpdateLeftStand(theDialog);
|
||
}
|
||
}
|
||
else if (leftSelected == kHumanPlayer)
|
||
{
|
||
if (whichIcon != kHumanPlayer)
|
||
{
|
||
rightSelected = whichIcon;
|
||
UpdateRightStand(theDialog);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (whichIcon == kHumanPlayer)
|
||
{
|
||
leftSelected = whichIcon;
|
||
UpdateLeftStand(theDialog);
|
||
}
|
||
else
|
||
{
|
||
rightSelected = whichIcon;
|
||
UpdateRightStand(theDialog);
|
||
}
|
||
}
|
||
}
|
||
|
||
PenNormal();
|
||
RedrawStandNames(theDialog);
|
||
}
|
||
|
||
|
||
/*======================================================== SwapLeftAndRightSelected */
|
||
|
||
void SwapLeftAndRightSelected (DialogPtr theDialog)
|
||
|
||
{
|
||
short tempShort;
|
||
|
||
tempShort = leftSelected;
|
||
leftSelected = rightSelected;
|
||
rightSelected = tempShort;
|
||
|
||
UpdateLeftStand(theDialog);
|
||
UpdateRightStand(theDialog);
|
||
RedrawStandNames(theDialog);
|
||
}
|
||
|
||
|
||
/*======================================================== DoTeamsPopUpSelect */
|
||
|
||
void DoTeamsPopUpSelect (void)
|
||
|
||
{
|
||
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);
|
||
DrawTeamsPopUpItem();
|
||
}
|
||
}
|
||
|
||
|
||
/*======================================================== TeamsFilter */
|
||
|
||
pascal Boolean TeamsFilter (DialogPtr theDialog, EventRecord *theEvent, short *itemHit)
|
||
|
||
{
|
||
Point mousePt;
|
||
Handle itemHandle;
|
||
short i, iconSelected, itemType;
|
||
Boolean eventHandled;
|
||
|
||
eventHandled = FALSE;
|
||
|
||
switch (theEvent->what)
|
||
{
|
||
case keyDown:
|
||
switch ((theEvent->message) & charCodeMask)
|
||
{
|
||
case kReturnKeyASCII:
|
||
FlashDialogButton(theDialog, kButtItemOkay);
|
||
*itemHit = kButtItemOkay;
|
||
eventHandled = TRUE;
|
||
break;
|
||
default:
|
||
eventHandled = FALSE;
|
||
}
|
||
break;
|
||
case mouseDown:
|
||
mousePt = theEvent->where;
|
||
GlobalToLocal(&mousePt);
|
||
|
||
if (PtInRect(mousePt, &teamsPopUpRect))
|
||
{
|
||
DoTeamsPopUpSelect();
|
||
eventHandled = TRUE;
|
||
}
|
||
else if ((PtInRect(mousePt, &leftStandRect)) ||
|
||
(PtInRect(mousePt, &rightStandRect)))
|
||
{
|
||
SwapLeftAndRightSelected(theDialog);
|
||
}
|
||
else
|
||
{
|
||
iconSelected = -1;
|
||
for (i = 0; i < 8; i++)
|
||
{
|
||
if (PtInRect(mousePt, &iconRects[i]))
|
||
iconSelected = i;
|
||
}
|
||
if ((iconSelected == 7) && (!canNetwork))
|
||
iconSelected = -1;
|
||
if ((netOnly) && (iconSelected >= 1) && (iconSelected <= 6))
|
||
iconSelected = -1;
|
||
#if kDemoVersion
|
||
if ((iconSelected >= 2) && (iconSelected <= 6))
|
||
iconSelected = -1;
|
||
#endif
|
||
if (iconSelected != -1)
|
||
{
|
||
DoDragIcon(theDialog, mousePt, iconSelected);
|
||
eventHandled = TRUE;
|
||
}
|
||
else
|
||
eventHandled = FALSE;
|
||
}
|
||
break;
|
||
case mouseUp:
|
||
mousePt = theEvent->where;
|
||
GlobalToLocal(&mousePt);
|
||
break;
|
||
case updateEvt:
|
||
BeginUpdate((GrafPtr)theDialog);
|
||
UpdateTeamsDialog(theDialog);
|
||
EndUpdate((GrafPtr)theDialog);
|
||
theEvent->what = nullEvent;
|
||
eventHandled = FALSE;
|
||
break;
|
||
case nullEvent:
|
||
mousePt = theEvent->where;
|
||
GlobalToLocal(&mousePt);
|
||
iconSelected = -1;
|
||
for (i = 0; i < 8; i++)
|
||
{
|
||
if (PtInRect(mousePt, &iconRects[i]))
|
||
iconSelected = i;
|
||
}
|
||
if ((iconSelected == 7) && (!canNetwork))
|
||
iconSelected = -1;
|
||
if ((netOnly) && (iconSelected >= 1) && (iconSelected <= 6))
|
||
iconSelected = -1;
|
||
#if kDemoVersion
|
||
if ((iconSelected >= 2) && (iconSelected <= 6))
|
||
iconSelected = -1;
|
||
#endif
|
||
if (iconSelected != -1)
|
||
SetCursor(&handCursor);
|
||
else
|
||
SetCursor(&arrow);
|
||
eventHandled = FALSE;
|
||
break;
|
||
default:
|
||
eventHandled = FALSE;
|
||
break;
|
||
}
|
||
|
||
return (eventHandled);
|
||
}
|
||
|
||
|
||
/*======================================================== DoTeamsSetUp */
|
||
|
||
Boolean DoTeamsSetUp (void)
|
||
|
||
{
|
||
#define kSelectString 15
|
||
#define kNetOnlyString 16
|
||
#define kDemoSelectString 25
|
||
Str255 tempString;
|
||
DialogPtr teamsDialog;
|
||
Handle iHandle;
|
||
Rect iRect;
|
||
short iType, itemHit, i;
|
||
Boolean leaveDialog, userOkayed, tempBool;
|
||
|
||
#if kDemoVersion
|
||
GetIndString(tempString, rMiscStrings, kDemoSelectString);
|
||
#else
|
||
if (netOnly)
|
||
GetIndString(tempString, rMiscStrings, kNetOnlyString);
|
||
else
|
||
GetIndString(tempString, rMiscStrings, kSelectString);
|
||
#endif
|
||
if (tempString[0] != 0)
|
||
ParamText(tempString, "\p", "\p", "\p");
|
||
else
|
||
ParamText(tempString, "\pSelect two players to play one another", "\p", "\p");
|
||
|
||
CenterDialog(rTeamsDialogID);
|
||
if (doZooms)
|
||
ZoomOutDialogRect(rTeamsDialogID);
|
||
teamsDialog = GetNewDialog(rTeamsDialogID, kNilPointer, kPutInFront);
|
||
if (teamsDialog == kNilPointer)
|
||
DeathError(kErrNoResource);
|
||
|
||
teamsPopUp = GetMenu(kTeamsPopMenuID);
|
||
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]);
|
||
}
|
||
|
||
popUpItemSelected = whichHumanNumber;
|
||
|
||
leftSelected = leftPlayerNumber;
|
||
rightSelected = rightPlayerNumber;
|
||
|
||
GetDItem(teamsDialog, kCheckTeamsAuto, &iType, &iHandle, &iRect);
|
||
SetCtlValue((ControlHandle)iHandle, (short)autoTeamsDialog);
|
||
|
||
GetDItem(teamsDialog, kUserPopUpItem, &iType, &iHandle, &teamsPopUpRect);
|
||
|
||
GetDItem(teamsDialog, kLeftStandItem, &iType, &iHandle, &leftStandRect);
|
||
GetDItem(teamsDialog, kRightStandItem, &iType, &iHandle, &rightStandRect);
|
||
for (i = 0; i < 8; i++)
|
||
GetDItem(teamsDialog, kUserIconItem + i, &iType, &iHandle, &iconRects[i]);
|
||
|
||
SetPort((GrafPtr)teamsDialog); /* Bring up the dialog */
|
||
ShowWindow((GrafPtr)teamsDialog);
|
||
|
||
UpdateTeamsDialog(teamsDialog);
|
||
|
||
leaveDialog = FALSE;
|
||
|
||
while (leaveDialog == FALSE)
|
||
{
|
||
ModalDialog(TeamsFilter, &itemHit);
|
||
|
||
switch (itemHit)
|
||
{
|
||
case kButtItemOkay:
|
||
if ((leftSelected == kHumanPlayer) && (rightSelected == kHumanPlayer))
|
||
{
|
||
MinorError(kMinor2HumanPlayers);
|
||
}
|
||
else if (((leftSelected == kNetHuman) && (rightSelected != kHumanPlayer)) ||
|
||
((leftSelected != kHumanPlayer) && (rightSelected == kNetHuman)))
|
||
{
|
||
MinorError(kMinor2NetPlayers);
|
||
}
|
||
else
|
||
{
|
||
userOkayed = TRUE;
|
||
leaveDialog = TRUE;
|
||
whichHumanNumber = popUpItemSelected;
|
||
leftPlayerNumber = leftSelected;
|
||
rightPlayerNumber = rightSelected;
|
||
GetDItem(teamsDialog, kCheckTeamsAuto, &iType, &iHandle, &iRect);
|
||
autoTeamsDialog = (Boolean)GetCtlValue((ControlHandle)iHandle);
|
||
}
|
||
break;
|
||
case kButtItemCancel:
|
||
userOkayed = FALSE;
|
||
leaveDialog = TRUE;
|
||
break;
|
||
case kCheckTeamsAuto:
|
||
GetDItem(teamsDialog, itemHit, &iType, &iHandle, &iRect);
|
||
tempBool = (Boolean)GetCtlValue((ControlHandle)iHandle);
|
||
tempBool = !tempBool;
|
||
SetCtlValue((ControlHandle)iHandle, (short)tempBool);
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
InitCursor();
|
||
DisposDialog(teamsDialog);
|
||
return (userOkayed);
|
||
}
|
||
|