#include "player.hpp" // Включаємо заголовок класу Player, щоб компілятор знав про його методи та змінні. using namespace std; // Конструктор класу Player. Він автоматично викликається при створенні об'єкта Player. Player::Player() : shape(sf::Vector2f(50.f, 50.f)), // тут лише "чисте" створення speed(500.f), //швидкість velocityY(0.f), jumpStrength(700.f), // пиржок onGround(true), gravity(1500.f), groundLevel(1040.f) { // А тут уже викликаємо методи, які налаштовують shape shape.setFillColor(sf::Color::Green); shape.setPosition(50.f, 1040.f); } // Закоментований метод `update` (робота на потім). // Він призначений для оновлення логіки гравця у кожному кадрі гри. // Усередині цього методу, ви будете обробляти рух, зіткнення, анімацію тощо. // `deltaTime` — це час, що минув з попереднього кадру, і він забезпечує плавний рух незалежно від швидкості комп'ютера. void Player::update(float deltaTime, const std::vector& platforms) { // Тут буде логіка руху гравця float moveX = 0.f; if (sf::Keyboard::isKeyPressed(sf::Keyboard::A)){ moveX -= speed * deltaTime;} //рух вліво if (sf::Keyboard::isKeyPressed(sf::Keyboard::D)){ moveX += speed * deltaTime;} //рух вправо if (sf::Keyboard::isKeyPressed(sf::Keyboard::W) && onGround==true) { velocityY = -jumpStrength; } velocityY += gravity * deltaTime; shape.move(moveX, 0.f); shape.move(0.f , velocityY * deltaTime); //перевірка чи є земля та обмеження щоб фігура не вилитіла if(shape.getPosition().y + shape.getSize().y >= groundLevel){ shape.setPosition(shape.getPosition().x, groundLevel -shape.getSize().y); velocityY = 0; onGround = true; }else{ onGround = false; } ///////////////////////////////////////////////////// sf::FloatRect playerBounds = shape.getGlobalBounds(); for (const auto& platform : platforms) { sf::FloatRect platformBounds = platform.getBounds(); if (playerBounds.intersects(platformBounds)){ if (playerBounds.intersects(platformBounds)) { // Додатковий if — перевіряємо, чи гравець зверху if (playerBounds.top + playerBounds.height <= platformBounds.top + 20.f) { shape.setPosition(shape.getPosition().x, platformBounds.top - shape.getSize().y); velocityY = 0.f; onGround = true; }else if(playerBounds.top> platformBounds.top){shape.setPosition(shape.getPosition().x, platformBounds.top +platformBounds.height); velocityY =0.f;} } } } ///////////////////////////////////////////////////// if(shape.getPosition().x < 0.f) shape.setPosition(0.f, shape.getPosition().y); if(shape.getPosition().x+shape.getSize().x>1925.f) shape.setPosition(1925.f - shape.getSize().x ,shape.getPosition().y); if(shape.getPosition().y < 0.f) shape.setPosition(shape.getPosition().x,0.f); if(shape.getPosition().y+shape.getSize().y>1200.f) shape.setPosition(shape.getPosition().x, 1200.f - shape.getSize().y); } // Метод `draw` для відмальовування гравця на екрані. // Приймає посилання на вікно, щоб знати, де малювати. void Player::draw(sf::RenderWindow& window) { // Викликаємо метод `draw` вікна, щоб намалювати наш об'єкт `shape`. window.draw(shape); }