示例#1
0
void CMainGameWindow::drawViewContents(CScreenManager *screenManager) {
	// Get a reference to the reference, validating that it's present
	if (!screenManager)
		return;
	CViewItem *view = _gameManager->getView();
	if (!view)
		return;
	CNodeItem *node = view->findNode();
	if (!node)
		return;
	CRoomItem *room = node->findRoom();
	if (!room)
		return;

	double xVal = 0.0, yVal = 0.0;
	room->calcNodePosition(node->_nodePos, xVal, yVal);

	// Iterate through drawing all the items in the scene except any item
	// that's currently being dragged
	for (CTreeItem *treeItem = view; treeItem; treeItem = treeItem->scan(view)) {
		if (treeItem != _gameManager->_dragItem)
			treeItem->draw(screenManager);
	}

	// Finally draw the drag item if there is one
	if (_gameManager->_dragItem)
		_gameManager->_dragItem->draw(screenManager);
}
示例#2
0
bool CPetControl::checkNode(const CString &name) {
	CGameManager *gameManager = getGameManager();
	if (!gameManager)
		return true;
	if (name == "NULL")
		return false;

	CViewItem *view = gameManager->getView();
	if (!view)
		return true;

	CNodeItem *node = view->findNode();
	if (!node)
		return true;

	CString viewName = view->getName();
	CString nodeName = node->getName();
	CRoomItem *room = getGameManager()->getRoom();

	if (room) {
		CString roomName = room->getName();
		CString newNode;

		if (roomName == "1stClassRestaurant") {
		} else if (nodeName == "Lobby Node") {
			nodeName = "Node 1";
		} else if (nodeName == "Entrance Node") {
			nodeName = "Node 2";
		} else if (nodeName == "MaitreD Node") {
			nodeName = "Node 3";
		} else if (nodeName == "Scraliontis Table Standing Node") {
			nodeName = "Node 4";
		} else if (nodeName == "Pellerator Node") {
			nodeName = "Node 5";
		} else if (nodeName == "SUB Node") {
			nodeName = "Node 6";
		} else if (nodeName == "Phonograph Node") {
			nodeName = "Node 7";
		} else if (nodeName == "Scraliontis Table Seated Node") {
			nodeName = "Node 8";
		}

		if (roomName == "MusicRoom") {
			if (nodeName == "Musical Instruments")
				nodeName = "Node 1";
			if (nodeName == "Phonograph Node")
				nodeName = "Node 2";
		}
	}

	CString str = CString::format("%s.%s", nodeName.c_str(), viewName.c_str());
	str = str.right(5);
	str.toLowercase();

	CString nameLower = name;
	nameLower.toLowercase();

	return nameLower.contains(str);
}
示例#3
0
CString CGameManager::getFullViewName() {
	CViewItem *view = getView();
	CNodeItem *node = view->findNode();
	CRoomItem *room = node->findRoom();

	return CString::format("%s.%s.%s", room->getName().c_str(),
		node->getName().c_str(), view->getName().c_str());
}
示例#4
0
void CSound::preEnterView(CViewItem *newView, bool isNewRoom) {
	CNodeItem *node = newView->findNode();
	double xp, yp, zp;
	node->getPosition(xp, yp, zp);

	double cosVal = cos(newView->_angle);
	double sinVal = -sin(newView->_angle);

	_soundManager.setListenerPosition(xp, yp, zp, cosVal, sinVal, 0, isNewRoom);
}
示例#5
0
CViewItem *CProjectItem::findView(int roomNumber, int nodeNumber, int viewNumber) {
    CTreeItem *treeItem = getFirstChild();
    CRoomItem *roomItem = nullptr;

    // Scan for the specified room
    if (treeItem) {
        do {
            CTreeItem *childItem = treeItem->getFirstChild();
            CRoomItem *rItem = dynamic_cast<CRoomItem *>(childItem);
            if (rItem && rItem->_roomNumber == roomNumber) {
                roomItem = rItem;
                break;
            }
        } while ((treeItem = treeItem->getNextSibling()) != nullptr);
    }
    if (!roomItem)
        return nullptr;

    // Scan for the specified node within the room
    CNodeItem *nodeItem = nullptr;

    CNodeItem *nItem = dynamic_cast<CNodeItem *>(
                           roomItem->findChildInstanceOf(CNodeItem::_type));
    for (; nItem && !nodeItem; nItem = dynamic_cast<CNodeItem *>(
                                           findNextInstanceOf(CNodeItem::_type, nItem))) {
        if (nItem->_nodeNumber == nodeNumber)
            nodeItem = nItem;
    }
    if (!nodeItem)
        return nullptr;

    // Scan for the specified view within the node
    CViewItem *viewItem = dynamic_cast<CViewItem *>(
                              nodeItem->findChildInstanceOf(CViewItem::_type));
    for (; viewItem; viewItem = dynamic_cast<CViewItem *>(
                                    findNextInstanceOf(CViewItem::_type, viewItem))) {
        if (viewItem->_viewNumber == viewNumber)
            return viewItem;
    }

    return nullptr;
}
bool CParrotLobbyLinkUpdater::ActMsg(CActMsg *msg) {
	if (msg->_action != "Refresh")
		return false;

	CNodeItem *node = findNode();
	LinkUpdatorEntries *entriesP;
	if (isEquals("ParrotLobbyUpdater_TOW")) {
		entriesP = &_entries[4];
	} else {
		if (node->_nodeNumber > 3)
			return true;
		entriesP = &_entries[node->_nodeNumber];
	}
	int count = entriesP->size();

	for (CTreeItem *item = node->getFirstChild(); item; item = item->scan(node)) {
		CLinkItem *link = dynamic_cast<CLinkItem *>(item);
		if (!link || count == 0)
			continue;

		CString linkName = link->getName();
		char c = linkName.lastChar();
		if (c >= 'a' && c <= 'd')
			linkName.deleteLastChar();

		for (uint idx = 0; idx < entriesP->size(); ++idx) {
			const LinkUpdatorEntry &entry = (*entriesP)[idx];
			if (entry._linkStr == linkName) {
				int val = entry._vals[CParrotLobbyObject::_flags];
				if (val)
					linkName += (char)(0x60 + val);

				link->_name = linkName;
				break;
			}
		}
	}

	return true;
}