forked from jaildesigner-jailgames/jaildoctors_dilemma
132 lines
1.9 KiB
Markdown
132 lines
1.9 KiB
Markdown
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();
|
|
} |