void jump(t_removable *remove, t_image img) { int i; i = jump_up(remove, img); while (i-- > 0) { remove->pos_hero.y++; remove->img_hero = remove->img_jump_right; cl_screen_put_img(remove, remove->pos_hero, img, remove->img_jump_right); } }
void gravity(ground& earth) { m_speed_vert += m_accel; jump_up(); if (m_speed_vert.y > -m_jump_up.y) { m_speed_vert.y = -m_jump_up.y; } m_posit += m_speed_vert; vertigo_check(earth); }
void Yeti::collision_solid(const CollisionHit& hit) { update_on_ground_flag(hit); if(hit.top || hit.bottom) { // hit floor or roof physic.set_velocity_y(0); switch (state) { case JUMP_DOWN: run(); break; case RUN: break; case JUMP_UP: break; case BE_ANGRY: // we just landed if(!state_timer.started()) { sprite->set_action((dir==RIGHT)?"stand-right":"stand-left"); stomp_count++; drop_stalactite(); // go to other side after 3 jumps if(stomp_count == 3) { jump_down(); } else { // jump again state_timer.start(STOMP_WAIT); } } break; case SQUISHED: break; case FALLING: break; } } else if(hit.left || hit.right) { // hit wall jump_up(); } }
void Yeti::active_update(float elapsed_time) { switch(state) { case JUMP_DOWN: physic.set_velocity_x((dir==RIGHT)?+JUMP_DOWN_VX:-JUMP_DOWN_VX); break; case RUN: physic.set_velocity_x((dir==RIGHT)?+RUN_VX:-RUN_VX); if (((dir == RIGHT) && (get_pos().x >= right_jump_x)) || ((dir == LEFT) && (get_pos().x <= left_jump_x))) jump_up(); break; case JUMP_UP: physic.set_velocity_x((dir==RIGHT)?+JUMP_UP_VX:-JUMP_UP_VX); if (((dir == RIGHT) && (get_pos().x >= right_stand_x)) || ((dir == LEFT) && (get_pos().x <= left_stand_x))) be_angry(); break; case BE_ANGRY: if(state_timer.check() && on_ground()) { physic.set_velocity_y(STOMP_VY); sprite->set_action((dir==RIGHT)?"stomp-right":"stomp-left"); SoundManager::current()->play("sounds/yeti_gna.wav"); } break; case SQUISHED: { Direction newdir = (int(state_timer.get_timeleft() * SNOW_EXPLOSIONS_FREQUENCY) % 2) ? LEFT : RIGHT; if (dir != newdir && dir == RIGHT) { SoundManager::current()->play("sounds/stomp.wav"); add_snow_explosions(); Sector::current()->camera->shake(.05f, 0, 5); } dir = newdir; sprite->set_action((dir==RIGHT)?"jump-right":"jump-left"); } if (state_timer.check()) { BadGuy::kill_fall(); state = FALLING; physic.set_velocity_y(JUMP_UP_VY / 2); // Move up a bit before falling // Add some extra explosions for (int i = 0; i < 10; i++) { add_snow_explosions(); } run_dead_script(); } break; case FALLING: break; } movement = physic.get_movement(elapsed_time); }
void Yeti::active_update(float elapsed_time) { switch(state) { case JUMP_DOWN: physic.set_velocity_x((dir==RIGHT)?+JUMP_DOWN_VX:-JUMP_DOWN_VX); break; case RUN: physic.set_velocity_x((dir==RIGHT)?+RUN_VX:-RUN_VX); if (((dir == RIGHT) && (get_pos().x >= right_jump_x)) || ((dir == LEFT) && (get_pos().x <= left_jump_x))) jump_up(); break; case JUMP_UP: physic.set_velocity_x((dir==RIGHT)?+JUMP_UP_VX:-JUMP_UP_VX); if (((dir == RIGHT) && (get_pos().x >= right_stand_x)) || ((dir == LEFT) && (get_pos().x <= left_stand_x))) be_angry(); break; case BE_ANGRY: if(state_timer.check()) { SoundManager::current()->play("sounds/yeti_gna.wav"); physic.set_velocity_y(STOMP_VY); sprite->set_action((dir==RIGHT)?"stomp-right":"stomp-left"); } break; case SQUISHED: if (state_timer.check()) { remove_me(); } break; } movement = physic.get_movement(elapsed_time); }