Core.Object | +--Engine.Actor | +--Engine.Inventory | +--XIII.XIIILeftHand
PlayerViewOffsetCorpse,
PlayerViewOffsetPrisonner
InventoryAttachment
TheHeldBody
bool
bActive
sound
hCatchBodySound
hCatchPrisonnerSound
hReleaseBodySound
hReleaseGoodPrisonnerSound
hReleasePrisonnerSound
mCorpse,
mPrisonner
XIIIPawn
pOnShoulder
void
GrabPawn(XIIIPawn P)
//_____________________________________________________________________________
Powerups
SelectNext()
//_____________________________________________________________________________ // Select first activatable powerup. simulated
UnGrabPawn()
PlayUnGrabbing()
PlayMoving()
PlayWaiting()
PlayGrabbing()
00001 //----------------------------------------------------------- 00002 // 00003 //----------------------------------------------------------- 00004 class XIIILeftHand extends Inventory; 00005 00006 var bool bActive; // if the hand is active (corpse or prisonner) 00007 var XIIIPawn pOnShoulder; // the pawn in hand (corpse or prisonner) 00008 00009 var sound hCatchPrisonnerSound; 00010 var sound hReleasePrisonnerSound; 00011 var sound hCatchBodySound; 00012 var sound hReleaseBodySound; 00013 var sound hReleaseGoodPrisonnerSound; 00014 00015 var mesh mCorpse, mPrisonner; 00016 var inventoryAttachment TheHeldBody; 00017 00018 var vector PlayerViewOffsetCorpse, PlayerViewOffsetPrisonner; 00019 00020 //_____________________________________________________________________________ 00021 simulated event RenderOverlays( canvas Canvas ) 00022 { 00023 if ( (Instigator == None) || (Instigator.Controller == None)) 00024 return; 00025 SetLocation( Instigator.Location + Instigator.CalcDrawOffset(self) ); 00026 SetRotation( Instigator.GetViewRotation() ); 00027 // Canvas.DrawActor(self, false); 00028 SetBase(Pawn(Owner).Controller); 00029 } 00030 00031 /* 00032 //_____________________________________________________________________________ 00033 // Select first activatable powerup. 00034 simulated function Powerups SelectNext() 00035 { 00036 // Log(" > SelectNext for "$self@"call, inventory="$Inventory); 00037 if ( Inventory != None ) 00038 return Inventory.SelectNext(); 00039 else 00040 return None; 00041 } 00042 */ 00043 00044 //_____________________________________________________________________________ 00045 function GrabPawn(XIIIPawn P) 00046 { 00047 if ( (pOnShoulder != none) || (P == none) ) 00048 return; 00049 00050 // Log("--> GrabPawn called"); 00051 pOnShoulder = P; 00052 if ( pOnShoulder.bIsDead ) 00053 Mesh = mCorpse; 00054 else 00055 Mesh = mPrisonner; 00056 00057 TheHeldBody = spawn(class'HeldBody',self); 00058 TheHeldBody.Mesh = pOnShoulder.Mesh; 00059 if ( (pOnShoulder.Skins.Length != 0) && (pOnShoulder.Skins[0] != none) ) 00060 TheHeldBody.Skins[0] = pOnShoulder.Skins[0]; 00061 00062 AttachToBone(TheHeldBody,'Box01'); 00063 00064 pOnShoulder.Instigator = Pawn(Owner); 00065 pOnShoulder.BeingGrabbed(); 00066 if ( pOnShoulder.bIsDead ) 00067 { 00068 XIIIPawn(instigator).bPrisonner=false; 00069 Instigator.PlayRolloffSound(hCatchBodySound, self); 00070 PlayerViewOffset = PlayerViewOffsetCorpse; 00071 } 00072 else 00073 { 00074 XIIIPawn(instigator).bPrisonner=true; 00075 Instigator.PlayRolloffSound(hCatchPrisonnerSound, self); 00076 PlayerViewOffset = PlayerViewOffsetPrisonner; 00077 } 00078 XIIIPawn(Owner).bHaveOnlyOneHandFree=true; 00079 00080 PlayGrabbing(); 00081 bActive=true; 00082 00083 GotoState('Grabbing'); 00084 } 00085 00086 //_____________________________________________________________________________ 00087 function UnGrabPawn() 00088 { 00089 // Log("--> UnGrabPawn called"); 00090 00091 // ELR distinction between ungrabing corpse or prisoner is made in pawn functions upon current state 00092 if ( !pOnShoulder.bIsDead ) 00093 { 00094 if ( pOnShoulder.GameOver == GO_Never ) 00095 Instigator.PlayRolloffSound(hReleasePrisonnerSound, self); 00096 else 00097 Instigator.PlayRolloffSound(hReleaseGoodPrisonnerSound, self); 00098 } 00099 00100 PlayUnGrabbing(); 00101 00102 TheHeldBody.GotoState('UnGrabbed'); 00103 00104 GotoState('UnGrabbing'); 00105 XIIIPawn(instigator).bPrisonner=false; 00106 XIIIPawn(Owner).bHaveOnlyOneHandFree=false; 00107 } 00108 00109 //_____________________________________________________________________________ 00110 state Grabbing 00111 { 00112 event BeginState() 00113 { 00114 bHidden = false; 00115 RefreshDisplaying(); 00116 // TheHeldBody.bHidden = true; 00117 // TheHeldBody.RefreshDisplaying(); 00118 } 00119 function UnGrabPawn(); 00120 function GrabPawn(XIIIPawn P); 00121 event AnimEnd(int channel) 00122 { 00123 PlayWaiting(); 00124 GotoState('Holding'); 00125 } 00126 } 00127 00128 //_____________________________________________________________________________ 00129 state Holding 00130 { 00131 function GrabPawn(XIIIPawn P); 00132 event AnimEnd(int channel) 00133 { 00134 if ( (fRand() < 0.1) && !pOnShoulder.bIsDead ) 00135 PlayMoving(); 00136 else 00137 PlayWaiting(); 00138 } 00139 } 00140 00141 //_____________________________________________________________________________ 00142 state UnGrabbing 00143 { 00144 function UnGrabPawn(); 00145 function GrabPawn(XIIIPawn P); 00146 event AnimEnd(int channel) 00147 { 00148 bActive = false; 00149 bHidden = true; 00150 RefreshDisplaying(); 00151 if ( pOnShoulder != none ) 00152 { 00153 if ( pOnShoulder.bIsDead ) 00154 { 00155 Instigator.PlayRolloffSound(hReleaseBodySound, self); 00156 pOnShoulder.UnGrabbed(Instigator.Location - vect(0,0,50), vector(rotation)); 00157 } 00158 else 00159 { 00160 pOnShoulder.UnGrabbed(Instigator.Location - vect(0,0,50), vector(rotation)); 00161 } 00162 if ( Mover(Instigator.Base) != none ) 00163 pOnShoulder.SetBase(Instigator.Base); 00164 pOnShoulder = none; 00165 } 00166 XIIIPawn(Owner).CheckMaluses(); 00167 GotoState(''); 00168 } 00169 } 00170 00171 //_____________________________________________________________________________ 00172 function PlayGrabbing() 00173 { 00174 PlayAnim('Select'); 00175 if ( pOnShoulder.bIsDead && (TheHeldBody != none) ) 00176 TheHeldBody.PlayAnim('CadavreSelect'); 00177 else 00178 TheHeldBody.PlayAnim('OtageSelect'); 00179 } 00180 00181 function PlayWaiting() 00182 { 00183 PlayAnim('Wait'); 00184 00185 // log("pOnShoulder="$pOnShoulder@"TheHeldBody="$TheHeldBody); 00186 00187 if ( pOnShoulder.bIsDead && (TheHeldBody != none) ) 00188 TheHeldBody.PlayAnim('CadavreWait'); 00189 else 00190 TheHeldBody.PlayAnim('OtageWait'); 00191 } 00192 00193 function PlayMoving() 00194 { 00195 PlayAnim('Mov'); 00196 TheHeldBody.PlayAnim('OtageMov'); 00197 } 00198 00199 function PlayUnGrabbing() 00200 { 00201 if ( pOnShoulder.bIsDead && (TheHeldBody != none) ) 00202 { 00203 PlayAnim('Down'); 00204 TheHeldBody.PlayAnim('CadavreDown'); 00205 } 00206 else 00207 { 00208 PlayAnim('DownKill'); 00209 TheHeldBody.PlayAnim('OtageDownKill'); 00210 } 00211 } 00212 00213 event FPSThrowNote() 00214 { 00215 Instigator.PlayRolloffSound(hReleaseBodySound, self); 00216 } 00217 event FPSKillNote() 00218 { 00219 Instigator.PlayRolloffSound(hReleasePrisonnerSound, self); 00220 } 00221 event FPSStunNote() 00222 { 00223 Instigator.PlayRolloffSound(hReleasePrisonnerSound, self); 00224 } 00225 00226 // bSpecialDelayFov=true 00227 00228 00229 defaultproperties 00230 { 00231 hCatchPrisonnerSound=Sound'XIIIsound.SpecActions__Hostage.Hostage__hHostageIn' 00232 hReleasePrisonnerSound=Sound'XIIIsound.SpecActions__Hostage.Hostage__hHostageOut' 00233 hCatchBodySound=Sound'XIIIsound.SpecActions.BodyCatch' 00234 hReleaseBodySound=Sound'XIIIsound.SpecActions.BodyThrow' 00235 hReleaseGoodPrisonnerSound=Sound'XIIIsound.SpecActions__Hostage.Hostage__hHostageOutKiTuPas' 00236 mCorpse=SkeletalMesh'XIIIArmes.fpsCadavreM' 00237 mPrisonner=SkeletalMesh'XIIIArmes.fpsOtageM' 00238 PlayerViewOffsetCorpse=(X=6.000000,Y=2.500000,Z=-6.000000) 00239 PlayerViewOffsetPrisonner=(X=5.000000,Y=4.500000,Z=-7.500000) 00240 PlayerViewOffset=(X=6.000000,Y=2.500000,Z=-5.000000) 00241 bDelayDisplay=True 00242 bIgnoreDynLight=False 00243 DrawType=DT_Mesh 00244 Mesh=SkeletalMesh'XIIIArmes.fpsCadavreM' 00245 DrawScale=0.300000 00246 }