|
42 | 42 | static const float SQUISH_TIME = 2;
|
43 | 43 | static const float GEAR_TIME = 2;
|
44 | 44 | static const float BURN_TIME = 1;
|
| 45 | +static const float FADEOUT_TIME = 0.2f; |
45 | 46 |
|
46 | 47 | static const float X_OFFSCREEN_DISTANCE = 1280;
|
47 | 48 | static const float Y_OFFSCREEN_DISTANCE = 800;
|
@@ -77,7 +78,8 @@ BadGuy::BadGuy(const Vector& pos, Direction direction, const std::string& sprite
|
77 | 78 | m_is_active_flag(),
|
78 | 79 | m_state_timer(),
|
79 | 80 | m_on_ground_flag(false),
|
80 |
| - m_colgroup_active(COLGROUP_MOVING) |
| 81 | + m_colgroup_active(COLGROUP_MOVING), |
| 82 | + m_alpha_before_fadeout(1.0f) |
81 | 83 | {
|
82 | 84 | SoundManager::current()->preload("sounds/squish.wav");
|
83 | 85 | SoundManager::current()->preload("sounds/fall.wav");
|
@@ -315,12 +317,18 @@ BadGuy::update(float dt_sec)
|
315 | 317 | case STATE_SQUISHED:
|
316 | 318 | m_is_active_flag = false;
|
317 | 319 | if (m_state_timer.check()) {
|
318 |
| - remove_me(); |
| 320 | + m_alpha_before_fadeout = m_sprite->get_alpha(); |
| 321 | + set_state(STATE_SQUISHED_FADING_OUT); |
319 | 322 | break;
|
320 | 323 | }
|
321 | 324 | m_col.set_movement(m_physic.get_movement(dt_sec));
|
322 | 325 | break;
|
323 |
| - |
| 326 | + case STATE_SQUISHED_FADING_OUT: |
| 327 | + if (m_state_timer.check()) |
| 328 | + remove_me(); |
| 329 | + else |
| 330 | + m_sprite->set_alpha(m_alpha_before_fadeout - (m_alpha_before_fadeout * m_state_timer.get_progress())); |
| 331 | + break; |
324 | 332 | case STATE_MELTING: {
|
325 | 333 | m_is_active_flag = false;
|
326 | 334 | m_col.set_movement(m_physic.get_movement(dt_sec));
|
@@ -760,6 +768,9 @@ BadGuy::set_state(State state_)
|
760 | 768 | case STATE_SQUISHED:
|
761 | 769 | m_state_timer.start(SQUISH_TIME);
|
762 | 770 | break;
|
| 771 | + case STATE_SQUISHED_FADING_OUT: |
| 772 | + m_state_timer.start(FADEOUT_TIME); |
| 773 | + break; |
763 | 774 | case STATE_GEAR:
|
764 | 775 | m_state_timer.start(GEAR_TIME);
|
765 | 776 | break;
|
|
0 commit comments