// TODO: make it configurable and move to generic actions bool Walk(struct Game *game, struct TM_Action *action, enum TM_ActionState state) { if (state == TM_ACTIONSTATE_START) SelectDerpySpritesheet(game, "walk"); else if (state != TM_ACTIONSTATE_RUNNING) return false; game->level.derpy_x+=(0.00125*1280)/(float)game->viewportWidth; if (game->level.derpy_x>=(0.05*1280)/(float)game->viewportWidth) return true; return false; }
bool Fly(struct Game *game, struct TM_Action *action, enum TM_ActionState state) { if (state == TM_ACTIONSTATE_START) { SelectDerpySpritesheet(game, "fly"); game->level.derpy_angle = -0.15; TM_AddBackgroundAction(&ShowMeter, NULL, 0, "showmeter"); } else if (state == TM_ACTIONSTATE_DESTROY) { game->level.handle_input = true; } else if (state != TM_ACTIONSTATE_RUNNING) return false; game->level.derpy_y-=0.004; if (game->level.derpy_y<=0.2) return true; return false; }
bool Run(struct Game *game, struct TM_Action *action, enum TM_ActionState state) { if (state == TM_ACTIONSTATE_START) { game->level.handle_input=false; game->level.speed_modifier=1; } else if (state == TM_ACTIONSTATE_DESTROY) { game->level.derpy_angle = 0; SelectDerpySpritesheet(game, "run"); } else if (state != TM_ACTIONSTATE_RUNNING) return false; game->level.derpy_y+=0.0042; if (game->level.derpy_angle > 0) { game->level.derpy_angle -= 0.02; if (game->level.derpy_angle < 0) game->level.derpy_angle = 0; } if (game->level.derpy_angle < 0) { game->level.derpy_angle += 0.02; if (game->level.derpy_angle > 0) game->level.derpy_angle = 0; } if (game->level.derpy_y>=0.65) return true; return false; }
bool Stop(struct Game *game, struct TM_Action *action, enum TM_ActionState state) { if (state != TM_ACTIONSTATE_RUNNING) return false; game->level.speed=0; SelectDerpySpritesheet(game, "stand"); return true; }