mail[Wesnoth-commits] r41439 - in /branches/fendrin_editor: data/campaigns/Legend_of_Wesmere/maps/ src/editor/


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

Header


Content

Posted by fabianmueller5 on March 04, 2010 - 04:11:
Author: fendrin
Date: Thu Mar  4 04:11:38 2010
New Revision: 41439

URL: http://svn.gna.org/viewcvs/wesnoth?rev=41439&view=rev
Log:
Enabled drag and drop replacing of already placed units.
Isn't that great?

Modified:
    branches/fendrin_editor/data/campaigns/Legend_of_Wesmere/maps/Lintanir.map
    branches/fendrin_editor/src/editor/editor_map.cpp
    branches/fendrin_editor/src/editor/mouse_action.cpp
    branches/fendrin_editor/src/editor/mouse_action.hpp

Modified: 
branches/fendrin_editor/data/campaigns/Legend_of_Wesmere/maps/Lintanir.map
URL: 
http://svn.gna.org/viewcvs/wesnoth/branches/fendrin_editor/data/campaigns/Legend_of_Wesmere/maps/Lintanir.map?rev=41439&r1=41438&r2=41439&view=diff
==============================================================================
--- 
branches/fendrin_editor/data/campaigns/Legend_of_Wesmere/maps/Lintanir.map 
(original)
+++ 
branches/fendrin_editor/data/campaigns/Legend_of_Wesmere/maps/Lintanir.map 
Thu Mar  4 04:11:38 2010
@@ -60,6 +60,15 @@
        visible_in_shroud="no"
        x="18"
        y="9"
+[/label]
+[label]
+       colour="221,221,221,0"
+       team_name=""
+       text="dfs"
+       visible_in_fog="yes"
+       visible_in_shroud="no"
+       x="21"
+       y="2"
 [/label]
 [named_area]
        area_id="blah"
@@ -415,190 +424,6 @@
                        impact="120"
                        pierce="100"
                [/resistance]
-               [attack_anim]
-                       direction="s,se,sw"
-                       offset="0.0~0.9:200,0.9~0.0:160"
-                       start_time="-200"
-                       [filter_attack]
-                               name="fangs"
-                       [/filter_attack]
-                       [frame]
-                               duration="30"
-                               image="units/undead/bloodbat-se-3.png"
-                       [/frame]
-                       [frame]
-                               duration="30"
-                               image="units/undead/bloodbat-se-2.png"
-                       [/frame]
-                       [frame]
-                               duration="30"
-                               image="units/undead/bloodbat-se-1.png"
-                               sound="bat-flapping.wav"
-                       [/frame]
-                       [frame]
-                               duration="30"
-                               image="units/undead/bloodbat-se-2.png"
-                       [/frame]
-                       [frame]
-                               duration="30"
-                               image="units/undead/bloodbat-se-3.png"
-                       [/frame]
-                       [if]
-                               hits="yes"
-                               [frame]
-                                       duration="70"
-                                       image="units/undead/bloodbat-se-4.png"
-                                       sound="bite-small.ogg"
-                               [/frame]
-                       [/if]
-                       [else]
-                               hits="no"
-                               [frame]
-                                       duration="70"
-                                       image="units/undead/bloodbat-se-4.png"
-                                       
sound="miss-1.ogg,miss-2.ogg,miss-3.ogg"
-                               [/frame]
-                       [/else]
-                       [frame]
-                               duration="50"
-                               image="units/undead/bloodbat-se-3.png"
-                       [/frame]
-                       [frame]
-                               duration="50"
-                               image="units/undead/bloodbat-se-2.png"
-                       [/frame]
-                       [frame]
-                               duration="40"
-                               image="units/undead/bloodbat-se-3.png"
-                       [/frame]
-               [/attack_anim]
-               [attack_anim]
-                       direction="n,ne,nw"
-                       offset="0.0~0.9:200,0.9~0.0:160"
-                       start_time="-200"
-                       [filter_attack]
-                               name="fangs"
-                       [/filter_attack]
-                       [frame]
-                               duration="30"
-                               image="units/undead/bloodbat-ne-3.png"
-                       [/frame]
-                       [frame]
-                               duration="30"
-                               image="units/undead/bloodbat-ne-2.png"
-                       [/frame]
-                       [frame]
-                               duration="30"
-                               image="units/undead/bloodbat-ne-1.png"
-                               sound="bat-flapping.wav"
-                       [/frame]
-                       [frame]
-                               duration="30"
-                               image="units/undead/bloodbat-ne-2.png"
-                       [/frame]
-                       [frame]
-                               duration="30"
-                               image="units/undead/bloodbat-ne-3.png"
-                       [/frame]
-                       [if]
-                               hits="yes"
-                               [frame]
-                                       duration="70"
-                                       image="units/undead/bloodbat-ne-4.png"
-                                       sound="bite-small.ogg"
-                               [/frame]
-                       [/if]
-                       [else]
-                               hits="no"
-                               [frame]
-                                       duration="70"
-                                       image="units/undead/bloodbat-ne-4.png"
-                                       
sound="miss-1.ogg,miss-2.ogg,miss-3.ogg"
-                               [/frame]
-                       [/else]
-                       [frame]
-                               duration="50"
-                               image="units/undead/bloodbat-ne-3.png"
-                       [/frame]
-                       [frame]
-                               duration="50"
-                               image="units/undead/bloodbat-ne-2.png"
-                       [/frame]
-                       [frame]
-                               duration="40"
-                               image="units/undead/bloodbat-ne-3.png"
-                       [/frame]
-               [/attack_anim]
-               [defend]
-                       direction="s,sw,se"
-                       start_time="-126"
-                       [if]
-                               hits="miss"
-                               offset="0.0~-0.15,-0.15~0.0"
-                       [/if]
-                       [frame]
-                               duration="1"
-                               image="units/undead/bloodbat-se-3.png"
-                       [/frame]
-                       [frame]
-                               duration="100"
-                               image="units/undead/bloodbat-se-4.png"
-                       [/frame]
-                       [if]
-                               hits="hit"
-                               [frame]
-                                       duration="150"
-                                       image="units/undead/bloodbat-se-4.png"
-                                       
sound="bat-hit-1.ogg,bat-hit-2.ogg,bat-hit-3.ogg,bat-hit-4.ogg"
-                               [/frame]
-                       [/if]
-                       [else]
-                               hits="miss,kill"
-                               [frame]
-                                       duration="150"
-                                       image="units/undead/bloodbat-se-4.png"
-                               [/frame]
-                       [/else]
-                       [frame]
-                               duration="1"
-                               image="units/undead/bloodbat-se-3.png"
-                       [/frame]
-               [/defend]
-               [defend]
-                       direction="n,nw,ne"
-                       start_time="-126"
-                       [if]
-                               hits="miss"
-                               offset="0.0~-0.15,-0.15~0.0"
-                       [/if]
-                       [frame]
-                               duration="1"
-                               image="units/undead/bloodbat-ne-3.png"
-                       [/frame]
-                       [frame]
-                               duration="100"
-                               image="units/undead/bloodbat-ne-4.png"
-                       [/frame]
-                       [if]
-                               hits="hit"
-                               [frame]
-                                       duration="150"
-                                       image="units/undead/bloodbat-ne-4.png"
-                                       
sound="bat-hit-1.ogg,bat-hit-2.ogg,bat-hit-3.ogg,bat-hit-4.ogg"
-                               [/frame]
-                       [/if]
-                       [else]
-                               hits="miss,kill"
-                               [frame]
-                                       duration="150"
-                                       image="units/undead/bloodbat-ne-4.png"
-                               [/frame]
-                       [/else]
-                       [frame]
-                               duration="1"
-                               image="units/undead/bloodbat-ne-3.png"
-                       [/frame]
-               [/defend]
                [portrait]
                        image="portraits/monsters/transparent/bat.png"
                        mirror="false"
@@ -611,80 +436,6 @@
                        side="right"
                        size="400"
                [/portrait]
