示例#1
0
void NavigationScene::createMouseCursor() {

	const NavigationItem &navigationItem = (*_navigationList)[_navigationIndex];
	uint32 mouseCursorFileHash;
	int areaType;

	if (_mouseCursor) {
		deleteSprite((Sprite**)&_mouseCursor);
	}

	mouseCursorFileHash = navigationItem.mouseCursorFileHash;
	if (mouseCursorFileHash == 0)
		mouseCursorFileHash = 0x63A40028;
		
	if (_itemsTypes) {
		areaType = _itemsTypes[_navigationIndex];
	} else if (navigationItem.middleSmackerFileHash != 0 || navigationItem.middleFlag) {
		areaType = 0;
	} else {
		areaType = 1;
	}

	insertNavigationMouse(mouseCursorFileHash, areaType);
	sendPointMessage(_mouseCursor, 0x4002, _vm->getMousePos());
	
}
示例#2
0
bool Scene::queryPositionSprite(int16 mouseX, int16 mouseY) {
    for (uint i = 0; i < _collisionSprites.size(); i++) {
        Sprite *sprite = _collisionSprites[i];
        if (sprite->hasMessageHandler() && sprite->isPointInside(mouseX, mouseY) &&
                sendPointMessage(sprite, 0x1011, _mouseClickPos) != 0) {
            return true;
        }
    }
    return false;
}
示例#3
0
void Scene1608::upCarAtHome() {
	Scene::update();
	if (_mouseClicked) {
		if (_mouseClickPos.x <= 329 && _asCar->getX() == 375 && _asCar->getY() == 227) {
			sendMessage(_asCar, 0x200A, 0);
			SetUpdateHandler(&Scene1608::upGettingOutOfCar);
		} else {
			sendPointMessage(_asCar, 0x2004, _mouseClickPos);
			SetMessageHandler(&Scene1608::hmRidingCar);
			SetUpdateHandler(&Scene1608::upRidingCar);
		}
		_mouseClicked = false;
	}
	updateKlaymenCliprect();
}
示例#4
0
void Scene1608::upRidingCar() {
	Scene::update();
	if (_mouseClicked) {
		sendPointMessage(_asCar, 0x2004, _mouseClickPos);
		_mouseClicked = false;
	}
	if (_asCar->getX() < 300) {
		if (_carClipFlag) {
			_carClipFlag = false;
			_asCar->setClipRect(_clipRect1);
			if (!_asCar->isDoDeltaX())
				sendMessage(_asCar, 0x200E, 0);
		}
	} else if (!_carClipFlag) {
		_carClipFlag = true;
		_asCar->setClipRect(_clipRect3);
	}
}
示例#5
0
void Scene::processMessageList() {
    debug(7, "Scene::processMessageList() _isMessageListBusy = %d; _isKlaymenBusy = %d", _isMessageListBusy, _isKlaymenBusy);

    if (_isMessageListBusy || _isKlaymenBusy)
        return;

    _isMessageListBusy = true;

    if (!_messageList) {
        _messageList2 = NULL;
        _messageListStatus = 0;
    }

    if (_messageList && _klaymen) {

#if 0
        debug("MessageList: %p, %d", (void*)_messageList, _messageList->size());
        for (uint i = 0; i < _messageList->size(); ++i) {
            if (i == _messageListIndex) debugN("**");
            else debugN("  ");
            debug("(%08X, %08X)", (*_messageList)[i].messageNum, (*_messageList)[i].messageValue);
        }
        debug("--------------------------------");
#endif

        while (_messageList && _messageListIndex < _messageListCount && !_isKlaymenBusy) {
            uint32 messageNum = (*_messageList)[_messageListIndex].messageNum;
            uint32 messageParam = (*_messageList)[_messageListIndex].messageValue;

            ++_messageListIndex;
            if (_messageListIndex == _messageListCount)
                sendMessage(_klaymen, 0x1021, 0);
            if (_doConvertMessages)
                messageNum = convertMessageNum(messageNum);
            if (messageNum == 0x1009 || messageNum == 0x1024) {
                sendMessage(_parentModule, messageNum, messageParam);
            } else if (messageNum == 0x100A) {
                _messageValue = messageParam;
                sendMessage(_parentModule, messageNum, messageParam);
            } else if (messageNum == 0x4001) {
                _isKlaymenBusy = true;
                sendPointMessage(_klaymen, 0x4001, _mouseClickPos);
            } else if (messageNum == 0x100D) {
                if (this->hasMessageHandler() && sendMessage(this, 0x100D, messageParam) != 0)
                    continue;
            } else if (messageNum == 0x101A) {
                _messageListStatus = 0;
            } else if (messageNum == 0x101B) {
                _messageListStatus = 2;
            } else if (messageNum == 0x1020) {
                _canAcceptInput = false;
            } else if (messageNum >= 0x2000 && messageNum <= 0x2FFF) {
                if (this->hasMessageHandler() && sendMessage(this, messageNum, messageParam) != 0) {
                    _isMessageListBusy = false;
                    return;
                }
            } else if (messageNum != 0x4003) {
                _isKlaymenBusy = true;
                if (_klaymen->hasMessageHandler() && sendMessage(_klaymen, messageNum, messageParam) != 0) {
                    _isKlaymenBusy = false;
                }
            }
            if (_messageListIndex == _messageListCount) {
                _canAcceptInput = true;
                _messageList = NULL;
            }
        }
    }

    _isMessageListBusy = false;

}
示例#6
0
int NavigationScene::getNavigationAreaType() {
    NPoint mousePos;
    mousePos.x = _mouseCursor->getX();
    mousePos.y = _mouseCursor->getY();
    return sendPointMessage(_mouseCursor, 0x2064, mousePos);
}
示例#7
0
void NavigationScene::handleNavigation(const NPoint &mousePos) {
    const NavigationItem &navigationItem = (*_navigationList)[_navigationIndex];
    bool oldIsWalkingForward = _isWalkingForward;
    bool oldIsTurning = _isTurning;
    uint32 direction = sendPointMessage(_mouseCursor, 0x2064, mousePos);

    switch (direction) {
    case 0:
        if (navigationItem.leftSmackerFileHash != 0) {
            _smackerFileHash = navigationItem.leftSmackerFileHash;
            _interactive = false;
            _isWalkingForward = false;
            _isTurning = true;
            do {
                _navigationIndex--;
                if (_navigationIndex < 0)
                    _navigationIndex = _navigationList->size() - 1;
            } while (!(*_navigationList)[_navigationIndex].interactive);
            setGlobalVar(V_NAVIGATION_INDEX, _navigationIndex);
        } else {
            _vm->_screen->setSmackerDecoder(NULL);
            sendMessage(_parentModule, 0x1009, _navigationIndex);
        }
        break;
    case 1:
        if (navigationItem.rightSmackerFileHash != 0) {
            _smackerFileHash = navigationItem.rightSmackerFileHash;
            _interactive = false;
            _isWalkingForward = false;
            _isTurning = true;
            do {
                _navigationIndex++;
                if (_navigationIndex >= (int)_navigationList->size())
                    _navigationIndex = 0;
            } while (!(*_navigationList)[_navigationIndex].interactive);
            setGlobalVar(V_NAVIGATION_INDEX, _navigationIndex);
        } else {
            _vm->_screen->setSmackerDecoder(NULL);
            sendMessage(_parentModule, 0x1009, _navigationIndex);
        }
        break;
    case 2:
    case 3:
    case 4:
        if (navigationItem.middleFlag) {
            _vm->_screen->setSmackerDecoder(NULL);
            sendMessage(_parentModule, 0x1009, _navigationIndex);
        } else if (navigationItem.middleSmackerFileHash != 0) {
            _smackerFileHash = navigationItem.middleSmackerFileHash;
            _interactive = false;
            _isWalkingForward = true;
            _isTurning = false;
            _leaveSceneAfter = true;
        }
        break;
    }

    if (oldIsTurning != _isTurning)
        _vm->_soundMan->setSoundThreePlayFlag(_isTurning);

    if (oldIsWalkingForward != _isWalkingForward)
        _vm->_soundMan->setTwoSoundsPlayFlag(_isWalkingForward);
}