A bottleneck problem

Started by
0 comments, last by L. Spiro 11 years, 4 months ago
In my bomberman clone, I want bombs to explode when they get hit by other bombs.
[source lang="cpp"]void Bomb::handleMessage(const Message & msg)
{
if(msg.msg==MessageType::HIT_BY_BOMB)
{
alive=false;
gameWorld->cancelAllMessagesTo(this);
gameWorld->getGameMap().onExit(currentLoc.x, currentLoc.y, this);


//I'm having problem here...
for(Entity * eachEntity : gameWorld->getAllEntitiesWithin(currentLoc.x, currentLoc.y, range);
gameWorld->getPostOffice().sendMessage(this, eachEntity, MessageType::HIT_BY_BOMB);
}
}[/source]

As you can see when a bomb receives a message that it got hit by an another bomb, it sends out messages to every single entities within the range of the bomb.

[attachment=12831:Untitled.png]
This is how messages would get delivered if bomb A explodes
A->C, E
C->A, B, D, E
E->C, A
B-> C, D
D->C, B
...

As you can see, there are many redundant message delivery. This slows down my game so much.
What is a better design to this problem?
An invisible text.
Advertisement
When a tile receives a message, tag it and don’t send the same message to it again.


L. Spiro

I restore Nintendo 64 video-game OST’s into HD! https://www.youtube.com/channel/UCCtX_wedtZ5BoyQBXEhnVZw/playlists?view=1&sort=lad&flow=grid

This topic is closed to new replies.

Advertisement