//----------------------------------------------------------------------------- // Spawns a Projectile using type, starting position/TargetPosition void ARX_MISSILES_Spawn(INTERACTIVE_OBJ *io, const long &type, const EERIE_3D *startpos, const EERIE_3D *targetpos) { long i(ARX_MISSILES_GetFree()); if (i == -1) return; missiles[i].owner = GetInterNum(io); missiles[i].type = type; missiles[i].lastpos.x = missiles[i].startpos.x = startpos->x; missiles[i].lastpos.y = missiles[i].startpos.y = startpos->y; missiles[i].lastpos.z = missiles[i].startpos.z = startpos->z; float dist; dist = 1.0F / Distance3D(startpos->x, startpos->y, startpos->z, targetpos->x, targetpos->y,targetpos->z); missiles[i].velocity.x = (targetpos->x - startpos->x) * dist; missiles[i].velocity.y = (targetpos->y - startpos->y) * dist; missiles[i].velocity.z = (targetpos->z - startpos->z) * dist; missiles[i].lastupdate = missiles[i].timecreation = ARXTimeUL(); switch (type) { case MISSILE_FIREBALL: { missiles[i].tolive = 6000; missiles[i].velocity.x *= 0.8f; missiles[i].velocity.y *= 0.8f; missiles[i].velocity.z *= 0.8f; missiles[i].longinfo = GetFreeDynLight(); if (missiles[i].longinfo != -1) { DynLight[missiles[i].longinfo].intensity = 1.3f; DynLight[missiles[i].longinfo].exist = 1; DynLight[missiles[i].longinfo].fallend = 420.f; DynLight[missiles[i].longinfo].fallstart = 250.f; DynLight[missiles[i].longinfo].rgb.r = 1.f; DynLight[missiles[i].longinfo].rgb.g = 0.8f; DynLight[missiles[i].longinfo].rgb.b = 0.6f; DynLight[missiles[i].longinfo].pos.x = startpos->x; DynLight[missiles[i].longinfo].pos.y = startpos->y; DynLight[missiles[i].longinfo].pos.z = startpos->z; } ARX_SOUND_PlaySFX(SND_SPELL_FIRE_WIND, &missiles[i].startpos, 2.0F); ARX_SOUND_PlaySFX(SND_SPELL_FIRE_LAUNCH, &missiles[i].startpos, 2.0F); } } }
//----------------------------------------------------------------------------- // Spawns a Projectile using type, starting position/TargetPosition void ARX_MISSILES_Spawn(INTERACTIVE_OBJ * io, ARX_SPELLS_MISSILE_TYPE type, const Vec3f * startpos, const Vec3f * targetpos) { long i(ARX_MISSILES_GetFree()); if (i == -1) return; missiles[i].owner = GetInterNum(io); missiles[i].type = type; missiles[i].lastpos = missiles[i].startpos = *startpos; float dist; dist = 1.0F / fdist(*startpos, *targetpos); missiles[i].velocity = (*targetpos - *startpos) * dist; missiles[i].lastupdate = missiles[i].timecreation = ARXTimeUL(); switch (type) { case MISSILE_NONE: break; case MISSILE_FIREBALL: { missiles[i].tolive = 6000; missiles[i].velocity *= 0.8f; missiles[i].longinfo = GetFreeDynLight(); if (missiles[i].longinfo != -1) { DynLight[missiles[i].longinfo].intensity = 1.3f; DynLight[missiles[i].longinfo].exist = 1; DynLight[missiles[i].longinfo].fallend = 420.f; DynLight[missiles[i].longinfo].fallstart = 250.f; DynLight[missiles[i].longinfo].rgb = Color3f(1.f, .8f, .6f); DynLight[missiles[i].longinfo].pos = *startpos; } ARX_SOUND_PlaySFX(SND_SPELL_FIRE_WIND, &missiles[i].startpos, 2.0F); ARX_SOUND_PlaySFX(SND_SPELL_FIRE_LAUNCH, &missiles[i].startpos, 2.0F); } } }