mirror of
https://github.com/softdorothy/GliderPRO.git
synced 2025-02-18 01:30:44 +00:00
1 line
25 KiB
C
1 line
25 KiB
C
|
//============================================================================
//----------------------------------------------------------------------------
// Room.c
//----------------------------------------------------------------------------
//============================================================================
#include <Resources.h>
#include <ToolUtils.h>
#include "Externs.h"
#include "House.h"
#include "MainWindow.h"
#include "RectUtils.h"
#define kDeleteRoomAlert 1005
#define kYesDoDeleteRoom 1
Boolean QueryDeleteRoom (void);
void SetToNearestNeighborRoom (short, short);
roomPtr thisRoom;
Rect backSrcRect;
GWorldPtr backSrcMap;
short numberRooms, thisRoomNumber, previousRoom;
short leftThresh, rightThresh, lastBackground;
Boolean autoRoomEdit, newRoomNow, noRoomAtAll;
Boolean leftOpen, rightOpen, topOpen, bottomOpen;
Boolean doBitchDialogs;
extern short tempTiles[];
//============================================================== Functions
//-------------------------------------------------------------- SetInitialTiles
#ifndef COMPILEDEMO
void SetInitialTiles (short background, Boolean doRoom)
{
short i;
if (background >= kUserBackground)
{
for (i = 0; i < kNumTiles; i++)
{
if (doRoom)
thisRoom->tiles[i] = i;
else
tempTiles[i] = i;
}
}
else
{
switch (background)
{
case kSimpleRoom:
case kPaneledRoom:
case kBasement:
case kChildsRoom:
case kAsianRoom:
case kUnfinishedRoom:
case kSwingersRoom:
case kBathroom:
case kLibrary:
for (i = 0; i < kNumTiles; i++)
{
if (doRoom)
thisRoom->tiles[i] = 1;
else
tempTiles[i] = 1;
}
if (doRoom)
{
thisRoom->tiles[0] = 0;
thisRoom->tiles[kNumTiles - 1] = kNumTiles - 1;
}
else
{
tempTiles[0] = 0;
tempTiles[kNumTiles - 1] = kNumTiles - 1;
}
break;
case kSkywalk:
for (i = 0; i < kNumTiles; i++)
{
if (doRoom)
thisRoom->tiles[i] = i;
else
tempTiles[i] = i;
}
break;
case kField:
case kGarden:
case kDirt:
for (i = 0; i < kNumTiles; i++)
{
if (doRoom)
thisRoom->tiles[i] = 0;
else
tempTiles[i] = 0;
}
break;
case kMeadow:
for (i = 0; i < kNumTiles; i++)
{
if (doRoom)
thisRoom->tiles[i] = 1;
else
tempTiles[i] = 1;
}
break;
case kRoof:
for (i = 0; i < kNumTiles; i++)
{
if (doRoom)
thisRoom->tiles[i] = 3;
else
tempTiles[i] = 3;
}
break;
case kSky:
for (i = 0; i < kNumTiles; i++)
{
if (doRoom)
thisRoom->tiles[i] = 2;
else
tempTiles[i] = 2;
}
break;
case kStratosphere:
case kStars:
for (i = 0; i < kNumTiles; i++)
{
if (doRoom)
thisRoom->tiles[i] = i;
else
tempTiles[i] = i;
}
break;
default:
break;
}
}
}
#endif
//-------------------------------------------------------------- CreateNewRoom
#ifndef COMPILEDEMO
Boolean CreateNewRoom (short h, short v)
{
KeyMap theKeys;
long howMuch;
OSErr theErr;
short i, availableRoom;
char wasState;
CopyThisRoomToRoom(); // save off current room
PasStringCopy("\pUntitled Room", thisRoom->name);
thisRoom->leftStart = 32; // fill out fields of new room
thisRoom->rightStart = 32;
thisRoom->bounds = 0;
thisRoom->unusedByte = 0;
thisRoom->visited = false;
thisRoom->background = lastBackground;
SetInitialTiles(thisRoom->background, true);
thisRoom->floor = v;
thisRoom->suite = h;
thisRoom->openings = 0;
thisRoom->numObjects = 0;
for (i = 0; i < kMaxRoomObs; i++) // zero out all objects
thisRoom->objects[i].what = kObjectIsEmpty;
wasState = HGetState((Handle)thisHouse);
MoveHHi((Handle)thisHouse);
HLock((Handle)thisHouse);
availableRoom = -1; // assume no available rooms
if ((*thisHouse)->nRooms > 0) // look for an empty room
for (i = 0; i < (*thisHouse)->nRooms; i++)
if ((*thisHouse)->rooms[i].suite == kRoomIsEmpty)
{
availableRoom = i;
break;
}
if (availableRoom == -1) // found no available
|