UnrealShare
Class Fly

source: e:\games\UnrealTournament\UnrealShare\Classes\Fly.uc
Core.Object
   |
   +--Engine.Actor
      |
      +--Engine.Pawn
         |
         +--UnrealShare.ScriptedPawn
            |
            +--UnrealShare.Fly
Direct Known Subclasses:None

class Fly
extends UnrealShare.ScriptedPawn

//============================================================================= // Fly. //=============================================================================
States
Roaming, TacticalMove

Function Summary
 void Falling()
 void PlayChallenge()
 void PlayDying(name DamageType, vector HitLocation)
 void PlayInAir()
 void PlayLanded(float impactVel)
 void PlayMeleeAttack()
 void PlayMovingAttack()
 void PlayPatrolStop()
 void PlayRangedAttack()
 void PlayRunning()
 void PlayTakeHit(float tweentime, vector HitLoc, int damage)
 void PlayThreatening()
 void PlayTurning()
 void PlayVictoryDance()
 void PlayWaiting()
 void PlayWaitingAmbush()
 void PlayWalking()
 void PreSetMovement()
     
//-----------------------------------------------------------------------------
// Fly functions.
 void SetMovementPhysics()
 void TweenToFalling()
 void TweenToFighter(float tweentime)
 void TweenToPatrolStop(float tweentime)
 void TweenToRunning(float tweentime)
 void TweenToWaiting(float tweentime)
 void TweenToWalking(float tweentime)
 void ZoneChange(ZoneInfo newZone)


State Roaming Function Summary
 void PickDestination()


State TacticalMove Function Summary



Source Code


