## XIII
Class Micro

source: C:\XIII\XIII\Classes\micro.uc

    Core.Object
       |
       +--Engine.Actor
          |
          +--Engine.Inventory
             |
             +--Engine.Powerups
                |
                +--XIII.XIIIItems
                   |
                   +--XIII.Micro

Direct Known Subclasses:None

class Micro
extends XIII.XIIIItems

    //-----------------------------------------------------------
    //
    //-----------------------------------------------------------

Variables
`int` | `FakeCharge`
`XIIIBaseHud` | `HUD`
`Pawn` | `ListenTarget` Target to listen
`int` | `MicroState` used to handle micro sfxs
`float` | `ScopeFOV` FOV to use in zoom
`bool` | `bActivated` to allow check of sound (not causing gameover, used for training period. If not activated, no timer nor effects)
`bool` | `bCanCauseGameOver` just to allow this for a period of time while spying
`bool` | `bMaxZoomed` are we zoomed as much as we can ? (used for Sound).
`bool` | `bTriggeredMissInTrainMode`
`bool` | `bZoomed` are we zoomed.
`sound` | `hMicroSound` used to handle micro sfxs
`sound` | `hZoomSound` Zooming sound (param 0 = begin, 2 = stop zooming in, 1 = zoom out)

States
Listening, Zooming, InUse

Function Summary
`void` | `EndUse()`
    //_____________________________________________________________________________
    // Called in Beginstate of Downweapon
`bool` | `PutDown()`
    //_____________________________________________________________________________
`bool` | `ShouldDrawCrosshair(Canvas C)`
    //_____________________________________________________________________________
`void` | `UsedUp()`
    //_____________________________________________________________________________
    // This is called when a usable inventory item has used up it's charge.

State Listening Function Summary

State Zooming Function Summary
`void` | `DisplayChrono(string str)`
`string` | `StrTime(int i)`
`void` | `Activate()`

State InUse Function Summary
`void` | `Activate()`

