mirror of
https://github.com/softdorothy/GliderPRO.git
synced 2025-02-18 01:30:44 +00:00
1 line
28 KiB
C
1 line
28 KiB
C
|
//============================================================================
//----------------------------------------------------------------------------
// 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)
{
|