Core.Object | +--Engine.Actor | +--Engine.Effects | +--XIII.BeretFlying
ImpactSound,
AltImpactSound
float
SplashTime
bool
bFirstHit
simulated
CalcVelocity(vector Momentum)
//_____________________________________________________________________________
CanSplash()
void
RandSpin(float spinRate)
00001 //----------------------------------------------------------- 00002 // 00003 //----------------------------------------------------------- 00004 class BeretFlying extends Effects; 00005 00006 var bool bFirstHit; 00007 var() sound ImpactSound, AltImpactSound; 00008 var() float SplashTime; 00009 00010 //_____________________________________________________________________________ 00011 function bool CanSplash() 00012 { 00013 if ( (Level.TimeSeconds - SplashTime > 0.25) 00014 && (Physics == PHYS_Falling) 00015 && (Abs(Velocity.Z) > 100) ) 00016 { 00017 SplashTime = Level.TimeSeconds; 00018 return true; 00019 } 00020 return false; 00021 } 00022 00023 //_____________________________________________________________________________ 00024 simulated function CalcVelocity(vector Momentum) 00025 { 00026 local float ExplosionSize; 00027 00028 ExplosionSize = 0.011 * VSize(Momentum); 00029 Velocity = 0.0033 * Momentum + 0.7 * VRand()*(ExplosionSize+FRand()*100.0+100.0); 00030 // Velocity.z += 0.5 * ExplosionSize; 00031 // Log("CalcVelocity Velocity="$Velocity); 00032 } 00033 00034 //_____________________________________________________________________________ 00035 simulated event HitWall (vector HitNormal, actor HitWall) 00036 { 00037 local float speed; 00038 00039 Velocity = 0.5*(( Velocity dot HitNormal ) * HitNormal * (-2.0) + Velocity); // Reflect off Wall w/damping 00040 speed = VSize(Velocity); 00041 if (bFirstHit && speed<400) 00042 { 00043 bFirstHit=False; 00044 bRotatetoDesired=True; 00045 bFixedRotationDir=False; 00046 DesiredRotation.Pitch=0; 00047 DesiredRotation.Yaw=FRand()*65536; 00048 DesiredRotation.roll=0; 00049 } 00050 RotationRate.Yaw = RotationRate.Yaw*0.75; 00051 RotationRate.Roll = RotationRate.Roll*0.75; 00052 RotationRate.Pitch = RotationRate.Pitch*0.75; 00053 if ( (speed < 60) && (HitNormal.Z > 0.7) ) 00054 { 00055 SetPhysics(PHYS_none); 00056 bBounce = false; 00057 GoToState(''); 00058 } 00059 else if (speed > 80) 00060 { 00061 if (FRand()<0.5) 00062 PlaySound(ImpactSound); 00063 else 00064 PlaySound(AltImpactSound); 00065 } 00066 } 00067 00068 /* 00069 //_____________________________________________________________________________ 00070 event TakeDamage( int Damage, Pawn EventInstigator, vector HitLocation, vector Momentum, class<DamageType> DamageType) 00071 { 00072 // Log(self$" TakeDamage"); 00073 GotoState('Flying'); 00074 // bBounce = true; 00075 SetPhysics(PHYS_Falling); 00076 CalcVelocity((HitLocation - Location) * vSize(Momentum)); 00077 } 00078 */ 00079 00080 //_____________________________________________________________________________ 00081 simulated final function RandSpin(float spinRate) 00082 { 00083 DesiredRotation = RotRand(); 00084 RotationRate.Yaw = spinRate * 2 *FRand() - spinRate; 00085 RotationRate.Pitch = spinRate * 2 *FRand() - spinRate; 00086 RotationRate.Roll = spinRate * 2 *FRand() - spinRate; 00087 } 00088 00089 //_____________________________________________________________________________ 00090 auto state Flying 00091 { 00092 simulated singular event PhysicsVolumeChange( PhysicsVolume NewVolume ) 00093 { 00094 if ( NewVolume.bWaterVolume ) 00095 { 00096 Velocity = 0.2 * Velocity; 00097 if (bFirstHit) 00098 { 00099 bFirstHit=False; 00100 bRotatetoDesired=True; 00101 bFixedRotationDir=False; 00102 DesiredRotation.Pitch=0; 00103 DesiredRotation.Yaw=FRand()*65536; 00104 DesiredRotation.roll=0; 00105 } 00106 RotationRate = 0.2 * RotationRate; 00107 } 00108 } 00109 00110 simulated event BeginState() 00111 { 00112 RandSpin(125000); 00113 if (abs(RotationRate.Pitch)<10000) 00114 RotationRate.Pitch=10000; 00115 if (abs(RotationRate.Roll)<10000) 00116 RotationRate.Roll=10000; 00117 } 00118 } 00119 00120 00121 defaultproperties 00122 { 00123 bFirstHit=True 00124 bIgnoreVignetteAlpha=True 00125 bCollideActors=True 00126 bCollideWorld=True 00127 bFixedRotationDir=True 00128 Physics=PHYS_Falling 00129 DrawType=DT_StaticMesh 00130 StaticMesh=StaticMesh'MeshArmesPickup.beret' 00131 CollisionRadius=10.000000 00132 CollisionHeight=8.000000 00133 }