示例#1
0
 public static void SetDirectionMarker(AttackDirectionIndicator __instance, AttackDirection direction)
 {
     try {
         AttackDirectionIndicator me = __instance;
         if (me.Owner == null || me.Owner.IsDead || Combat == null)
         {
             return;
         }
         Color    orig         = me.ColorInactive;
         Color?[] activeColors = __instance.Owner?.team?.IsFriendly(Combat?.LocalPlayerTeam) ?? false ? FacingMarkerPlayerColors : FacingMarkerEnemyColors;
         object[] colors;
         if (direction != AttackDirection.ToProne && direction != AttackDirection.FromTop)
         {
             colors = new object[] { activeColors?[0] ?? orig, activeColors?[1] ?? orig, activeColors?[2] ?? orig, activeColors?[3] ?? orig };
             if (direction != AttackDirection.None)
             {
                 int dirIndex = Math.Max(0, Math.Min((int)direction - 1, LOSDirectionCount - 1));
                 colors[dirIndex] = FacingMarkerTargetColors?[dirIndex] ?? me.ColorActive;
                 //Log( $"Direction {direction}, Index {dirIndex}, Color {colors[ dirIndex ]}" );
             }
         }
         else
         {
             if (ActiveState == null)
             {
                 return;
             }
             FiringPreviewManager.PreviewInfo info = ActiveState.FiringPreview.GetPreviewInfo(me.Owner);
             orig   = info.HasLOF ? (FacingMarkerTargetColors?[4] ?? me.ColorActive) : (activeColors?[4] ?? me.ColorInactive);
             colors = new object[] { orig, orig, orig, orig };
         }
         SetColors.Invoke(__instance, colors);
     }                 catch (Exception ex) { Error(ex); }
 }
示例#2
0
 public static void SaveDirectionMarker(AttackDirectionIndicator __instance)
 {
     try {
         if (OrigDirectionMarkerColors == null)
         {
             OrigDirectionMarkerColors = new Color[] { __instance.ColorInactive, __instance.ColorActive }
         }
         ;
     }                 catch (Exception ex) { Error(ex); }
 }