rott/kf_sources/XGame/Classes/SpawnerProjectile.uc
2026-07-14 20:27:09 +07:00

107 lines
2.4 KiB
Ucode

class SpawnerProjectile extends Projectile;
var xEmitter Trail;
var ProjectileSpawner Spawner;
replication
{
reliable if( Role==ROLE_Authority )
Spawner;
}
simulated function Destroyed()
{
if (Trail != None)
{
if (Trail.mRegen)
Trail.mRegen = false;
else
Trail.Destroy();
}
Super.Destroyed();
}
function PostBeginPlay()
{
Super.PostBeginPlay();
Spawner = ProjectileSpawner(Owner);
Speed = Spawner.ProjectileSpeed;
MaxSpeed = Spawner.ProjectileSpeed;
Velocity = Speed * Vector(Rotation);
if (Spawner.GravityAffected)
SetPhysics(PHYS_Falling);
if (Level.NetMode != NM_DedicatedServer)
{
//PostNetBeginPlay();
}
}
simulated function PostNetBeginPlay()
{
if (Spawner == None)
{
Destroy();
return;
}
if (Spawner.ProjectileLifeSpan > 0)
LifeSpan = Spawner.ProjectileLifeSpan;
if (Spawner.ProjectileMesh != None)
{
SetDrawType(DT_Mesh);
LinkMesh(Spawner.ProjectileMesh);
SetDrawScale(Spawner.ProjectileMeshScale);
}
if (Spawner.TrailEmitter != None)
{
Trail = Spawn(Spawner.TrailEmitter, self,, Location, Rotation);
Trail.RemoteRole = ROLE_None;
Trail.SetPhysics(PHYS_Trailer);
Trail.bTrailerSameRotation = true;
}
}
simulated function ProcessTouch (Actor Other, vector HitLocation)
{
if (Role == ROLE_Authority && Spawner.DamageRadius == 0 && Spawner.Damage > 0)
{
Other.TakeDamage(Spawner.Damage, None, HitLocation, Vect(0,0,0), Spawner.DamageType);
}
Explode(HitLocation, Normal(HitLocation-Other.Location));
}
simulated function Explode(vector HitLocation, vector HitNormal)
{
local xEmitter Exp;
if (Role == ROLE_Authority && Spawner.DamageRadius > 0 && Spawner.Damage > 0)
{
HurtRadius(Spawner.Damage, Spawner.DamageRadius, Spawner.DamageType, 0, HitLocation);
}
if (Spawner.ExplosionEmitter != None && Level.NetMode != NM_DedicatedServer)
{
Exp = Spawn(Spawner.ExplosionEmitter,,, HitLocation+HitNormal*8, Rotator(HitNormal));
Exp.RemoteRole = ROLE_None;
}
Destroy();
}
simulated function Landed( vector HitNormal )
{
HitWall( HitNormal, None );
}
defaultproperties
{
DrawType=DT_None;
LifeSpan=30.0;
}