Player Move - Inf512-MotorolaScienceCup/gra-PANG GitHub Wiki

Player::Move

Ruch następuje po sprawdzeniu naciskanych przez gracza przycisków. Są tu również wykorzystywane dwie zmienne pomocnicze climbing (określa czy znajdujemy się na drabinie czy nie) oraz onIce (określa czy znajdujemy się na lodzie czy nie). Po sprawdzeniu ustawiana jest odpowiednia prędkość, odgrywany jest dźwięk, a także po wciśnięciu Spacji uruchamiane jest strzelanie. Na końcu przesuwana jest pozycja gracza o wcześniej ustaloną prędkość.

void Player::Move() {
    if (state == State::FINISHED) return;

    if (!climbing)
        speed.y++;
    else {
        speed.y = 0;
        speed.x = 0;
    }

    if (climbing) {
        if (IsKeyDown(KEY_UP)) {
            direction = Direction::UP;
            speed.y = -5;
        } else if (IsKeyDown(KEY_DOWN)) {
            direction = Direction::DOWN;
            speed.y = 5;
        } else {
            direction = Direction::NONE;
        }
    } else {
        if (!onIce) {
            if (IsKeyDown(KEY_LEFT)) {
                direction = Direction::LEFT;
                if (speed.x > -6.0f * game->speedBoost)
                    speed.x -= 1;
                else
                    speed.x = -6.0f * game->speedBoost;

                if (!IsSoundPlaying(game->audio[WALK]))
                    PlaySound(game->audio[WALK]);
            } else if (IsKeyDown(KEY_RIGHT)) {
                direction = Direction::RIGHT;
                if (speed.x < 6.0f * game->speedBoost)
                    speed.x += 1;
                else
                    speed.x = 6.0f * game->speedBoost;

                if (!IsSoundPlaying(game->audio[WALK]))
                    PlaySound(game->audio[WALK]);
            } else {
                direction = Direction::NONE;
                speed.x = 0;
                if (IsSoundPlaying(game->audio[WALK]))
                    StopSound(game->audio[WALK]);
            }
        } else {
            if (IsKeyDown(KEY_LEFT)) {
                direction = Direction::LEFT;
                speed.x -= 0.25f * game->speedBoost;
                if (!IsSoundPlaying(game->audio[WALK]))
                    PlaySound(game->audio[WALK]);
            } else if (IsKeyDown(KEY_RIGHT)) {
                direction = Direction::RIGHT;
                speed.x += 0.25f * game->speedBoost;
                if (!IsSoundPlaying(game->audio[WALK]))
                    PlaySound(game->audio[WALK]);
            } else {
                direction = Direction::NONE;
                if (speed.x > 0.2)
                    speed.x -= 0.2f;
                else if (speed.x < -0.2) 
                    speed.x += 0.2f;
                else {
                    speed.x = 0;
                    if (IsSoundPlaying(game->audio[WALK]))
                        StopSound(game->audio[WALK]);
                }
            }
        }

    }

    if (!climbing && IsKeyPressed(KEY_SPACE)) {
        Shooting();
    }

    position.rectangle.x += speed.x;
    position.rectangle.y += speed.y;
    onIce = false;
}
⚠️ **GitHub.com Fallback** ⚠️