2 // C Implementation: world
7 // Author: Tobias Glaesser <tobi.web@gmx.de>, (C) 2004
9 // Copyright: See COPYING file that comes with this distribution
21 texture_type img_distro[4];
23 void bouncy_distro_init(bouncy_distro_type* pbouncy_distro, float x, float y)
25 pbouncy_distro->base.x = x;
26 pbouncy_distro->base.y = y;
27 pbouncy_distro->base.ym = -2;
30 void bouncy_distro_action(bouncy_distro_type* pbouncy_distro)
32 pbouncy_distro->base.y = pbouncy_distro->base.y + pbouncy_distro->base.ym * frame_ratio;
34 pbouncy_distro->base.ym += 0.1 * frame_ratio;
36 if (pbouncy_distro->base.ym >= 0)
37 bouncy_distros.erase(static_cast<std::vector<bouncy_distro_type>::iterator>(pbouncy_distro));
40 void bouncy_distro_draw(bouncy_distro_type* pbouncy_distro)
42 texture_draw(&img_distro[0],
43 pbouncy_distro->base.x - scroll_x,
44 pbouncy_distro->base.y);
47 void broken_brick_init(broken_brick_type* pbroken_brick, float x, float y, float xm, float ym)
49 pbroken_brick->base.x = x;
50 pbroken_brick->base.y = y;
51 pbroken_brick->base.xm = xm;
52 pbroken_brick->base.ym = ym;
53 timer_init(&pbroken_brick->timer, true);
54 timer_start(&pbroken_brick->timer,200);
57 void broken_brick_action(broken_brick_type* pbroken_brick)
59 pbroken_brick->base.x = pbroken_brick->base.x + pbroken_brick->base.xm * frame_ratio;
60 pbroken_brick->base.y = pbroken_brick->base.y + pbroken_brick->base.ym * frame_ratio;
62 if (!timer_check(&pbroken_brick->timer))
63 broken_bricks.erase(static_cast<std::vector<broken_brick_type>::iterator>(pbroken_brick));
66 void broken_brick_draw(broken_brick_type* pbroken_brick)
74 dest.x = (int)(pbroken_brick->base.x - scroll_x);
75 dest.y = (int)pbroken_brick->base.y;
79 texture_draw_part(&img_brick[0],src.x,src.y,dest.x,dest.y,dest.w,dest.h);
82 void bouncy_brick_init(bouncy_brick_type* pbouncy_brick, float x, float y)
84 pbouncy_brick->base.x = x;
85 pbouncy_brick->base.y = y;
86 pbouncy_brick->offset = 0;
87 pbouncy_brick->offset_m = -BOUNCY_BRICK_SPEED;
88 pbouncy_brick->shape = shape(x, y);
91 void bouncy_brick_action(bouncy_brick_type* pbouncy_brick)
94 pbouncy_brick->offset = (pbouncy_brick->offset +
95 pbouncy_brick->offset_m * frame_ratio);
99 if (pbouncy_brick->offset < -BOUNCY_BRICK_MAX_OFFSET)
100 pbouncy_brick->offset_m = BOUNCY_BRICK_SPEED;
105 if (pbouncy_brick->offset >= 0)
106 bouncy_bricks.erase(static_cast<std::vector<bouncy_brick_type>::iterator>(pbouncy_brick));
109 void bouncy_brick_draw(bouncy_brick_type* pbouncy_brick)
114 if (pbouncy_brick->base.x >= scroll_x - 32 &&
115 pbouncy_brick->base.x <= scroll_x + screen->w)
117 dest.x = (int)(pbouncy_brick->base.x - scroll_x);
118 dest.y = (int)pbouncy_brick->base.y;
122 if(current_level.bkgd_image[0] == '\0')
124 fillrect(pbouncy_brick->base.x - scroll_x,pbouncy_brick->base.y,32,32,current_level.bkgd_red,current_level.bkgd_green,
125 current_level.bkgd_blue,0);
129 s = (int)scroll_x / 30;
130 texture_draw_part(&img_bkgd,dest.x + s,dest.y,dest.x,dest.y,dest.w,dest.h);
133 drawshape(pbouncy_brick->base.x - scroll_x,
134 pbouncy_brick->base.y + pbouncy_brick->offset,
135 pbouncy_brick->shape);
139 void floating_score_init(floating_score_type* pfloating_score, float x, float y, int s)
141 pfloating_score->base.x = x;
142 pfloating_score->base.y = y - 16;
143 timer_init(&pfloating_score->timer,true);
144 timer_start(&pfloating_score->timer,1000);
145 pfloating_score->value = s;
148 void floating_score_action(floating_score_type* pfloating_score)
150 pfloating_score->base.y = pfloating_score->base.y - 2 * frame_ratio;
152 if(!timer_check(&pfloating_score->timer))
153 floating_scores.erase(static_cast<std::vector<floating_score_type>::iterator>(pfloating_score));
156 void floating_score_draw(floating_score_type* pfloating_score)
159 sprintf(str, "%d", pfloating_score->value);
160 text_draw(&gold_text, str, (int)pfloating_score->base.x + 16 - strlen(str) * 8, (int)pfloating_score->base.y, 1);