Source Code

    00001	//-----------------------------------------------------------
    00002	//
    00003	//-----------------------------------------------------------
    00004	class Micro extends XIIIItems;
    00005
    00006	// Charges for the micro are the tenth of seconds you are allowed missing the target you must listen.
    00007	// should be 30 = 3.0 seconds
    00008
    00009	var bool bZoomed;           // are we zoomed.
    00010	var bool bMaxZoomed;        // are we zoomed as much as we can ? (used for Sound).
    00011	var sound hZoomSound;       // Zooming sound (param 0 = begin, 2 = stop zooming in, 1 = zoom out)
    00012	var float ScopeFOV;         // FOV to use in zoom
    00013	var Pawn ListenTarget;      // Target to listen
    00014	var bool bCanCauseGameOver; // just to allow this for a period of time while spying
    00015	var bool bActivated;        // to allow check of sound (not causing gameover, used for training period. If not activated, no timer nor effects)
    00016
    00017	var sound hMicroSound;      // used to handle micro sfxs
    00018	var int MicroState;
    00019	var int FakeCharge;         //
    00020	VAR XIIIBaseHud HUD;
    00021
    00022	// MicroState =
    00023	    // 0 = do nothing
    00024	    // 1 = Wait for didacticiel01 event to be triggered
    00025	    // 2 = didacticiel01 triggered
    00026
    00027	//var localized string sMicroTooFar;
    00028	//var localized string sMicroFailure;
    00029
    00030	var bool bTriggeredMissInTrainMode;
    00031
    00032	EVENT BeginState()
    00033	{
    00034	//	LOG("MICRO ==>"@GetStateName() @"MicroState =" @MicroState );
    00035	}
    00036
    00037	//_____________________________________________________________________________
    00038	// Called in Beginstate of Downweapon
    00039	FUNCTION EndUse()
    00040	{
    00041		LOCAL Info dm;
    00042
    00043		if ( bCanCauseGameOver )
    00044		{
    00045			Charge = 0;
    00046			UsedUp();
    00047			StopVoice();
    00048			SetTimer2(0,false);
    00049			Instigator.PlaySound(hMicroSound, 0 /*int(bMaxZoomed)*/, /*int(fFactor**/10000/*)*/);
    00050			foreach DynamicActors(class'Info',dm)
    00051			{
    00052				if ( dm.IsA('DialogueManager') )
    00053					dm.Destroy();
    00054			}
    00055
    00056		}
    00057		if (bZoomed)
    00058		{
    00059	//		PlayerController(Instigator.Controller).ToggleZoom();
    00060			bZoomed=false;
    00061			bMaxZoomed=false;
    00062		}
    00063		XIIIPlayerController(Pawn(Owner).Controller).EndZoom();
    00064	}
    00065
    00066	//_____________________________________________________________________________
    00067	FUNCTION bool ShouldDrawCrosshair(Canvas C)
    00068	{
    00069		return !bZoomed;
    00070	}
    00071
    00072	//_____________________________________________________________________________
    00073	FUNCTION bool PutDown()
    00074	{
    00075	/*	if ( bCanCauseGameOver )
    00076		{
    00077			Charge = 0;
    00078			UsedUp();
    00079			return false;
    00080		}
    00081		else
    00082		{*/
    00083			bChangeItem=true;
    00084			return true;
    00085	//	}
    00086	}
    00087
    00088	//_____________________________________________________________________________
    00089	// This is called when a usable inventory item has used up it's charge.
    00090	FUNCTION UsedUp()
    00091	{
    00092		SetTimer2(0.0, false);
    00093		if ( bCanCauseGameOver )
    00094		{
    00095			Level.Game.EndGame( XIIIPlayercontroller(XIIIPawn(Owner).controller).PlayerReplicationInfo, "GoalIncomplete" );
    00096	//		GotoState('DownItem');
    00097			return;
    00098		}
    00099
    00100		if ( Pawn(Owner) != None )
    00101		{
    00102			bActivatable = false;
    00103			XIIIPlayercontroller(XIIIPawn(Owner).controller).cNextItem();
    00104			if ( (XIIIPawn(Owner).PendingItem == None) || (XIIIPawn(Owner).PendingItem == self) )
    00105				XIIIPlayercontroller(XIIIPawn(Owner).controller).NextWeapon();
    00106
    00107			XIIIPawn(Owner).ChangedWeapon();
    00108			if (Level.Game.StatLog != None)
    00109				Level.Game.StatLog.LogItemDeactivate(Self, XIIIPawn(Owner));
    00110			Instigator.ReceiveLocalizedMessage( MessageClass, 0, None, None, Self.Class );
    00111		}
    00112		Instigator.PlayRolloffSound(DeactivateSound, self);
    00113		Destroy();
    00114	}
    00115
    00116	//_____________________________________________________________________________
    00117	State InUse
    00118	{
    00119	    EVENT BeginState()
    00120	    {
    00121			Global.BeginState(); //
    00122			PlayUsing();
    00123	//		bRendered=false;
    00124	//		bHidden=true;
    00125	    }
    00126
    00127	    FUNCTION Activate()
    00128		{
    00129		}
    00130
    00131	    EVENT AnimEnd(int Channel)
    00132	    {
    00133			UseMe();
    00134			if ( bChangeItem )
    00135			{
    00136				GotoState('DownItem');
    00137				return;
    00138			}
    00139			GotoState('Zooming');
    00140	    }
    00141	}
    00142
    00143	//_____________________________________________________________________________
    00144	STATE Zooming
    00145	{
    00146		EVENT BeginState()
    00147		{
    00148			Global.BeginState(); //
    00149
    00150			bHidden=!bHidden;
    00151			RefreshDisplaying();
    00152			bRendered=false;
    00153
    00154			if ( bZoomed )
    00155			{
    00156				PlayerController(Instigator.Controller).ToggleZoom();
    00157				Instigator.PlayRolloffSound(hZoomSound, self, 1);
    00158				if ( bActivated )
    00159					GoToState('Listening');
    00160				else
    00161					GotoState('Idle');
    00162			}
    00163			else
    00164			{
    00165				PlayerController(Instigator.Controller).StartZoom();
    00166				PlayerController(Instigator.Controller).ZoomLevel = 0.3;
    00167				PlayerController(Instigator.Controller).SetFov(FClamp(90.0 - (0.3 * 88.0), 1, 170));
    00168				Instigator.PlayRolloffSound(hZoomSound, self, 0);
    00169			}
    00170			bZoomed=false;
    00171			bMaxZoomed=false;
    00172		}
    00173
    00174		EVENT Tick(float DeltaTime)
    00175		{
    00176			if (PlayerController(Instigator.Controller).FovAngle < ScopeFov)
    00177			{
    00178				PlayerController(Instigator.Controller).StopZoom();
    00179				PlayerController(Instigator.Controller).SetFov(ScopeFov);
    00180				Instigator.PlayRolloffSound(hZoomSound, self, 2);
    00181	//			SetTimer(0.0,False);
    00182				bZoomed=true;
    00183				bMaxZoomed=true;
    00184				SetTimer2(0.1, true);
    00185				if ( bActivated )
    00186					GoToState('Listening');
    00187				else
    00188					GoToState('Idle');
    00189			}
    00190		}
    00191
    00192	    FUNCTION Activate()
    00193		{
    00194		}
    00195	}
    00196
    00197	FUNCTION string StrTime( int i )
    00198	{
    00199		LOCAL int iMillisec, iSec;
    00200
    00201		iSec = i/10;
    00202		iMilliSec = i - iSec*10;
    00203		return iSec$":"$iMilliSec$"0";
    00204
    00205	}
    00206
    00207	FUNCTION DisplayChrono( string str )
    00208	{
    00209	//	XIIIBaseHUD(Playercontroller(Pawn(Owner).Controller).MyHud)
    00210		HUD.AddChronoDisplay( str );
    00211	}
    00212
    00213	EVENT Timer2()
    00214	{
    00215		LOCAL float fFactor;
    00216		LOCAL VECTOR /*X,Y,Z,*/ v2;
    00217
    00218		if ( !bActivated && !bCanCauseGameOver )
    00219		{
    00220			// reseted, end sequence
    00221			GotoState('Idle');
    00222			SetTimer2(0.0, false);
    00223		}
    00224	//		GetAxes(Pawn(Owner).GetViewRotation(), X, Y, Z);
    00225		v2 = (ListenTarget.Location + ListenTarget.EyePosition()) - (Pawn(Owner).Location + Pawn(Owner).EyePosition());
    00226		fFactor = normal(V2) dot Vector(Pawn(Owner).GetViewRotation());
    00227		fFactor *= (1-fClamp( (vSize(v2)-3100)*0.002, 0, 1));
    00228		Instigator.PlaySound(hMicroSound, int(bMaxZoomed), int(fFactor*10000));
    00229
    00230		if ( bCanCauseGameOver )
    00231		{
    00232			if ( (fFactor < 0.9997) || !bZoomed )
    00233			{
    00234				if ( bZoomed )
    00235					Charge -= 1;
    00236				else
    00237
Charge -=2; 00238 00239 if (Charge >= 0) 00240 { 00241 HUD.bDrawChronoWithWarningColors=(Charge<21); 00242 DisplayChrono( StrTime( Charge ) ); 00243 } 00244 else 00245 { 00246 UsedUp(); 00247 HUD.bDrawChronoWithWarningColors=true; 00248 if ( Level.TimeSeconds-int(Level.TimeSeconds)>0.5 ) 00249 DisplayChrono( "0:00" /*sMicroFailure*/ ); 00250 else 00251 DisplayChrono( "" ); 00252 } 00253 } 00254 else 00255 { 00256 Charge = min(default.Charge, Charge+1); 00257 HUD.bDrawChronoWithWarningColors=(Charge<21); 00258 DisplayChrono( StrTime( Charge ) ); 00259 } 00260 } 00261 else 00262 { 00263 if ( MicroState == 0 ) 00264 { 00265 if ( (fFactor < 0.9997) || !bZoomed ) 00266 { 00267 SetTimer(0.0, false); 00268 HUD.bDrawChronoWithWarningColors=true; 00269 if ( Level.TimeSeconds-int(Level.TimeSeconds)>0.5 ) 00270 DisplayChrono( "?:??" /*sMicroTooFar*/ ); 00271 else 00272 DisplayChrono( "" ); 00273 } 00274 else 00275 { 00276 MicroState ++; 00277 SetTimer(0.5, false); 00278 } 00279 } 00280 else if ( (fFactor < 0.9997) || !bZoomed ) 00281 { 00282 if ( MicroState == 1 ) 00283 { 00284 FakeCharge = min(default.FakeCharge, FakeCharge+1); 00285 HUD.bDrawChronoWithWarningColors=true; 00286 if ( Level.TimeSeconds-int(Level.TimeSeconds)>0.5 ) 00287 DisplayChrono( "?:??" /*sMicroTooFar*/ ); 00288 else 00289 DisplayChrono( "" ); 00290 } 00291 else // we ARE in state 2, can't be otherwise 00292 { 00293 if ( bZoomed ) 00294 FakeCharge -= 1; 00295 else 00296 FakeCharge -=2; 00297 if (FakeCharge >= 0) 00298 { 00299 if ( !bTriggeredMissInTrainMode && FakeCharge<21 ) 00300 { 00301 bTriggeredMissInTrainMode=true; 00302 XIIIGameInfo(Level.Game).MapInfo.SetGoalComplete(97); 00303 } 00304 HUD.bDrawChronoWithWarningColors=(FakeCharge<21); 00305 DisplayChrono( StrTime( FakeCharge ) ); 00306 } 00307 else 00308 { 00309 FakeCharge=-1; 00310 HUD.bDrawChronoWithWarningColors=true; 00311 if ( Level.TimeSeconds-int(Level.TimeSeconds)>0.5 ) 00312 DisplayChrono( "0:00" /*sMicroFailure*/ ); 00313 else 00314 DisplayChrono( "" ); 00315 } 00316 } 00317 } 00318 else 00319 { 00320 FakeCharge = min(default.FakeCharge, FakeCharge+1); 00321 HUD.bDrawChronoWithWarningColors=(FakeCharge<21); 00322 DisplayChrono( StrTime( FakeCharge ) ); 00323 } 00324 } 00325 } 00326 00327 EVENT Timer() 00328 { 00329 if ( MicroState == 1 ) 00330 { 00331 MicroState ++; 00332 Fakecharge = Default.FakeCharge; 00333 TriggerEvent('Didacticiel01', self, Pawn(Owner)); 00334 } 00335 } 00336 00337 //_____________________________________________________________________________ 00338 STATE Listening extends Idle 00339 { 00340 EVENT BeginState() 00341 { 00342 Global.BeginState(); 00343 SUPER.BeginState(); 00344 FakeCharge = Default.Charge; 00345 HUD = XIIIBaseHUD(Playercontroller(Pawn(Owner).Controller).MyHud); 00346 } 00347 00348 EVENT EndState() 00349 { 00350 if ( bCanCauseGameOver ) 00351 Level.Game.EndGame( XIIIPlayercontroller(XIIIPawn(Owner).controller).PlayerReplicationInfo, "GoalIncomplete" ); 00352 } 00353 } 00354 00355 00356 00357 defaultproperties 00358 { 00359 hZoomSound=Sound'XIIIsound.Guns__Zoom.Zoom__hZoom' 00360 ScopeFOV=7.000000 00361 bCanCauseGameOver=True 00362 hMicroSound=Sound'XIIIsound.SpecActions__MicroCanon.MicroCanon__hMicroCanon' 00363 FakeCharge=30 00364 MeshName="XIIIArmes.FpsMicroM" 00365 IHand=IH_2H 00366 hSelectItemSound=Sound'XIIIsound.SpecActions__MicroCanon.MicroCanon__hDegaine' 00367 hDownItemSound=Sound'XIIIsound.SpecActions__MicroCanon.MicroCanon__hRengaine' 00368 ZCrosshair=Texture'XIIIMenu.HUD.ZMireSniperA' 00369 ZCrosshairDot=Texture'XIIIMenu.HUD.MireCouteau' 00370 IconNumber=29 00371 sItemName="Micro" 00372 bAutoActivate=True 00373 bActivatable=True 00374 ExpireMessage="Zoomer was used." 00375 InventoryGroup=8 00376 bDisplayableInv=True 00377 PickupClassName="XIII.MicroPick" 00378 Charge=30 00379 PlayerViewOffset=(X=8.600000,Y=6.000000,Z=-5.800000) 00380 BobDamping=0.975000 00381 ThirdPersonRelativeLocation=(X=27.000000,Y=-3.000000,Z=-13.000000) 00382 ThirdPersonRelativeRotation=(Roll=32768) 00383 AttachmentClass=Class'XIII.MicroAttach' 00384 ItemName="MICRO" 00385 Rotation=(Roll=-15536) 00386 }

End Source Code