Author: boucman
Date: Wed Mar 25 18:45:13 2009
New Revision: 34116
URL: http://svn.gna.org/viewcvs/wesnoth?rev=34116&view=rev
Log:
reimplement the in_hex logic in animations, no WML changes needed anymore, in
hex is automatically detected for all animations
Modified:
trunk/src/unit_animation.cpp
trunk/src/unit_frame.cpp
trunk/src/unit_frame.hpp
Modified: trunk/src/unit_animation.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/unit_animation.cpp?rev=34116&r1=34115&r2=34116&view=diff
==============================================================================
--- trunk/src/unit_animation.cpp (original)
+++ trunk/src/unit_animation.cpp Wed Mar 25 18:45:13 2009
@@ -310,16 +310,13 @@
}
}
- const std::string& default_image_in_hex = cfg["in_hex"];
- //const std::string& default_image_in_hex = is_in_hex(default_image) ?
"yes" : "no";
if( animation_base.empty() )
-
animation_base.push_back(unit_animation(0,frame_builder().image(default_image).duration(1).in_hex(default_image_in_hex),"",unit_animation::DEFAULT_ANIM));
-
- //the default standing anim when disbabled use the main in_hex key
-
animations.push_back(unit_animation(0,frame_builder().image(default_image).duration(1).in_hex(default_image_in_hex),"_disabled_",0));
+
animation_base.push_back(unit_animation(0,frame_builder().image(default_image).duration(1),"",unit_animation::DEFAULT_ANIM));
+
+
animations.push_back(unit_animation(0,frame_builder().image(default_image).duration(1),"_disabled_",0));
animations.push_back(unit_animation(0,frame_builder().image(default_image).duration(1).
-
blend("0.0~0.3:100,0.3~0.0:200",display::rgb(255,255,255)).in_hex(default_image_in_hex),"_disabled_selected_",0));
+
blend("0.0~0.3:100,0.3~0.0:200",display::rgb(255,255,255)),"_disabled_selected_",0));
for(itor = animation_base.begin() ; itor != animation_base.end() ;
itor++ ) {
unit_animation tmp_anim = *itor;
// provide all default anims
Modified: trunk/src/unit_frame.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/unit_frame.cpp?rev=34116&r1=34115&r2=34116&view=diff
==============================================================================
--- trunk/src/unit_frame.cpp (original)
+++ trunk/src/unit_frame.cpp Wed Mar 25 18:45:13 2009
@@ -175,7 +175,8 @@
x_(""),
y_(""),
drawing_layer_(""),
- in_hex_(false)
+ in_hex_(false),
+ diagonal_in_hex_(false)
{
image(image::locator(cfg[frame_string+"image"]),cfg[frame_string+"image_mod"]);
image_diagonal(image::locator(cfg[frame_string+"image_diagonal"]),cfg[frame_string+"image_mod"]);
@@ -206,7 +207,6 @@
x(cfg[frame_string+"x"]);
y(cfg[frame_string+"y"]);
drawing_layer(cfg[frame_string+"layer"]);
- in_hex(cfg[frame_string+"in_hex"]);
}
const frame_parameters frame_builder::parameters(int current_time) const
@@ -232,18 +232,21 @@
result.y = y_.get_current_element(current_time);
result.drawing_layer =
drawing_layer_.get_current_element(current_time,display::LAYER_UNIT_DEFAULT-display::LAYER_UNIT_FIRST);
result.in_hex = in_hex_;
+ result.diagonal_in_hex = diagonal_in_hex_;
return result;
}
frame_builder & frame_builder::image(const image::locator image ,const
std::string & image_mod)
{
image_ = image;
image_mod_ = image_mod;
+ in_hex_ = is_in_hex(image);
return *this;
}
frame_builder & frame_builder::image_diagonal(const image::locator
image_diagonal,const std::string& image_mod)
{
image_diagonal_ = image_diagonal;
image_mod_ = image_mod;
+ diagonal_in_hex_ = is_in_hex(image_diagonal);
return *this;
}
frame_builder & frame_builder::sound(const std::string& sound)
@@ -318,11 +321,6 @@
frame_builder & frame_builder::drawing_layer(const std::string& drawing_layer)
{
drawing_layer_=progressive_int(drawing_layer,duration_);
- return *this;
-}
-frame_builder & frame_builder::in_hex(const std::string& in_hex)
-{
- in_hex_= utils::string_bool(in_hex);
return *this;
}
@@ -473,13 +471,16 @@
const frame_parameters current_data =
merge_parameters(frame_time,animation_val,engine_val,primary);
double tmp_offset = current_data.offset;
int d2 = game_display::get_singleton()->hex_size() / 2;
+ bool image_fit_hex = false;
image::locator image_loc;
if(direction != map_location::NORTH && direction !=
map_location::SOUTH) {
image_loc = current_data.image_diagonal;
+ image_fit_hex = current_data.diagonal_in_hex;
}
if(image_loc.is_void() || image_loc.get_filename() == "") { // invalid
diag image, or not diagonal
image_loc = current_data.image;
+ image_fit_hex = current_data.in_hex;
}
surface image;
@@ -500,7 +501,7 @@
const int y = static_cast<int>(tmp_offset * ydst +
(1.0-tmp_offset) * ysrc)+current_data.y+d2-(image->h/2);
const SDL_Rect r = {x,y,image->w,image->h};
// check if the unit fit in a hex
- bool in_hex = current_data.in_hex && r.x==xsrc && r.y==ysrc
+ bool in_hex = image_fit_hex && r.x==xsrc && r.y==ysrc
&& r.w==disp->hex_size() &&
r.h==disp->hex_size();
// check if our underlying hexes are invalidated
bool rect_need_update = in_hex ?
@@ -545,14 +546,18 @@
/** engine provides a default image to use for the unit when none is
available */
result.image = current_val.image.is_void() ||
current_val.image.get_filename() == ""?animation_val.image:current_val.image;
+ result.in_hex = current_val.image.is_void() ||
current_val.image.get_filename() == ""?animation_val.in_hex:current_val.in_hex;
if(primary && ( result.image.is_void() ||
result.image.get_filename().empty())) {
result.image = engine_val.image;
+ result.in_hex = engine_val.in_hex;
}
/** engine provides a default image to use for the unit when none is
available */
result.image_diagonal = current_val.image_diagonal.is_void() ||
current_val.image_diagonal.get_filename() ==
""?animation_val.image_diagonal:current_val.image_diagonal;
+ result.diagonal_in_hex = current_val.image_diagonal.is_void() ||
current_val.image_diagonal.get_filename() ==
""?animation_val.diagonal_in_hex:current_val.diagonal_in_hex;
if(primary && ( result.image_diagonal.is_void() ||
result.image_diagonal.get_filename().empty())) {
result.image_diagonal = engine_val.image_diagonal;
+ result.diagonal_in_hex = engine_val.diagonal_in_hex;
}
/** engine provides a string for "stoned" and "team color"
modifications */
@@ -616,12 +621,12 @@
result.drawing_layer = current_val.drawing_layer !=
display::LAYER_UNIT_DEFAULT-display::LAYER_UNIT_FIRST?
current_val.drawing_layer:animation_val.drawing_layer;
- assert(!engine_val.in_hex);
- result.in_hex = current_val.in_hex ? current_val.in_hex :
animation_val.in_hex;
#ifdef LOW_MEM
if(primary) {
result.image= engine_val.image;
+ result.in_hex = engine_val.in_hex;
result.image_diagonal= engine_val.image;
+ result.diagonal_in_hex = engine_val.diagonal_in_hex;
}
#endif
return result;
Modified: trunk/src/unit_frame.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/unit_frame.hpp?rev=34116&r1=34115&r2=34116&view=diff
==============================================================================
--- trunk/src/unit_frame.hpp (original)
+++ trunk/src/unit_frame.hpp Wed Mar 25 18:45:13 2009
@@ -86,7 +86,8 @@
x(0),
y(0),
drawing_layer(display::LAYER_UNIT_DEFAULT-display::LAYER_UNIT_FIRST),
- in_hex(false)
+ in_hex(false),
+ diagonal_in_hex(false)
{};
image::locator image;
@@ -109,6 +110,7 @@
int y;
int drawing_layer;
bool in_hex;
+ bool diagonal_in_hex;
} ;
/**
* keep most parameters in a separate class to simplify handling of large
@@ -137,7 +139,8 @@
x_(""),
y_(""),
drawing_layer_(lexical_cast<std::string>(display::LAYER_UNIT_DEFAULT-display::LAYER_UNIT_FIRST)),
- in_hex_(false)
+ in_hex_(false),
+ diagonal_in_hex_(false)
{};
frame_builder(const config& cfg,const std::string &frame_string
= "");
/** allow easy chained modifications will raised assert if used
after initialization */
@@ -154,7 +157,6 @@
frame_builder & x(const std::string& x);
frame_builder & y(const std::string& y);
frame_builder & drawing_layer(const std::string& drawing_layer);
- frame_builder & in_hex(const std::string& in_hex);
/** getters for the different parameters */
const frame_parameters parameters(int current_time) const ;
@@ -183,6 +185,7 @@
progressive_int y_;
progressive_int drawing_layer_;
bool in_hex_;
+ bool diagonal_in_hex_;
};
/** Describe a unit's animation sequence. */
_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits