I got squishing working! The White box (which will soon be replaced with actual sprites) can now detect being squished vertically or horizontally, and call a script.
In other news, I've started implementing actual graphics for the levels. How I'm doing it, is each feature will have a string identifying its style. The styles are stored in structs like the following:
struct FeatureStyle{SDL_Surface* surface_;FeatureStyleMode mode_;SDL_Rect middle_;SDL_Rect left_edge_;SDL_Rect top_left_corner_;SDL_Rect top_edge_;SDL_Rect top_right_corner_;SDL_Rect right_edge_;SDL_Rect bottom_right_corner_;SDL_Rect bottom_edge_;SDL_Rect bottom_left_corner_;};
The mode_ simply defined if its just one, tiles, or tiled with borders. The SDL_Rects define where each part of the image is. The problem is, that this has just led to the biggest piece of copy-paste form-code in my recent history. I've been discussing over at StackOverflow whether there is a better way . There is a good chance I'll implement Konrad Rudolf's excellent suggestion. You can find the discussion on http://stackoverflow.com/questions/9260911/avoiding-copy-paste-code-initialising-a-series-of-sdl-rects-in-a-struct/9261170#9261170 if you feel like contribution. It follows, unadulterated.
case M_AddFeatureStyle:
{
std::string descriptor = TrimQuotes(args[0]);
std::string file = TrimQuotes(args[1]);
FeatureStyleMode mode = (FeatureStyleMode)boost::lexical_cast<int>(args[2]);
SDL_Rect middle = RectZeroes;
if (args.size() >= 6 )
{
middle.x = boost::lexical_cast<int>(args[3]);
middle.y = boost::lexical_cast<int>(args[4]);
middle.w = boost::lexical_cast<int>(args[5]);
middle.h = boost::lexical_cast<int>(args[6]);
}
SDL_Rect left_edge = RectZeroes;
if (args.size() >= 10 )
{
left_edge.x = boost::lexical_cast<int>(args[7]);
left_edge.y = boost::lexical_cast<int>(args[8]);
left_edge.w = boost::lexical_cast<int>(args[9]);
left_edge.h = boost::lexical_cast<int>(args[10]);
}
SDL_Rect top_left_corner = RectZeroes;
if (args.size() >= 14 )
{
top_left_corner.x = boost::lexical_cast<int>(args[11]);
top_left_corner.y = boost::lexical_cast<int>(args[12]);
top_left_corner.w = boost::lexical_cast<int>(args[13]);
top_left_corner.h = boost::lexical_cast<int>(args[14]);
}
SDL_Rect top_edge = RectZeroes;
if (args.size() >= 18 )
{
top_edge.x = boost::lexical_cast<int>(args[15]);
top_edge.y = boost::lexical_cast<int>(args[16]);
top_edge.w = boost::lexical_cast<int>(args[17]);
top_edge.h = boost::lexical_cast<int>(args[18]);
}
SDL_Rect top_right_corner = RectZeroes;
if (args.size() >= 22 )
{
top_right_corner.x = boost::lexical_cast<int>(args[19]);
top_right_corner.y = boost::lexical_cast<int>(args[20]);
top_right_corner.w = boost::lexical_cast<int>(args[21]);
top_right_corner.h = boost::lexical_cast<int>(args[22]);
}
SDL_Rect right_edge = RectZeroes;
if (args.size() >= 26 )
{
right_edge.x = boost::lexical_cast<int>(args[23]);
right_edge.y = boost::lexical_cast<int>(args[24]);
right_edge.w = boost::lexical_cast<int>(args[25]);
right_edge.h = boost::lexical_cast<int>(args[26]);
}
SDL_Rect bottom_right_corner = RectZeroes;
if (args.size() >= 30 )
{
bottom_right_corner.x = boost::lexical_cast<int>(args[27]);
bottom_right_corner.y = boost::lexical_cast<int>(args[28]);
bottom_right_corner.w = boost::lexical_cast<int>(args[29]);
bottom_right_corner.h = boost::lexical_cast<int>(args[30]);
}
SDL_Rect bottom_edge = RectZeroes;
if (args.size() >= 34 )
{
bottom_edge.x = boost::lexical_cast<int>(args[31]);
bottom_edge.y = boost::lexical_cast<int>(args[32]);
bottom_edge.w = boost::lexical_cast<int>(args[33]);
bottom_edge.h = boost::lexical_cast<int>(args[34]);
}
SDL_Rect bottom_left_corner = RectZeroes;
if (args.size() >= 38 )
{
bottom_left_corner.x = boost::lexical_cast<int>(args[35]);
bottom_left_corner.y = boost::lexical_cast<int>(args[36]);
bottom_left_corner.w = boost::lexical_cast<int>(args[37]);
bottom_left_corner.h = boost::lexical_cast<int>(args[38]);
}
t->AddFeatureStyle(
descriptor,
file,
mode,
middle,
left_edge,
top_left_corner,
top_edge,
top_right_corner,
right_edge,
bottom_right_corner,
bottom_edge,
bottom_left_corner);
}
break;
0 comments:
Post a comment