QRectF GGPageItem::boundingRect() const { const qreal penWidth = editScene()->pageBorderWidth(); QRectF ret = innerBoundingRect(); ret.adjust(-penWidth/2, -penWidth/2, penWidth/2, penWidth/2); return ret; }
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); }
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()); } }
void TestEnemy::update(){ Math::Vector2D sv(1, 1); WorldHandler::getInstance()->movementCheck(editPosition(), sv, editScene(), true, false); }
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(); } }