GliderPRO/Sources/ObjectDrawAll.c

1 line
28 KiB
C
Raw Normal View History

//============================================================================ //---------------------------------------------------------------------------- // ObjectDrawAll.c //---------------------------------------------------------------------------- //============================================================================ #include "Externs.h" #include "Environ.h" #include "RectUtils.h" extern Rect localRoomsDest[], movieRect; extern short localNumbers[]; extern short numLights, tvWithMovieNumber; extern Boolean tvOn; //============================================================== Functions //-------------------------------------------------------------- DrawARoomsObjects void DrawARoomsObjects (short neighbor, Boolean redraw) { objectType thisObject; Rect whoCares, itsRect, rectA, rectB, testRect; RgnHandle theRgn; short i, legit, dynamicNum, n; short floor, suite, room, obj; char wasState; Boolean isLit; if (localNumbers[neighbor] == kRoomIsEmpty) return; testRect = houseRect; ZeroRectCorner(&testRect); isLit = (numLights > 0); wasState = HGetState((Handle)thisHouse); HLock((Handle)thisHouse); for (i = 0; i < kMaxRoomObs; i++) { dynamicNum = -1; legit = -1; if (IsThisValid(localNumbers[neighbor], i)) { thisObject = (*thisHouse)->rooms[localNumbers[neighbor]].objects[i]; switch (thisObject.what) { case kObjectIsEmpty: break; case kFloorVent: case kCeilingVent: case kFloorBlower: case kCeilingBlower: case kSewerGrate: case kLeftFan: case kRightFan: case kGrecoVent: case kSewerBlower: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit) DrawSimpleBlowers(thisObject.what, &itsRect); break; case kTaper: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) { if (isLit) DrawSimpleBlowers(thisObject.what, &itsRect); if (neighbor == kCentralRoom) { if (redraw) ReBackUpFlames(localNumbers[neighbor], i); else AddCandleFlame(localNumbers[neighbor], i, itsRect.left + 10, itsRect.top + 7); } else { QSetRect(&rectA, 0, 0, 16, 15); QOffsetRect(&rectA, itsRect.left + 10 - 8, itsRect.top + 7 - 15); rectB = localRoomsDest[kCentralRoom]; rectB.top -= kFloorSupportTall; rectB.bottom += kFloorSupportTall; if (!SectRect(&rectA, &rectB, &whoCares)) { if (redraw) ReBackUpFlames(localNumbers[neighbor], i); else AddCandleFlame(localNumbers[neighbor], i, itsRect.left + 10, itsRect.top + 7); } } } break; case kCandle: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) { if (isLit) DrawSimpleBlowers(thisObject.what, &itsRect); if (neighbor == kCentralRoom) { if (redraw) ReBackUpFlames(localNumbers[neighbor], i); else AddCandleFlame(localNumbers[neighbor], i, itsRect.left + 14, itsRect.top + 7); } else { QSetRect(&rectA, 0, 0, 16, 15); QOffsetRect(&rectA, itsRect.left + 14 - 8, itsRect.top + 7 - 15); rectB = localRoomsDest[kCentralRoom]; rectB.top -= kFloorSupportTall; rectB.bottom += kFloorSupportTall; if (!SectRect(&rectA, &rectB, &whoCares)) { if (redraw) ReBackUpFlames(localNumbers[neighbor], i); else AddCandleFlame(localNumbers[neighbor], i, itsRect.left + 14, itsRect.top + 7); } } } break; case kStubby: GetObjectRect(&thisObject, &itsRect); OffsetRectRoomRelative(&itsRect, neighbor); if (SectRect(&itsRect, &testRect, &whoCares)) { if (isLit) DrawSimpleBlowers(thisObject.what, &itsRect); if (neighbor == kCentralRoom) {