SDL_image, png pictures
[sdlbotor.git] / MapObject.cpp
blob7da36340d0ff39084fb988a34bc7f6bddac02606
1 #include "MapObject.h"
2 #include "Map.h"
3 #include "Game.h"
6 namespace botor
8 void MapObject::StartMovement()
10 Sint16 sx,sy;
11 Map::transformM2S( mapX, mapY, sx, sy );
12 movementX = (float)sx;
13 movementY = (float)sy;
15 if( isWalkable( mapX+vX, mapY+vY ) )
17 mapX +=vX;
18 mapY +=vY;
19 if( isBitSet( Game::getMap()->tileAt( mapX, mapY )->typeMask, Tile::TILE_SLOW ) )
20 speed = SPEED() * 0.5f;
21 else
22 speed = SPEED();
24 moving = true;
28 bool MapObject::isWalkable( Uint8 X, Uint8 Y )
30 Tile *t = Game::getMap()->tileAt(X, Y);
32 if( isBitSet( t->typeMask, Tile::TILE_WALKABLE ) )
34 return true;
36 else
37 return false;
40 MapObject::MapObject( Uint8 X, Uint8 Y ) :
41 mapX(0), mapY(0), vX(0), vY(0), movementX(0), movementY(0), speed(0), walking(false), moving(false), tile(0)
43 Teleport(X, Y);
46 MapObject::~MapObject() {}
48 void MapObject::UpdatePosition()
50 Sint16 sx,sy;
51 Map::transformM2S( mapX, mapY, sx, sy );
52 if( dst( movementX, movementY, (float)sx, (float)sy ) < 0.5 )
54 if( walking )
55 StartMovement();
56 else
57 moving = false;
59 OnTile( Game::getMap()->tileAt( mapX, mapY ) );
61 else
63 float dirX, dirY;
65 dirX = sign( sx - movementX ) * speed;
66 dirY = sign( sy - movementY ) * speed;
68 movementX += dirX;
69 movementY += dirY;
74 void MapObject::Initialize() {}
75 void MapObject::DeInitialize() {}
77 void MapObject::Update()
79 if( moving )
81 UpdatePosition();
85 void MapObject::Draw()
87 if( moving )
89 Game::getTileset()->Draw( (Sint16)movementX, (Sint16)movementY, tile );
91 else
93 Sint16 sx,sy;
94 Map::transformM2S( mapX, mapY, sx, sy );
95 Game::getTileset()->Draw( sx, sy, tile );
99 void MapObject::OnTile( Tile *t ) {}
102 void MapObject::Teleport( Uint8 mapX, Uint8 mapY, Uint16 room )
104 this->mapX = mapX;
105 this->mapY = mapY;
106 moving = false;
109 Uint8 MapObject::getMapX() { return mapX; }
110 Uint8 MapObject::getMapY() { return mapY; }