107 lines
2.4 KiB
Ucode
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;
|
|
}
|