void ObjectInterface::commandDeleteObject(void) { int32_t id = cb->popValue().getInt(); CBObject *object = getObject(id); if (object->type() == CBObject::ParticleEmitter) { objectMap.erase(id); cb->effectInterface->deleteParticleEmitter(static_cast<CBParticleEmitter*>(object)); return; } for(std::vector<CBObject*>::iterator i = pickableObjects.begin(); i != pickableObjects.end(); i++) { if(*i == object) { i = pickableObjects.erase(i); break; } } // Remove possible collision checks removeFromCollisionCheck(object); if (object->type() == CBObject::Object) { removeFromDrawOrder(object); delete object; } else if (object->type() == CBObject::Map) { removeFromDrawOrder(object); cb->mapInterface->deleteTileMap(); } objectMap.erase(id); }
void ObjectInterface::updateObjects(){ int64_t currentTime = mtimer(); float updateTime = (float)(currentTime - lastUpdate) / 1000.0f; lastUpdate = currentTime; std::map<int32_t, CBObject*>::iterator i; for (i = objectMap.begin(); i != objectMap.end(); ) { CBObject *obj = (*i).second; if(obj->updateObject(updateTime)){ //updateObject returns true if object should be deleted removeFromDrawOrder(obj); delete obj; i = objectMap.erase(i); } else { ++i; } } cb->effectInterface->updateRogueParticles(); // Iterate over every collision check that is set and run testCollision() on them std::vector<CollisionCheck*>::iterator cChkI; for (cChkI = collisionChecks.begin(); cChkI != collisionChecks.end(); cChkI++) { (*cChkI)->testCollision(); } // Iterate again over every object and reset setCollisionChecking on them for (i = objectMap.begin(); i != objectMap.end();) { // Reset object collision check to true (*i).second->setCollisionChecking(true); ++i; } }
void ObjectInterface::commandDeleteObject(void) { int32_t id = cb->popValue().getInt(); CBObject *object = getObject(id); if (object->type() == CBObject::ParticleEmitter) { objectMap.erase(id); cb->deleteParticleEmitter(static_cast<CBParticleEmitter*>(object)); return; } // Remove possible collision checks removeFromCollisionCheck(object); if (object->type() == CBObject::Object) { removeFromDrawOrder(object); delete object; } else if (object->type() == CBObject::Map) { removeFromDrawOrder(object); cb->deleteTileMap(); } objectMap.erase(id); }