/// <summary>
        /// Creates a matrix of valid Hold Points and Supply Points (I think) only used for endless?
        /// By default, just generates a matrix that is false on diagonals.
        /// </summary>
        private TNH_SafePositionMatrix GenerateTestMatrix()
        {
            TNH_SafePositionMatrix maxMatrix = ScriptableObject.CreateInstance <TNH_SafePositionMatrix>();

            maxMatrix.Entries_HoldPoints   = new List <TNH_SafePositionMatrix.PositionEntry>();
            maxMatrix.Entries_SupplyPoints = new List <TNH_SafePositionMatrix.PositionEntry>();

            int effectiveHoldCount   = _tnhManager.HoldPoints.Count;
            int effectiveSupplyCount = _tnhManager.SupplyPoints.Where(x => x.GetComponent <ForcedSpawn>() == null || x.GetComponent <ForcedSpawn>().spawnOnly == false).Count();

            //int effectiveSupplyCount = _tnhManager.SupplyPoints.Count;

            for (int ii = 0; ii < effectiveHoldCount; ii++)
            {
                TNH_SafePositionMatrix.PositionEntry entry = new TNH_SafePositionMatrix.PositionEntry();
                entry.SafePositions_HoldPoints = new List <bool>();
                for (int jj = 0; jj < effectiveHoldCount; jj++)
                {
                    entry.SafePositions_HoldPoints.Add(ii != jj);
                }

                entry.SafePositions_SupplyPoints = new List <bool>();
                for (int jj = 0; jj < effectiveSupplyCount; jj++)
                {
                    entry.SafePositions_SupplyPoints.Add(true);
                }

                maxMatrix.Entries_HoldPoints.Add(entry);
            }

            for (int ii = 0; ii < effectiveSupplyCount; ii++)
            {
                TNH_SafePositionMatrix.PositionEntry entry = new TNH_SafePositionMatrix.PositionEntry();
                entry.SafePositions_HoldPoints = new List <bool>();
                for (int jj = 0; jj < effectiveHoldCount; jj++)
                {
                    entry.SafePositions_HoldPoints.Add(true);
                }

                entry.SafePositions_SupplyPoints = new List <bool>();
                for (int jj = 0; jj < effectiveSupplyCount; jj++)
                {
                    entry.SafePositions_SupplyPoints.Add(ii != jj);
                }

                maxMatrix.Entries_SupplyPoints.Add(entry);
            }

            return(maxMatrix);
        }
        /// <summary>
        /// Base function for setting up the TNH Manager object to handle a custom level.
        /// </summary>
        public override void Resolve()
        {
            _tnhManager = ObjectReferences.ManagerDonor;

            // Hold points need to be set.
            _tnhManager.HoldPoints = LevelRoot.GetComponentsInChildren <TNH_HoldPoint>(true).ToList();

            // Supply points need to be set.
            _tnhManager.SupplyPoints = LevelRoot.GetComponentsInChildren <TNH_SupplyPoint>(true).ToList();

            // Possible Sequences need to be generated at random.
            if (LevelRoot.ExtraData == null || LevelRoot.ExtraData[0].Value == "")
            {
                _tnhManager.PossibleSequnces = GenerateRandomPointSequences(1);
            }

            // Safe Pos Matrix needs to be set. Diagonal for now.
            TNH_SafePositionMatrix maxMatrix = GenerateTestMatrix();

            _tnhManager.SafePosMatrix = maxMatrix;
        }