-               [standing_anim]
-                       direction="s,se,sw"
-                       layer="60"
-                       start_time="0"
-                       [frame]
-                               duration="50"
-                               image="units/undead/bloodbat-se-3.png"
-                       [/frame]
-                       [frame]
-                               duration="60"
-                               image="units/undead/bloodbat-se-2.png"
-                       [/frame]
-                       [frame]
-                               duration="80"
-                               image="units/undead/bloodbat-se-1.png"
-                       [/frame]
-                       [frame]
-                               duration="60"
-                               image="units/undead/bloodbat-se-2.png"
-                       [/frame]
-                       [frame]
-                               duration="50"
-                               image="units/undead/bloodbat-se-3.png"
-                       [/frame]
-                       [frame]
-                               duration="60"
-                               image="units/undead/bloodbat-se-4.png"
-                       [/frame]
-                       [frame]
-                               duration="80"
-                               image="units/undead/bloodbat-se-5.png"
-                       [/frame]
-                       [frame]
-                               duration="60"
-                               image="units/undead/bloodbat-se-4.png"
-                       [/frame]
-               [/standing_anim]
-               [standing_anim]
-                       direction="n,ne,nw"
-                       layer="60"
-                       start_time="0"
-                       [frame]
-                               duration="50"
-                               image="units/undead/bloodbat-ne-3.png"
-                       [/frame]
-                       [frame]
-                               duration="60"
-                               image="units/undead/bloodbat-ne-2.png"
-                       [/frame]
-                       [frame]
-                               duration="80"
-                               image="units/undead/bloodbat-ne-1.png"
-                       [/frame]
-                       [frame]
-                               duration="60"
-                               image="units/undead/bloodbat-ne-2.png"
-                       [/frame]
-                       [frame]
-                               duration="50"
-                               image="units/undead/bloodbat-ne-3.png"
-                       [/frame]
-                       [frame]
-                               duration="60"
-                               image="units/undead/bloodbat-ne-4.png"
-                       [/frame]
-                       [frame]
-                               duration="80"
-                               image="units/undead/bloodbat-ne-5.png"
-                       [/frame]
-                       [frame]
-                               duration="60"
-                               image="units/undead/bloodbat-ne-4.png"
-                       [/frame]
-               [/standing_anim]
                [variables]
                [/variables]
                [status]
@@ -740,6 +491,307 @@
                        [/trait]
                [/modifications]
        [/unit]
