Ejemplo n.º 1
0
bool CPetRooms::changeLocationClass(PassengerClass newClassNum) {
	CPetRoomsGlyph *glyph = _glyphs.findAssignedRoom();
	if (!glyph)
		return 0;

	glyph->changeClass(newClassNum);
	return true;
}
Ejemplo n.º 2
0
CPetRoomsGlyph *CPetRoomsGlyphs::findGlyphByFlags(uint flags) const {
	for (const_iterator i = begin(); i != end(); ++i) {
		CPetRoomsGlyph *glyph = static_cast<CPetRoomsGlyph *>(*i);
		if (glyph->getRoomFlags() == flags)
			return glyph;
	}

	return nullptr;
}
Ejemplo n.º 3
0
CPetRoomsGlyph *CPetRoomsGlyphs::findAssignedRoom() const {
	for (const_iterator i = begin(); i != end(); ++i) {
		CPetRoomsGlyph *glyph = static_cast<CPetRoomsGlyph *>(*i);
		if (glyph->isCurrentlyAssigned())
			return glyph;
	}

	return nullptr;
}
Ejemplo n.º 4
0
CPetRoomsGlyph *CPetRooms::addGlyph(uint roomFlags, bool highlight_) {
	CPetRoomsGlyph *glyph = new CPetRoomsGlyph(roomFlags);
	if (!glyph->setup(_petControl, &_glyphs)) {
		delete glyph;
		return nullptr;
	} else {
		_glyphs.push_back(glyph);
		if (highlight_)
			_glyphs.highlight(glyph);

		return glyph;
	}
}
Ejemplo n.º 5
0
void CPetRooms::reassignRoom(PassengerClass passClassNum) {
	CPetRoomsGlyph *glyph = _glyphs.findAssignedRoom();
	if (glyph)
		// Flag the old assigned room as no longer assigned
		glyph->setMode(RGM_PREV_ASSIGNED_ROOM);

	CRoomFlags roomFlags;
	roomFlags.setRandomLocation(passClassNum, _field1D4);
	glyph = addRoom(roomFlags, true);
	if (glyph) {
		// Flag the new room as assigned to the player, and highlight it
		glyph->setMode(RGM_ASSIGNED_ROOM);
		_glyphs.highlight(glyph);
	}
}
Ejemplo n.º 6
0
void CPetRooms::load(SimpleFile *file, int param) {
	if (!param) {
		int count = file->readNumber();

		for (int idx = 0; idx < count; ++idx) {
			CPetRoomsGlyph *glyph = addGlyph(file->readNumber(), false);
			glyph->setMode((RoomGlyphMode)file->readNumber());
		}

		_glyphItem.setMode((RoomGlyphMode)file->readNumber());
		file->readNumber();
		_floorNum = file->readNumber();
		_elevatorNum = file->readNumber();
		_roomNum = file->readNumber();
		_field1CC = file->readNumber();
		_wellEntry = file->readNumber();
		_field1D4 = file->readNumber();
	}
}
Ejemplo n.º 7
0
CPetRoomsGlyph *CPetRooms::addRoom(uint roomFlags, bool highlight_) {
	// Ensure that we don't add room if the room is already present
	if (_glyphs.hasFlags(roomFlags))
		return nullptr;

	if (_glyphs.size() >= 32) {
		// Too many room glyphs present. Scan for and remove the first
		// glyph that isn't for an assigned bedroom
		for (CPetRoomsGlyphs::iterator i = _glyphs.begin(); i != _glyphs.end(); ++i) {
			CPetRoomsGlyph *glyph = dynamic_cast<CPetRoomsGlyph *>(*i);
			if (!glyph->isAssigned()) {
				_glyphs.erase(i);
				break;
			}
		}
	}

	// Add the glyph
	return addGlyph(roomFlags, highlight_);
}
Ejemplo n.º 8
0
CPetRoomsGlyph *CPetRooms::addRoom(uint roomFlags, bool highlight_) {
	// Ensure that we don't add room if the room is already present
	if (_glyphs.hasFlags(roomFlags))
		return nullptr;

	if (_glyphs.size() >= 32)
		// Too many rooms already
		return nullptr;

	// Do a preliminary scan of the glyph list for any glyph that is
	// no longer valid, and thus can be removed
	for (CPetRoomsGlyphs::iterator i = _glyphs.begin(); i != _glyphs.end(); ++i) {
		CPetRoomsGlyph *glyph = dynamic_cast<CPetRoomsGlyph *>(*i);
		if (!glyph->isAssigned()) {
			_glyphs.erase(i);
			break;
		}
	}

	// Add the glyph
	return addGlyph(roomFlags, highlight_);
}
Ejemplo n.º 9
0
uint CPetRooms::getAssignedRoomFlags() const {
	CPetRoomsGlyph *glyph = _glyphs.findAssignedRoom();
	return glyph ? glyph->getRoomFlags() : 0;
}