Botpack
Class MinigunCannon

source: e:\games\UnrealTournament\Botpack\Classes\MinigunCannon.uc
Core.Object
   |
   +--Engine.Actor
      |
      +--Engine.Pawn
         |
         +--Botpack.StationaryPawn
            |
            +--Botpack.TeamCannon
               |
               +--Botpack.MinigunCannon
Direct Known Subclasses:None

class MinigunCannon
extends Botpack.TeamCannon

//============================================================================= // MinigunCannon. //=============================================================================
Variables
 Actor MuzzFlash

States
ActiveCannon

Function Summary
 void ActivateComplete()
 Name PickAnim()
 void PlayDeactivate()
 void PostBeginPlay()
 void ProcessTraceHit(Actor Other, Vector HitLocation, Vector HitNormal, Vector X, Vector Y, Vector Z)
 void Shoot()
 
simulated
SpawnBase()
 void StartDeactivate()


State ActiveCannon Function Summary
 void EndState()
 void BeginState()
 void Timer()



Source Code


00001	//=============================================================================
00002	// MinigunCannon.
00003	//=============================================================================
00004	class MinigunCannon extends TeamCannon;
00005	
00006	#exec MESH IMPORT MESH=grfinalgunM ANIVFILE=MODELS\grfinalgun_a.3D DATAFILE=MODELS\grfinalgun_d.3D X=0 Y=0 Z=0
00007	#exec MESH ORIGIN MESH=grfinalgunM X=0 Y=0 Z=0 PITCH=0 YAW=128 ROLL=-64
00008	#exec MESH SEQUENCE MESH=grfinalgunM SEQ=All    STARTFRAME=0    NUMFRAMES=20
00009	#exec MESH SEQUENCE MESH=grfinalgunM SEQ=Activate STARTFRAME=0  NUMFRAMES=1
00010	#exec MESH SEQUENCE MESH=grfinalgunM SEQ=Fire1  STARTFRAME=0	NUMFRAMES=3
00011	#exec MESH SEQUENCE MESH=grfinalgunM SEQ=Fire2  STARTFRAME=3	NUMFRAMES=2
00012	#exec MESH SEQUENCE MESH=grfinalgunM SEQ=Fire3  STARTFRAME=4	NUMFRAMES=3
00013	#exec MESH SEQUENCE MESH=grfinalgunM SEQ=Fire4  STARTFRAME=6	NUMFRAMES=2
00014	#exec MESH SEQUENCE MESH=grfinalgunM SEQ=Fire5  STARTFRAME=7	NUMFRAMES=3
00015	#exec MESH SEQUENCE MESH=grfinalgunM SEQ=Fire6  STARTFRAME=10   NUMFRAMES=2
00016	#exec MESH SEQUENCE MESH=grfinalgunM SEQ=Fire7  STARTFRAME=11   NUMFRAMES=3
00017	#exec MESH SEQUENCE MESH=grfinalgunM SEQ=Fire8  STARTFRAME=14   NUMFRAMES=2
00018	#exec MESH SEQUENCE MESH=grfinalgunM SEQ=Fire9  STARTFRAME=15   NUMFRAMES=3
00019	#exec MESH SEQUENCE MESH=grfinalgunM SEQ=Fire10 STARTFRAME=18   NUMFRAMES=2
00020	#exec TEXTURE IMPORT NAME=jgrfinalgun FILE=MODELS\grmain.pcx GROUP=Skins 
00021	#exec MESHMAP SCALE MESHMAP=grfinalgunM X=0.1 Y=0.1 Z=0.2
00022	#exec MESHMAP SETTEXTURE MESHMAP=grfinalgunM NUM=1 TEXTURE=jgrfinalgun
00023	
00024	#exec MESH IMPORT MESH=grmockgunM ANIVFILE=MODELS\aniv01.3D DATAFILE=MODELS\data01.3D X=0 Y=0 Z=0
00025	#exec MESH ORIGIN MESH=grmockgunM X=0 Y=0 Z=0 PITCH=0 YAW=128 ROLL=-64
00026	#exec MESH SEQUENCE MESH=grmockgunM SEQ=All    STARTFRAME=0	  NUMFRAMES=20
00027	#exec MESH SEQUENCE MESH=grmockgunM SEQ=Activate STARTFRAME=1 NUMFRAMES=20
00028	#exec MESH SEQUENCE MESH=grmockgunM SEQ=Fire1  STARTFRAME=0   NUMFRAMES=1
00029	#exec MESH SEQUENCE MESH=grmockgunM SEQ=Fire2  STARTFRAME=0   NUMFRAMES=1
00030	#exec MESH SEQUENCE MESH=grmockgunM SEQ=Fire3  STARTFRAME=0   NUMFRAMES=1
00031	#exec MESH SEQUENCE MESH=grmockgunM SEQ=Fire4  STARTFRAME=0   NUMFRAMES=1
00032	#exec MESH SEQUENCE MESH=grmockgunM SEQ=Fire5  STARTFRAME=0   NUMFRAMES=1
00033	#exec MESH SEQUENCE MESH=grmockgunM SEQ=Fire6  STARTFRAME=0   NUMFRAMES=1
00034	#exec MESH SEQUENCE MESH=grmockgunM SEQ=Fire7  STARTFRAME=0   NUMFRAMES=1
00035	#exec MESH SEQUENCE MESH=grmockgunM SEQ=Fire8  STARTFRAME=0   NUMFRAMES=1
00036	#exec MESH SEQUENCE MESH=grmockgunM SEQ=Fire9  STARTFRAME=0   NUMFRAMES=1
00037	#exec MESH SEQUENCE MESH=grmockgunM SEQ=Fire10 STARTFRAME=0   NUMFRAMES=1
00038	#exec TEXTURE IMPORT NAME=jgrmockgun FILE=MODELS\grmain.pcx GROUP=Skins 
00039	#exec MESHMAP SCALE MESHMAP=grmockgunM X=0.1 Y=0.1 Z=0.2
00040	#exec MESHMAP SETTEXTURE MESHMAP=grmockgunM NUM=1 TEXTURE=jgrfinalgun
00041	
00042	var Actor MuzzFlash;
00043	 
00044	function PostBeginPlay()
00045	{
00046		Super.PostBeginPlay();
00047		MuzzFlash = Spawn(class'CannonMuzzle');
00048		MuzzFlash.SetBase(self);
00049	}
00050	
00051	function Name PickAnim()
00052	{
00053		Drop = 0;
00054		if (DesiredRotation.Pitch < -1000 )
00055		{
00056			if ( DesiredRotation.Pitch < -4000 )
00057				return 'Fire5';
00058			else 
00059				return 'Fire3';
00060		}
00061		else if (DesiredRotation.Pitch > 1000 ) 
00062		{
00063			if ( DesiredRotation.Pitch > 4000 )
00064				return 'Fire9';
00065			else 
00066				return 'Fire7';
00067		}
00068		else 
00069			return 'Fire1';
00070	}
00071	
00072	simulated function SpawnBase()
00073	{
00074		GunBase = Spawn(class'GrBase', self);
00075		GunBase.bAnimByOwner = true;
00076	}
00077	
00078	function PlayDeactivate()
00079	{
00080		TweenAnim('Activate', 1.5);
00081	}
00082	
00083	function StartDeactivate()
00084	{
00085		PlaySound(ActivateSound, SLOT_None,5.0);
00086		Mesh = mesh'Botpack.GrMockGunM';
00087		AnimSequence = 'Fire1';
00088		AnimFrame = 0.0;
00089		SetPhysics(PHYS_Rotating);
00090		DesiredRotation = StartingRotation;
00091		PrePivot = vect(0,0,0);
00092	}
00093	
00094	function ActivateComplete()
00095	{
00096		Mesh = mesh'Botpack.GrFinalGunM';
00097		PrePivot = vect(0,0,40);
00098	}
00099	
00100	function ProcessTraceHit(Actor Other, Vector HitLocation, Vector HitNormal, Vector X, Vector Y, Vector Z)
00101	{
00102		local int rndDam;
00103		local UT_Shellcase s;
00104		
00105		s = Spawn(class'UT_ShellCase',, '', PrePivot + Location + 20 * X + 10 * Y + 30 * Z);
00106		if ( s != None )
00107			s.Eject(((FRand()*0.3+0.4)*X + (FRand()*0.2+0.2)*Y + (FRand()*0.3+1.0) * Z)*160);              
00108		if (Other == Level) 
00109			Spawn(class'UT_LightWallHitEffect',,, HitLocation+HitNormal, Rotator(HitNormal));
00110		else if ( (Other!=self) && (Other != None) ) 
00111		{
00112			if ( !Other.bIsPawn && !Other.IsA('Carcass') )
00113				spawn(class'UT_SpriteSmokePuff',,,HitLocation+HitNormal*9);
00114			rndDam = 5 + Rand(4);
00115			if ( DeathMatchPlus(Level.Game).bNoviceMode )
00116				rnddam *= (0.4 + 0.15 * Level.game.Difficulty);
00117			Other.TakeDamage(rndDam, self, HitLocation, rndDam*500.0*X, 'shot');
00118		}
00119	}
00120	
00121	function Shoot()
00122	{
00123		local Actor HitActor;
00124		local Vector HitLocation, HitNormal, EndTrace, ProjStart, X,Y,Z;
00125		local rotator ShootRot;
00126		if (DesiredRotation.Pitch < -10000) Return;
00127		if ( AmbientSound == None )
00128			PlaySound(FireSound, SLOT_None,5.0);
00129	
00130		GetAxes(Rotation,X,Y,Z);
00131		ProjStart = PrePivot + Location + X*20 + 12 * Y + 16 * Z;
00132		ShootRot = rotator(Enemy.Location - ProjStart);
00133		ShootRot.Yaw = ShootRot.Yaw + 1024 - Rand(2048);
00134		DesiredRotation = ShootRot;
00135		ShootRot.Pitch = ShootRot.Pitch + 256 - Rand(512);
00136		GetAxes(ShootRot,X,Y,Z);
00137		PlayAnim(PickAnim());
00138		MuzzFlash.SetLocation(ProjStart);
00139		if ( FRand() < 0.4 )
00140			Spawn(class'MTracer',,, ProjStart, ShootRot);
00141		HitActor = TraceShot(HitLocation,HitNormal,ProjStart + 10000 * X,ProjStart);
00142		ProcessTraceHit(HitActor, HitLocation, HitNormal, X,Y,Z);
00143		bShoot = false;
00144		ShootRot.Pitch = ShootRot.Pitch & 65535;
00145		if ( ShootRot.Pitch < 32768 )
00146			ShootRot.Pitch = Min(ShootRot.Pitch, 5000);
00147		else
00148			ShootRot.Pitch = Max(ShootRot.Pitch, 60535);
00149		MuzzFlash.SetRotation(ShootRot);
00150		ShootRot.Pitch = 0;
00151		SetRotation(ShootRot);
00152	}
00153	
00154	state ActiveCannon
00155	{
00156		ignores SeePlayer;
00157	
00158		function Timer()
00159		{
00160			local Pawn P;
00161	
00162			DesiredRotation = rotator(Enemy.Location - Location - PrePivot);
00163			DesiredRotation.Yaw = DesiredRotation.Yaw & 65535;
00164			MuzzFlash.bHidden = false;
00165			if ( bShoot )
00166				Shoot();
00167			else 
00168			{
00169				TweenAnim(PickAnim(), 0.2);
00170				bShoot=True;			
00171				SetTimer(SampleTime,True);
00172			}
00173	
00174		}
00175	
00176		function BeginState()
00177		{
00178			Super.BeginState();
00179		}
00180	
00181		function EndState()
00182		{
00183			AmbientSound = None;
00184			MuzzFlash.bHidden = true;
00185		}
00186	
00187	Begin:
00188		Disable('Timer');
00189		FinishAnim();
00190		PlayActivate();
00191		FinishAnim();
00192		ActivateComplete();
00193		Enable('Timer');
00194		SetTimer(SampleTime,True);
00195		RotationRate.Yaw = TrackingRate;
00196		SetPhysics(PHYS_Rotating);
00197		AmbientSound = Class'Minigun2'.Default.FireSound;
00198		bShoot=True;
00199	
00200	FaceEnemy:
00201		TurnToward(Enemy);
00202		Goto('FaceEnemy');
00203	}
00204	
00205	defaultproperties
00206	{
00207	     FireSound=Sound'UnrealI.Rifle.RifleShot'
00208	     SampleTime=0.100000
00209	     Mesh=LodMesh'Botpack.grmockgunM'
00210	     SoundRadius=96
00211	     SoundVolume=255
00212	     CollisionHeight=24.000000
00213	}

End Source Code