Mario: change size and texture when Mario eats a mushroom
This commit is contained in:
+36
-4
@@ -7,7 +7,7 @@
|
||||
|
||||
Mario::Mario(int x, int y, const std::shared_ptr<SDLPP::Renderer> &renderer)
|
||||
: MarioBlock(x, y, renderer, g_mario_texture, MARIO_STANDING_SRC) {
|
||||
setAnimationFrames(MARIO_WALK_ANIM);
|
||||
setAnimationFrames(*walk_anim);
|
||||
setId(MARIO_ID);
|
||||
setAlignment(SDLPP::OBJ_CENTER, SDLPP::OBJ_CENTER);
|
||||
setAnimationSpeed(12.5);
|
||||
@@ -79,7 +79,7 @@ void Mario::handleVisitor(SDLPP::Visitor &visitor) {
|
||||
on_ground = m_visitor.isOnGround();
|
||||
if (!jumping && on_ground) {
|
||||
resetMovementY();
|
||||
setBaseRect(MARIO_STANDING_SRC);
|
||||
setBaseRect(*standing_src);
|
||||
if (!controllable) {
|
||||
setDeath();
|
||||
}
|
||||
@@ -88,7 +88,7 @@ void Mario::handleVisitor(SDLPP::Visitor &visitor) {
|
||||
// for some reason falling of the edge causes on_ground to be true, but
|
||||
// visitor ground_y is 0
|
||||
if (m_visitor.getGroundY() != 0) {
|
||||
setPos(getPos().getX(), m_visitor.getGroundY() - BLOCK_SIZE);
|
||||
setPos(getPos().getX(), m_visitor.getGroundY() - getDoubleRect().second.getY());
|
||||
}
|
||||
}
|
||||
// if we just left ground gravity didn't work in custom_move
|
||||
@@ -164,7 +164,7 @@ void Mario::jump() {
|
||||
slow_jump = getPos().getY() - 2 * BLOCK_SIZE;
|
||||
addMovement(0, -jump_movement);
|
||||
ticks_till_gravity = base_gravity_ticks;
|
||||
setBaseRect(MARIO_JUMP_SRC);
|
||||
setBaseRect(*jump_src);
|
||||
pauseAnimation();
|
||||
}
|
||||
|
||||
@@ -211,3 +211,35 @@ void Mario::stopMovement() {
|
||||
controllable = false;
|
||||
setMovement(0, getMovement().getY());
|
||||
}
|
||||
|
||||
void Mario::setBig() {
|
||||
if (isBig()) {
|
||||
setFireFlag();
|
||||
} else {
|
||||
setBigFlag();
|
||||
setSize({BLOCK_SIZE, 2 * BLOCK_SIZE});
|
||||
setBaseRect(isJumping() ? MARIO_JUMP_BIG_SRC : MARIO_STANDING_BIG_SRC);
|
||||
setAnimationFrames(MARIO_WALK_BIG_ANIM);
|
||||
standing_src = &MARIO_STANDING_BIG_SRC;
|
||||
death_src = &MARIO_DEATH_BIG_SRC;
|
||||
change_dir_src = &MARIO_CHANGE_DIR_BIG_SRC;
|
||||
jump_src = &MARIO_JUMP_BIG_SRC;
|
||||
walk_anim = &MARIO_WALK_BIG_ANIM;
|
||||
}
|
||||
}
|
||||
|
||||
void Mario::unsetBig() {
|
||||
if (hasFire()) {
|
||||
unsetFireFlag();
|
||||
} else {
|
||||
unsetBigFlag();
|
||||
setSize({BLOCK_SIZE, BLOCK_SIZE});
|
||||
setBaseRect(isJumping() ? MARIO_JUMP_SRC : MARIO_STANDING_SRC);
|
||||
setAnimationFrames(MARIO_WALK_ANIM);
|
||||
standing_src = &MARIO_STANDING_SRC;
|
||||
death_src = &MARIO_DEATH_SRC;
|
||||
change_dir_src = &MARIO_CHANGE_DIR_SRC;
|
||||
jump_src = &MARIO_JUMP_SRC;
|
||||
walk_anim = &MARIO_WALK_ANIM;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user