+       [unit]
+               advances_to="Longbowman"
+               ai_special=""
+               alignment="lawful"
+               alpha="256"
+               attacks_left="1"
+               cost="14"
+               ellipse="misc/ellipse"
+               experience="0"
+               facing="se"
+               flag_rgb="magenta"
+               flying="no"
+               gender="male"
+               generate_name="no"
+               goto_x="-999"
+               goto_y="-999"
+               hitpoints="31"
+               id="Bowman-2"
+               image="units/human-loyalists/bowman.png"
+#textdomain wesnoth-units
+               language_name=_ "Bowman"
+               level="1"
+               max_attacks="1"
+               max_experience="31"
+               max_hitpoints="31"
+               max_moves="6"
+               moves="6"
+               name="Vaenyc"
+               overlays=""
+               profile="portraits/humans/bowman.png"
+               race="human"
+               random_traits="no"
+               resting="no"
+               role=""
+               side="1"
+               type="Bowman"
+               undead_variation="archer"
+               underlying_id="2"
+               unrenamable="no"
+               upkeep="full"
+               usage="archer"
+               variation=""
+               x="21"
+               y="7"
+               zoc="yes"
+               [defense]
+                       castle="40"
+                       cave="60"
+                       flat="60"
+                       forest="50"
+                       frozen="80"
+                       fungus="50"
+                       hills="50"
+                       mountains="40"
+                       reef="70"
+                       sand="70"
+                       shallow_water="80"
+                       swamp_water="80"
+                       village="40"
+               [/defense]
+               [movement_costs]
+                       castle="1"
+                       cave="2"
+                       flat="1"
+                       forest="2"
+                       frozen="3"
+                       fungus="2"
+                       hills="2"
+                       mountains="3"
+                       reef="2"
+                       sand="2"
+                       shallow_water="3"
+                       swamp_water="3"
+                       village="1"
+               [/movement_costs]
+               [resistance]
+                       arcane="80"
+                       blade="100"
+                       cold="100"
+                       fire="100"
+                       impact="100"
+                       pierce="100"
+               [/resistance]
+               [attack_anim]
+                       start_time="-445"
+                       [filter_attack]
+                               name="bow"
+                       [/filter_attack]
+                       [missile_frame]
+                               begin="-150"
+                               end="0"
+                               image="projectiles/missile-n.png"
+                               image_diagonal="projectiles/missile-ne.png"
+                       [/missile_frame]
+                       [frame]
+                               duration="65"
+                               image="units/human-loyalists/bowman-bow.png"
+                       [/frame]
+                       [frame]
+                               duration="75"
+                               
image="units/human-loyalists/bowman-bow-attack-1.png"
+                       [/frame]
+                       [frame]
+                               duration="75"
+                               
image="units/human-loyalists/bowman-bow-attack-2.png"
+                       [/frame]
+                       [if]
+                               hits="no"
+                               [frame]
+                                       duration="100"
+                                       
image="units/human-loyalists/bowman-bow-attack-3.png"
+                                       sound="bow-miss.ogg"
+                               [/frame]
+                       [/if]
+                       [else]
+                               hits="yes"
+                               [frame]
+                                       duration="100"
+                                       
image="units/human-loyalists/bowman-bow-attack-3.png"
+                                       sound="bow.ogg"
+                               [/frame]
+                       [/else]
+                       [frame]
+                               duration="130"
+                               
image="units/human-loyalists/bowman-bow-attack-4.png"
+                       [/frame]
+                       [frame]
+                               duration="65"
+                               
image="units/human-loyalists/bowman-bow-attack-1.png"
+                       [/frame]
+               [/attack_anim]
+               [attack_anim]
+                       start_time="-275"
+                       [filter_attack]
+                               name="short sword"
+                       [/filter_attack]
+                       [frame]
+                               duration="50"
+                               
image="units/human-loyalists/bowman-melee-defend-1.png"
+                       [/frame]
+                       [frame]
+                               duration="100"
+                               
image="units/human-loyalists/bowman-melee-attack-1.png"
+                       [/frame]
+                       [if]
+                               hits="yes"
+                               [frame]
+                                       duration="100"
+                                       
image="units/human-loyalists/bowman-melee-attack-2.png"
+                                       sound="sword-1.ogg"
+                               [/frame]
+                       [/if]
+                       [else]
+                               hits="no"
+                               [frame]
+                                       duration="100"
+                                       
image="units/human-loyalists/bowman-melee-attack-2.png"
+                                       
sound="miss-1.ogg,miss-2.ogg,miss-3.ogg"
+                               [/frame]
+                       [/else]
+                       [frame]
+                               duration="100"
+                               
image="units/human-loyalists/bowman-melee-attack-3.png"
+                       [/frame]
+                       [frame]
+                               duration="100"
+                               
image="units/human-loyalists/bowman-melee-attack-4.png"
+                       [/frame]
+                       [frame]
+                               duration="50"
+                               
image="units/human-loyalists/bowman-melee-defend-1.png"
+                       [/frame]
+               [/attack_anim]
+               [defend]
+                       start_time="-126"
+                       [filter_attack]
+                               range="melee"
+                       [/filter_attack]
+                       [frame]
+                               duration="1"
+                               
image="units/human-loyalists/bowman-melee-defend-1.png"
+                       [/frame]
+                       [frame]
+                               duration="100"
+                               
image="units/human-loyalists/bowman-melee-defend-2.png"
+                       [/frame]
+                       [if]
+                               hits="hit"
+                               [frame]
+                                       duration="150"
+                                       
image="units/human-loyalists/bowman-melee-defend-2.png"
+                                       
sound="human-hit-1.ogg,human-hit-2.ogg,human-hit-3.ogg,human-hit-4.ogg,human-hit-5.ogg"
+                               [/frame]
+                       [/if]
+                       [else]
+                               hits="miss,kill"
+                               [frame]
+                                       duration="150"
+                                       
image="units/human-loyalists/bowman-melee-defend-2.png"
+                               [/frame]
+                       [/else]
+                       [frame]
+                               duration="1"
+                               
image="units/human-loyalists/bowman-melee-defend-1.png"
+                       [/frame]
+               [/defend]
+               [defend]
+                       start_time="-126"
+                       [filter_attack]
+                               range="ranged"
+                       [/filter_attack]
+                       [frame]
+                               duration="1"
+                               image="units/human-loyalists/bowman-bow.png"
+                       [/frame]
+                       [frame]
+                               duration="100"
+                               
image="units/human-loyalists/bowman-bow-defend.png"
+                       [/frame]
+                       [if]
+                               hits="hit"
+                               [frame]
+                                       duration="150"
+                                       
image="units/human-loyalists/bowman-bow-defend.png"
+                                       
sound="human-hit-1.ogg,human-hit-2.ogg,human-hit-3.ogg,human-hit-4.ogg,human-hit-5.ogg"
+                               [/frame]
+                       [/if]
+                       [else]
+                               hits="miss,kill"
+                               [frame]
+                                       duration="150"
+                                       
image="units/human-loyalists/bowman-bow-defend.png"
+                               [/frame]
+                       [/else]
+                       [frame]
+                               duration="1"
+                               image="units/human-loyalists/bowman-bow.png"
+                       [/frame]
+               [/defend]
+               [portrait]
+                       image="portraits/humans/transparent/bowman.png"
+                       mirror="false"
+                       side="left"
+                       size="400"
+               [/portrait]
+               [portrait]
+                       image="portraits/humans/transparent/bowman.png"
+                       mirror="true"
+                       side="right"
+                       size="400"
+               [/portrait]
+               [variables]
+               [/variables]
+               [status]
+                       hidden="yes"
+               [/status]
+               [attack]
+                       damage="4"
+                       description=_ "short sword"
+                       icon="attacks/sword-human-short.png"
+                       name="short sword"
+                       number="2"
+                       range="melee"
+                       type="blade"
+               [/attack]
+               [attack]
+                       damage="6"
+                       description=_ "bow"
+                       name="bow"
+                       number="3"
+                       range="ranged"
+                       type="pierce"
+               [/attack]
+               [modifications]
+                       [trait]
+#textdomain wesnoth
+                               female_name=_ "female^quick"
+                               id="quick"
+                               male_name=_ "quick"
+                               name=_ "quick"
+                               [effect]
+                                       apply_to="movement"
+                                       increase="1"
+                               [/effect]
+                               [effect]
+                                       apply_to="hitpoints"
+                                       increase_total="-5%"
+                               [/effect]
+                       [/trait]
+                       [trait]
+                               female_name=_ "female^intelligent"
+                               id="intelligent"
+                               male_name=_ "intelligent"
+                               name=_ "intelligent"
+                               [effect]
+                                       apply_to="max_experience"
+                                       increase="-20%"
+                               [/effect]
+                       [/trait]
+               [/modifications]
+       [/unit]
 [/side]
 [side]
        action_bonus_count="0"

