private void onReach(ProgressNode node)
        {
            if (node == null)
            {
                return;
            }

            if (progressParser.isIntervalType(node))
            {
                progressInterval i = progressParser.getIntervalNode(node.Id);

                if (i != null)
                {
                    double nodeRecord = progressParser.getIntervalRecord(node);

                    if (i.getRecord(i.Interval) >= nodeRecord)
                    {
                        return;
                    }

                    if (node.IsReached)
                    {
                        i.calculateRewards(i.Interval);
                        i.Interval += 1;
                    }
                }
            }

            progressParser.updateCompletionRecord();
        }
        private void onComplete(ProgressNode node)
        {
            if (node == null)
            {
                return;
            }

            if (!node.IsComplete)
            {
                return;
            }

            if (!progressParser.isIntervalType(node))
            {
                if (progressParser.isPOI(node))
                {
                    progressStandard s = progressParser.getPOINode(node.Id);

                    if (s == null)
                    {
                        Debug.Log("[Progress Tracking Parser] POI Progress Node Not Found");
                    }
                    else
                    {
                        s.calculateRewards(null);
                        s.NoteReference = progressParser.vesselNameFromNode(node);

                        try
                        {
                            s.Time = (double)node.GetType().GetField("AchieveDate", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(node);
                        }
                        catch (Exception e)
                        {
                            Debug.LogWarning("[Progress Tracking Parser] Error In Detecting Progress Node Achievement Date\n" + e);
                        }
                    }
                }
                else
                {
                    progressStandard s = progressParser.getStandardNode(node.Id);

                    if (s != null)
                    {
                        s.calculateRewards(null);
                        string note = progressParser.crewNameFromNode(node);

                        if (string.IsNullOrEmpty(note))
                        {
                            note = progressParser.vesselNameFromNode(node);
                        }

                        s.NoteReference = note;

                        try
                        {
                            s.Time = (double)node.GetType().GetField("AchieveDate", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(node);
                        }
                        catch (Exception e)
                        {
                            Debug.LogWarning("[Progress Tracking Parser] Error In Detecting Progress Node Achievement Date\n" + e);
                        }
                    }
                    else
                    {
                        CelestialBody body = progressParser.getBodyFromType(node);

                        if (body == null)
                        {
                            Debug.Log("[Progress Tracking Parser] Body From Progress Node Null...");
                        }
                        else
                        {
                            progressBodyCollection b = progressParser.getProgressBody(body);

                            if (b != null)
                            {
                                progressStandard sb = b.getNode(node.Id);

                                if (sb == null)
                                {
                                    Debug.Log("[Progress Tracking Parser] Body Sub Progress Node Not Found");
                                }
                                else
                                {
                                    sb.calculateRewards(body);
                                    string note = progressParser.crewNameFromNode(node);

                                    if (string.IsNullOrEmpty(note))
                                    {
                                        note = progressParser.vesselNameFromNode(node);
                                    }

                                    sb.NoteReference = note;

                                    try
                                    {
                                        sb.Time = (double)node.GetType().GetField("AchieveDate", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(node);
                                    }
                                    catch (Exception e)
                                    {
                                        Debug.LogWarning("[Progress Tracking Parser] Error In Detecting Progress Node Achievement Date\n" + e);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            else
            {
                progressInterval i = progressParser.getIntervalNode(node.Id);

                if (i == null)
                {
                    Debug.Log("[Progress Tracking Parser] Interval Progress Node Not Found");
                }
                else
                {
                    if (node.IsReached)
                    {
                        i.calculateRewards(i.Interval);
                        i.Interval += 1;
                    }
                }
            }

            progressParser.updateCompletionRecord();
        }