GliderPRO/Sources/HouseInfo.c

1 line
8.2 KiB
C
Raw Normal View History

//============================================================================ //---------------------------------------------------------------------------- // 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;