mirror of
https://github.com/softdorothy/GliderPRO.git
synced 2025-02-16 19:31:09 +00:00
1 line
8.2 KiB
C
1 line
8.2 KiB
C
|
//============================================================================
//----------------------------------------------------------------------------
// HouseInfo.c
//----------------------------------------------------------------------------
//============================================================================
#include <NumberFormatting.h>
#include "Externs.h"
#include "DialogUtils.h"
#define kHouseInfoDialogID 1001
#define kBannerTextItem 4
#define kLockHouseButton 6
#define kClearScoresButton 9
#define kTrailerTextItem 11
#define kNoPhoneCheck 14
#define kBannerNCharsItem 15
#define kTrailerNCharsItem 16
#define kHouseSizeItem 18
#define kLockHouseAlert 1029
#define kZeroScoresAlert 1032
long CountTotalHousePoints (void);
void UpdateHouseInfoDialog (DialogPtr);
pascal Boolean HouseFilter (DialogPtr, EventRecord *, short *);
Boolean WarnLockingHouse (void);
void HowToZeroScores (void);
Str255 banner, trailer;
Rect houseEditText1, houseEditText2;
short houseCursorIs;
Boolean keyHit, tempPhoneBit;
extern Cursor beamCursor;
extern Boolean noRoomAtAll, changeLockStateOfHouse, saveHouseLocked;
extern Boolean phoneBitSet;
#ifndef COMPILEDEMO
//============================================================== Functions
//-------------------------------------------------------------- CountTotalHousePoints
// The following functions all handle the "House Info" dialog in the editor.
long CountTotalHousePoints (void)
{
long pointTotal;
short numRooms, h, i;
char wasState;
pointTotal = (long)RealRoomNumberCount() * (long)kRoomVisitScore;
wasState = HGetState((Handle)thisHouse);
HLock((Handle)thisHouse);
numRooms = (*thisHouse)->nRooms;
for (i = 0; i < numRooms; i++)
{
if ((*thisHouse)->rooms[i].suite != kRoomIsEmpty)
{
for (h = 0; h < kMaxRoomObs; h++)
{
switch ((*thisHouse)->rooms[i].objects[h].what)
{
case kRedClock:
pointTotal += kRedClockPoints;
break;
case kBlueClock:
pointTotal += kBlueClockPoints;
break;
case kYellowClock:
pointTotal += kYellowClockPoints;
break;
case kCuckoo:
pointTotal += kCuckooClockPoints;
break;
case kStar:
pointTotal += kStarPoints;
break;
case kInvisBonus:
pointTotal += (*thisHouse)->rooms[i].objects[h].data.c.points;
break;
default:
break;
}
}
}
}
HSetState((Handle)thisHouse, wasState);
return (pointTotal);
}
//-------------------------------------------------------------- UpdateHouseInfoDialog
void UpdateHouseInfoDialog (DialogPtr theDialog)
{
short nChars;
DrawDialog(theDialog);
nChars = GetDialogStringLen(theDialog, kBannerTextItem);
SetDialogNumToStr(theDialog, kBannerNCharsItem, (long)nChars);
nChars = GetDialogStringLen(theDialog, kTrailerTextItem);
SetDialogNumToStr(theDialog, kTrailerNCharsItem, (long)nChars);
SetDialogNumToStr(theDialog, kHouseSizeItem, CountTotalHousePoints());
FrameDialogItemC(theDialog, 10, kRedOrangeColor8);
SetDialogItemValue(theDialog, kNoPhoneCheck, (short)tempPhoneBit);
}
//-------------------------------------------------------------- HouseFilter
pascal Boolean HouseFilter (DialogPtr dial, EventRecord *event, short *item)
{
Point mouseIs;
short nChars;
if (keyHit)
{
nChars = GetDialogStringLen(dial, kBannerTextItem);
SetDialogNumToStr(dial, kBannerNCharsItem, (long)nChars);
nChars = GetDialogStringLen(dial, kTrailerTextItem);
SetDialogNumToStr(dial, kTrailerNCharsItem, (long)nChars);
keyHit = false;
}
switch (event->what)
{
case keyDown:
switch ((event->message) & charCodeMask)
{
case kEnterKeyASCII:
FlashDialogButton(dial, kOkayButton);
*item = kOkayButton;
return(true);
break;
case kEscapeKeyASCII:
FlashDialogButton(dial, kCancelButton);
*item = kCancelButton;
return(true);
break;
default:
keyHit = true;
return(false);
}
break;
case mouseDown:
return(false);
break;
case mouseUp:
return(false);
break;
|