Modified: branches/fendrin_editor/src/editor/editor_map.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/branches/fendrin_editor/src/editor/editor_map.cpp?rev=41439&r1=41438&r2=41439&view=diff
==============================================================================
--- branches/fendrin_editor/src/editor/editor_map.cpp (original)
+++ branches/fendrin_editor/src/editor/editor_map.cpp Thu Mar  4 04:11:38 2010
@@ -230,7 +230,8 @@
        label += " ";
        for (int i = 1; i <= gamemap::MAX_PLAYERS; i++) {
                if (startingPositions_[i].valid()) {
-                       disp.labels().set_label(startingPositions_[i], label 
+ lexical_cast<std::string>(i));
+                       disp.labels().set_label(startingPositions_[i],
+                                       label + lexical_cast<std::string>(i), 
"", font::LABEL_COLOUR, true, true, false);
                        label_locs.insert(startingPositions_[i]);
                }
        }

Modified: branches/fendrin_editor/src/editor/mouse_action.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/branches/fendrin_editor/src/editor/mouse_action.cpp?rev=41439&r1=41438&r2=41439&view=diff
==============================================================================
--- branches/fendrin_editor/src/editor/mouse_action.cpp (original)
+++ branches/fendrin_editor/src/editor/mouse_action.cpp Thu Mar  4 04:11:38 
2010
@@ -438,10 +438,29 @@
 
 
 
