Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class SnowActor expands Effects;
- var() float Height;
- var() float Radius;
- var() int MaxDrops;
- var() float MinAirResistanceFactor;
- var() float MaxAirResistanceFactor;
- var() vector WindVelocity;
- var() bool bBlockByActors;
- var int SnowCount;
- var float InitTime, InitTimeThreshold;
- replication
- {
- reliable if (Role==ROLE_Authority)
- Radius, MaxDrops, MinAirResistanceFactor, MaxAirResistanceFactor, WindVelocity, bBlockByActors;
- }
- simulated event PostBeginPlay()
- {
- local Actor A;
- local vector HitLocation, HitNormal, TraceEnd;
- local float MinSpeed, MaxSpeed;
- if (Level.NetMode == NM_DedicatedServer)
- Disable('Tick');
- MinAirResistanceFactor = FMax(MinAllowedResitanceFactor(), MinAirResistanceFactor);
- MaxAirResistanceFactor = FMax(MinAllowedResitanceFactor(), MaxAirResistanceFactor);
- WindVelocity = AdjustVelocity(WindVelocity, Region.Zone);
- InitTimeThreshold = class'SnowDrop'.default.MeltingTime;
- MinSpeed = VSize(InitialVelocity(MaxAirResistanceFactor));
- MaxSpeed = VSize(InitialVelocity(MinAirResistanceFactor));
- if (Height <= 0)
- {
- Height = 32767;
- TraceEnd = Location - vect(0, 0, 1) * Height;
- A = Trace(HitLocation, HitNormal, TraceEnd,, false);
- if (A != none)
- Height = VSize(HitLocation - Location);
- }
- InitTimeThreshold += 2 * Height / (FMax(0, MinSpeed) + MaxSpeed);
- }
- simulated event Tick(float DeltaTime)
- {
- local int i;
- local SnowDrop Flake;
- if (SnowCount >= MaxDrops)
- {
- Disable('Tick');
- return;
- }
- InitTime += DeltaTime;
- for (i = SnowCount; i < MaxDrops && SnowCount * InitTimeThreshold < MaxDrops * InitTime; ++i)
- {
- Flake = Spawn(class'SnowDrop', self);
- if (Flake != none)
- SnowCount++;
- }
- }
- simulated function float MinAllowedResitanceFactor()
- {
- return VSize(Region.Zone.ZoneGravity) / Square(Region.Zone.ZoneTerminalVelocity);
- }
- static function vector AdjustVelocity(vector V, ZoneInfo Zone)
- {
- if (VSize(V) > Zone.ZoneTerminalVelocity)
- return Normal(V) * Zone.ZoneTerminalVelocity;
- return V;
- }
- simulated function vector InitialVelocity(float AirResistanceFactor)
- {
- local vector GravityImpliedVelocity;
- GravityImpliedVelocity = Normal(Region.Zone.ZoneGravity) * Sqrt(VSize(Region.Zone.ZoneGravity) / AirResistanceFactor);
- return AdjustVelocity(GravityImpliedVelocity + WindVelocity, Region.Zone);
- }
- defaultproperties
- {
- Height=0
- Radius=512
- MaxDrops=150
- MinAirResistanceFactor=0.014496
- MaxAirResistanceFactor=0.057983
- WindVelocity=(X=20,Y=20,Z=0)
- bBlockByActors=False
- bHidden=False
- bAlwaysRelevant=True
- RemoteRole=ROLE_SimulatedProxy
- DrawType=DT_Sprite
- Style=STY_Masked
- Texture=Texture'S_Actor'
- bNetTemporary=False
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement