void Powerup::step() { frame++; lifeTimer++; if(lifeTimer >= LIFE_TIME) { die = true; } x += dx; y += dy; collideLevel(); }
void Particle::step() { if(lifeTimer > 0) { lifeTimer--; if(lifeTimer <= 0) { die = true; } } dy += gravity; x += dx; y += dy; if(particleType != PARTICLE_BLUE) { collideLevel(); } if(landedDown || landedRight || landedLeft) { dx = 0; dy = 0; } }
void Lunger::step() { Player* player = level.getPlayer(); if(!haveDirection) { movingRight = (player->x + player->w/2) > (x + w/2); haveDirection = true; } if(landedDown) { float xDist = player->x + player->w/2 - (x + w/2); float yDist = player->y + player->h/2 - (y + h/2); bool facingPlayer = movingRight == ((player->x + player->w/2) > (x + w/2)); if(player->landedDown && facingPlayer && fabs(yDist) < Tile::TILE_SIZE && fabs(xDist) < 3 * Tile::TILE_SIZE) { tryLunge(); } } if(!lunging) { if(movingRight) { dx += ACCEL_RATE; if(dx > MOVE_SPEED) { dx = MOVE_SPEED; } } else { dx -= ACCEL_RATE; if(dx < -MOVE_SPEED) { dx = -MOVE_SPEED; } } } else { dx *= 0.95; if(fabs(dx) < 0.1) { lunging = false; } } dy += GRAVITY; x += dx; y += dy; collideLevel(); if(landedLeft || landedRight) { tryJump(); haveDirection = false; } currSprite->setFlipped(!movingRight); currSprite->step(); }