< Summary

Class:HierarchicalBase
Assembly:bamlab.micromissiles
File(s):/github/workspace/Assets/Scripts/Hierarchical/HierarchicalBase.cs
Covered lines:32
Uncovered lines:0
Coverable lines:32
Total lines:61
Line coverage:100% (32 of 32)
Covered branches:0
Total branches:0
Covered methods:14
Total methods:14
Method coverage:100% (14 of 14)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
HierarchicalBase()0%110100%
AddSubHierarchical(...)0%220100%
RemoveSubHierarchical(...)0%110100%
GetPosition()0%220100%
GetVelocity()0%220100%
GetMean(...)0%330100%

File(s)

/github/workspace/Assets/Scripts/Hierarchical/HierarchicalBase.cs

#LineLine coverage
 1using System.Collections.Generic;
 2using UnityEngine;
 3
 4// Base implementation of a hierarchical object.
 5//
 6// The position and velocity of a hierarchical object is defined as the mean of the positions and
 7// velocities of the sub-hierarchical objects.
 8public class HierarchicalBase : IHierarchical {
 9  // List of hierarchical objects in the hierarchy level below.
 2310  private List<IHierarchical> _subHierarchicals = new List<IHierarchical>();
 11
 12  // Target of the hierarchical object.
 13  private IHierarchical _target;
 14
 15  // Target model of the hierarchical object. The target model is updated by the sensor and should
 16  // be used by the controller to model imperfect knowledge of the engagement.
 17  private IHierarchical _targetModel;
 18
 719  public IReadOnlyList<IHierarchical> SubHierarchicals => _subHierarchicals.AsReadOnly();
 20  public IHierarchical Target {
 121    get => _target;
 122    set => _target = value;
 23  }
 24  public IHierarchical TargetModel {
 125    get => _targetModel;
 126    set => _targetModel = value;
 27  }
 428  public Vector3 Position => GetPosition();
 629  public Vector3 Velocity => GetVelocity();
 130  public float Speed => Velocity.magnitude;
 31
 1032  public void AddSubHierarchical(IHierarchical subHierarchical) {
 1933    if (!_subHierarchicals.Contains(subHierarchical)) {
 934      _subHierarchicals.Add(subHierarchical);
 935    }
 1036  }
 37
 238  public void RemoveSubHierarchical(IHierarchical subHierarchical) {
 239    _subHierarchicals.Remove(subHierarchical);
 240  }
 41
 242  protected virtual Vector3 GetPosition() {
 443    return GetMean(s => s.Position);
 244  }
 45
 346  protected virtual Vector3 GetVelocity() {
 647    return GetMean(s => s.Velocity);
 348  }
 49
 550  private Vector3 GetMean(System.Func<IHierarchical, Vector3> selector) {
 751    if (_subHierarchicals.Count == 0) {
 252      return Vector3.zero;
 53    }
 54
 355    Vector3 sum = Vector3.zero;
 2456    foreach (var subHierarchical in _subHierarchicals) {
 557      sum += selector(subHierarchical);
 558    }
 359    return sum / _subHierarchicals.Count;
 560  }
 61}