qwe8013 = Lance Corporal = 170
Doom Rate: 1.91 Posts quality: +54
Отправлено: 01.05.26 01:14:29
Приветствую всех!
Пишу на ZSCRIPT под UZDoom
Вопрос по функции A_SpawnParticleEx. Когда я её вызываю из метода "Tick" у некоторого Actor-а, то всё нормально работает. Но вот я вызываю из EventHandler-а, то при запуске игры вижу ошибку "Call to unknown function 'A_SpawnParticleEx' ". Это связано с тем, что из EventHandler-а нельзя вызывать эту функцию, или у меня кривые руки? Вообще, можно ли спавнить частицы из EventHandler-ов?
Код под спойлером.
Скрытый текст:
const DROPS_PER_SQUARE = 10.0;
const NUM_PARTS = 1;
const RAINDROP_VEL = 4.0;
class RainHandler : EventHandler
{
TextureID raindrop_tex;
static const double left_top_x[] =
{
632.0
};
static const double left_top_y[] =
{
-504.0
};
static const double right_bottom_x[] =
{
760.0
};
static const double right_bottom_y[] =
{
-632.0
};
static const double spawn_height[] =
{
64.0
};
static const double destroy_height[] =
{
0.0
};
override void WorldLoaded (WorldEvent e)
{
self.raindrop_tex = TexMan.CheckForTexture("RAINDROP");
}
override void WorldTick()
{
for (uint i = 0; i < NUM_PARTS; i++)
{
double x_size = right_bottom_x[i] - left_top_x[i];
double y_size = left_top_y[i] - right_bottom_y[i];
double square = x_size*y_size;
uint num_drops = uint(square*DROPS_PER_SQUARE);
double spawn_z = spawn_height[i];
double destroy_z = destroy_height[i];
for (uint drop_index = 0; drop_index < num_drops; drop_index++)
{
double x_coord = frandom(left_top_x[i], right_bottom_x[i]);
double y_coord = frandom(left_top_y[i], right_bottom_y[i]);
double delta_z = spawn_z - destroy_z;
double lifetime = (delta_z/RAINDROP_VEL)*TICRATE;
A_SpawnParticleEx(
"",
self.raindrop_tex,
flags: SPF_FULLBRIGHT|SPF_RELATIVE,
lifetime: lifetime,
size: 10,
xoff: x_coord,
yoff: y_coord,
zoff: spawn_z,
velz: RAINDROP_VEL,
fadestepf: 0.0
);
}
}
}
}