private void Awake()
    {
        // populate the coordinate lists for the click hotspots
        clickXCoords = new List <float>();
        clickYCoords = new List <float>();
        foreach (GameObject go in markerXCoords)
        {
            clickXCoords.Add(go.transform.position.x);
            GameObject.Destroy(go);
        }
        foreach (GameObject go in markerYCoords)
        {
            clickYCoords.Add(go.transform.position.y);
            GameObject.Destroy(go);
        }

        // find and cache sprite renderers for the various markers
        SpriteRenderer[] tempSprites = GetComponentsInChildren <SpriteRenderer>();
        dayMarkerSR = tempSprites[1];
        dayMarkerSR.transform.position = new Vector2(clickXCoords[0], clickYCoords[0]);
        loopMarkerSR = tempSprites[2];
        loopMarkerSR.transform.position = new Vector2(clickXCoords[2], clickYCoords[0]);
        extraMarkerSR = tempSprites[3];
        extraMarkerSR.gameObject.SetActive(false);

        // setup the first incident marker and the list for new ones
        IncidentMarker im = new IncidentMarker
        {
            marker   = tempSprites[4].gameObject,
            position = -1
        };

        incidentMarkers.Add(im);
        incidentMarkers[0].marker.SetActive(false);
    }
    private IncidentMarker GetFreeIncidentMarker()
    {
        foreach (IncidentMarker im in incidentMarkers)
        {
            if (im.marker.activeSelf == false)
            {
                im.marker.SetActive(true);
                return(im);
            }
        }
        // no inactive incident markers, so make a new one.  We know index zero always exists.
        GameObject     newMarker = GameObject.Instantiate(incidentMarkers[0].marker, this.transform);
        IncidentMarker newIM     = new IncidentMarker
        {
            marker   = newMarker,
            position = -1
        };

        incidentMarkers.Add(newIM);
        return(newIM);
    }