//public virtual void FromXML(XmlNodeList nodes)
    //{
    //    _points.Clear();
    //    foreach (XmlNode node in nodes)
    //    {
    //        CameraPathPoint newCameraPathPoint = gameObject.AddComponent<CameraPathPoint>();// CreateInstance<CameraPathPoint>();
    //        newCameraPathPoint.hideFlags = HideFlags.HideInInspector;
    //        CameraPathPoint.PositionModes positionModes = (CameraPathPoint.PositionModes)Enum.Parse(typeof(CameraPathPoint.PositionModes), node["positionModes"].FirstChild.Value);
    //        switch (positionModes)
    //        {
    //            case CameraPathPoint.PositionModes.Free:
    //                CameraPathControlPoint cPointA = cameraPath[int.Parse(node["cpointA"].FirstChild.Value)];
    //                CameraPathControlPoint cPointB = cameraPath[int.Parse(node["cpointB"].FirstChild.Value)];
    //                float curvePercentage = float.Parse(node["curvePercentage"].FirstChild.Value);
    //                AddPoint(newCameraPathPoint, cPointA, cPointB, curvePercentage);
    //                break;

    //            case CameraPathPoint.PositionModes.FixedToPoint:
    //                CameraPathControlPoint point = cameraPath[int.Parse(node["point"].FirstChild.Value)];
    //                AddPoint(newCameraPathPoint, point);
    //                break;
    //        }
    //        newCameraPathPoint.FromXML(node, cameraPath);
    //    }
    //}

    public virtual void FromXML(XMLNodeList nodes)
    {
        _points.Clear();
        foreach (XMLNode node in nodes)
        {
            CameraPathPoint newCameraPathPoint = gameObject.AddComponent <CameraPathPoint>();// CreateInstance<CameraPathPoint>();
            newCameraPathPoint.hideFlags = HideFlags.HideInInspector;
            CameraPathPoint.PositionModes positionModes = (CameraPathPoint.PositionModes)Enum.Parse(typeof(CameraPathPoint.PositionModes), node.GetValue("positionModes>0>_text"));
            switch (positionModes)
            {
            case CameraPathPoint.PositionModes.Free:
                CameraPathControlPoint cPointA = cameraPath[int.Parse(node.GetValue("cpointA>0>_text"))];
                CameraPathControlPoint cPointB = cameraPath[int.Parse(node.GetValue("cpointB>0>_text"))];
                float curvePercentage          = float.Parse(node.GetValue("curvePercentage>0>_text"));
                AddPoint(newCameraPathPoint, cPointA, cPointB, curvePercentage);
                break;

            case CameraPathPoint.PositionModes.FixedToPoint:
                CameraPathControlPoint point = cameraPath[int.Parse(node.GetValue("point>0>_text"))];
                AddPoint(newCameraPathPoint, point);
                break;
            }
            newCameraPathPoint.FromXML(node, cameraPath);
        }
    }
    public override void FromXML(XmlNodeList nodes)
    {
        Clear();
        foreach (XmlNode node in nodes)
        {
            CameraPathSpeed newCameraPathPoint = gameObject.AddComponent <CameraPathSpeed>();//CreateInstance<CameraPathSpeed>();
            newCameraPathPoint.hideFlags = HideFlags.HideInInspector;
            CameraPathPoint.PositionModes positionModes = (CameraPathPoint.PositionModes)Enum.Parse(typeof(CameraPathPoint.PositionModes), node["positionModes"].FirstChild.Value);
            switch (positionModes)
            {
            case CameraPathPoint.PositionModes.Free:
                CameraPathControlPoint cPointA = cameraPath[int.Parse(node["cpointA"].FirstChild.Value)];
                CameraPathControlPoint cPointB = cameraPath[int.Parse(node["cpointB"].FirstChild.Value)];
                float curvePercentage          = float.Parse(node["curvePercentage"].FirstChild.Value);
                AddPoint(newCameraPathPoint, cPointA, cPointB, curvePercentage);
                break;

            case CameraPathPoint.PositionModes.FixedToPoint:
                CameraPathControlPoint point = cameraPath[int.Parse(node["point"].FirstChild.Value)];
                AddPoint(newCameraPathPoint, point);
                break;
            }
            newCameraPathPoint.FromXML(node, cameraPath);
        }
    }
    //public override void FromXML(XmlNodeList nodes)
    //{
    //    Clear();
    //    foreach (XmlNode node in nodes)
    //    {
    //        CameraPathDelay newCameraPathPoint = gameObject.AddComponent<CameraPathDelay>();//CreateInstance<CameraPathDelay>();
    //        newCameraPathPoint.hideFlags = HideFlags.HideInInspector;
    //        CameraPathPoint.PositionModes positionModes = (CameraPathPoint.PositionModes)Enum.Parse(typeof(CameraPathPoint.PositionModes), node["positionModes"].FirstChild.Value);
    //        switch (positionModes)
    //        {
    //            case CameraPathPoint.PositionModes.Free:
    //                CameraPathControlPoint cPointA = cameraPath[int.Parse(node["cpointA"].FirstChild.Value)];
    //                CameraPathControlPoint cPointB = cameraPath[int.Parse(node["cpointB"].FirstChild.Value)];
    //                float curvePercentage = float.Parse(node["curvePercentage"].FirstChild.Value);
    //                AddPoint(newCameraPathPoint, cPointA, cPointB, curvePercentage);
    //                break;

    //            case CameraPathPoint.PositionModes.FixedToPoint:
    //                CameraPathControlPoint point = cameraPath[int.Parse(node["point"].FirstChild.Value)];
    //                AddPoint(newCameraPathPoint, point);
    //                break;

    //            case CameraPathPoint.PositionModes.FixedToPercent:
    //                switch (node["customName"].FirstChild.Value)
    //                {
    //                    case "Start Point":
    //                        _introPoint = newCameraPathPoint;
    //                        AddPoint(newCameraPathPoint, 0);
    //                        break;
    //                    case "End Point":
    //                        _outroPoint = newCameraPathPoint;
    //                        AddPoint(newCameraPathPoint, 1);
    //                        break;
    //                    default:
    //                        float atPercentage = float.Parse(node["_percent"].FirstChild.Value);
    //                        AddPoint(newCameraPathPoint, atPercentage);
    //                        break;
    //                }
    //                break;
    //        }
    //        newCameraPathPoint.FromXML(node, cameraPath);
    //    }
    //}

    public override void FromXML(XMLNodeList nodes)
    {
        Clear();
        foreach (XMLNode node in nodes)
        {
            CameraPathDelay newCameraPathPoint = gameObject.AddComponent <CameraPathDelay>();//CreateInstance<CameraPathDelay>();
            newCameraPathPoint.hideFlags = HideFlags.HideInInspector;
            CameraPathPoint.PositionModes positionModes = (CameraPathPoint.PositionModes)Enum.Parse(typeof(CameraPathPoint.PositionModes), node.GetValue("positionModes>0>_text"));
            switch (positionModes)
            {
            case CameraPathPoint.PositionModes.Free:
                CameraPathControlPoint cPointA = cameraPath[int.Parse(node.GetValue("cpointA>0>_text"))];
                CameraPathControlPoint cPointB = cameraPath[int.Parse(node.GetValue("cpointB>0>_text"))];
                float curvePercentage          = float.Parse(node.GetValue("curvePercentage>0>_text"));
                AddPoint(newCameraPathPoint, cPointA, cPointB, curvePercentage);
                break;

            case CameraPathPoint.PositionModes.FixedToPoint:
                CameraPathControlPoint point = cameraPath[int.Parse(node.GetValue("point>0>_text"))];
                AddPoint(newCameraPathPoint, point);
                break;

            case CameraPathPoint.PositionModes.FixedToPercent:
                string strCustomName = node.GetValue("customName>0>_text");
                switch (strCustomName)
                {
                case "Start Point":
                    _introPoint = newCameraPathPoint;
                    AddPoint(newCameraPathPoint, 0);
                    break;

                case "End Point":
                    _outroPoint = newCameraPathPoint;
                    AddPoint(newCameraPathPoint, 1);
                    break;

                default:
                    float atPercentage = float.Parse(node.GetValue("_percent>0>_text"));
                    AddPoint(newCameraPathPoint, atPercentage);
                    break;
                }
                break;
            }
            newCameraPathPoint.FromXML(node, cameraPath);
        }
    }