Advertisement
Guest User

Snow/Classes/SnowActor.uc

a guest
Sep 16th, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. class SnowActor expands Effects;
  2.  
  3. var() float   Height;
  4. var() float   Radius;
  5. var() int     MaxDrops;
  6. var() float   MinAirResistanceFactor;
  7. var() float   MaxAirResistanceFactor;
  8. var() vector  WindVelocity;
  9. var() bool    bBlockByActors;
  10.  
  11. var int SnowCount;
  12. var float InitTime, InitTimeThreshold;
  13.  
  14. replication
  15. {
  16.     reliable if (Role==ROLE_Authority)
  17.         Radius, MaxDrops, MinAirResistanceFactor, MaxAirResistanceFactor, WindVelocity, bBlockByActors;
  18. }
  19.  
  20. simulated event PostBeginPlay()
  21. {
  22.     local Actor A;
  23.     local vector HitLocation, HitNormal, TraceEnd;
  24.     local float MinSpeed, MaxSpeed;
  25.  
  26.     if (Level.NetMode == NM_DedicatedServer)
  27.         Disable('Tick');
  28.  
  29.     MinAirResistanceFactor = FMax(MinAllowedResitanceFactor(), MinAirResistanceFactor);
  30.     MaxAirResistanceFactor = FMax(MinAllowedResitanceFactor(), MaxAirResistanceFactor);
  31.     WindVelocity = AdjustVelocity(WindVelocity, Region.Zone);
  32.  
  33.     InitTimeThreshold = class'SnowDrop'.default.MeltingTime;
  34.     MinSpeed = VSize(InitialVelocity(MaxAirResistanceFactor));
  35.     MaxSpeed = VSize(InitialVelocity(MinAirResistanceFactor));
  36.     if (Height <= 0)
  37.     {
  38.         Height = 32767;
  39.         TraceEnd = Location - vect(0, 0, 1) * Height;
  40.         A = Trace(HitLocation, HitNormal, TraceEnd,, false);
  41.         if (A != none)
  42.             Height = VSize(HitLocation - Location);
  43.     }
  44.     InitTimeThreshold += 2 * Height / (FMax(0, MinSpeed) + MaxSpeed);
  45. }
  46.  
  47. simulated event Tick(float DeltaTime)
  48. {
  49.     local int i;
  50.     local SnowDrop Flake;
  51.  
  52.     if (SnowCount >= MaxDrops)
  53.     {
  54.         Disable('Tick');
  55.         return;
  56.     }
  57.  
  58.     InitTime += DeltaTime;
  59.  
  60.     for (i = SnowCount; i < MaxDrops && SnowCount * InitTimeThreshold < MaxDrops * InitTime; ++i)
  61.     {
  62.         Flake = Spawn(class'SnowDrop', self);
  63.         if (Flake != none)
  64.             SnowCount++;
  65.     }  
  66. }
  67.  
  68. simulated function float MinAllowedResitanceFactor()
  69. {
  70.     return VSize(Region.Zone.ZoneGravity) / Square(Region.Zone.ZoneTerminalVelocity);
  71. }
  72.  
  73. static function vector AdjustVelocity(vector V, ZoneInfo Zone)
  74. {
  75.     if (VSize(V) > Zone.ZoneTerminalVelocity)
  76.         return Normal(V) * Zone.ZoneTerminalVelocity;
  77.     return V;
  78. }
  79.  
  80. simulated function vector InitialVelocity(float AirResistanceFactor)
  81. {
  82.     local vector GravityImpliedVelocity;
  83.  
  84.     GravityImpliedVelocity = Normal(Region.Zone.ZoneGravity) * Sqrt(VSize(Region.Zone.ZoneGravity) / AirResistanceFactor);
  85.     return AdjustVelocity(GravityImpliedVelocity + WindVelocity, Region.Zone);
  86. }
  87.  
  88. defaultproperties
  89. {
  90.     Height=0
  91.     Radius=512
  92.     MaxDrops=150
  93.     MinAirResistanceFactor=0.014496
  94.     MaxAirResistanceFactor=0.057983
  95.     WindVelocity=(X=20,Y=20,Z=0)
  96.     bBlockByActors=False
  97.     bHidden=False
  98.     bAlwaysRelevant=True
  99.     RemoteRole=ROLE_SimulatedProxy
  100.     DrawType=DT_Sprite
  101.     Style=STY_Masked
  102.     Texture=Texture'S_Actor'
  103.     bNetTemporary=False
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement