Advertisement
Guest User

AnimNotify_TriggerHitReaction

a guest
Feb 27th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. class AnimNotify_TriggerHitReaction extends AnimNotify_Scripted;
  2.  
  3. var() editinline name ReactionAnimSequence <ToolTip="Sequence name of the damage reaction to play">;
  4. var() editinline bool RandomReactionAnimSequence <ToolTip="Play a random sequence of HL_HurtFront, HL_HurtLeft or HL_HurtRight Overides ReactionAnimSequence">;
  5. var() editinline int BloodAmount <ToolTip="Virtual damage amount that calculates the amount of blood effect">;
  6. var() name DamageTypeName  <ToolTip="Virtual damage type used in hit effect. Possible values are DefaultProjectile, Acid, Electrical, Poison, Psi and Fire">;
  7. var() EAbilityHitResult HitResult <ToolTip="Virtual hit result used in the hit effect container">;
  8.  
  9. event Notify(Actor Owner, AnimNodeSequence AnimSeqInstigator)
  10. {
  11.     local XComUnitPawn Pawn, TargetPawn;
  12.     local XGUnitNativeBase OwnerUnit;
  13.     local X2Action_Fire FireAction;
  14.     local XComGameStateVisualizationMgr VisualizationManager;
  15.     local CustomAnimParams AnimParams;
  16.     local XGUnit TargetUnit;
  17.     local array<name> RandomSequences;
  18.  
  19.     RandomSequences.AddItem('HL_HurtFront');
  20.     RandomSequences.AddItem('HL_HurtLeft');
  21.     RandomSequences.AddItem('HL_HurtRight');
  22.  
  23.     Pawn = XComUnitPawn(Owner);
  24.     if (Pawn != none)
  25.     {
  26.         OwnerUnit = Pawn.GetGameUnit();
  27.         if (OwnerUnit != none)
  28.         {
  29.             `LOG("AnimNotify_TriggerHitReaction Owner" @ String(OwnerUnit),, 'PrimarySecondaries');
  30.             VisualizationManager = `XCOMVISUALIZATIONMGR;
  31.             FireAction = X2Action_Fire(VisualizationManager.GetCurrentActionForVisualizer(OwnerUnit));
  32.             if (FireAction != none)
  33.             {
  34.                 TargetUnit = XGUnit(FireAction.PrimaryTarget);
  35.                 TargetPawn = TargetUnit.GetPawn();
  36.                 `LOG("AnimNotify_TriggerHitReaction Target" @ TargetUnit @ TargetPawn @ FireAction,, 'PrimarySecondaries');
  37.                 if (TargetPawn != none)
  38.                 {
  39.                    
  40.                     if (RandomReactionAnimSequence)
  41.                     {
  42.                         AnimParams.AnimName = RandomSequences[`SYNC_RAND_STATIC(3)];
  43.                     }
  44.                     else
  45.                     {
  46.                         AnimParams.AnimName = ReactionAnimSequence;
  47.                     }
  48.  
  49.                     DamageTypeName = class'X2Item_DefaultDamageTypes'.default.DefaultDamageType;
  50.                     TargetPawn.GetAnimTreeController().PlayFullBodyDynamicAnim(AnimParams);
  51.                     TargetPawn.PlayHitEffects(
  52.                         BloodAmount,
  53.                         OwnerUnit,
  54.                         TargetPawn.GetHeadshotLocation(),
  55.                         DamageTypeName,
  56.                         Normal(TargetPawn.GetHeadshotLocation()) * 500.0f,
  57.                         false,
  58.                         HitResult
  59.                     );
  60.  
  61.                     `LOG("AnimNotify_TriggerHitReaction triggered" @ AnimParams.AnimName @ DamageTypeName @ HitResult @ BloodAmount,, 'PrimarySecondaries');
  62.                    
  63.                 }
  64.             }
  65.         }
  66.     }
  67.     super.Notify(Owner, AnimSeqInstigator);
  68. }
  69.  
  70. defaultproperties {
  71.     ReactionAnimSequence = "HL_HurtFront"
  72.     DamageTypeName = "DefaultProjectile"
  73.     RandomReactionAnimSequence = false
  74.     BloodAmount = 1
  75.     HitResult = eHit_Success
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement