+ // handle tilemap fading
+ if (current_alpha != alpha) {
+ remaining_fade_time = std::max(0.0f, remaining_fade_time - elapsed_time);
+ if (remaining_fade_time == 0.0f) {
+ current_alpha = alpha;
+ } else {
+ float amt = (alpha - current_alpha) / (remaining_fade_time / elapsed_time);
+ if (amt > 0) current_alpha = std::min(current_alpha + amt, alpha);
+ if (amt < 0) current_alpha = std::max(current_alpha + amt, alpha);
+ }
+ if ((alpha < 0.25) && (current_alpha < 0.25)) set_solid(false);
+ if ((alpha > 0.75) && (current_alpha > 0.75)) set_solid(true);
+ }
+
+ movement = Vector(0,0);
+ // if we have a path to follow, follow it
+ if (walker.get()) {
+ Vector v = walker->advance(elapsed_time);
+ movement = Vector(v.x-get_x_offset(), std::max(0.0f,v.y-get_y_offset()));
+ set_x_offset(v.x);
+ set_y_offset(v.y);
+ }