Inheritance: PartModule
        public override void OnStart(PartModule.StartState state)
        {
            base.OnStart(state);

            emptyAnimation = part.FindModelAnimators(animationName)[0];
            anim           = emptyAnimation[animationName];

            //set max and min for wheel height
            var wheelHeightTweakable = (UI_FloatRange)Fields["wheelHeight"].uiControlEditor;

            wheelHeightTweakable.maxValue = maxHeight;
            wheelHeightTweakable.minValue = minHeight;

            //set max wheelAngle tweakable
            var wheelAngleTweakable = (UI_FloatRange)Fields["wheelAngle"].uiControlEditor;

            wheelAngleTweakable.maxValue = maxWheelAngle;
            wheelAngleTweakable.minValue = 0;

            //set min/max leg tilt tweakable
            var tiltAngleTweakable = (UI_FloatRange)Fields["legAngle"].uiControlEditor;

            tiltAngleTweakable.maxValue = maxTilt;
            tiltAngleTweakable.minValue = minTilt;

            //set max brakeTorque tweakable
            var brakeTorqueTweakable = (UI_FloatRange)Fields["brakeTorque"].uiControlEditor;

            brakeTorqueTweakable.maxValue = maxBrakeTorque;



            //tiltTransforms
            tiltTransform              = part.FindModelTransform(tiltTransformName);
            tiltTargetTransform        = part.FindModelTransform(tiltTargetTransformName);
            tiltRetractTargetTransform = part.FindModelTransform(tiltRetractTargetTransformName);

            //deployTransforms
            deployTransform        = part.FindModelTransform(deployTransformName);
            deployTargetTransform  = part.FindModelTransform(deployTargetTransformName);
            retractTargetTransform = part.FindModelTransform(retractTargetTransformName);

            //wheelTransforms
            wheelHingeTransform           = part.FindModelTransform(wheelHingeTransformName);
            retractedWheelTargetTransform = part.FindModelTransform(retractedWheelTargetTransformName);
            deployedWheelTargetTransform  = part.FindModelTransform(deployedWheelTargetTransformName);

            wheelColliderTarget          = part.FindModelTransform(wheelColliderTargetName);
            wheelColliderHolderTransform = part.FindModelTransform("wheelColliderHolder");

            wheelAlignmentTransform = part.FindModelTransform(wheelAlignmentTransformName);

            if (canSteer)
            {
                steeringTransform = part.FindModelTransform(steeringTransformName);
            }

            initialHeight = Vector3.Distance(deployedWheelTargetTransform.localPosition, retractedWheelTargetTransform.localPosition);

            SetUpDoors();

            if (animSpeedP > 0)
            {
                animNormTimeP = 1;
            }
            else if (animSpeedP < 0)
            {
                animNormTimeP = 0;
            }


            anim.normalizedTime = animNormTimeP;

            float animNormTime = 1 - animNormTimeP;

            animNormTime = Mathf.Clamp01(animNormTime);

            if (animNormTime >= 1)
            {
                CurrentState = GearStates.Deployed;
            }
            else if (animNormTime <= 0)
            {
                CurrentState = GearStates.Retracted;
            }
            else if (anim.speed < 0)
            {
                CurrentState = GearStates.Deploying;
            }
            else
            {
                CurrentState = GearStates.Retracting;
            }

            if (posAndRotSaved)
            {
                LoadPosAndRot();
            }

            if (CurrentState == GearStates.Deployed || CurrentState == GearStates.Deploying)
            {
                wheelHingeTransform.localPosition = deployedWheelTargetTransform.localPosition;
                wheelHingeTransform.localRotation = deployedWheelTargetTransform.localRotation;
                tiltTransform.localRotation       = tiltTargetTransform.localRotation;
                deployTransform.localRotation     = deployTargetTransform.localRotation;
            }
            else
            {
                wheelHingeTransform.localPosition = retractedWheelTargetTransform.localPosition;
                wheelHingeTransform.localRotation = retractedWheelTargetTransform.localRotation;
                tiltTransform.localRotation       = tiltRetractTargetTransform.localRotation;
                deployTransform.localRotation     = retractTargetTransform.localRotation;
            }

            part.OnEditorAttach += new Callback(OnEditorAttach);


            //fs wheel overrides
            fsWheel             = part.FindModuleImplementing <FSBDwheel>();
            fsWheel.brakeTorque = brakeTorque;


            //scale
            transform.localScale = algScale * Vector3.one;

            if (part.FindModelTransform(boundsCollider) != null)
            {
                Destroy(part.FindModelTransform(boundsCollider).gameObject);
            }

            if (!HighLogic.LoadedSceneIsEditor)
            {
                showSettings = false;
            }
            RefreshTweakables();

            wheelColliders = part.FindModelComponents <WheelCollider>();
        }
        public override void OnStart(PartModule.StartState state)
        {
            base.OnStart(state);

            emptyAnimation = part.FindModelAnimators(animationName)[0];
            anim = emptyAnimation[animationName];

            //set max and min for wheel height
            var wheelHeightTweakable = (UI_FloatRange) Fields["wheelHeight"].uiControlEditor;
            wheelHeightTweakable.maxValue = maxHeight;
            wheelHeightTweakable.minValue = minHeight;

            //set max wheelAngle tweakable
            var wheelAngleTweakable = (UI_FloatRange) Fields["wheelAngle"].uiControlEditor;
            wheelAngleTweakable.maxValue = maxWheelAngle;
            wheelAngleTweakable.minValue = 0;

            //set min/max leg tilt tweakable
            var tiltAngleTweakable = (UI_FloatRange) Fields["legAngle"].uiControlEditor;
            tiltAngleTweakable.maxValue = maxTilt;
            tiltAngleTweakable.minValue = minTilt;

            //set max brakeTorque tweakable
            var brakeTorqueTweakable = (UI_FloatRange)Fields["brakeTorque"].uiControlEditor;
            brakeTorqueTweakable.maxValue = maxBrakeTorque;

            //tiltTransforms
            tiltTransform = part.FindModelTransform(tiltTransformName);
            tiltTargetTransform = part.FindModelTransform(tiltTargetTransformName);
            tiltRetractTargetTransform = part.FindModelTransform(tiltRetractTargetTransformName);

            //deployTransforms
            deployTransform = part.FindModelTransform(deployTransformName);
            deployTargetTransform = part.FindModelTransform (deployTargetTransformName);
            retractTargetTransform = part.FindModelTransform(retractTargetTransformName);

            //wheelTransforms
            wheelHingeTransform = part.FindModelTransform (wheelHingeTransformName);
            retractedWheelTargetTransform = part.FindModelTransform (retractedWheelTargetTransformName);
            deployedWheelTargetTransform = part.FindModelTransform (deployedWheelTargetTransformName);

            wheelColliderTarget = part.FindModelTransform(wheelColliderTargetName);
            wheelColliderHolderTransform = part.FindModelTransform("wheelColliderHolder");

            wheelAlignmentTransform = part.FindModelTransform(wheelAlignmentTransformName);

            if(canSteer)
            {
                steeringTransform = part.FindModelTransform (steeringTransformName);
            }

            initialHeight = Vector3.Distance(deployedWheelTargetTransform.localPosition, retractedWheelTargetTransform.localPosition);

            SetUpDoors();

            if(animSpeedP > 0)
            {
                animNormTimeP = 1;
            }
            else if(animSpeedP < 0)
            {
                animNormTimeP = 0;
            }

            anim.normalizedTime = animNormTimeP;

            float animNormTime = 1-animNormTimeP;
            animNormTime = Mathf.Clamp01(animNormTime);

            if(animNormTime >= 1)
            {
                CurrentState = GearStates.Deployed;
            }
            else if(animNormTime <= 0)
            {
                CurrentState = GearStates.Retracted;
            }
            else if(anim.speed < 0)
            {
                CurrentState = GearStates.Deploying;
            }
            else
            {
                CurrentState = GearStates.Retracting;
            }

            if(posAndRotSaved) LoadPosAndRot();

            if(CurrentState == GearStates.Deployed || CurrentState == GearStates.Deploying)
            {
                wheelHingeTransform.localPosition = deployedWheelTargetTransform.localPosition;
                wheelHingeTransform.localRotation = deployedWheelTargetTransform.localRotation;
                tiltTransform.localRotation = tiltTargetTransform.localRotation;
                deployTransform.localRotation = deployTargetTransform.localRotation;
            }
            else
            {
                wheelHingeTransform.localPosition = retractedWheelTargetTransform.localPosition;
                wheelHingeTransform.localRotation = retractedWheelTargetTransform.localRotation;
                tiltTransform.localRotation = tiltRetractTargetTransform.localRotation;
                deployTransform.localRotation = retractTargetTransform.localRotation;
            }

            part.OnEditorAttach += new Callback(OnEditorAttach);

            //fs wheel overrides
            fsWheel = part.FindModuleImplementing<FSBDwheel>();
            fsWheel.brakeTorque = brakeTorque;

            //scale
            transform.localScale = algScale * Vector3.one;

            if(part.FindModelTransform(boundsCollider)!=null)
            {
                DestroyImmediate(part.FindModelTransform(boundsCollider).gameObject);
            }

            if(!HighLogic.LoadedSceneIsEditor)
            {
                showSettings = false;
            }
            RefreshTweakables();

            wheelColliders = part.FindModelComponents<WheelCollider>();

            previousState = CurrentState;
            part.SendMessage("GeometryPartModuleRebuildMeshData");

            if(state != StartState.Editor)
            {
                part.mass = baseMass * Mathf.Pow(algScale, 3);
            }
        }