mirror of
https://github.com/elasota/Aerofoil.git
synced 2025-12-14 12:09:36 +00:00
Lots of stuff
This commit is contained in:
966
GpApp/ObjectDrawAll.cpp
Normal file
966
GpApp/ObjectDrawAll.cpp
Normal file
@@ -0,0 +1,966 @@
|
||||
|
||||
//============================================================================
|
||||
//----------------------------------------------------------------------------
|
||||
// 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)
|
||||
{
|
||||
if (redraw)
|
||||
ReBackUpFlames(localNumbers[neighbor], i);
|
||||
else
|
||||
AddCandleFlame(localNumbers[neighbor], i,
|
||||
itsRect.left + 9, itsRect.top + 7);
|
||||
}
|
||||
else
|
||||
{
|
||||
QSetRect(&rectA, 0, 0, 16, 15);
|
||||
QOffsetRect(&rectA, itsRect.left + 9 - 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 + 9, itsRect.top + 7);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case kTiki:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (isLit)
|
||||
DrawTiki(&itsRect, playOriginV + VerticalRoomOffset(neighbor));
|
||||
if (redraw)
|
||||
ReBackUpTikiFlames(localNumbers[neighbor], i);
|
||||
else
|
||||
AddTikiFlame(localNumbers[neighbor], i,
|
||||
itsRect.left + 10, itsRect.top - 9);
|
||||
break;
|
||||
|
||||
case kBBQ:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (SectRect(&itsRect, &testRect, &whoCares))
|
||||
{
|
||||
if (isLit)
|
||||
DrawPictSansWhiteObject(thisObject.what, &itsRect);
|
||||
if (redraw)
|
||||
ReBackUpBBQCoals(localNumbers[neighbor], i);
|
||||
else
|
||||
AddBBQCoals(localNumbers[neighbor], i,
|
||||
itsRect.left + 16, itsRect.top + 9);
|
||||
}
|
||||
break;
|
||||
|
||||
case kInvisBlower:
|
||||
case kLiftArea:
|
||||
break;
|
||||
|
||||
case kTable:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (isLit)
|
||||
DrawTable(&itsRect, playOriginV);
|
||||
break;
|
||||
|
||||
case kShelf:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (isLit)
|
||||
DrawShelf(&itsRect);
|
||||
break;
|
||||
|
||||
case kCabinet:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit)
|
||||
DrawCabinet(&itsRect);
|
||||
break;
|
||||
|
||||
case kFilingCabinet:
|
||||
case kOzma:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit)
|
||||
DrawPictObject(thisObject.what, &itsRect);
|
||||
break;
|
||||
|
||||
case kWasteBasket:
|
||||
case kMilkCrate:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit)
|
||||
DrawSimpleFurniture(thisObject.what, &itsRect);
|
||||
break;
|
||||
|
||||
case kCounter:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit)
|
||||
DrawCounter(&itsRect);
|
||||
break;
|
||||
|
||||
case kDresser:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (isLit)
|
||||
DrawDresser(&itsRect);
|
||||
break;
|
||||
|
||||
case kDeckTable:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (isLit)
|
||||
DrawDeckTable(&itsRect, playOriginV);
|
||||
break;
|
||||
|
||||
case kStool:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (isLit)
|
||||
DrawStool(&itsRect, playOriginV + VerticalRoomOffset(neighbor));
|
||||
break;
|
||||
|
||||
case kInvisObstacle:
|
||||
break;
|
||||
|
||||
case kManhole:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (SectRect(&itsRect, &testRect, &whoCares))
|
||||
{
|
||||
AddTempManholeRect(&itsRect);
|
||||
if (isLit)
|
||||
DrawPictSansWhiteObject(thisObject.what, &itsRect);
|
||||
}
|
||||
break;
|
||||
|
||||
case kInvisBounce:
|
||||
break;
|
||||
|
||||
case kRedClock:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (SectRect(&itsRect, &testRect, &whoCares))
|
||||
{
|
||||
if (redraw)
|
||||
legit = ReBackUpSavedMap(&itsRect, localNumbers[neighbor], i);
|
||||
else
|
||||
legit = BackUpToSavedMap(&itsRect, localNumbers[neighbor], i);
|
||||
if (legit != -1)
|
||||
DrawRedClock(&itsRect);
|
||||
}
|
||||
break;
|
||||
|
||||
case kBlueClock:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (SectRect(&itsRect, &testRect, &whoCares))
|
||||
{
|
||||
if (redraw)
|
||||
legit = ReBackUpSavedMap(&itsRect, localNumbers[neighbor], i);
|
||||
else
|
||||
legit = BackUpToSavedMap(&itsRect, localNumbers[neighbor], i);
|
||||
if (legit != -1)
|
||||
DrawBlueClock(&itsRect);
|
||||
}
|
||||
break;
|
||||
|
||||
case kYellowClock:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (SectRect(&itsRect, &testRect, &whoCares))
|
||||
{
|
||||
if (redraw)
|
||||
legit = ReBackUpSavedMap(&itsRect, localNumbers[neighbor], i);
|
||||
else
|
||||
legit = BackUpToSavedMap(&itsRect, localNumbers[neighbor], i);
|
||||
if (legit != -1)
|
||||
DrawYellowClock(&itsRect);
|
||||
}
|
||||
break;
|
||||
|
||||
case kCuckoo:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (SectRect(&itsRect, &testRect, &whoCares))
|
||||
{
|
||||
if (redraw)
|
||||
legit = ReBackUpSavedMap(&itsRect, localNumbers[neighbor], i);
|
||||
else
|
||||
legit = BackUpToSavedMap(&itsRect, localNumbers[neighbor], i);
|
||||
if (legit != -1)
|
||||
{
|
||||
DrawCuckoo(&itsRect);
|
||||
if (redraw)
|
||||
ReBackUpPendulum(localNumbers[neighbor], i);
|
||||
else
|
||||
AddPendulum(localNumbers[neighbor], i,
|
||||
itsRect.left + 4, itsRect.top + 46);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case kPaper:
|
||||
case kBattery:
|
||||
case kBands:
|
||||
case kHelium:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (SectRect(&itsRect, &testRect, &whoCares))
|
||||
{
|
||||
if (redraw)
|
||||
legit = ReBackUpSavedMap(&itsRect, localNumbers[neighbor], i);
|
||||
else
|
||||
legit = BackUpToSavedMap(&itsRect, localNumbers[neighbor], i);
|
||||
if (legit != -1)
|
||||
DrawSimplePrizes(thisObject.what, &itsRect);
|
||||
}
|
||||
break;
|
||||
|
||||
case kGreaseRt:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (thisObject.data.c.state) // standing
|
||||
{
|
||||
if (SectRect(&itsRect, &testRect, &whoCares))
|
||||
{
|
||||
if (redraw)
|
||||
dynamicNum = ReBackUpGrease(localNumbers[neighbor], i);
|
||||
else
|
||||
dynamicNum = AddGrease(localNumbers[neighbor], i,
|
||||
itsRect.left, itsRect.top,
|
||||
thisObject.data.c.length, true);
|
||||
if (dynamicNum != -1)
|
||||
DrawGreaseRt(&itsRect, thisObject.data.c.length, true);
|
||||
}
|
||||
}
|
||||
else // fallen
|
||||
DrawGreaseRt(&itsRect, thisObject.data.c.length, false);
|
||||
break;
|
||||
|
||||
case kGreaseLf:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (thisObject.data.c.state)
|
||||
{
|
||||
if (SectRect(&itsRect, &testRect, &whoCares))
|
||||
{
|
||||
if (redraw)
|
||||
dynamicNum = ReBackUpGrease(localNumbers[neighbor], i);
|
||||
else
|
||||
dynamicNum = AddGrease(localNumbers[neighbor], i,
|
||||
itsRect.left, itsRect.top,
|
||||
thisObject.data.c.length, false);
|
||||
if (dynamicNum != -1)
|
||||
DrawGreaseLf(&itsRect, thisObject.data.c.length, true);
|
||||
}
|
||||
}
|
||||
else
|
||||
DrawGreaseLf(&itsRect, thisObject.data.c.length, false);
|
||||
break;
|
||||
|
||||
case kFoil:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (SectRect(&itsRect, &testRect, &whoCares))
|
||||
{
|
||||
if (redraw)
|
||||
legit = ReBackUpSavedMap(&itsRect, localNumbers[neighbor], i);
|
||||
else
|
||||
legit = BackUpToSavedMap(&itsRect, localNumbers[neighbor], i);
|
||||
if (legit != -1)
|
||||
DrawFoil(&itsRect);
|
||||
}
|
||||
break;
|
||||
|
||||
case kInvisBonus:
|
||||
case kSlider:
|
||||
break;
|
||||
|
||||
case kStar:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (SectRect(&itsRect, &testRect, &whoCares))
|
||||
{
|
||||
if (redraw)
|
||||
legit = ReBackUpSavedMap(&itsRect, localNumbers[neighbor], i);
|
||||
else
|
||||
legit = BackUpToSavedMap(&itsRect, localNumbers[neighbor], i);
|
||||
if (legit != -1)
|
||||
{
|
||||
if (redraw)
|
||||
ReBackUpStar(localNumbers[neighbor], i);
|
||||
else
|
||||
AddStar(localNumbers[neighbor], i, itsRect.left,
|
||||
itsRect.top);
|
||||
DrawSimplePrizes(thisObject.what, &itsRect);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case kSparkle:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (SectRect(&itsRect, &testRect, &whoCares))
|
||||
{
|
||||
if ((!redraw) && (neighbor == kCentralRoom))
|
||||
{
|
||||
rectA = itsRect;
|
||||
QOffsetRect(&rectA, -playOriginH, -playOriginV);
|
||||
dynamicNum = AddDynamicObject(kSparkle, &rectA, &thisObject,
|
||||
localNumbers[neighbor], i, thisObject.data.c.state);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case kUpStairs:
|
||||
case kDoorInLf:
|
||||
case kDoorInRt:
|
||||
case kWindowInLf:
|
||||
case kWindowInRt:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (SectRect(&itsRect, &testRect, &whoCares))
|
||||
DrawPictSansWhiteObject(thisObject.what, &itsRect);
|
||||
break;
|
||||
|
||||
case kDownStairs:
|
||||
case kDoorExRt:
|
||||
case kDoorExLf:
|
||||
case kWindowExRt:
|
||||
case kWindowExLf:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (SectRect(&itsRect, &testRect, &whoCares))
|
||||
DrawPictObject(thisObject.what, &itsRect);
|
||||
break;
|
||||
|
||||
case kMailboxLf:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
DrawMailboxLeft(&itsRect, playOriginV + VerticalRoomOffset(neighbor));
|
||||
break;
|
||||
|
||||
case kMailboxRt:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
DrawMailboxRight(&itsRect, playOriginV + VerticalRoomOffset(neighbor));
|
||||
break;
|
||||
|
||||
case kFloorTrans:
|
||||
case kCeilingTrans:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (SectRect(&itsRect, &testRect, &whoCares))
|
||||
DrawSimpleTransport(thisObject.what, &itsRect);
|
||||
break;
|
||||
|
||||
case kInvisTrans:
|
||||
case kDeluxeTrans:
|
||||
break;
|
||||
|
||||
case kLightSwitch:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (SectRect(&itsRect, &testRect, &whoCares))
|
||||
{
|
||||
ExtractFloorSuite(thisObject.data.e.where, &floor, &suite);
|
||||
room = GetRoomNumber(floor, suite);
|
||||
obj = (short)thisObject.data.e.who;
|
||||
DrawLightSwitch(&itsRect, GetObjectState(room, obj));
|
||||
}
|
||||
dynamicNum = masterObjects[i].hotNum;
|
||||
break;
|
||||
|
||||
case kMachineSwitch:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (SectRect(&itsRect, &testRect, &whoCares))
|
||||
{
|
||||
ExtractFloorSuite(thisObject.data.e.where, &floor, &suite);
|
||||
room = GetRoomNumber(floor, suite);
|
||||
obj = (short)thisObject.data.e.who;
|
||||
DrawMachineSwitch(&itsRect, GetObjectState(room, obj));
|
||||
}
|
||||
dynamicNum = masterObjects[i].hotNum;
|
||||
break;
|
||||
|
||||
case kThermostat:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (SectRect(&itsRect, &testRect, &whoCares))
|
||||
{
|
||||
ExtractFloorSuite(thisObject.data.e.where, &floor, &suite);
|
||||
room = GetRoomNumber(floor, suite);
|
||||
obj = (short)thisObject.data.e.who;
|
||||
DrawThermostat(&itsRect, GetObjectState(room, obj));
|
||||
}
|
||||
dynamicNum = masterObjects[i].hotNum;
|
||||
break;
|
||||
|
||||
case kPowerSwitch:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (SectRect(&itsRect, &testRect, &whoCares))
|
||||
{
|
||||
ExtractFloorSuite(thisObject.data.e.where, &floor, &suite);
|
||||
room = GetRoomNumber(floor, suite);
|
||||
obj = (short)thisObject.data.e.who;
|
||||
DrawPowerSwitch(&itsRect, GetObjectState(room, obj));
|
||||
}
|
||||
dynamicNum = masterObjects[i].hotNum;
|
||||
break;
|
||||
|
||||
case kKnifeSwitch:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (SectRect(&itsRect, &testRect, &whoCares))
|
||||
{
|
||||
ExtractFloorSuite(thisObject.data.e.where, &floor, &suite);
|
||||
room = GetRoomNumber(floor, suite);
|
||||
obj = (short)thisObject.data.e.who;
|
||||
DrawKnifeSwitch(&itsRect, GetObjectState(room, obj));
|
||||
}
|
||||
dynamicNum = masterObjects[i].hotNum;
|
||||
break;
|
||||
|
||||
case kInvisSwitch:
|
||||
dynamicNum = masterObjects[i].hotNum;
|
||||
break;
|
||||
|
||||
case kTrigger:
|
||||
case kLgTrigger:
|
||||
case kSoundTrigger:
|
||||
break;
|
||||
|
||||
case kCeilingLight:
|
||||
case kLightBulb:
|
||||
case kTableLamp:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit)
|
||||
DrawSimpleLight(thisObject.what, &itsRect);
|
||||
break;
|
||||
|
||||
case kTrunk:
|
||||
case kBooks:
|
||||
case kHipLamp:
|
||||
case kDecoLamp:
|
||||
case kGuitar:
|
||||
case kCinderBlock:
|
||||
case kFlowerBox:
|
||||
case kFireplace:
|
||||
case kBear:
|
||||
case kVase1:
|
||||
case kVase2:
|
||||
case kRug:
|
||||
case kChimes:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit)
|
||||
DrawPictSansWhiteObject(thisObject.what, &itsRect);
|
||||
break;
|
||||
|
||||
case kCustomPict:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit)
|
||||
DrawCustPictSansWhite(thisObject.data.g.height, &itsRect);
|
||||
break;
|
||||
|
||||
case kFlourescent:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit)
|
||||
DrawFlourescent(&itsRect);
|
||||
break;
|
||||
|
||||
case kTrackLight:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit)
|
||||
DrawTrackLight(&itsRect);
|
||||
break;
|
||||
|
||||
case kInvisLight:
|
||||
break;
|
||||
|
||||
case kShredder:
|
||||
case kCDs:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit)
|
||||
DrawSimpleAppliance(thisObject.what, &itsRect);
|
||||
break;
|
||||
|
||||
case kToaster:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (SectRect(&itsRect, &testRect, &whoCares))
|
||||
{
|
||||
DrawSimpleAppliance(thisObject.what, &itsRect);
|
||||
if ((!redraw) && (neighbor == kCentralRoom))
|
||||
{
|
||||
rectA = itsRect;
|
||||
QOffsetRect(&rectA, -playOriginH, -playOriginV);
|
||||
dynamicNum = AddDynamicObject(kToaster, &rectA, &thisObject,
|
||||
localNumbers[neighbor], i, thisObject.data.g.state);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case kMacPlus:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (SectRect(&itsRect, &testRect, &whoCares))
|
||||
{
|
||||
DrawMacPlus(&itsRect, thisObject.data.g.state, isLit);
|
||||
if (!redraw)
|
||||
{
|
||||
rectA = itsRect;
|
||||
QOffsetRect(&rectA, -playOriginH, -playOriginV);
|
||||
dynamicNum = AddDynamicObject(kMacPlus, &rectA, &thisObject,
|
||||
localNumbers[neighbor], i, thisObject.data.g.state);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case kTV:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (SectRect(&itsRect, &testRect, &whoCares))
|
||||
{
|
||||
#ifdef COMPILEQT
|
||||
if ((thisMac.hasQT) && (hasMovie) && (neighbor == kCentralRoom) &&
|
||||
(!tvInRoom))
|
||||
{
|
||||
whoCares = tvScreen1;
|
||||
ZeroRectCorner(&whoCares);
|
||||
OffsetRect(&whoCares, itsRect.left + 17, itsRect.top + 10);
|
||||
GetMovieBox(theMovie, &movieRect);
|
||||
CenterRectInRect(&movieRect, &whoCares);
|
||||
SetMovieBox(theMovie, &movieRect);
|
||||
theRgn = NewRgn();
|
||||
RectRgn(theRgn, &whoCares);
|
||||
SetMovieDisplayClipRgn(theMovie, theRgn);
|
||||
DisposeRgn(theRgn);
|
||||
tvOn = thisObject.data.g.state;
|
||||
}
|
||||
#endif
|
||||
DrawTV(&itsRect, thisObject.data.g.state, isLit);
|
||||
if (!redraw)
|
||||
{
|
||||
rectA = itsRect;
|
||||
QOffsetRect(&rectA, -playOriginH, -playOriginV);
|
||||
dynamicNum = AddDynamicObject(kTV, &rectA, &thisObject,
|
||||
localNumbers[neighbor], i, thisObject.data.g.state);
|
||||
#ifdef COMPILEQT
|
||||
if ((thisMac.hasQT) && (hasMovie) && (neighbor == kCentralRoom) &&
|
||||
(!tvInRoom))
|
||||
{
|
||||
tvWithMovieNumber = dynamicNum;
|
||||
tvInRoom = true;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case kCoffee:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (SectRect(&itsRect, &testRect, &whoCares))
|
||||
{
|
||||
DrawCoffee(&itsRect, thisObject.data.g.state, isLit);
|
||||
if (!redraw)
|
||||
{
|
||||
rectA = itsRect;
|
||||
QOffsetRect(&rectA, -playOriginH, -playOriginV);
|
||||
dynamicNum = AddDynamicObject(kCoffee, &rectA, &thisObject,
|
||||
localNumbers[neighbor], i, thisObject.data.g.state);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case kOutlet:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (SectRect(&itsRect, &testRect, &whoCares))
|
||||
{
|
||||
if (isLit)
|
||||
DrawOutlet(&itsRect);
|
||||
if (!redraw)
|
||||
{
|
||||
rectA = itsRect;
|
||||
QOffsetRect(&rectA, -playOriginH, -playOriginV);
|
||||
dynamicNum = AddDynamicObject(kOutlet, &rectA, &thisObject,
|
||||
localNumbers[neighbor], i, thisObject.data.g.state);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case kVCR:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (SectRect(&itsRect, &testRect, &whoCares))
|
||||
{
|
||||
DrawVCR(&itsRect, thisObject.data.g.state, isLit);
|
||||
if (!redraw)
|
||||
{
|
||||
rectA = itsRect;
|
||||
QOffsetRect(&rectA, -playOriginH, -playOriginV);
|
||||
dynamicNum = AddDynamicObject(kVCR, &rectA, &thisObject,
|
||||
localNumbers[neighbor], i, thisObject.data.g.state);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case kStereo:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (SectRect(&itsRect, &testRect, &whoCares))
|
||||
{
|
||||
DrawStereo(&itsRect, isPlayMusicGame, isLit);
|
||||
if (!redraw)
|
||||
{
|
||||
rectA = itsRect;
|
||||
QOffsetRect(&rectA, -playOriginH, -playOriginV);
|
||||
dynamicNum = AddDynamicObject(kStereo, &rectA, &thisObject,
|
||||
localNumbers[neighbor], i, thisObject.data.g.state);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case kMicrowave:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (SectRect(&itsRect, &testRect, &whoCares))
|
||||
{
|
||||
DrawMicrowave(&itsRect, thisObject.data.g.state, isLit);
|
||||
if (!redraw)
|
||||
{
|
||||
rectA = itsRect;
|
||||
QOffsetRect(&rectA, -playOriginH, -playOriginV);
|
||||
dynamicNum = AddDynamicObject(kMicrowave, &rectA, &thisObject,
|
||||
localNumbers[neighbor], i, thisObject.data.g.state);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case kBalloon:
|
||||
if ((neighbor == kCentralRoom) && (!redraw))
|
||||
{
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
QOffsetRect(&itsRect, -playOriginH, -playOriginV);
|
||||
dynamicNum = AddDynamicObject(kBalloon, &itsRect, &thisObject,
|
||||
localNumbers[neighbor], i, thisObject.data.h.state);
|
||||
}
|
||||
break;
|
||||
|
||||
case kCopterLf:
|
||||
if ((neighbor == kCentralRoom) && (!redraw))
|
||||
{
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
QOffsetRect(&itsRect, -playOriginH, -playOriginV);
|
||||
dynamicNum = AddDynamicObject(kCopterLf, &itsRect, &thisObject,
|
||||
localNumbers[neighbor], i, thisObject.data.h.state);
|
||||
}
|
||||
break;
|
||||
|
||||
case kCopterRt:
|
||||
if ((neighbor == kCentralRoom) && (!redraw))
|
||||
{
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
QOffsetRect(&itsRect, -playOriginH, -playOriginV);
|
||||
dynamicNum = AddDynamicObject(kCopterRt, &itsRect, &thisObject,
|
||||
localNumbers[neighbor], i, thisObject.data.h.state);
|
||||
}
|
||||
break;
|
||||
|
||||
case kDartLf:
|
||||
if ((neighbor == kCentralRoom) && (!redraw))
|
||||
{
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
QOffsetRect(&itsRect, -playOriginH, -playOriginV);
|
||||
dynamicNum = AddDynamicObject(kDartLf, &itsRect, &thisObject,
|
||||
localNumbers[neighbor], i, thisObject.data.h.state);
|
||||
}
|
||||
break;
|
||||
|
||||
case kDartRt:
|
||||
if ((neighbor == kCentralRoom) && (!redraw))
|
||||
{
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
QOffsetRect(&itsRect, -playOriginH, -playOriginV);
|
||||
dynamicNum = AddDynamicObject(kDartRt, &itsRect, &thisObject,
|
||||
localNumbers[neighbor], i, thisObject.data.h.state);
|
||||
}
|
||||
break;
|
||||
|
||||
case kBall:
|
||||
if ((neighbor == kCentralRoom) && (!redraw))
|
||||
{
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
QOffsetRect(&itsRect, -playOriginH, -playOriginV);
|
||||
dynamicNum = AddDynamicObject(kBall, &itsRect, &thisObject,
|
||||
localNumbers[neighbor], i, thisObject.data.h.state);
|
||||
}
|
||||
break;
|
||||
|
||||
case kDrip:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (SectRect(&itsRect, &testRect, &whoCares))
|
||||
{
|
||||
DrawDrip(&itsRect);
|
||||
if ((!redraw) && (neighbor == kCentralRoom))
|
||||
{
|
||||
rectA = itsRect;
|
||||
QOffsetRect(&rectA, -playOriginH, -playOriginV);
|
||||
dynamicNum = AddDynamicObject(kDrip, &rectA, &thisObject,
|
||||
localNumbers[neighbor], i, thisObject.data.h.state);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case kFish:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (SectRect(&itsRect, &testRect, &whoCares))
|
||||
{
|
||||
DrawFish(thisObject.what, &itsRect);
|
||||
if ((!redraw) && (neighbor == kCentralRoom))
|
||||
{
|
||||
rectA = itsRect;
|
||||
QOffsetRect(&rectA, -playOriginH, -playOriginV);
|
||||
dynamicNum = AddDynamicObject(kFish, &rectA, &thisObject,
|
||||
localNumbers[neighbor], i, thisObject.data.h.state);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case kCobweb:
|
||||
case kCloud:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit)
|
||||
DrawPictWithMaskObject(thisObject.what, &itsRect);
|
||||
break;
|
||||
|
||||
case kMirror:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit)
|
||||
DrawMirror(&itsRect);
|
||||
if ((neighbor == kCentralRoom) && (!redraw))
|
||||
{
|
||||
InsetRect(&itsRect, 4, 4);
|
||||
AddToMirrorRegion(&itsRect);
|
||||
}
|
||||
break;
|
||||
|
||||
case kMousehole:
|
||||
case kFaucet:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit)
|
||||
DrawSimpleClutter(thisObject.what, &itsRect);
|
||||
break;
|
||||
|
||||
case kFlower:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit)
|
||||
DrawFlower(&itsRect, thisObject.data.i.pict);
|
||||
break;
|
||||
|
||||
case kWallWindow:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if (SectRect(&itsRect, &testRect, &whoCares))
|
||||
DrawWallWindow(&itsRect);
|
||||
break;
|
||||
|
||||
case kCalendar:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit)
|
||||
DrawCalendar(&itsRect);
|
||||
break;
|
||||
|
||||
case kBulletin:
|
||||
GetObjectRect(&thisObject, &itsRect);
|
||||
OffsetRectRoomRelative(&itsRect, neighbor);
|
||||
if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit)
|
||||
DrawBulletin(&itsRect);
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (!redraw) // set up links
|
||||
{
|
||||
for (n = 0; n < numMasterObjects; n++)
|
||||
{
|
||||
if ((masterObjects[n].objectNum == i) &&
|
||||
(masterObjects[n].roomNum == localNumbers[neighbor]))
|
||||
masterObjects[n].dynaNum = dynamicNum;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
HSetState((Handle)thisHouse, wasState);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user