#include "level.h"
#include "tile.h"
#include "resources.h"
+#include "gameobjs.h"
Surface* img_distro[4];
for (std::vector< ObjectData<TrampolineData> >::iterator i = level->trampoline_data.begin();
i != level->trampoline_data.end();
++i)
- {puts("fo");
+ {
add_object<Trampoline, ObjectData<TrampolineData> >(*i);
}
}
for (BadGuys::iterator i = bad_guys.begin(); i != bad_guys.end(); ++i)
(*i)->action(frame_ratio);
+ for (Trampolines::iterator i = trampolines.begin(); i != trampolines.end(); ++i)
+ (*i)->action(frame_ratio);
+
/* update particle systems */
std::vector<ParticleSystem*>::iterator p;
for(p = particle_systems.begin(); p != particle_systems.end(); ++p)
float tux_pos_y = tux.base.y + (tux.base.height/2);
- if(level->height > VISIBLE_TILES_Y-1)
+ if(level->height > VISIBLE_TILES_Y-1 && !tux.dying)
{
if (scroll_y < tux_pos_y - (screen->h - Y_SPACE))
scroll_y = tux_pos_y - (screen->h - Y_SPACE);
upgrades[i].collision(&tux, CO_PLAYER, COLLISION_NORMAL);
}
}
+
+ // CO_TRAMPOLINE & (CO_PLAYER or CO_BADGUY)
+ for (Trampolines::iterator i = trampolines.begin(); i != trampolines.end(); ++i)
+ {
+ if (rectcollision((*i)->base, tux.base))
+ {
+ if (tux.previous_base.y < tux.base.y &&
+ tux.previous_base.y + tux.previous_base.height
+ < (*i)->base.y + (*i)->base.height/2)
+ {
+ (*i)->collision(&tux, CO_PLAYER, COLLISION_SQUISH);
+ }
+ else if (tux.previous_base.y <= tux.base.y)
+ {
+ tux.collision(*i, CO_TRAMPOLINE);
+ (*i)->collision(&tux, CO_PLAYER, COLLISION_NORMAL);
+ }
+ }
+ }
}
void
World::add_object(U data)
{
T* tobject = new T(data);
- trampolines.push_back(tobject);
+
+ if (data.type == OBJ_TRAMPOLINE)
+ trampolines.push_back(tobject);
return tobject;
}
}
/* Break a brick: */
-void
+bool
World::trybreakbrick(float x, float y, bool small)
{
Level* plevel = get_level();
play_sound(sounds[SND_DISTRO], SOUND_CENTER_SPEAKER);
player_status.score = player_status.score + SCORE_DISTRO;
player_status.distros++;
+ return true;
}
else if (!small)
{
/* Get some score: */
play_sound(sounds[SND_BRICK], SOUND_CENTER_SPEAKER);
player_status.score = player_status.score + SCORE_BRICK;
+
+ return true;
}
}
+
+ return false;
}
/* Empty a box: */