6 void bouncy_distro_init(bouncy_distro_type* pbouncy_distro, float x, float y)
8 pbouncy_distro->base.x = x;
9 pbouncy_distro->base.y = y;
10 pbouncy_distro->base.ym = -2;
13 void bouncy_distro_action(bouncy_distro_type* pbouncy_distro)
15 pbouncy_distro->base.y = pbouncy_distro->base.y + pbouncy_distro->base.ym * frame_ratio;
17 pbouncy_distro->base.ym += 0.1 * frame_ratio;
19 if (pbouncy_distro->base.ym >= 0)
20 world.bouncy_distros.erase(static_cast<std::vector<bouncy_distro_type>::iterator>(pbouncy_distro));
23 void bouncy_distro_draw(bouncy_distro_type* pbouncy_distro)
25 texture_draw(&img_distro[0],
26 pbouncy_distro->base.x - scroll_x,
27 pbouncy_distro->base.y);
30 void broken_brick_init(broken_brick_type* pbroken_brick, Tile* tile,
31 float x, float y, float xm, float ym)
33 pbroken_brick->tile = tile;
34 pbroken_brick->base.x = x;
35 pbroken_brick->base.y = y;
36 pbroken_brick->base.xm = xm;
37 pbroken_brick->base.ym = ym;
39 timer_init(&pbroken_brick->timer, true);
40 timer_start(&pbroken_brick->timer,200);
43 void broken_brick_action(broken_brick_type* pbroken_brick)
45 pbroken_brick->base.x = pbroken_brick->base.x + pbroken_brick->base.xm * frame_ratio;
46 pbroken_brick->base.y = pbroken_brick->base.y + pbroken_brick->base.ym * frame_ratio;
48 if (!timer_check(&pbroken_brick->timer))
49 world.broken_bricks.erase(static_cast<std::vector<broken_brick_type>::iterator>(pbroken_brick));
52 void broken_brick_draw(broken_brick_type* pbroken_brick)
60 dest.x = (int)(pbroken_brick->base.x - scroll_x);
61 dest.y = (int)pbroken_brick->base.y;
65 if (pbroken_brick->tile->images.size() > 0)
66 texture_draw_part(&pbroken_brick->tile->images[0],
67 src.x,src.y,dest.x,dest.y,dest.w,dest.h);
70 void bouncy_brick_init(bouncy_brick_type* pbouncy_brick, float x, float y)
72 pbouncy_brick->base.x = x;
73 pbouncy_brick->base.y = y;
74 pbouncy_brick->offset = 0;
75 pbouncy_brick->offset_m = -BOUNCY_BRICK_SPEED;
76 pbouncy_brick->shape = GameSession::current()->get_level()->gettileid(x, y);
79 void bouncy_brick_action(bouncy_brick_type* pbouncy_brick)
82 pbouncy_brick->offset = (pbouncy_brick->offset +
83 pbouncy_brick->offset_m * frame_ratio);
87 if (pbouncy_brick->offset < -BOUNCY_BRICK_MAX_OFFSET)
88 pbouncy_brick->offset_m = BOUNCY_BRICK_SPEED;
93 if (pbouncy_brick->offset >= 0)
94 world.bouncy_bricks.erase(static_cast<std::vector<bouncy_brick_type>::iterator>(pbouncy_brick));
97 void bouncy_brick_draw(bouncy_brick_type* pbouncy_brick)
102 if (pbouncy_brick->base.x >= scroll_x - 32 &&
103 pbouncy_brick->base.x <= scroll_x + screen->w)
105 dest.x = (int)(pbouncy_brick->base.x - scroll_x);
106 dest.y = (int)pbouncy_brick->base.y;
110 Level* plevel = GameSession::current()->get_level();
112 // FIXME: overdrawing hack to clean the tile from the screen to
113 // paint it later at on offseted position
114 if(plevel->bkgd_image[0] == '\0')
116 fillrect(pbouncy_brick->base.x - scroll_x, pbouncy_brick->base.y,
118 plevel->bkgd_red, plevel->bkgd_green, plevel->bkgd_blue, 0);
122 s = (int)scroll_x / 30;
123 texture_draw_part(&plevel->img_bkgd, dest.x + s, dest.y,
124 dest.x, dest.y,dest.w,dest.h);
127 Tile::draw(pbouncy_brick->base.x - scroll_x,
128 pbouncy_brick->base.y + pbouncy_brick->offset,
129 pbouncy_brick->shape);
133 void floating_score_init(floating_score_type* pfloating_score, float x, float y, int s)
135 pfloating_score->base.x = x;
136 pfloating_score->base.y = y - 16;
137 timer_init(&pfloating_score->timer,true);
138 timer_start(&pfloating_score->timer,1000);
139 pfloating_score->value = s;
142 void floating_score_action(floating_score_type* pfloating_score)
144 pfloating_score->base.y = pfloating_score->base.y - 2 * frame_ratio;
146 if(!timer_check(&pfloating_score->timer))
147 world.floating_scores.erase(static_cast<std::vector<floating_score_type>::iterator>(pfloating_score));
150 void floating_score_draw(floating_score_type* pfloating_score)
153 sprintf(str, "%d", pfloating_score->value);
154 text_draw(&gold_text, str, (int)pfloating_score->base.x + 16 - strlen(str) * 8, (int)pfloating_score->base.y, 1);