1.9 KiB
handleInput() { if (checkAction(LEFT)) { wannaGo::LEFT; } else if (checkAction(RIGHT)) { wannaGo::RIGHT; } else { wannaGo::STAY; }
wannaJUMP = (checkAction(JUMP));
}
move() { handleHorizontalMovement(); handleVerticalMovement(); }
handleHorizontalMovement() { if (State!=STANDING) { return; }
if (automovement)
{
vx = FIXED_BY_ROOM;
}
else
{
vx = wannaGo::DIRECTION;
}
moveAndCollide();
}
handleVerticalMovement() { if (State==STANDING) { return; }
if (State==JUMPING)
{
applyGravity();
}
moveAndCollide();
}
handleConveyorBelts() { if (!automovement and isOnConveyorBelt and wannaGo::STAY) { automovement = true; }
if (automovement and !isOnConveyorBelt)
{
automovement = false;
}
}
handleShouldFall() { if (!isOnFloor and State::STANDING) { transitionToState(FALLING); } }
transitionToState(state) { prev = state_; state_ = state;
switch (state)
{
case STANDING:
vy = 0;
case JUMPING:
if (prev==STANDING)
{
vy = -MAX_VY;
last_ground_position = y;
}
case FALLING:
last_ground_position = y;
vy = MAX_VY;
vx = 0;
}
}
updateState() { switch (state) { case STANDING: handleConveyorBelts(); handleShouldFall(); if (wannaJump) { transitionToState(JUMPING); } case JUMPING: automovement = false; playJumpingSound(); handleEndJump(); case FALLING: automovement = false; playFallingSound(); } }
update() { hanldeInput(); updateState(); move(); animate(); }