bool quadtree::add(gameObject *obj)
    {
        auto tc = obj->get<textureComponent>();
        if (tc)
            {
                auto pos = tc->getPosition();
                auto size = tc->getSize();
                if (_bound.intersects(sf::FloatRect(pos, size)))
                    {
                        if ((_objectsInNode.size() < _maxGameObjects && !_isBranch) || !(_level != _maxLevel))
                            {
                                _objectsInNode.push_back(obj);
                                return true;
                            }

                        if (!_nWest)
                            {
                                _isBranch = true;
                                _divide();
                            }

                        bool added = false;
                        added |= _nWest->add(obj);
                        added |= _nEast->add(obj);
                        added |= _sWest->add(obj);
                        added |= _sEast->add(obj);
                        return added;
                    }
            }

        return false;
    }
示例#2
0
QJSValue THREEVector3::divide(QJSValue threeVector3) {
    THREEVector3 *vec = getAsTHREEVector3(threeVector3);
    if (!vec) {
        qDebug() << "THREEVector3::" << __FUNCTION__ << " parameter was not THREEVector3 was " << threeVector3.toQObject();
        return m_engine->newQObject(this);
    }

    return m_engine->newQObject(_divide(vec));
}