示例#1
0
QString TApp::getCurrentRoomName() const
{
	Room *currentRoom = dynamic_cast<Room *>(getCurrentRoom());
	if (!currentRoom)
		return QString();

	return currentRoom->getName();
}
示例#2
0
void Level::update(float dt) {
	if (_transitionTimer > 0.0f) {
		// Update transition

		_transitionTimer -= dt;
	}
	else {
		getCurrentRoom().update(dt);
	}
}
        void SwingingBlade::onFrameChanged(FrameChangeType frameChangeType)
        {
            auto room = getCurrentRoom();
            auto sector = getLevel().findFloorSectorWithClampedPosition( getPosition().toInexact(), &room );
            setCurrentRoom( room );
            setFloorHeight( HeightInfo::fromFloor( sector, getPosition().toInexact(), getLevel().m_cameraController )
                                    .distance );

            ItemNode::onFrameChanged( frameChangeType );
        }
示例#4
0
void Level::render(sf::RenderTarget &rt) {
	if (_transitionTimer > 0.0f) {
		float interp = _transitionTimer / _transitionTime;

		// Render transition
		sf::Sprite oldRoomSprite;
		
		oldRoomSprite.setTexture(getGame()->_transitionTexture0.getTexture());

		oldRoomSprite.setColor(sf::Color(interp * 255.0f, interp * 255.0f, interp * 255.0f));
		
		sf::Sprite newRoomSprite;

		newRoomSprite.setTexture(getGame()->_transitionTexture1.getTexture());

		sf::Vector2f sizef(getGame()->_transitionTexture0.getSize().x, getGame()->_transitionTexture0.getSize().y);

		newRoomSprite.setColor(sf::Color((1.0f - interp) * 255.0f, (1.0f - interp) * 255.0f, (1.0f - interp) * 255.0f));

		switch (_transitionDir) {
		case 0:
			oldRoomSprite.setPosition((interp - 1.0f) * sizef.x, 0.0f);
			newRoomSprite.setPosition(interp * sizef.x, 0.0f);
			break;
		case 1:
			oldRoomSprite.setPosition(0.0f, (interp - 1.0f) * sizef.y);
			newRoomSprite.setPosition(0.0f, interp * sizef.y);
			break;
		case 2:
			oldRoomSprite.setPosition(-(interp - 1.0f) * sizef.x, 0.0f);
			newRoomSprite.setPosition(-interp * sizef.x, 0.0f);
			break;
		case 3:
			oldRoomSprite.setPosition(0.0f, -(interp - 1.0f) * sizef.y);
			newRoomSprite.setPosition(0.0f, -interp * sizef.y);
			break;
		}

		rt.draw(oldRoomSprite);
		rt.draw(newRoomSprite);
	}
	else
		getCurrentRoom().render(rt, _backgroundTextures, _doorTextures, _roofTextures);
}
示例#5
0
void Level::transition(int dir) {
	if (_transitionTimer > 0.0f)
		return;

	_transitionTimer = _transitionTime;

	_transitionDir = dir;

	Room &oldRoom = getCurrentRoom();

	int oldCellX = _currentCellX;
	int oldCellY = _currentCellY;

	switch (_transitionDir) {
	case 0:
		_currentCellX++;

		break;

	case 1:
		_currentCellY++;

		break;

	case 2:
		_currentCellX--;

		break;

	case 3:
		_currentCellY--;

		break;
	}

	if (getCell(_currentCellX, _currentCellY)._room == nullptr) {
		std::cerr << "ERROR: Cannot transition: No room in direction: " << dir << std::endl;

		_currentCellX = oldCellX;
		_currentCellY = oldCellY;

		return;
	}

	// Render old room to temporary rt
	getGame()->_transitionTexture0.clear();
	getGame()->_transitionTexture1.clear();

	oldRoom.render(getGame()->_transitionTexture0, _backgroundTextures, _doorTextures, _roofTextures);
	getCurrentRoom().render(getGame()->_transitionTexture1, _backgroundTextures, _doorTextures, _roofTextures);

	getGame()->_transitionTexture0.display();
	getGame()->_transitionTexture1.display();

	// Normalize limbo times
	float maxTime = -99999.0f;

	for (int i = 0; i < getCell(_currentCellX, _currentCellY)._room->_transitLimbo.size(); i++)
		maxTime = std::max(maxTime, getCell(_currentCellX, _currentCellY)._room->_transitLimbo[i]->_timeSinceTransit);

	for (int i = 0; i < getCell(_currentCellX, _currentCellY)._room->_transitLimbo.size(); i++)
		getCell(_currentCellX, _currentCellY)._room->_transitLimbo[i]->_timeSinceTransit = std::max(-_maxAllowedTransitTime, getCell(_currentCellX, _currentCellY)._room->_transitLimbo[i]->_timeSinceTransit - maxTime);

	float minTime = 99999.0f;	

	for (int i = 0; i < getCell(_currentCellX, _currentCellY)._room->_transitLimbo.size(); i++)
		minTime = std::min(minTime, getCell(_currentCellX, _currentCellY)._room->_transitLimbo[i]->_timeSinceTransit);

	for (int i = 0; i < getCell(_currentCellX, _currentCellY)._room->_transitLimbo.size(); i++)
		getCell(_currentCellX, _currentCellY)._room->_transitLimbo[i]->_timeSinceTransit = minTime - getCell(_currentCellX, _currentCellY)._room->_transitLimbo[i]->_timeSinceTransit;

	// If just finished transition, add all units to selection by default
	getGame()->_selection.clear();

	for (int i = 0; i < getCell(_currentCellX, _currentCellY)._room->_transitLimbo.size(); i++)
		getGame()->_selection.insert(getCell(_currentCellX, _currentCellY)._room->_transitLimbo[i].get());

    getCurrentRoom().healEnemies();
}