projects
/
supertux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[cppcheck] Part 1: Performance
[supertux.git]
/
src
/
worldmap
/
worldmap.cpp
diff --git
a/src/worldmap/worldmap.cpp
b/src/worldmap/worldmap.cpp
index
fcf772e
..
e5fba03
100644
(file)
--- a/
src/worldmap/worldmap.cpp
+++ b/
src/worldmap/worldmap.cpp
@@
-111,7
+111,7
@@
WorldMap::WorldMap(const std::string& filename, Savegame& savegame, const std::s
last_position(),
last_target_time()
{
last_position(),
last_target_time()
{
- tux =
new Tux
(this);
+ tux =
std::make_shared<Tux>
(this);
add_object(tux);
name = "<no title>";
add_object(tux);
name = "<no title>";
@@
-150,9
+150,8
@@
WorldMap::~WorldMap()
for(GameObjects::iterator i = game_objects.begin();
i != game_objects.end(); ++i) {
for(GameObjects::iterator i = game_objects.begin();
i != game_objects.end(); ++i) {
- GameObject
*
object = *i;
+ GameObject
Ptr&
object = *i;
try_unexpose(object);
try_unexpose(object);
- object->unref();
}
for(SpawnPoints::iterator i = spawn_points.begin();
}
for(SpawnPoints::iterator i = spawn_points.begin();
@@
-174,22
+173,21
@@
WorldMap::~WorldMap()
}
void
}
void
-WorldMap::add_object(GameObject
*
object)
+WorldMap::add_object(GameObject
Ptr
object)
{
{
- TileMap* tilemap = dynamic_cast<TileMap*>
(object
);
+ TileMap* tilemap = dynamic_cast<TileMap*>
(object.get()
);
if(tilemap != 0 && tilemap->is_solid()) {
solid_tilemaps.push_back(tilemap);
}
if(tilemap != 0 && tilemap->is_solid()) {
solid_tilemaps.push_back(tilemap);
}
- object->ref();
try_expose(object);
game_objects.push_back(object);
}
void
try_expose(object);
game_objects.push_back(object);
}
void
-WorldMap::try_expose(
GameObject*
object)
+WorldMap::try_expose(
const GameObjectPtr&
object)
{
{
- ScriptInterface* object_ = dynamic_cast<ScriptInterface*>
(object
);
+ ScriptInterface* object_ = dynamic_cast<ScriptInterface*>
(object.get()
);
if(object_ != NULL) {
HSQUIRRELVM vm = scripting::global_vm;
sq_pushobject(vm, worldmap_table);
if(object_ != NULL) {
HSQUIRRELVM vm = scripting::global_vm;
sq_pushobject(vm, worldmap_table);
@@
-199,9
+197,9
@@
WorldMap::try_expose(GameObject* object)
}
void
}
void
-WorldMap::try_unexpose(
GameObject*
object)
+WorldMap::try_unexpose(
const GameObjectPtr&
object)
{
{
- ScriptInterface* object_ = dynamic_cast<ScriptInterface*>
(object
);
+ ScriptInterface* object_ = dynamic_cast<ScriptInterface*>
(object.get()
);
if(object_ != NULL) {
HSQUIRRELVM vm = scripting::global_vm;
SQInteger oldtop = sq_gettop(vm);
if(object_ != NULL) {
HSQUIRRELVM vm = scripting::global_vm;
SQInteger oldtop = sq_gettop(vm);
@@
-287,9
+285,9
@@
WorldMap::load(const std::string& filename)
lisp::ListIterator iter(sector);
while(iter.next()) {
if(iter.item() == "tilemap") {
lisp::ListIterator iter(sector);
while(iter.next()) {
if(iter.item() == "tilemap") {
- add_object(
new TileMap
(*(iter.lisp())));
+ add_object(
std::make_shared<TileMap>
(*(iter.lisp())));
} else if(iter.item() == "background") {
} else if(iter.item() == "background") {
- add_object(
new Background
(*(iter.lisp())));
+ add_object(
std::make_shared<Background>
(*(iter.lisp())));
} else if(iter.item() == "music") {
iter.value()->get(music);
} else if(iter.item() == "init-script") {
} else if(iter.item() == "music") {
iter.value()->get(music);
} else if(iter.item() == "init-script") {
@@
-298,23
+296,23
@@
WorldMap::load(const std::string& filename)
SpawnPoint* sp = new SpawnPoint(*iter.lisp());
spawn_points.push_back(sp);
} else if(iter.item() == "level") {
SpawnPoint* sp = new SpawnPoint(*iter.lisp());
spawn_points.push_back(sp);
} else if(iter.item() == "level") {
-
LevelTile* level = new LevelTile
(levels_path, *iter.lisp());
- levels.push_back(level);
+
auto level = std::make_shared<LevelTile>
(levels_path, *iter.lisp());
+ levels.push_back(level
.get()
);
add_object(level);
} else if(iter.item() == "special-tile") {
add_object(level);
} else if(iter.item() == "special-tile") {
-
SpecialTile* special_tile = new SpecialTile
(*iter.lisp());
- special_tiles.push_back(special_tile);
+
auto special_tile = std::make_shared<SpecialTile>
(*iter.lisp());
+ special_tiles.push_back(special_tile
.get()
);
add_object(special_tile);
} else if(iter.item() == "sprite-change") {
add_object(special_tile);
} else if(iter.item() == "sprite-change") {
-
SpriteChange* sprite_change = new SpriteChange
(*iter.lisp());
- sprite_changes.push_back(sprite_change);
+
auto sprite_change = std::make_shared<SpriteChange>
(*iter.lisp());
+ sprite_changes.push_back(sprite_change
.get()
);
add_object(sprite_change);
} else if(iter.item() == "teleporter") {
add_object(sprite_change);
} else if(iter.item() == "teleporter") {
-
Teleporter* teleporter = new Teleporter
(*iter.lisp());
- teleporters.push_back(teleporter);
+
auto teleporter = std::make_shared<Teleporter>
(*iter.lisp());
+ teleporters.push_back(teleporter
.get()
);
add_object(teleporter);
} else if(iter.item() == "decal") {
add_object(teleporter);
} else if(iter.item() == "decal") {
-
Decal* decal = new Decal
(*iter.lisp());
+
auto decal = std::make_shared<Decal>
(*iter.lisp());
add_object(decal);
} else if(iter.item() == "ambient-light") {
std::vector<float> vColor;
add_object(decal);
} else if(iter.item() == "ambient-light") {
std::vector<float> vColor;
@@
-332,7
+330,7
@@
WorldMap::load(const std::string& filename)
}
current_tileset = NULL;
}
current_tileset = NULL;
- if(solid_tilemaps.
size() == 0
)
+ if(solid_tilemaps.
empty()
)
throw std::runtime_error("No solid tilemap specified");
move_to_spawnpoint("main");
throw std::runtime_error("No solid tilemap specified");
move_to_spawnpoint("main");
@@
-574,7
+572,7
@@
WorldMap::update(float delta)
{
// update GameObjects
for(size_t i = 0; i < game_objects.size(); ++i) {
{
// update GameObjects
for(size_t i = 0; i < game_objects.size(); ++i) {
- GameObject
*
object = game_objects[i];
+ GameObject
Ptr&
object = game_objects[i];
if(!panning || object != tux) {
object->update(delta);
}
if(!panning || object != tux) {
object->update(delta);
}
@@
-583,10
+581,9
@@
WorldMap::update(float delta)
// remove old GameObjects
for(GameObjects::iterator i = game_objects.begin();
i != game_objects.end(); ) {
// remove old GameObjects
for(GameObjects::iterator i = game_objects.begin();
i != game_objects.end(); ) {
- GameObject
*
object = *i;
+ GameObject
Ptr&
object = *i;
if(!object->is_valid()) {
try_unexpose(object);
if(!object->is_valid()) {
try_unexpose(object);
- object->unref();
i = game_objects.erase(i);
} else {
++i;
i = game_objects.erase(i);
} else {
++i;
@@
-596,10
+593,9
@@
WorldMap::update(float delta)
/* update solid_tilemaps list */
//FIXME: this could be more efficient
solid_tilemaps.clear();
/* update solid_tilemaps list */
//FIXME: this could be more efficient
solid_tilemaps.clear();
- for(std::vector<GameObject*>::iterator i = game_objects.begin();
- i != game_objects.end(); ++i)
+ for(auto i = game_objects.begin(); i != game_objects.end(); ++i)
{
{
- TileMap* tm = dynamic_cast<TileMap*>(
*i
);
+ TileMap* tm = dynamic_cast<TileMap*>(
i->get()
);
if (!tm) continue;
if (tm->is_solid()) solid_tilemaps.push_back(tm);
}
if (!tm) continue;
if (tm->is_solid()) solid_tilemaps.push_back(tm);
}
@@
-643,7
+639,8
@@
WorldMap::update(float delta)
if(!controller->pressed(Controller::UP))
enter_level = true;
}
if(!controller->pressed(Controller::UP))
enter_level = true;
}
- if(controller->pressed(Controller::PAUSE_MENU))
+ if(controller->pressed(Controller::START) ||
+ controller->pressed(Controller::ESCAPE))
{
on_escape_press();
}
{
on_escape_press();
}
@@
-721,7
+718,7
@@
WorldMap::tile_data_at(Vector p)
{
int dirs = 0;
{
int dirs = 0;
- for(std::list<TileMap*>::const_iterator i = solid_tilemaps.begin(); i != solid_tilemaps.end();
i++
) {
+ for(std::list<TileMap*>::const_iterator i = solid_tilemaps.begin(); i != solid_tilemaps.end();
++i
) {
TileMap* tilemap = *i;
const Tile* tile = tilemap->get_tile((int)p.x, (int)p.y);
int dirdata = tile->getData();
TileMap* tilemap = *i;
const Tile* tile = tilemap->get_tile((int)p.x, (int)p.y);
int dirdata = tile->getData();
@@
-797,9
+794,9
@@
WorldMap::draw(DrawingContext& context)
context.push_transform();
context.set_translation(camera_offset);
context.push_transform();
context.set_translation(camera_offset);
- for(
GameObjects::iterator i = game_objects.begin();
-
i != game_objects.end(); ++i)
{
- GameObject
*
object = *i;
+ for(
auto i = game_objects.begin(); i != game_objects.end(); ++i)
+ {
+ GameObject
Ptr&
object = *i;
if(!panning || object != tux) {
object->draw(context);
}
if(!panning || object != tux) {
object->draw(context);
}
@@
-1183,7
+1180,7
@@
float
WorldMap::get_width() const
{
float width = 0;
WorldMap::get_width() const
{
float width = 0;
- for(std::list<TileMap*>::const_iterator i = solid_tilemaps.begin(); i != solid_tilemaps.end();
i++
) {
+ for(std::list<TileMap*>::const_iterator i = solid_tilemaps.begin(); i != solid_tilemaps.end();
++i
) {
TileMap* solids = *i;
if (solids->get_width() > width) width = solids->get_width();
}
TileMap* solids = *i;
if (solids->get_width() > width) width = solids->get_width();
}
@@
-1194,7
+1191,7
@@
float
WorldMap::get_height() const
{
float height = 0;
WorldMap::get_height() const
{
float height = 0;
- for(std::list<TileMap*>::const_iterator i = solid_tilemaps.begin(); i != solid_tilemaps.end();
i++
) {
+ for(std::list<TileMap*>::const_iterator i = solid_tilemaps.begin(); i != solid_tilemaps.end();
++i
) {
TileMap* solids = *i;
if (solids->get_height() > height) height = solids->get_height();
}
TileMap* solids = *i;
if (solids->get_height() > height) height = solids->get_height();
}