Author: sapient
Date: Sun Aug 17 05:34:52 2008
New Revision: 28660
URL: http://svn.gna.org/viewcvs/wesnoth?rev=28660&view=rev
Log:
cleaner(?) implementation of unit_animation::all_tag_names
Modified:
trunk/src/game.cpp
trunk/src/unit.cpp
trunk/src/unit_animation.cpp
trunk/src/unit_animation.hpp
Modified: trunk/src/game.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/game.cpp?rev=28660&r1=28659&r2=28660&view=diff
==============================================================================
--- trunk/src/game.cpp (original)
+++ trunk/src/game.cpp Sun Aug 17 05:34:52 2008
@@ -216,10 +216,10 @@
};
game_controller::game_controller(int argc, char** argv) :
- argc_(argc),
- arg_(1),
+ argc_(argc),
+ arg_(1),
argv_(argv),
- thread_manager(),
+ thread_manager(),
video_(),
font_manager_(),
prefs_manager_(),
@@ -230,26 +230,26 @@
music_thinker_(),
resize_monitor_(),
paths_manager_(),
- test_scenario_("test"),
- test_mode_(false),
- multiplayer_mode_(false),
- no_gui_(false),
- use_caching_(true),
- force_valid_cache_(false),
- force_bpp_(-1),
+ test_scenario_("test"),
+ test_mode_(false),
+ multiplayer_mode_(false),
+ no_gui_(false),
+ use_caching_(true),
+ force_valid_cache_(false),
+ force_bpp_(-1),
game_config_(),
- disp_(NULL),
+ disp_(NULL),
state_(),
resolution(),
bpp(0),
video_flags(0),
loaded_game_(),
- loaded_game_show_replay_(false),
- loaded_game_cancel_orders_(false),
+ loaded_game_show_replay_(false),
+ loaded_game_cancel_orders_(false),
defines_map_(),
old_defines_map_(),
multiplayer_server_(),
- jump_to_campaign_(false),
+ jump_to_campaign_(false),
jump_to_multiplayer_(false)
#ifdef USE_EDITOR2
,jump_to_editor_(false)
@@ -2303,9 +2303,6 @@
}
try {
- //trigger any one-time static initializations
- unit_animation::init_tag_names();
-
/**
* @todo We try to guess the name of the server from the name
of the
* binary started. This is very fragile it breaks in at least
the
Modified: trunk/src/unit.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/unit.cpp?rev=28660&r1=28659&r2=28660&view=diff
==============================================================================
--- trunk/src/unit.cpp (original)
+++ trunk/src/unit.cpp Sun Aug 17 05:34:52 2008
@@ -174,8 +174,8 @@
{
}
-unit::unit(unit_map* unitmap, const gamemap* map, const gamestatus*
game_status,
- const std::vector<team>* teams,const config& cfg,
+unit::unit(unit_map* unitmap, const gamemap* map, const gamestatus*
game_status,
+ const std::vector<team>* teams,const config& cfg,
bool use_traits, game_state* state) :
cfg_(),
advances_to_(),
@@ -254,7 +254,7 @@
game_config::add_color_info(cfg);
}
-unit::unit(const config& cfg,bool use_traits) :
+unit::unit(const config& cfg,bool use_traits) :
cfg_(),
advances_to_(),
type_(),
@@ -276,211 +276,6 @@
unrenamable_(false),
side_(0),
gender_(),
- alpha_(),
- unit_formula_(),
- formula_vars_(),
- recruits_(),
- movement_(0),
- max_movement_(0),
- movement_costs_(),
- defense_mods_(),
- hold_position_(false),
- end_turn_(false),
- resting_(false),
- attacks_left_(0),
- max_attacks_(0),
- states_(),
- variables_(),
- emit_zoc_(0),
- state_(STATE_STANDING),
- overlays_(),
- role_(),
- ai_special_(),
- attacks_(),
- facing_(gamemap::location::SOUTH_EAST),
- traits_description_(),
- unit_value_(),
- goto_(),
- interrupted_move_(),
- flying_(false),
- is_fearless_(false),
- is_healthy_(false),
- modification_descriptions_(),
- animations_(),
- anim_(NULL),
- next_idling_(0),
- frame_begin_time_(0),
- unit_halo_(halo::NO_HALO),
- unit_anim_halo_(halo::NO_HALO),
- getsHit_(0),
- refreshing_(false),
- hidden_(false),
- draw_bars_(false),
- modifications_(),
- units_(NULL),
- map_(NULL),
- gamestatus_(NULL),
- teams_(NULL),
- invisibility_cache_()
-{
- read(cfg,use_traits);
- /** @todo Are these modified by read? if not they can be removed. */
- getsHit_=0;
- end_turn_ = false;
- refreshing_ = false;
- hidden_ = false;
-}
-
-void unit::clear_status_caches()
-{
- for(std::vector<const unit *>::const_iterator itor =
units_with_cache.begin();
- itor != units_with_cache.end(); ++itor) {
- (*itor)->clear_visibility_cache();
- }
-
- units_with_cache.clear();
-}
-
-unit_race::GENDER unit::generate_gender(const unit_type& type, bool gen,
game_state* state)
-{
- const std::vector<unit_race::GENDER>& genders = type.genders();
- // Once random gender is used, don't do it again.
- // Such as when restoring a saved character.
- cfg_["random_gender"] = "no";
- if(genders.empty() == false) {
- if(state) {
- return gen ? genders[state->rng().get_random() %
genders.size()] : genders.front();
- } else {
- return gen ? genders[get_random() % genders.size()] :
genders.front();
- }
- } else {
- return unit_race::MALE;
- }
-}
-
-unit::unit(unit_map* unitmap, const gamemap* map, const gamestatus*
game_status,
- const std::vector<team>* teams, const unit_type* t, int side,
- bool use_traits, bool dummy_unit, unit_race::GENDER gender,
std::string variation) :
- cfg_(),
- advances_to_(),
- type_(),
- race_(NULL),
- id_(),
- name_(),
- underlying_id_(),
- type_name_(),
- undead_variation_(),
- variation_(variation),
- hit_points_(0),
- max_hit_points_(0),
- experience_(0),
- max_experience_(0),
- level_(0),
- alignment_(),
- flag_rgb_(),
- image_mods_(),
- unrenamable_(false),
- side_(side),
- gender_(dummy_unit ? gender : generate_gender(*t,use_traits)),
- alpha_(),
- unit_formula_(),
- formula_vars_(),
- recruits_(),
- movement_(0),
- max_movement_(0),
- movement_costs_(),
- defense_mods_(),
- hold_position_(false),
- end_turn_(false),
- resting_(false),
- attacks_left_(0),
- max_attacks_(0),
- states_(),
- variables_(),
- emit_zoc_(0),
- state_(STATE_STANDING),
- overlays_(),
- role_(),
- ai_special_(),
- attacks_(),
- facing_(gamemap::location::SOUTH_EAST),
- traits_description_(),
- unit_value_(),
- goto_(),
- interrupted_move_(),
- flying_(false),
- is_fearless_(false),
- is_healthy_(false),
- modification_descriptions_(),
- animations_(),
- anim_(NULL),
- next_idling_(0),
- frame_begin_time_(0),
- unit_halo_(halo::NO_HALO),
- unit_anim_halo_(halo::NO_HALO),
- getsHit_(0),
- refreshing_(false),
- hidden_(false),
- draw_bars_(false),
- modifications_(),
- units_(unitmap),
- map_(map),
- gamestatus_(game_status),
- teams_(teams),
- invisibility_cache_()
-{
- cfg_["upkeep"]="full";
- advance_to(t);
- if(dummy_unit == false) validate_side(side_);
- if(use_traits) {
- // Units that don't have traits generated are just
- // generic units, so they shouldn't get a description
- // either.
- name_ = generate_name();
- }
- generate_traits(!use_traits);
- reset_modifications();
- apply_modifications();
- set_underlying_id();
-
- /**
- * @todo Test whether the calls above modify these values if not they
can
- * removed, since already set in the initialization list.
- */
- unrenamable_ = false;
- anim_ = NULL;
- getsHit_=0;
- end_turn_ = false;
- hold_position_ = false;
- next_idling_ = 0;
- frame_begin_time_ = 0;
- unit_halo_ = halo::NO_HALO;
- unit_anim_halo_ = halo::NO_HALO;
-}
-
-unit::unit(const unit_type* t, int side, bool use_traits, bool dummy_unit,
- unit_race::GENDER gender, std::string variation) :
- cfg_(),
- advances_to_(),
- type_(),
- race_(NULL),
- id_(),
- name_(),
- underlying_id_(),
- type_name_(),
- undead_variation_(),
- variation_(variation),
- hit_points_(0),
- max_hit_points_(0),
- experience_(0),
- max_experience_(0),
- level_(0),
- alignment_(),
- flag_rgb_(),
- image_mods_(),
- unrenamable_(false),
- side_(side),
- gender_(dummy_unit ? gender : generate_gender(*t,use_traits)),
alpha_(),
unit_formula_(),
formula_vars_(),
@@ -520,12 +315,118 @@
getsHit_(0),
refreshing_(false),
hidden_(false),
- draw_bars_(false),
+ draw_bars_(false),
modifications_(),
units_(NULL),
map_(NULL),
gamestatus_(NULL),
teams_(NULL),
+ invisibility_cache_()
+{
+ read(cfg,use_traits);
+ /** @todo Are these modified by read? if not they can be removed. */
+ getsHit_=0;
+ end_turn_ = false;
+ refreshing_ = false;
+ hidden_ = false;
+}
+
+void unit::clear_status_caches()
+{
+ for(std::vector<const unit *>::const_iterator itor =
units_with_cache.begin();
+ itor != units_with_cache.end(); ++itor) {
+ (*itor)->clear_visibility_cache();
+ }
+
+ units_with_cache.clear();
+}
+
+unit_race::GENDER unit::generate_gender(const unit_type& type, bool gen,
game_state* state)
+{
+ const std::vector<unit_race::GENDER>& genders = type.genders();
+ // Once random gender is used, don't do it again.
+ // Such as when restoring a saved character.
+ cfg_["random_gender"] = "no";
+ if(genders.empty() == false) {
+ if(state) {
+ return gen ? genders[state->rng().get_random() %
genders.size()] : genders.front();
+ } else {
+ return gen ? genders[get_random() % genders.size()] :
genders.front();
+ }
+ } else {
+ return unit_race::MALE;
+ }
+}
+
+unit::unit(unit_map* unitmap, const gamemap* map, const gamestatus*
game_status,
+ const std::vector<team>* teams, const unit_type* t, int side,
+ bool use_traits, bool dummy_unit, unit_race::GENDER gender,
std::string variation) :
+ cfg_(),
+ advances_to_(),
+ type_(),
+ race_(NULL),
+ id_(),
+ name_(),
+ underlying_id_(),
+ type_name_(),
+ undead_variation_(),
+ variation_(variation),
+ hit_points_(0),
+ max_hit_points_(0),
+ experience_(0),
+ max_experience_(0),
+ level_(0),
+ alignment_(),
+ flag_rgb_(),
+ image_mods_(),
+ unrenamable_(false),
+ side_(side),
+ gender_(dummy_unit ? gender : generate_gender(*t,use_traits)),
+ alpha_(),
+ unit_formula_(),
+ formula_vars_(),
+ recruits_(),
+ movement_(0),
+ max_movement_(0),
+ movement_costs_(),
+ defense_mods_(),
+ hold_position_(false),
+ end_turn_(false),
+ resting_(false),
+ attacks_left_(0),
+ max_attacks_(0),
+ states_(),
+ variables_(),
+ emit_zoc_(0),
+ state_(STATE_STANDING),
+ overlays_(),
+ role_(),
+ ai_special_(),
+ attacks_(),
+ facing_(gamemap::location::SOUTH_EAST),
+ traits_description_(),
+ unit_value_(),
+ goto_(),
+ interrupted_move_(),
+ flying_(false),
+ is_fearless_(false),
+ is_healthy_(false),
+ modification_descriptions_(),
+ animations_(),
+ anim_(NULL),
+ next_idling_(0),
+ frame_begin_time_(0),
+ unit_halo_(halo::NO_HALO),
+ unit_anim_halo_(halo::NO_HALO),
+ getsHit_(0),
+ refreshing_(false),
+ hidden_(false),
+ draw_bars_(false),
+ modifications_(),
+ units_(unitmap),
+ map_(map),
+ gamestatus_(game_status),
+ teams_(teams),
invisibility_cache_()
{
cfg_["upkeep"]="full";
@@ -541,8 +442,107 @@
reset_modifications();
apply_modifications();
set_underlying_id();
-
- /**
+
+ /**
+ * @todo Test whether the calls above modify these values if not they
can
+ * removed, since already set in the initialization list.
+ */
+ unrenamable_ = false;
+ anim_ = NULL;
+ getsHit_=0;
+ end_turn_ = false;
+ hold_position_ = false;
+ next_idling_ = 0;
+ frame_begin_time_ = 0;
+ unit_halo_ = halo::NO_HALO;
+ unit_anim_halo_ = halo::NO_HALO;
+}
+
+unit::unit(const unit_type* t, int side, bool use_traits, bool dummy_unit,
+ unit_race::GENDER gender, std::string variation) :
+ cfg_(),
+ advances_to_(),
+ type_(),
+ race_(NULL),
+ id_(),
+ name_(),
+ underlying_id_(),
+ type_name_(),
+ undead_variation_(),
+ variation_(variation),
+ hit_points_(0),
+ max_hit_points_(0),
+ experience_(0),
+ max_experience_(0),
+ level_(0),
+ alignment_(),
+ flag_rgb_(),
+ image_mods_(),
+ unrenamable_(false),
+ side_(side),
+ gender_(dummy_unit ? gender : generate_gender(*t,use_traits)),
+ alpha_(),
+ unit_formula_(),
+ formula_vars_(),
+ recruits_(),
+ movement_(0),
+ max_movement_(0),
+ movement_costs_(),
+ defense_mods_(),
+ hold_position_(false),
+ end_turn_(false),
+ resting_(false),
+ attacks_left_(0),
+ max_attacks_(0),
+ states_(),
+ variables_(),
+ emit_zoc_(0),
+ state_(STATE_STANDING),
+ overlays_(),
+ role_(),
+ ai_special_(),
+ attacks_(),
+ facing_(gamemap::location::SOUTH_EAST),
+ traits_description_(),
+ unit_value_(),
+ goto_(),
+ interrupted_move_(),
+ flying_(false),
+ is_fearless_(false),
+ is_healthy_(false),
+ modification_descriptions_(),
+ animations_(),
+ anim_(NULL),
+ next_idling_(0),
+ frame_begin_time_(0),
+ unit_halo_(halo::NO_HALO),
+ unit_anim_halo_(halo::NO_HALO),
+ getsHit_(0),
+ refreshing_(false),
+ hidden_(false),
+ draw_bars_(false),
+ modifications_(),
+ units_(NULL),
+ map_(NULL),
+ gamestatus_(NULL),
+ teams_(NULL),
+ invisibility_cache_()
+{
+ cfg_["upkeep"]="full";
+ advance_to(t);
+ if(dummy_unit == false) validate_side(side_);
+ if(use_traits) {
+ // Units that don't have traits generated are just
+ // generic units, so they shouldn't get a description
+ // either.
+ name_ = generate_name();
+ }
+ generate_traits(!use_traits);
+ reset_modifications();
+ apply_modifications();
+ set_underlying_id();
+
+ /**
* @todo Test whether the calls above modify these values if not they
can
* removed, since already set in the initialization list.
*/
@@ -713,7 +713,7 @@
reset_modifications();
// Remove old animations
- foreach(const std::string& tag_name, unit_animation::all_tag_names) {
+ foreach(const std::string& tag_name, unit_animation::all_tag_names()) {
cfg_.clear_children(tag_name);
}
@@ -1594,7 +1594,7 @@
// Attach animations for this unit to the in-core object
unit_animation::fill_initial_animations(animations_,cfg_);
// Remove animations from private cfg, they're not needed there now
- foreach(const std::string& tag_name, unit_animation::all_tag_names) {
+ foreach(const std::string& tag_name, unit_animation::all_tag_names()) {
cfg_.clear_children(tag_name);
}
@@ -3337,7 +3337,7 @@
unit_config["overlays"] = "";
// Non-critical tags to ignore.
unit_config.clear_children("comment");
- foreach(const std::string& tag_name, unit_animation::all_tag_names) {
+ foreach(const std::string& tag_name, unit_animation::all_tag_names()) {
unit_config.clear_children(tag_name);
}
Modified: trunk/src/unit_animation.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/unit_animation.cpp?rev=28660&r1=28659&r2=28660&view=diff
==============================================================================
--- trunk/src/unit_animation.cpp (original)
+++ trunk/src/unit_animation.cpp Sun Aug 17 05:34:52 2008
@@ -34,27 +34,34 @@
#include <cstdlib>
#include <iostream>
-//static initialization
-std::vector<std::string> unit_animation::all_tag_names;
-void unit_animation::init_tag_names() {
- unit_animation::all_tag_names.clear();
- unit_animation::all_tag_names.push_back("animation");
- unit_animation::all_tag_names.push_back("attack_anim");
- unit_animation::all_tag_names.push_back("death");
- unit_animation::all_tag_names.push_back("defend");
- unit_animation::all_tag_names.push_back("extra_anim");
- unit_animation::all_tag_names.push_back("healed_anim");
- unit_animation::all_tag_names.push_back("healing_anim");
- unit_animation::all_tag_names.push_back("idle_anim");
- unit_animation::all_tag_names.push_back("leading_anim");
- unit_animation::all_tag_names.push_back("levelin_anim");
- unit_animation::all_tag_names.push_back("levelout_anim");
- unit_animation::all_tag_names.push_back("movement_anim");
- unit_animation::all_tag_names.push_back("poison_anim");
- unit_animation::all_tag_names.push_back("recruit_anim");
- unit_animation::all_tag_names.push_back("standing_anim");
- unit_animation::all_tag_names.push_back("teleport_anim");
- unit_animation::all_tag_names.push_back("victory_anim");
+struct tag_name_manager {
+ tag_name_manager() : names() {
+ names.push_back("animation");
+ names.push_back("attack_anim");
+ names.push_back("death");
+ names.push_back("defend");
+ names.push_back("extra_anim");
+ names.push_back("healed_anim");
+ names.push_back("healing_anim");
+ names.push_back("idle_anim");
+ names.push_back("leading_anim");
+ names.push_back("levelin_anim");
+ names.push_back("levelout_anim");
+ names.push_back("movement_anim");
+ names.push_back("poison_anim");
+ names.push_back("recruit_anim");
+ names.push_back("standing_anim");
+ names.push_back("teleport_anim");
+ names.push_back("victory_anim");
+ }
+ std::vector<std::string> names;
+};
+namespace {
+ tag_name_manager anim_tags;
+} //end anonymous namespace
+
+const std::vector<std::string>& unit_animation::all_tag_names() {
+ return anim_tags.names;
}
config unit_animation::prepare_animation(const config &cfg,const std::string
animation_tag)
Modified: trunk/src/unit_animation.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/unit_animation.hpp?rev=28660&r1=28659&r2=28660&view=diff
==============================================================================
--- trunk/src/unit_animation.hpp (original)
+++ trunk/src/unit_animation.hpp Sun Aug 17 05:34:52 2008
@@ -33,8 +33,8 @@
public:
typedef enum { MATCH_FAIL=-2 , DEFAULT_ANIM=-1} variation_type;
typedef enum { HIT, MISS, KILL, INVALID} hit_type;
- static std::vector<std::string> all_tag_names;
- static void init_tag_names();
+
+ static const std::vector<std::string>& all_tag_names();
static void fill_initial_animations(
std::vector<unit_animation> & animations, const config & cfg);
static void add_anims( std::vector<unit_animation> &
animations, const config & cfg);
_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits