Author: esr
Date: Fri Aug 22 01:13:07 2008
New Revision: 28835

URL: http://svn.gna.org/viewcvs/wesnoth?rev=28835&view=rev
Log:
Fix bug #11175 (Strange Statistic Losses).  Statistics arte now associated with 
side ID (team leader description) rather than tem number.

Modified:
    trunk/src/menu_events.cpp
    trunk/src/playmp_controller.cpp
    trunk/src/playsingle_controller.cpp
    trunk/src/replay_controller.cpp
    trunk/src/statistics.cpp
    trunk/src/statistics.hpp
    trunk/src/statistics_dialog.cpp
    trunk/src/statistics_dialog.hpp
    trunk/src/unit.hpp

Modified: trunk/src/menu_events.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/menu_events.cpp?rev=28835&r1=28834&r2=28835&view=diff
==============================================================================
--- trunk/src/menu_events.cpp (original)
+++ trunk/src/menu_events.cpp Fri Aug 22 01:13:07 2008
@@ -194,7 +194,11 @@
                //add player's name to title of dialog
                std::stringstream title_str;
                title_str <<  _("Statistics") << " (" << player << ")";
-               statistics_dialog stats_dialog(*gui_, title_str.str(), 
team_num, player);
+               statistics_dialog stats_dialog(*gui_, 
+                                              title_str.str(), 
+                                              team_num, 
+                                              teams_[team_num - 1].save_id(), 
+                                              player);
                stats_dialog.show();
        }
 

Modified: trunk/src/playmp_controller.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/playmp_controller.cpp?rev=28835&r1=28834&r2=28835&view=diff
==============================================================================
--- trunk/src/playmp_controller.cpp (original)
+++ trunk/src/playmp_controller.cpp Fri Aug 22 01:13:07 2008
@@ -81,7 +81,7 @@
                player_type_changed_ = false;
                end_turn_ = false;
 
-               statistics::reset_turn_stats(player_number_);
+               statistics::reset_turn_stats(teams_[team_index].save_id());
 
                // we can't call playsingle_controller::play_side because
                // we need to catch exception here

Modified: trunk/src/playsingle_controller.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/playsingle_controller.cpp?rev=28835&r1=28834&r2=28835&view=diff
==============================================================================
--- trunk/src/playsingle_controller.cpp (original)
+++ trunk/src/playsingle_controller.cpp Fri Aug 22 01:13:07 2008
@@ -573,7 +573,7 @@
                end_turn_ = false;
 
 
-               statistics::reset_turn_stats(player_number_);
+               statistics::reset_turn_stats(teams_[team_index].save_id());
 
                if(current_team().is_human() || temporary_human) {
                        LOG_NG << "is human...\n";

Modified: trunk/src/replay_controller.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/replay_controller.cpp?rev=28835&r1=28834&r2=28835&view=diff
==============================================================================
--- trunk/src/replay_controller.cpp (original)
+++ trunk/src/replay_controller.cpp Fri Aug 22 01:13:07 2008
@@ -320,7 +320,7 @@
        }
 }
 
-void replay_controller::play_side(const unsigned int /*team_index*/, bool){
+void replay_controller::play_side(const unsigned int team_index, bool){
        if (recorder.at_end()){
                return;
        }
@@ -332,7 +332,7 @@
        // If a side is empty skip over it.
        if (current_team().is_empty()) return;
 
-       statistics::reset_turn_stats(player_number_);
+       statistics::reset_turn_stats(teams_[team_index].save_id());
 
        try{
                play_controller::init_side(player_number_ - 1, true);

Modified: trunk/src/statistics.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/statistics.cpp?rev=28835&r1=28834&r2=28835&view=diff
==============================================================================
--- trunk/src/statistics.cpp (original)
+++ trunk/src/statistics.cpp Fri Aug 22 01:13:07 2008
@@ -50,7 +50,7 @@
        config write() const;
        void write(config_writer &out) const;
 
-       std::vector<stats> team_stats;
+       std::map<std::string,stats> team_stats;
        std::string scenario_name;
 };
 
@@ -60,7 +60,7 @@
 {
        const config::child_list& teams = cfg.get_children("team");
        for(config::child_list::const_iterator i = teams.begin(); i != 
teams.end(); ++i) {
-               team_stats.push_back(stats(**i));
+               team_stats[(**i)["save_id"]] = stats(**i);
        }
 }
 
@@ -68,8 +68,8 @@
 {
        config res;
        res["scenario"] = scenario_name;
-       for(std::vector<stats>::const_iterator i = team_stats.begin(); i != 
team_stats.end(); ++i) {
-               res.add_child("team",i->write());
+       for(std::map<std::string,stats>::const_iterator i = team_stats.begin(); 
i != team_stats.end(); ++i) {
+               res.add_child("team",i->second.write());
        }
 
        return res;
@@ -78,9 +78,9 @@
 void scenario_stats::write(config_writer &out) const
 {
        out.write_key_val("scenario", scenario_name);
-       for(std::vector<stats>::const_iterator i = team_stats.begin(); i != 
team_stats.end(); ++i) {
+       for(std::map<std::string,stats>::const_iterator i = team_stats.begin(); 
i != team_stats.end(); ++i) {
                out.open_child("team");
-               i->write(out);
+               i->second.write(out);
                out.close_child("team");
        }
 }
@@ -89,19 +89,14 @@
 
 } // end anon namespace
 
-static stats& get_stats(int team)
+static stats& get_stats(std::string save_id)
 {
        if(master_stats.empty()) {
                master_stats.push_back(scenario_stats(""));
        }
 
-       std::vector<stats>& team_stats = master_stats.back().team_stats;
-       const size_t index = size_t(team-1);
-       if(index >= team_stats.size()) {
-               team_stats.resize(index+1);
-       }
-
-       return team_stats[index];
+       std::map<std::string,stats>& team_stats = 
master_stats.back().team_stats;
+       return team_stats[save_id];
 }
 
 static config write_str_int_map(const stats::str_int_map& m)
@@ -475,8 +470,8 @@
                const unit& d, int a_cth, int d_cth) :
        attacker_type(a.type_id()), 
        defender_type(d.type_id()), 
-       attacker_side(a.side()), 
-       defender_side(d.side()), 
+       attacker_side(a.side_id()), 
+       defender_side(d.side_id()), 
        chance_to_hit_defender(a_cth), 
        chance_to_hit_attacker(d_cth),
        attacker_res(),
@@ -604,7 +599,7 @@
        if(stats_disabled > 0)
                return;
 
-       stats& s = get_stats(u.side());
+       stats& s = get_stats(u.side_id());
        s.recruits[u.type_id()]++;
        s.recruit_cost += u.cost();
 }
@@ -614,7 +609,7 @@
        if(stats_disabled > 0)
                return;
 
-       stats& s = get_stats(u.side());
+       stats& s = get_stats(u.side_id());
        s.recalls[u.type_id()]++;
        s.recall_cost += u.cost();
 }
@@ -624,7 +619,7 @@
        if(stats_disabled > 0)
                return;
 
-       stats& s = get_stats(u.side());
+       stats& s = get_stats(u.side_id());
        s.recalls[u.type_id()]--;
        s.recall_cost -= u.cost();
 }
@@ -634,7 +629,7 @@
        if(stats_disabled > 0)
                return;
 
-       stats& s = get_stats(u.side());
+       stats& s = get_stats(u.side_id());
        s.recruits[u.type_id()]--;
        s.recruit_cost -= u.cost();
 }
@@ -645,13 +640,13 @@
        if(stats_disabled > 0)
                return;
 
-       stats& s = get_stats(u.side());
+       stats& s = get_stats(u.side_id());
        s.advanced_to[u.type_id()]++;
 }
 
-void reset_turn_stats(int side)
-{
-       stats &s = get_stats(side);
+void reset_turn_stats(std::string save_id)
+{
+       stats &s = get_stats(save_id);
        s.turn_damage_inflicted = 0;
        s.turn_damage_taken = 0;
        s.turn_expected_damage_inflicted = 0;
@@ -660,22 +655,21 @@
        s.new_turn_expected_damage_taken = 0;
 }
 
-stats calculate_stats(int category, int side)
-{
-       DBG_NG << "calculate_stats, category: " << category << " side: " << 
side << " master_stats.size: " << master_stats.size() << "\n";
+stats calculate_stats(int category, std::string save_id)
+{
+       DBG_NG << "calculate_stats, category: " << category << " side: " << 
save_id << " master_stats.size: " << master_stats.size() << "\n";
        if(category == 0) {
                stats res;
-               // We are going from last to first to include corect turn stats 
in result
+               // We are going from last to first to include correct turn 
stats in result
                for(int i = int(master_stats.size()); i > 0 ; --i) {
-                       merge_stats(res,calculate_stats(i,side));
+                       merge_stats(res,calculate_stats(i,save_id));
                }
 
                return res;
        } else {
                const size_t index = master_stats.size() - size_t(category);
-               const size_t side_index = size_t(side) - 1;
-               if(index < master_stats.size() && side_index < 
master_stats[index].team_stats.size()) {
-                       return master_stats[index].team_stats[side_index];
+               if(index < master_stats.size() && 
master_stats[index].team_stats.find(save_id) != 
master_stats[index].team_stats.end()) {
+                       return master_stats[index].team_stats[save_id];
                } else {
                        return stats();
                }

Modified: trunk/src/statistics.hpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/statistics.hpp?rev=28835&r1=28834&r2=28835&view=diff
==============================================================================
--- trunk/src/statistics.hpp (original)
+++ trunk/src/statistics.hpp Fri Aug 22 01:13:07 2008
@@ -100,7 +100,7 @@
        private:
 
                std::string attacker_type, defender_type;
-               int attacker_side, defender_side;
+               std::string attacker_side, defender_side;
                int chance_to_hit_defender, chance_to_hit_attacker;
                std::string attacker_res, defender_res;
 
@@ -121,8 +121,8 @@
        void fresh_stats();
        void clear_current_scenario();
 
-       void reset_turn_stats(int side);
-       stats calculate_stats(int category, int side);
+       void reset_turn_stats(std::string save_id);
+       stats calculate_stats(int category, std::string save_id);
 } // end namespace statistics
 
 #endif

Modified: trunk/src/statistics_dialog.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/statistics_dialog.cpp?rev=28835&r1=28834&r2=28835&view=diff
==============================================================================
--- trunk/src/statistics_dialog.cpp (original)
+++ trunk/src/statistics_dialog.cpp Fri Aug 22 01:13:07 2008
@@ -96,8 +96,11 @@
        }
 }
 
-statistics_dialog::statistics_dialog(game_display &disp, const std::string& 
title,
-               const unsigned int team, const std::string& player) :
+statistics_dialog::statistics_dialog(game_display &disp, 
+               const std::string& title,
+               const unsigned int team,
+               const std::string team_id, 
+               const std::string& player) :
        dialog(disp, title, "", gui::NULL_DIALOG), 
        detail_btn_(new gui::standard_dialog_button(disp.video(), _("Details"), 
0 , false)),
        player_name_(player),
@@ -109,7 +112,7 @@
        add_button(new gui::standard_dialog_button(disp.video(), _("Close"), 1, 
true),
                                gui::dialog::BUTTON_STANDARD);
 
-       stats_ = statistics::calculate_stats(0, team_num_);
+       stats_ = statistics::calculate_stats(0, team_id);
        int n;
        std::vector<std::string> items;
        // Prepare the menu items

Modified: trunk/src/statistics_dialog.hpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/statistics_dialog.hpp?rev=28835&r1=28834&r2=28835&view=diff
==============================================================================
--- trunk/src/statistics_dialog.hpp (original)
+++ trunk/src/statistics_dialog.hpp Fri Aug 22 01:13:07 2008
@@ -24,7 +24,10 @@
 class statistics_dialog : public gui::dialog
 {
 public:
-       statistics_dialog(game_display &disp, const std::string& title, const 
unsigned int team,
+       statistics_dialog(game_display &disp, 
+               const std::string& title, 
+               const unsigned int team,
+               const std::string team_id,
                const std::string& player);
        ~statistics_dialog();
 protected:

Modified: trunk/src/unit.hpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/unit.hpp?rev=28835&r1=28834&r2=28835&view=diff
==============================================================================
--- trunk/src/unit.hpp (original)
+++ trunk/src/unit.hpp Fri Aug 22 01:13:07 2008
@@ -119,6 +119,7 @@
        /** Set to true for some scenario-specific units which should not be 
renamed */
        bool unrenamable() const { return unrenamable_; }
        unsigned int side() const { return side_; }
+       std::string side_id() const {return (*teams_)[side()].save_id(); }
        Uint32 team_rgb() const { return(team::get_side_rgb(side())); }
        const std::string& team_color() const { return flag_rgb_; }
        unit_race::GENDER gender() const { return gender_; }


_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits

Reply via email to