-editor_action* mouse_action_unit::click_left(editor_display& /*disp*/, int 
/*x*/, int /*y*/)
-{
+editor_action* mouse_action_unit::click_left(editor_display& disp, int x, 
int y)
+{
+       map_location hex = disp.hex_clicked_on(x, y);
+
+       const unit_map& units = disp.map().get_const_units();
+
+       const unit_map::const_unit_iterator unit_it = units.find(hex);
+       if (unit_it != units.end()) {
+
+               surface image = unit_it->second.still_image();
+               Uint8 alpha = 196;
+               int size = image->w;
+               int zoom = static_cast<int>(size * disp.get_zoom_factor());
+               // Add the alpha factor and scale the image
+               image = scale_surface(adjust_surface_alpha(image, alpha), 
zoom, zoom);
+               disp.set_mouseover_hex_overlay(image);
+       }
+
        click_ = true;
        return NULL;
+
+
+
 }
 
 
@@ -565,6 +584,30 @@
        return a;
 }
 
+//TODO
+//editor_action* drag_left(editor_display& disp, int x, int y, bool& 
partial, editor_action* last_undo)
+//{
+//
+//
+//}
+
+editor_action* mouse_action_unit::drag_end(editor_display& disp, int x, int 
y) {
+       if (!click_) return NULL;
+       click_ = false;
+       map_location hex = disp.hex_clicked_on(x, y);
+       if (!disp.map().on_board(hex)) {
+               return NULL;
+       }
+
+       ERR_ED << "\n Drag end at " << hex.x << "/" << hex.y;
+
+       return NULL;
+
+}
+
+
+
+
 editor_action* mouse_action_unit::up_left(editor_display& disp, int x, int y)
 {
        if (!click_) return NULL;
@@ -617,23 +660,24 @@
 
 editor_action* mouse_action_starting_position::up_right(editor_display& 
disp, int x, int y)
 {
-       map_location hex = disp.hex_clicked_on(x, y);
-       int player_starting_at_hex = disp.map().is_starting_position(hex) + 1;
-       if (player_starting_at_hex != -1) {
-               config side;
-//             disp.get_teams()[player_starting_at_hex].write(side);
-               disp.get_teams()[1].write(side);
-               //const config const_side = side;
-               vconfig vside(side, true);
-               ERR_ED << vside.get_config().debug();
-               gui2::tgamestate_inspector inspect_dialog(vside);
-               inspect_dialog.show(disp.video());
-//             inspect_dialog.show(resources::screen->video());
-               return NULL;
-               //return new editor_action_side_config(map_location(), 
player_starting_at_hex);
-       } else {
-               return NULL;
-       }
+       //TODO
+//     map_location hex = disp.hex_clicked_on(x, y);
+//     int player_starting_at_hex = disp.map().is_starting_position(hex) + 1;
+//     if (player_starting_at_hex != -1) {
+//             config side;
+////           disp.get_teams()[player_starting_at_hex].write(side);
+//             disp.get_teams()[1].write(side);
+//             //const config const_side = side;
+//             vconfig vside(side, true);
+//             ERR_ED << vside.get_config().debug();
+//             gui2::tgamestate_inspector inspect_dialog(vside);
+//             inspect_dialog.show(disp.video());
+////           inspect_dialog.show(resources::screen->video());
+//             return NULL;
+//             //return new editor_action_side_config(map_location(), 
player_starting_at_hex);
+//     } else {
+               return NULL;
+//     }
 }
 
 editor_action* mouse_action_starting_position::click_right(editor_display& 
/*disp*/, int /*x*/, int /*y*/)

Modified: branches/fendrin_editor/src/editor/mouse_action.hpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/branches/fendrin_editor/src/editor/mouse_action.hpp?rev=41439&r1=41438&r2=41439&view=diff
==============================================================================
--- branches/fendrin_editor/src/editor/mouse_action.hpp (original)
+++ branches/fendrin_editor/src/editor/mouse_action.hpp Thu Mar  4 04:11:38 
2010
@@ -419,7 +419,12 @@
        {
        }
 
-       /**
+       editor_action* drag_end(editor_display& disp, int x, int y);
+
+//     editor_action* drag_left(editor_display& disp, int x, int y, bool& 
partial, editor_action* last_undo);
+
+       /**
+        * TODO correct the comment.
         * Left click displays a player-number-selector dialog and then 
creates an action
         * or returns NULL if cancel was pressed or there would be no change.
         * Do this on mouse up to avoid drag issue.




Related Messages


Powered by MHonArc, Updated Thu Mar 04 10:40:20 2010