示例#1
0
QRectF GGPageItem::boundingRect() const
{
    const qreal penWidth = editScene()->pageBorderWidth();
    QRectF ret = innerBoundingRect();
    ret.adjust(-penWidth/2, -penWidth/2, penWidth/2, penWidth/2);
    return ret;
}
示例#2
0
void Player::loadPlayerData(int num) {
    const char seperator = ',';
    std::ifstream worldFile("data/saves/player"+std::to_string(num)+".csv", std::ios::in); //declare a file stream
    if (worldFile.is_open()) //checks if the file is open??
    {
        std::string str;
        int linenumber = 0;
        while (getline(worldFile, str)) {
            //if it's a / just ignore the entire line
            if(str[0] == '/') {
                continue;
            }
            //loop through and do appropriate things with the data
            std::vector<int> readIntegers; // this will hold the data
            std::string read;
            for(int i = 0; i <= str.length(); i++) {
                if(str[i] == seperator || i >= str.length()) {
                    int tempInt = atoi(read.c_str());
                    read.clear();
                    readIntegers.push_back(tempInt);
                } else {
                    read += str[i];
                }
            }
            linenumber++;
            if(linenumber == 1) {
                editPosition().x = readIntegers[0];
                editPosition().y = readIntegers[1];
            } else if(linenumber == 2) {
                editScene().x = readIntegers[0];
                editScene().y = readIntegers[1];
            } else if(linenumber >2) {
                inv.pickup(worldHandler->getItems()[readIntegers[0]], readIntegers[1]);
            }

        }
        std::cout << "Player data loaded" << std::endl;
    } else {
        std::cout << "No player data found, using blank" << std::endl;
    }
    //offset the world
    worldHandler->offSetby(getScene().x, getScene().y, true);
}
示例#3
0
void GGPageItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    Q_UNUSED(option);
    Q_UNUSED(widget);

    painter->setPen(QPen(editScene()->pageColor(m_page), editScene()->pageBorderWidth()));

    bool withCaption = true;
    painter->save();
    switch (m_page->page()->type()) {
    case GGStartPage::Type:
        paintStart(painter, innerBoundingRect(), editScene()->pageColor(m_page), editScene()->pageFillColor());
        withCaption = false;
        break;
    case GGEndPage::Type:
        paintEnd(painter, innerBoundingRect(), editScene()->pageColor(m_page), editScene()->pageFillColor());
        withCaption = false;
        break;
    case GGConditionPage::Type:
        paintCondition(painter, innerBoundingRect(), editScene()->pageColor(m_page), editScene()->pageFillColor());
        break;
    case GGActionPage::Type:
        paintAction(painter, boundingRect(), editScene()->pageColor(m_page), editScene()->pageFillColor());
        break;
    case GGDecisionPage::Type:
        paintDecision(painter, boundingRect(), editScene()->pageColor(m_page), editScene()->pageFillColor());
        break;
    }
    painter->restore();

    if (withCaption) {
        QString name = m_page->page()->name();
        painter->drawText(innerBoundingRect(), Qt::AlignCenter, name);
    }

    /*
    // TEST CENTER
    painter->setPen(Qt::red);
    painter->drawEllipse(0,0,2,2);
    // TEST BOUNDS
    painter->drawRect(boundingRect());
    */

    if (isSelected()) {
        painter->setPen(editScene()->pageHighlightColor());
        painter->drawRect(boundingRect());
    }
}
示例#4
0
void TestEnemy::update(){
    Math::Vector2D sv(1, 1);
    WorldHandler::getInstance()->movementCheck(editPosition(), sv, editScene(), true, false);
}
示例#5
0
void Player::update() {
    int thisMouseX = inputHandler->getMouseX();
    int thisMouseY = inputHandler->getMouseY();
    bool movement = false;
    this->isTouchingBelow = WorldHandler::getInstance()->belowWorldCollide(editPosition(), editScene());
    this->gravity();

    //velocity X calmers, world friction
    if(getVelocity().x > 0) {
        editVelocity().x -= 0.5;
    } else if(getVelocity().x < 0) {
        editVelocity().x += 0.5;
    }
    //get actual user input
    if((inputHandler->getSPACE() || inputHandler->getUP()) && isTouchingBelow && getVelocity().y == 0) {
        editVelocity().y += jumpHeight;
        movement = true;
    }
    if(inputHandler->getRIGHT()) {
        editVelocity().x += speed;
        movement = true;
    }
    if(inputHandler->getLEFT()) {
        editVelocity().x -= speed;
        movement = true;
    }

    //clamp the jump speed
    if(getVelocity().y < jumpHeight) {
        editVelocity().y = jumpHeight;
    }
    //clamp the running speed
    if(getVelocity().x > getMaxSpeedX()) {
        editVelocity().x = getMaxSpeedX();
    }
    if(getVelocity().x < -getMaxSpeedX()) {
        editVelocity().x = -getMaxSpeedX();
    }
    worldHandler->movementCheck(editPosition(), editVelocity(), editScene(), true, true);

    if(inputHandler->getQ() && inventoryItemDisplayAlpha < 0.9) {
        inv.backwards();
        inventoryItemDisplayAlpha = 1;
    }

    if(inputHandler->getE() && inventoryItemDisplayAlpha < 0.9) {
        inv.forwards();
        inventoryItemDisplayAlpha = 1;
    }

    //Item placement check
    if(inputHandler->getMOUSE1()) {
        if(inv.getSelectedPos() > inv.size() || inv.isEmpty()) {
            return;
        }
        //check if the item is even placeable
        if(inv.getSelected()->type->placeable) {
            //get a pointer to the item you're placing
            Item* item = inv.getSelected()->type;
            //get the distance between your character and your mouse
            float distance = Math::vectorDistance(getPosition().x+SPRITE_SIZE/2, getPosition().y+SPRITE_SIZE/2, thisMouseX, thisMouseY);
            if(distance < SPRITE_SIZE*3) {
                //get an instance of the tile you're hovering over
                Tile tile = *worldHandler->getTile(thisMouseX, thisMouseY);
                //make sure the tile is empty
                if(tile.id == T_sky) {
                    //swap the air tile for the tileID that is dropped
                    worldHandler->getTile(thisMouseX, thisMouseY) = &worldHandler->getTiles()[item->tileID];
                    //reduce the amount held
                    //this method also handles deletion
                    if(inv.reduceSelected()) {
                        inventoryItemDisplayAlpha = 1;
                    }
                }
            }
        }
    }

    //you can't mine whilst moving
    if(!movement) {
        //if the LMB is pressed and you're not already mining, start the checks to start mining
        if(inputHandler->getMOUSE0() && !mining) {
            //get the distance between the mouse and the player
            float distance = Math::vectorDistance(getPosition().x+SPRITE_SIZE/2, getPosition().y+SPRITE_SIZE/2, thisMouseX, thisMouseY);

            //only if the distance is less than the spritesize*3 then we should start mining
            if(distance < SPRITE_SIZE*3) {
                Tile tile = *worldHandler->getTile(thisMouseX, thisMouseY);
                if(tile.solid) {
                    miningTime = tile.strength;
                    selectedX = thisMouseX-(thisMouseX%SPRITE_SIZE);
                    selectedY = thisMouseY-(thisMouseY%SPRITE_SIZE);
                    mining = true;
                    timer.start();
                }
            }
        }
        //if you're currently mining then check you're still holding that LMB
        if(mining) {
            int x = thisMouseX-(thisMouseX%SPRITE_SIZE);
            int y = thisMouseY-(thisMouseY%SPRITE_SIZE);
            //check if you're still on the original tile
            if(x != selectedX || y!= selectedY) {
                this->stopMining();
            } else if(!inputHandler->getMOUSE0()) {
                this->stopMining();
            } else {
                //if the mining is still happening
                if(timer.elapsedTime() >= miningTime) {
                    inv.pickup(worldHandler->getItems()[worldHandler->getTile(thisMouseX, thisMouseY)->itemDrop], 1);
                    worldHandler->getTile(thisMouseX, thisMouseY) = &worldHandler->getTiles()[0];
                    this->stopMining();
                }
                else if(timer.elapsedTime() >= miningTime-(miningTime/4)) {
                    miningLevel = 3;
                } else if(timer.elapsedTime() >= miningTime/2) {
                    miningLevel = 2;
                } else if(timer.elapsedTime() >= miningTime/4) {
                    miningLevel = 1;
                }
            }
        }
    } else if(mining) {
        this->stopMining();
    }
}