Example #1
0
void makeSprinkler () {
	particleSystem.removeAllEmitters();
	double startOffset;
	double sideOffset;
	double sideOffsetRange = 0;
	double angle = 90;
	double angleDiff = 360.0 / emitterCount;
	double sideBetweenEmitters = sideOffsetRange / emitterCount;
	if (emitterCount % 2 == 0) {
		startOffset = ((emitterCount / 2) - 0.5) * emitterSpacing;
		sideOffset = ((emitterCount / 2) - 0.5) * sideBetweenEmitters;
	} else {
		startOffset = ((emitterCount - 1) / 2) * emitterSpacing;
		sideOffset = ((emitterCount / 2) - 0.5) * sideBetweenEmitters;
	}
	Vector3 emitterLocation = Vector3(-startOffset, -20.0, 0);
	Vector3 betweenEmitters = Vector3(emitterSpacing, 0, 0);
	sideOffset = -sideOffset;
	for (int i = 0; i < emitterCount; i++) {
		emitterLocation.y = -20 + sin(angle * (M_PI / 180)) * sprinkerHeight;
		particleSystem.addEmitter(ParticleEmitter(emitterLocation, Vector3(0.0, -20.0, sideOffset)));
		emitterLocation.addSelf(betweenEmitters);
		sideOffset += sideBetweenEmitters;
		angle += angleDiff;
	}
}
Example #2
0
void makeFountain () {
	emitterSpacing = 0;
	particleSystem.removeAllEmitters();
	Vector3 emitterLocation = Vector3(0, 0, 0);
	double sideOffsetRange = 50;
	for (int i = 0; i < emitterCount; i++) {
		particleSystem.addEmitter(ParticleEmitter(emitterLocation, Vector3(0.0, -30.0, -sideOffsetRange * std::cos(((360 / emitterCount) * i) * (M_PI / 180)))));
	}
}
Example #3
0
		ParticleSystem* ParticleIO::loadConfiguredSystem(string ref, const Color& mask) {
			TiXmlDocument m_xmldocument(ref.c_str());
			bool loadOkay = m_xmldocument.LoadFile();
			if (!loadOkay) {
				ErrorDialog::createAndShow(StringUtil::append("Could not load Particle System: ", ref));
				exit(0);
			}

			ParticleSystem* sys = new ParticleSystem(new Image("data/particle.png", mask));

			TiXmlElement* rootelement = m_xmldocument.FirstChildElement("system");
			if (rootelement == NULL) {
				ErrorDialog::createAndShow(string("Invalid particle system file. Root node must be <system>."));
			}
			if (strcmp(rootelement->Attribute("additive"), "true") == 0) {
				sys->setBlendingMode(ParticleSystem::BLEND_ADDITIVE);
			} else {
				sys->setBlendingMode(ParticleSystem::BLEND_COMBINE);
			}

			const char* points = rootelement->Attribute("points");
			if (points != NULL) {
				sys->setUsePoints(strcmp(points, "true") == 0);
			}

			TiXmlElement* emitter = 0;
			for (emitter = rootelement->FirstChildElement("emitter");
					emitter;
					emitter = emitter->NextSiblingElement("emitter")) {
				ConfigurableEmitter* e = new ConfigurableEmitter("new");
				elementToEmitter(e, emitter);
				sys->addEmitter(e);
			}

			sys->setRemoveCompletedEmitters(false);
			return sys;
		}