void AureolaSpell::update(const sf::Time& frameTime) {
    sf::Vector2f nextPosition;
    calculateNextPosition(frameTime, nextPosition);
    sf::Vector2f diff = nextPosition - getPosition();

    // check collisions with main char
    if (m_ownerType != GameObjectType::_LevelMainCharacter && !m_isOwnerControlled) {
        checkCollisionsWithMainChar(getBoundingBox());
    }
    // check collisions with enemies
    checkCollisionsWithEnemies(getBoundingBox());
    MovableGameObject::update(frameTime);
    GameObject::updateTime(m_data.activeDuration, frameTime);

    // check collisions with owner
    if (m_isReturning && m_mob->getBoundingBox()->intersects(*getBoundingBox())) {
        m_mob->addHeal(getHeal());
        setDisposed();
    }

    if (m_data.activeDuration == sf::Time::Zero) {
        setDisposed();
    }

    if (!m_isReturning) {
        m_rangeLeft -= norm(diff);
        if (m_rangeLeft <= 0.f) {
            m_isReturning = true;
            m_absVel = std::sqrt(getVelocity().x * getVelocity().x + getVelocity().y * getVelocity().y);
        }
    }
    else {
        setSpriteRotation(atan2(getVelocity().y, getVelocity().x));
    }
}
Beispiel #2
0
void UnstableTile::update(const sf::Time& frameTime) {
	if (m_state == GameObjectState::Crumbling) {
		updateTime(m_crumblingTime, frameTime);
		if (m_crumblingTime == sf::Time::Zero) {
			setDisposed();
		}
	}
	else if (m_isCritical) {
		updateTime(m_criticalTime, frameTime);
		if (m_criticalTime == sf::Time::Zero) {
			m_isFalling = true;
			setState(GameObjectState::Idle);
		}
	}
	else if (m_isFalling) {
		setAcceleration(sf::Vector2f(0.f, GRAVITY_ACCELERATION));
		sf::Vector2f nextPosition;
		calculateNextPosition(frameTime, nextPosition);
		checkCollisions(nextPosition);
	}
	MovableGameObject::update(frameTime);
	if (m_isCritical && !m_wasCritical) {
		m_criticalTime = CRITICAL_TIME;
		m_isCritical = false;
		setState(GameObjectState::Idle);
	}
	m_wasCritical = false;
}
void MovableGameObject::update(const sf::Time& frameTime) {
	sf::Vector2f position;
	calculateNextPosition(frameTime, position);
	setPosition(position);
	calculateNextVelocity(frameTime, m_velocity);
	AnimatedGameObject::update(frameTime);
}
Beispiel #4
0
void PlayerUpdater::operator()(osg::Node* node, osg::NodeVisitor* nv)
{
    PlayerState *playerState = _player->getPlayerState();
    osg::Vec3 newPosition = calculateNextPosition(playerState);
    _player->setPosition(newPosition);
    _player->setAngles(playerState->getAngleX(), playerState->getAngleY());

    traverse(node, nv);
}
void MovableGameObject::update(const sf::Time& frameTime) {
	sf::Vector2f position;
	calculateNextPosition(frameTime, position);
	setPosition(position);
	calculateNextVelocity(frameTime, m_velocity);
	AnimatedGameObject::update(frameTime);
	if (m_debugInfo) {
		m_debugInfo->setString("x: " + std::to_string(getPosition().x) + " y: " + std::to_string(getPosition().y));
		m_debugInfo->setPosition(getPosition() + sf::Vector2f(0.f, -30.f));
	}
}
Beispiel #6
0
void ShiftableTile::update(const sf::Time& frameTime) {
	if (m_state == GameObjectState::Crumbling) {
		updateTime(m_crumblingTime, frameTime);
		if (m_crumblingTime == sf::Time::Zero) {
			setDisposed();
		}
		MovableGameObject::update(frameTime);
		return;
	}
	setAcceleration(sf::Vector2f(m_pushAcceleration, GRAVITY_ACCELERATION));
	sf::Vector2f nextPosition;
	calculateNextPosition(frameTime, nextPosition);
	checkCollisions(nextPosition);
	MovableGameObject::update(frameTime);
	m_pushAcceleration = 0.f;
	if (m_boundingBox.top + m_boundingBox.height > (m_level->getWorldRect().top + m_level->getWorldRect().height)) {
		setDisposed();
	}
}
Beispiel #7
0
void Prop::updatePosition()
{
	calculateNextPosition();
	mSprite->setPosition(*mPosition);
}