Exemplo n.º 1
0
TEST_F(ParticleTest, NeededParticles)
{
	ASSERT_TRUE(nullptr != CL_ParticleGet("fadeTracer"));
	ASSERT_TRUE(nullptr != CL_ParticleGet("longRangeTracer"));
	ASSERT_TRUE(nullptr != CL_ParticleGet("inRangeTracer"));
	ASSERT_TRUE(nullptr != CL_ParticleGet("crawlTracer"));
	ASSERT_TRUE(nullptr != CL_ParticleGet("moveTracer"));
	ASSERT_TRUE(nullptr != CL_ParticleGet("stunnedactor"));
	ASSERT_TRUE(nullptr != CL_ParticleGet("circle"));
	ASSERT_TRUE(nullptr != CL_ParticleGet("cross"));
	ASSERT_TRUE(nullptr != CL_ParticleGet("cross_no"));
	ASSERT_TRUE(nullptr != CL_ParticleGet("lightTracerDebug"));
}
Exemplo n.º 2
0
static qboolean TEST_CheckParticle (const char *particleID)
{
	if (Q_strnull(particleID))
		return qtrue;

	/* find the particle definition */
	return CL_ParticleGet(particleID) != NULL;
}
Exemplo n.º 3
0
/**
 * @brief Spawn a new particle to the map
 * @param[in] name The id of the particle (see ptl_*.ufo script files in base/ufos)
 * @param[in] levelFlags Show at which levels
 * @param[in] s starting/location vector
 * @param[in] v velocity vector
 * @param[in] a acceleration vector
 * @sa CL_ParticleFree
 * @sa CL_ViewUpdateRenderData
 * @sa R_DrawParticles
 */
ptl_t *CL_ParticleSpawn (const char *name, int levelFlags, const vec3_t s, const vec3_t v, const vec3_t a)
{
	ptlDef_t *pd;
	ptl_t *p;
	int i;

	if (!name || strlen(name) <= 0)
		return nullptr;

	/* find the particle definition */
	pd = CL_ParticleGet(name);
	if (pd == nullptr) {
		Com_Printf("Particle definition \"%s\" not found\n", name);
		return nullptr;
	}

	/* add the particle */
	for (i = 0; i < r_numParticles; i++)
		if (!r_particleArray[i].inuse)
			break;

	if (i == r_numParticles) {
		if (r_numParticles < MAX_PTLS)
			r_numParticles++;
		else {
			Com_DPrintf(DEBUG_CLIENT, "Too many particles (don't add %s) - exceeded %i\n", name, MAX_PTLS);
			return nullptr;
		}
	}

	/* allocate particle */
	p = &r_particleArray[i];
	OBJZERO(*p);

	/* set basic values */
	p->inuse = true;
	p->startTime = cl.time;
	p->ctrl = pd;
	Vector4Set(p->color, 1.0f, 1.0f, 1.0f, 1.0f);

	p->pic = nullptr;
	p->model = nullptr;

	/* copy location */
	if (s) {
		VectorCopy(s, p->origin);
		VectorCopy(s, p->s);
	}
	/* copy velocity */
	if (v)
		VectorCopy(v, p->v);
	/* copy acceleration */
	if (a)
		VectorCopy(a, p->a);

	/* copy levelflags */
	p->levelFlags = levelFlags;

	/* run init function */
	CL_ParticleFunction(p, pd->init);
	if (p->inuse && !p->tps && !p->life) {
		Com_DPrintf(DEBUG_CLIENT, "Particle %s does not have a tps nor a life set - this is only valid for projectile particles\n",
				name);
		p->tps = 1;
	}

	return p;
}