28 using namespace std::chrono_literals;
32 std::chrono::steady_clock::time_point get_next_idle_tick()
35 return std::chrono::steady_clock::time_point::max();
38 const double rate = std::pow(2.0, -
prefs::get().idle_anim_rate() / 10.0);
49 std::vector<const unit_animation*> options;
52 int matching = anim.matches(loc,second_loc,u_.shared_from_this(),event,value,hit,attack,second_attack,swing_num);
54 options.push_back(&anim);
55 }
else if(matching > max_val) {
58 options.push_back(&anim);
70 if (
prefs::get().show_standing_animations()&& !u_.incapacitated()) {
71 start_animation(std::chrono::milliseconds::max(), choose_animation(u_.loc_,
"standing"),
72 with_bars,
"", {0,0,0}, STATE_STANDING);
74 start_animation(std::chrono::milliseconds::max(), choose_animation(u_.loc_,
"_disabled_"),
75 with_bars,
"", {0,0,0}, STATE_STANDING);
81 start_animation(std::chrono::milliseconds::max(), choose_animation(u_.loc_,
"_ghosted_"),
83 anim_->pause_animation();
88 start_animation(std::chrono::milliseconds::max(), choose_animation(u_.loc_,
"_disabled_ghosted_"),
94 start_animation(std::chrono::milliseconds::max(), choose_animation(u_.loc_,
"idling"),
95 true,
"", {0,0,0}, STATE_FORGET);
100 if (
prefs::get().show_standing_animations() && !u_.incapacitated()) {
101 start_animation(std::chrono::milliseconds::max(), choose_animation(u_.loc_,
"selected"),
102 true,
"", {0,0,0}, STATE_FORGET);
104 start_animation(std::chrono::milliseconds::max(), choose_animation(u_.loc_,
"_disabled_selected_"),
105 true,
"", {0,0,0}, STATE_FORGET);
110 bool with_bars,
const std::string &text,
color_t text_color,
STATE state)
113 if (state == STATE_STANDING)
115 if (!anim_ && state_ != STATE_STANDING)
116 set_standing(with_bars);
121 bool accelerate = (state != STATE_FORGET && state != STATE_STANDING);
122 draw_bars_ = with_bars;
124 const auto real_start_time = start_time == std::chrono::milliseconds::max() ? anim_->get_begin_time() : start_time;
125 anim_->start_animation(real_start_time, u_.loc_, u_.loc_.get_direction(u_.facing_),
126 text, text_color, accelerate);
127 frame_begin_time_ = anim_->get_begin_time() - 1ms;
128 next_idling_ = get_next_idle_tick();
133 if (state_ == STATE_FORGET && anim_ && anim_->animation_finished_potential())
147 next_idling_ = get_next_idle_tick();
157 abil_halos_ref_.clear();
158 if(anim_ ) anim_->clear_haloes();
166 if(get_animation()) {
173 if (u_.is_flying() && height_adjust < 0) {
176 params.
y -= height_adjust;
177 params.
halo_y -= height_adjust;
179 params.
halo_mod = u_.TC_image_mods();
180 params.
image= u_.default_anim_image();
182 result |= get_animation()->invalidate(params);
200 if(effect[
"id"].empty()) {
203 static std::map< std::string, std::vector<unit_animation>> animation_cache;
204 std::vector<unit_animation> &built = animation_cache[effect[
"id"]];
208 animations_.insert(animations_.end(),built.begin(),built.end());
213 std::set<std::string> result;
214 for(
const auto& anim : animations_) {
215 const std::vector<std::string>& flags = anim.get_flags();
216 std::copy_if(flags.begin(), flags.end(), std::inserter(result, result.begin()), [](
const std::string
flag) {
217 return !(flag.empty() || (flag.front() ==
'_' && flag.back() ==
'_'));
220 return std::vector<std::string>(result.begin(), result.end());
std::chrono::steady_clock::time_point get_current_animation_tick()
A config object defines a single node in a WML file, with access to child nodes.
virtual const gamemap & map() const =0
Sort-of-Singleton that many classes, both GUI and non-GUI, use to access the game data.
static double get_zoom_factor()
Returns the current zoom factor.
bool tile_nearly_on_screen(const map_location &loc) const
Checks if location loc or one of the adjacent tiles is visible on screen.
const display_context & context() const
static display * get_singleton()
Returns the display object if a display object exists.
terrain_code get_terrain(const map_location &loc) const
Looks up terrain at a particular location.
Encapsulates the map of the game.
const terrain_type & get_terrain_info(const t_translation::terrain_code &terrain) const
static rng & default_instance()
int get_random_int(int min, int max)
int unit_height_adjust() const
void set_idling()
Sets the animation state to idling.
const unit_animation * choose_animation(const map_location &loc, const std::string &event, const map_location &second_loc=map_location::null_location(), const int damage=0, const strike_result::type hit_type=strike_result::type::invalid, const_attack_ptr attack=nullptr, const_attack_ptr second_attack=nullptr, int swing_num=0)
Chooses an appropriate animation from the list of known animations.
void apply_new_animation_effect(const config &effect)
Adds an animation described by a config.
bool invalidate(const display &disp)
Invalidates an animation with respect to a display object, preparing it for redraw.
void set_ghosted(bool with_bars=true)
Sets the animation state to ghosted.
void refresh()
Intermittently activates the idling animations in place of the standing animations.
void reset_after_advance(const unit_type *newtype=nullptr)
Resets the animations list after the unit is advanced.
std::vector< std::string > get_flags()
Get the flags of all registered animations.
void set_standing(bool with_bars=true)
Sets the animation state to standing.
STATE
States for animation.
void set_selecting()
Sets the animation state to that when the unit is selected.
void clear_haloes()
Clear the haloes associated to the unit.
void set_disabled_ghosted(bool with_bars=true)
Whiteboard related somehow.
void start_animation(const std::chrono::milliseconds &start_time, const unit_animation *animation, bool with_bars, const std::string &text="", color_t text_color={}, STATE state=STATE_ANIM)
Begin an animation.
static void add_anims(std::vector< unit_animation > &animations, const config &cfg)
A single unit type that the player may recruit.
const std::vector< unit_animation > & animations() const
Definitions for the interface to Wesnoth Markup Language (WML).
map_display and display: classes which take care of displaying the map and game-data on the screen.
std::shared_ptr< const attack_type > const_attack_ptr
The basic class for representing 8-bit RGB or RGBA colour values.
All parameters from a frame at a given instant.
Encapsulates the map of the game.
A terrain string which is converted to a terrain is a string with 1 or 2 layers the layers are separa...