< Summary

Class:CarrierInterceptor
Assembly:bamlab.micromissiles
File(s):/github/workspace/Assets/Scripts/Interceptors/CarrierInterceptor.cs
Covered lines:4
Uncovered lines:39
Coverable lines:43
Total lines:71
Line coverage:9.3% (4 of 43)
Covered branches:0
Total branches:0
Covered methods:2
Total methods:6
Method coverage:33.3% (2 of 6)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
CarrierInterceptor()0%110100%
IsAssignable()0%110100%
FixedUpdate()0%30500%
UpdateMidCourse(...)0%2100%
DrawDebugVectors()0%6200%
SpawnSubmunitions()0%20400%

File(s)

/github/workspace/Assets/Scripts/Interceptors/CarrierInterceptor.cs

#LineLine coverage
 1using System.Collections;
 2using System.Collections.Generic;
 3using JetBrains.Annotations;
 4using UnityEngine;
 5using System.Linq;
 6
 7public class CarrierInterceptor : Interceptor {
 28  private bool _submunitionsLaunched = false;
 9
 110  public override bool IsAssignable() {
 111    return false;
 112  }
 13
 014  protected override void FixedUpdate() {
 015    base.FixedUpdate();
 16    // Check whether to launch submunitions.
 017    if ((GetFlightPhase() == FlightPhase.MIDCOURSE || GetFlightPhase() == FlightPhase.BOOST) &&
 018        !_submunitionsLaunched && IADS.Instance.ShouldLaunchSubmunitions(this)) {
 019      SpawnSubmunitions();
 020      _submunitionsLaunched = true;
 021    }
 022  }
 23
 024  protected override void UpdateMidCourse(double deltaTime) {
 025    base.UpdateMidCourse(deltaTime);
 026  }
 27
 028  protected override void DrawDebugVectors() {
 029    base.DrawDebugVectors();
 030    if (_acceleration != null) {
 031      Debug.DrawRay(transform.position, _acceleration * 1f, Color.green);
 032    }
 033  }
 34
 035  private void SpawnSubmunitions() {
 036    if (agentConfig.SubmunitionsConfig == null) {
 037      return;
 38    }
 39
 040    List<Interceptor> submunitions = new List<Interceptor>();
 041    for (int i = 0; i < agentConfig.SubmunitionsConfig.NumSubmunitions; ++i) {
 042      Configs.AgentConfig submunitionsConfig = agentConfig.SubmunitionsConfig.AgentConfig;
 043      Simulation.State initialState = new Simulation.State();
 044      initialState.Position = Coordinates3.ToProto(transform.position);
 45
 46      // Fan the submunitions radially outwards by 60 degrees from the carrier interceptor's
 47      // velocity vector.
 48      const float SubmunitionsAngularDeviation = 60.0f * Mathf.Deg2Rad;
 049      Vector3 velocity = GetComponent<Rigidbody>().linearVelocity;
 050      Vector3 perpendicularDirection = Vector3.Cross(velocity, Vector3.up);
 051      Vector3 lateralDirection =
 52          Quaternion.AngleAxis(i * 360 / agentConfig.SubmunitionsConfig.NumSubmunitions, velocity) *
 53          perpendicularDirection;
 054      initialState.Velocity = Coordinates3.ToProto(Vector3.RotateTowards(
 55          velocity, lateralDirection, maxRadiansDelta: SubmunitionsAngularDeviation,
 56          maxMagnitudeDelta: Mathf.Cos(SubmunitionsAngularDeviation)));
 57
 058      Interceptor submunition =
 59          SimManager.Instance.CreateInterceptor(submunitionsConfig, initialState);
 060      submunition.SetFlightPhase(FlightPhase.READY);
 61      // Launch the submunitions with the same velocity as the carrier interceptor's.
 062      submunition.SetVelocity(GetComponent<Rigidbody>().linearVelocity);
 063      submunitions.Add(submunition);
 064    }
 065    UnassignTarget();
 066    IADS.Instance.AssignSubmunitionsToThreats(this, submunitions);
 67
 068    SimManager.Instance.AddSubmunitionsSwarm(
 069        submunitions.ConvertAll(submunition => submunition as Agent));
 070  }
 71}