00001	//=============================================================================
00002	// Fly.
00003	//=============================================================================
00004	class Fly extends ScriptedPawn;
00005	
00006	#exec MESH IMPORT MESH=FlyM ANIVFILE=MODELS\fly_a.3D DATAFILE=MODELS\fly_d.3D LODSTYLE=2
00007	#exec MESH ORIGIN MESH=FlyM X=0 Y=-30 Z=70 YAW=64 ROLL=-62
00008	
00009	#exec MESH SEQUENCE MESH=FlyM SEQ=All      STARTFRAME=0     NUMFRAMES=97
00010	#exec MESH SEQUENCE MESH=FlyM SEQ=Dead     STARTFRAME=0     NUMFRAMES=16
00011	#exec MESH SEQUENCE MESH=FlyM SEQ=TakeHit  STARTFRAME=0     NUMFRAMES=1
00012	#exec MESH SEQUENCE MESH=FlyM SEQ=Flying   STARTFRAME=16    NUMFRAMES=10	RATE=15
00013	#exec MESH SEQUENCE MESH=FlyM SEQ=Land     STARTFRAME=26    NUMFRAMES=11	RATE=15
00014	#exec MESH SEQUENCE MESH=FlyM SEQ=Shoot1   STARTFRAME=37    NUMFRAMES=25 RATE=40  Group=Attack
00015	#exec MESH SEQUENCE MESH=FlyM SEQ=Shoot2   STARTFRAME=62    NUMFRAMES=10   Group=Attack
00016	#exec MESH SEQUENCE MESH=FlyM SEQ=Takeoff  STARTFRAME=72    NUMFRAMES=15
00017	#exec MESH SEQUENCE MESH=FlyM SEQ=Walking  STARTFRAME=87   NUMFRAMES=10 RATE=15
00018	#exec MESH SEQUENCE MESH=FlyM SEQ=Waiting  STARTFRAME=88   NUMFRAMES=1
00019	
00020	#exec TEXTURE IMPORT NAME=JFly1 FILE=MODELS\fly.PCX GROUP=Skins FLAGS=2
00021	#exec MESHMAP SCALE MESHMAP=flyM X=0.06 Y=0.06 Z=0.12
00022	#exec MESHMAP SETTEXTURE MESHMAP=flyM NUM=1 TEXTURE=Jfly1
00023	
00024	#exec AUDIO IMPORT FILE="Sounds\Razorfly\buzz3rf.WAV" NAME="buzz3rf" GROUP="Razorfly"
00025	#exec AUDIO IMPORT FILE="Sounds\Razorfly\injur1rf.WAV" NAME="injur1rf" GROUP="Razorfly"
00026	#exec AUDIO IMPORT FILE="Sounds\Razorfly\injur2rf.WAV" NAME="injur2rf" GROUP="Razorfly"
00027	#exec AUDIO IMPORT FILE="Sounds\Razorfly\death1rf.WAV" NAME="death1rf" GROUP="Razorfly"
00028	
00029	
00030	//-----------------------------------------------------------------------------
00031	// Fly variables.
00032	
00033	//-----------------------------------------------------------------------------
00034	// Fly functions.
00035	
00036	function PreSetMovement()
00037	{
00038		bCanJump = true;
00039		bCanWalk = true;
00040		bCanSwim = false;
00041		bCanFly = true;
00042		MinHitWall = -0.6;
00043		bCanOpenDoors = false;
00044		bCanDoSpecial = false;
00045	}
00046	
00047	function ZoneChange(ZoneInfo newZone)
00048	{
00049		local vector jumpDir;
00050	
00051		if ( newZone.bWaterZone )
00052		{
00053			MoveTimer = -1.0;
00054			if ( (Enemy != None) && (Enemy.Location.Z < Location.Z) )
00055				GotoState('TacticalMove', 'BackOff');
00056			else
00057				Acceleration = Accelrate * vect(0,0,1);
00058		}
00059	
00060	}
00061	
00062	function SetMovementPhysics()
00063	{
00064		if (Enemy != None)
00065			SetPhysics(PHYS_Flying); 
00066		else if (Physics != PHYS_Falling)
00067			SetPhysics(PHYS_Walking);
00068	}
00069	
00070	singular function Falling()
00071	{
00072		SetPhysics(PHYS_Flying);
00073		if (bIsPlayer)
00074		{
00075			PlayInAir();
00076			return;
00077		}
00078			
00079		if (health > 0)
00080			SetFall();
00081	}
00082	
00083	function PlayWaiting()
00084	{
00085		if ( Physics == PHYS_Walking )
00086			TweenAnim('Waiting', 10.0);
00087		else
00088			LoopAnim('Flying', 0.75);
00089	}
00090	
00091	function PlayPatrolStop()
00092	{
00093		PlayWaiting();
00094	}
00095	
00096	function PlayWaitingAmbush()
00097	{
00098		PlayWaiting();
00099	}
00100	
00101	function PlayChallenge()
00102	{
00103		PlayAnim('Shoot1', 1.0, 0.1);
00104	}
00105	
00106	function TweenToFighter(float tweentime)
00107	{
00108		TweenAnim('Flying', tweentime);
00109	}
00110	
00111	function TweenToRunning(float tweentime)
00112	{
00113		if ( (AnimSequence != 'Flying') || !bAnimLoop )
00114			TweenAnim('Flying', tweentime);
00115	}
00116	
00117	function TweenToWalking(float tweentime)
00118	{
00119		if (Physics == PHYS_Walking)
00120			TweenAnim('Walking', tweentime);
00121		else if ( (AnimSequence != 'Flying') || !bAnimLoop )
00122			TweenAnim('Flying', tweentime);
00123	}
00124	
00125	function TweenToWaiting(float tweentime)
00126	{
00127		PlayAnim('Land', 0.2 + 0.5 * FRand());
00128		SetPhysics(PHYS_Falling);
00129	}
00130	
00131	function TweenToPatrolStop(float tweentime)
00132	{
00133		TweenAnim('Flying', tweentime);
00134	}
00135	
00136	function PlayRunning()
00137	{
00138		LoopAnim('Flying');
00139	}
00140	
00141	function PlayWalking()
00142	{
00143		if (Physics == PHYS_Walking)
00144			LoopAnim('Walking', -1.0/GroundSpeed,, 0.4);
00145		else
00146			LoopAnim('Flying');
00147	}
00148	
00149	function PlayThreatening()
00150	{
00151		if ( FRand() < 0.8 )
00152			LoopAnim('Flying');
00153		else
00154			LoopAnim('Shoot1', 0.4);
00155	}
00156	
00157	function PlayTurning()
00158	{
00159		if (Physics == PHYS_Walking)
00160			LoopAnim('Walking');
00161		else
00162			LoopAnim('Flying');
00163	}
00164	
00165	function PlayDying(name DamageType, vector HitLocation)
00166	{
00167		PlaySound(Die, SLOT_Talk, 2.5 * TransientSoundVolume);
00168		PlayAnim('Dead', 0.7, 0.1);
00169	}
00170	
00171	function PlayTakeHit(float tweentime, vector HitLoc, int damage)
00172	{
00173		TweenAnim('TakeHit', tweentime);
00174	}
00175	
00176	function TweenToFalling()
00177	{
00178		TweenAnim('Flying', 0.2);
00179	}
00180	
00181	function PlayInAir()
00182	{
00183		LoopAnim('Flying');
00184	}
00185	
00186	function PlayLanded(float impactVel)
00187	{
00188		PlayAnim('Land');
00189	}
00190	
00191	function PlayVictoryDance()
00192	{
00193		if ( FRand() < 0.4 )
00194			TweenToWaiting(0.25);
00195		else
00196			PlayAnim('Flying',1.0, 0.05);
00197	}
00198		
00199	function PlayMeleeAttack()
00200	{
00201		PlayAnim('Shoot1');
00202		if ( MeleeDamageTarget(15, (15 * 1000.0 * Normal(Target.Location - Location))) )
00203			PlaySound(Threaten, SLOT_Talk); //FIXME - stingdamage instead of projectile
00204		GotoState('TacticalMove', 'BackOff');
00205	}
00206	
00207	function PlayRangedAttack()
00208	{
00209		local vector projStart;
00210		local vector adjust;
00211	
00212		PlayAnim('Shoot1');
00213		/*
00214		adjust = vect(0,0,0);
00215		adjust.Z = Target.CollisionHeight + 20;
00216		Acceleration = AccelRate * Normal(Target.Location - Location + adjust);
00217		projStart = Location - 0.5 * CollisionHeight * vect(0,0,1);
00218		spawn(RangedProjectile ,self,'',projStart,AdjustAim(ProjectileSpeed, projStart, 400, false, false));
00219		*/
00220	}
00221	
00222	function PlayMovingAttack()
00223	{
00224		PlayRangedAttack();
00225	}
00226	
00227	state TacticalMove
00228	{
00229	ignores SeePlayer, HearNoise;
00230	
00231	BackOff:
00232		Acceleration = AccelRate * Normal(Location - Enemy.Location);
00233		Acceleration.Z *= 0.5;
00234		Destination = Location;
00235		Sleep(0.5);
00236		SetTimer(TimeBetweenAttacks, false);
00237		Goto('TacticalTick');
00238	}
00239	
00240	state Roaming
00241	{
00242		function PickDestination()
00243		{
00244			GotoState('Wandering');
00245		}
00246	
00247	Begin:
00248		GotoState('Wandering');
00249	}
00250	
00251	defaultproperties
00252	{
00253	     CarcassType=Class'UnrealShare.FlyCarcass'
00254	     Aggressiveness=0.700000
00255	     RefireRate=0.700000
00256	     WalkingSpeed=1.000000
00257	     bCanStrafe=True
00258	     MeleeRange=40.000000
00259	     GroundSpeed=100.000000
00260	     AirSpeed=240.000000
00261	     AccelRate=600.000000
00262	     JumpZ=10.000000
00263	     Visibility=100
00264	     SightRadius=1000.000000
00265	     PeripheralVision=-0.500000
00266	     Health=30
00267	     HitSound1=Sound'UnrealShare.Razorfly.injur1rf'
00268	     HitSound2=Sound'UnrealShare.Razorfly.injur2rf'
00269	     Land=None
00270	     Die=Sound'UnrealShare.Razorfly.death1rf'
00271	     CombatStyle=0.400000
00272	     AmbientSound=Sound'UnrealShare.Razorfly.buzz3rf'
00273	     DrawType=DT_Mesh
00274	     Mesh=LodMesh'UnrealShare.FlyM'
00275	     CollisionRadius=20.000000
00276	     CollisionHeight=12.000000
00277	     Buoyancy=110.000000
00278	     RotationRate=(Pitch=6000,Yaw=65000,Roll=8192)
00279	}

End Source Code