projects
/
supertux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
- updated TODO
[supertux.git]
/
src
/
gameobjs.cpp
diff --git
a/src/gameobjs.cpp
b/src/gameobjs.cpp
index
6a707ef
..
9075f2c
100644
(file)
--- a/
src/gameobjs.cpp
+++ b/
src/gameobjs.cpp
@@
-20,20
+20,19
@@
// 02111-1307, USA.
#include <algorithm>
#include <iostream>
// 02111-1307, USA.
#include <algorithm>
#include <iostream>
-#include
"world.h"
+#include
<math.h>
#include "tile.h"
#include "gameloop.h"
#include "gameobjs.h"
#include "sprite_manager.h"
#include "resources.h"
#include "tile.h"
#include "gameloop.h"
#include "gameobjs.h"
#include "sprite_manager.h"
#include "resources.h"
-#include "
level
.h"
-#include "
display_manager
.h"
+#include "
sector
.h"
+#include "
tilemap
.h"
-BouncyDistro::BouncyDistro(
DisplayManager& displaymanager,
const Vector& pos)
+BouncyDistro::BouncyDistro(const Vector& pos)
: position(pos)
{
ym = -2;
: position(pos)
{
ym = -2;
- displaymanager.add_drawable(this, LAYER_OBJECTS);
}
void
}
void
@@
-47,17
+46,15
@@
BouncyDistro::action(float elapsed_time)
}
void
}
void
-BouncyDistro::draw(
ViewPort& viewport, int
)
+BouncyDistro::draw(
DrawingContext& context
)
{
{
-
img_distro[0]->draw(viewport.world2screen(position)
);
+
context.draw_surface(img_distro[0], position, LAYER_OBJECTS
);
}
}
-BrokenBrick::BrokenBrick(DisplayManager& displaymanager, Tile* ntile,
- const Vector& pos, const Vector& nmovement)
+BrokenBrick::BrokenBrick(Tile* ntile,const Vector& pos, const Vector& nmovement)
: tile(ntile), position(pos), movement(nmovement)
{
: tile(ntile), position(pos), movement(nmovement)
{
- displaymanager.add_drawable(this, LAYER_OBJECTS);
timer.start(200);
}
timer.start(200);
}
@@
-71,28
+68,19
@@
BrokenBrick::action(float elapsed_time)
}
void
}
void
-BrokenBrick::draw(
ViewPort& viewport, int
)
+BrokenBrick::draw(
DrawingContext& context
)
{
{
- SDL_Rect src, dest;
- src.x = rand() % 16;
- src.y = rand() % 16;
- src.w = 16;
- src.h = 16;
-
- dest.x = (int)(position.x - viewport.get_translation().x);
- dest.y = (int)(position.y - viewport.get_translation().y);
- dest.w = 16;
- dest.h = 16;
-
if (tile->images.size() > 0)
if (tile->images.size() > 0)
- tile->images[0]->draw_part(src.x,src.y,dest.x,dest.y,dest.w,dest.h);
+ context.draw_surface_part(tile->images[0],
+ Vector(rand() % 16, rand() % 16),
+ Vector(16, 16),
+ position, LAYER_OBJECTS + 1);
}
}
-BouncyBrick::BouncyBrick(
DisplayManager& displaymanager,
const Vector& pos)
+BouncyBrick::BouncyBrick(const Vector& pos)
: position(pos), offset(0), offset_m(-BOUNCY_BRICK_SPEED)
{
: position(pos), offset(0), offset_m(-BOUNCY_BRICK_SPEED)
{
- displaymanager.add_drawable(this, LAYER_OBJECTS);
- shape = World::current()->get_level()->gettileid(pos.x, pos.y);
+ shape = Sector::current()->solids->get_tile_id_at(pos);
}
void
}
void
@@
-110,16
+98,15
@@
BouncyBrick::action(float elapsed_time)
}
void
}
void
-BouncyBrick::draw(
ViewPort& viewport, in
t)
+BouncyBrick::draw(
DrawingContext& contex
t)
{
{
- Tile::draw(viewport.world2screen(position + Vector(0, offset)), shape);
+ TileManager::instance()->
+ draw_tile(context, shape, position + Vector(0, offset), LAYER_TILES+1);
}
}
-FloatingScore::FloatingScore(DisplayManager& displaymanager,
- const Vector& pos, int score)
+FloatingScore::FloatingScore(const Vector& pos, int score)
: position(pos)
{
: position(pos)
{
- displaymanager.add_drawable(this, LAYER_OBJECTS);
timer.start(1000);
snprintf(str, 10, "%d", score);
position.x -= strlen(str) * 8;
timer.start(1000);
snprintf(str, 10, "%d", score);
position.x -= strlen(str) * 8;
@@
-135,9
+122,9
@@
FloatingScore::action(float elapsed_time)
}
void
}
void
-FloatingScore::draw(
ViewPort& viewport, int
)
+FloatingScore::draw(
DrawingContext& context
)
{
{
-
gold_text->draw(str, viewport.world2screen(position)
);
+
context.draw_text(gold_text, str, position, LAYER_OBJECTS
);
}
/* Trampoline */
}
/* Trampoline */
@@
-145,16
+132,14
@@
FloatingScore::draw(ViewPort& viewport, int )
#define TRAMPOLINE_FRAMES 4
Sprite *img_trampoline[TRAMPOLINE_FRAMES];
#define TRAMPOLINE_FRAMES 4
Sprite *img_trampoline[TRAMPOLINE_FRAMES];
-Trampoline::Trampoline(
DisplayManager& displaymanager,
LispReader& reader)
+Trampoline::Trampoline(LispReader& reader)
{
{
- displaymanager.add_drawable(this, LAYER_OBJECTS);
-
- reader.read_float("x", &base.x);
- reader.read_float("y", &base.y);
+ reader.read_float("x", base.x);
+ reader.read_float("y", base.y);
base.width = 32;
base.height = 32;
power = 7.5;
base.width = 32;
base.height = 32;
power = 7.5;
- reader.read_float("power",
&
power);
+ reader.read_float("power", power);
frame = 0;
mode = M_NORMAL;
frame = 0;
mode = M_NORMAL;
@@
-174,9
+159,9
@@
Trampoline::write(LispWriter& writer)
}
void
}
void
-Trampoline::draw(
ViewPort& viewport, int
)
+Trampoline::draw(
DrawingContext& context
)
{
{
- img_trampoline[frame]->draw(
viewport.world2screen(Vector(base.x, base.y))
);
+ img_trampoline[frame]->draw(
context, Vector(base.x, base.y), LAYER_OBJECTS
);
frame = 0;
}
frame = 0;
}
@@
-206,7
+191,7
@@
Trampoline::action(float frame_ratio)
{
/* FIXME: The trampoline object shouldn't know about pplayer objects. */
/* If we're holding the iceblock */
{
/* FIXME: The trampoline object shouldn't know about pplayer objects. */
/* If we're holding the iceblock */
- Player& tux = *
World::current()->get_tux()
;
+ Player& tux = *
Sector::current()->player
;
Direction dir = tux.dir;
if(dir == RIGHT)
Direction dir = tux.dir;
if(dir == RIGHT)
@@
-264,8
+249,10
@@
Trampoline::collision(void *p_c_object, int c_object, CollisionType type)
else
frame = 0;
else
frame = 0;
- if (squish_amount < 20)
+ if (squish_amount < 20)
{
pplayer_c->physic.set_velocity_y(power);
pplayer_c->physic.set_velocity_y(power);
+ pplayer_c->fall_mode = Player::TRAMPOLINE_JUMP;
+ }
else if (pplayer_c->physic.get_velocity_y() < 0)
pplayer_c->physic.set_velocity_y(-squish_amount/32);
}
else if (pplayer_c->physic.get_velocity_y() < 0)
pplayer_c->physic.set_velocity_y(-squish_amount/32);
}
@@
-282,15
+269,13
@@
Trampoline::collision(void *p_c_object, int c_object, CollisionType type)
Sprite *img_flying_platform;
Sprite *img_flying_platform;
-FlyingPlatform::FlyingPlatform(
DisplayManager& displaymanager,
LispReader& reader)
+FlyingPlatform::FlyingPlatform(LispReader& reader)
{
{
- displaymanager.add_drawable(this, LAYER_OBJECTS);
-
- reader.read_int_vector("x", &pos_x);
- reader.read_int_vector("y", &pos_y);
+ reader.read_int_vector("x", pos_x);
+ reader.read_int_vector("y", pos_y);
velocity = 2.0;
velocity = 2.0;
- reader.read_float("velocity",
&
velocity);
+ reader.read_float("velocity", velocity);
base.x = pos_x[0];
base.y = pos_y[0];
base.x = pos_x[0];
base.y = pos_y[0];
@@
-300,6
+285,11
@@
FlyingPlatform::FlyingPlatform(DisplayManager& displaymanager, LispReader& reade
point = 0;
move = false;
point = 0;
move = false;
+ float x = pos_x[point+1] - pos_x[point];
+ float y = pos_y[point+1] - pos_y[point];
+ vel_x = x*velocity / sqrt(x*x + y*y);
+ vel_y = -(velocity - vel_x);
+
frame = 0;
}
frame = 0;
}
@@
-316,9
+306,9
@@
FlyingPlatform::write(LispWriter& writer)
}
void
}
void
-FlyingPlatform::draw(
ViewPort& viewport, int
)
+FlyingPlatform::draw(
DrawingContext& context
)
{
{
-
img_flying_platform->draw(viewport.world2screen(Vector(base.x, base.y))
);
+
img_flying_platform->draw(context, Vector(base.x, base.y), LAYER_OBJECTS
);
}
void
}
void
@@
-339,6
+329,11
@@
if((unsigned)point+1 != pos_x.size())
pos_y[point] == pos_y[point+1]))
{
point++;
pos_y[point] == pos_y[point+1]))
{
point++;
+
+ float x = pos_x[point+1] - pos_x[point];
+ float y = pos_y[point+1] - pos_y[point];
+ vel_x = x*velocity / sqrt(x*x + y*y);
+ vel_y = -(velocity - vel_x);
}
}
else // last point
}
}
else // last point
@@
-347,7
+342,7
@@
else // last point
// reverse vector
return;
}
// reverse vector
return;
}
-
+/*
if(pos_x[point+1] > base.x)
base.x += velocity * frame_ratio;
else if(pos_x[point+1] < base.x)
if(pos_x[point+1] > base.x)
base.x += velocity * frame_ratio;
else if(pos_x[point+1] < base.x)
@@
-357,15
+352,10
@@
if(pos_y[point+1] > base.y)
base.y += velocity * frame_ratio;
else if(pos_y[point+1] < base.y)
base.y -= velocity * frame_ratio;
base.y += velocity * frame_ratio;
else if(pos_y[point+1] < base.y)
base.y -= velocity * frame_ratio;
-/*
-float x = pos_x[point+1] - pos_x[point];
-float y = pos_y[point+1] - pos_y[point];
-float vel_x = x*velocity / sqrt(x*x + y*y);
-float vel_y = velocity - vel_x;
+*/
base.x += vel_x * frame_ratio;
base.y += vel_y * frame_ratio;
base.x += vel_x * frame_ratio;
base.y += vel_y * frame_ratio;
-*/
}
void
}
void