예제 #1
0
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);
}
예제 #2
0
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;
	}
}
예제 #3
0
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);
}