mail[Wesnoth-commits] r28660 - in /trunk/src: game.cpp unit.cpp unit_animation.cpp unit_animation.hpp


Others Months | Index by Date | Thread Index
>>   [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Header


Content

Posted by patrick_X99 on August 17, 2008 - 05:35:
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);
 




Related Messages


Powered by MHonArc, Updated Sun Aug 17 09:02:04 2008