Esempio n. 1
0
        private void locateAnimation()
        {
            Animation[]      animsBase = part.gameObject.GetComponentsInChildren <Animation>(true);
            List <Animation> al        = new List <Animation>();

            foreach (Animation a in animsBase)
            {
                AnimationClip c = a.GetClip(animationName);
                if (c != null)
                {
                    al.Add(a);
                }
            }
            anims = al.ToArray();
            if (anims == null || anims.Length == 0)
            {
                ENUtils.recursePrintComponents(part.gameObject, "");
                throw new NullReferenceException("Cannot instantiate ENAnimateControlled with no animatons; could not locate animations for: " + animationName);
            }
            foreach (Animation a in anims)
            {
                a[animationName].layer    = animationLayer;
                a[animationName].wrapMode = WrapMode.Once;
                a.wrapMode = WrapMode.Once;
            }
        }
Esempio n. 2
0
        public override void OnStart(PartModule.StartState state)
        {
            base.OnStart(state);

            #region animationSetup
            animationController = ENAnimateControlled.locateAnimationController(part, animationID, onAnimationStatusChanged);
            #endregion

            #region gui setup
            Events["retractEvent"].guiName  = retractGuiName;
            Events["deployEvent"].guiName   = deployGuiName;
            Events["repairEvent"].guiName   = repairGuiName;
            Actions["toggleAction"].guiName = actionGroupGuiName;

            Events["retractEvent"].active = legState == LegState.DEPLOYED;
            Events["deployEvent"].active  = legState == LegState.RETRACTED;
            Events["repairEvent"].active  = legState == LegState.BROKEN;
            #endregion

            #region colliderSetup
            if (HighLogic.LoadedSceneIsFlight)
            {
                //setup suspension upper limits, defaults to config value for suspension travel
                if (suspensionUpperLimit == -1)
                {
                    suspensionUpperLimit = suspensionTravel;
                }

                String[] wcNameArray   = wheelColliderNames.Split(',');
                String[] susNameArray  = suspensionTransformNames.Split(',');
                String[] footNameArray = footColliderNames.Split(',');
                int      length        = wcNameArray.Length < susNameArray.Length ? wcNameArray.Length : susNameArray.Length;

                LandingLegData legData;
                Transform      suspensionTransform;
                Transform      wheelColliderTransform;
                Transform      footColliderTransform;
                WheelCollider  wheelCollider;
                float          wcRadius = 0, wcTravel = 0, wcTarget = 0, wcSpring = 0, wcDamper = 0;

                for (int i = 0; i < length; i++)
                {
                    suspensionTransform    = part.FindModelTransform(susNameArray[i].Trim());
                    wheelColliderTransform = part.FindModelTransform(wcNameArray[i].Trim());
                    if (suspensionTransform == null || wheelColliderTransform == null)
                    {
                        print("error locating transforms for names: " + susNameArray[i] + ", " + wcNameArray[i]);
                        print("found objects: " + suspensionTransform + ", " + wheelColliderTransform);
                        continue;
                    }
                    wheelCollider = wheelColliderTransform.GetComponent <WheelCollider>();
                    if (wheelCollider == null)
                    {
                        print("Wheel collider transform does not contain a valid wheel collider!  name: " + wcNameArray[i]);
                        ENUtils.recursePrintComponents(wheelColliderTransform.gameObject, "");
                        continue;
                    }
                    if (i < footNameArray.Length)
                    {
                        footColliderTransform = part.FindModelTransform(footNameArray[i].Trim());
                    }
                    else
                    {
                        footColliderTransform = null;
                    }
                    legData = new LandingLegData();
                    legData.suspensionTransform   = suspensionTransform;
                    legData.wheelCollider         = wheelCollider;
                    legData.footColliderTransform = footColliderTransform;
                    this.legData.Add(legData);

                    //use default values if config values were not written
                    wcRadius = wheelColliderRadius == -1 ? wheelCollider.radius : wheelColliderRadius;
                    wcTravel = suspensionTravel == -1 ? wheelCollider.suspensionDistance : suspensionTravel;
                    wcTarget = suspensionTarget == -1 ? wheelCollider.suspensionSpring.targetPosition : suspensionTarget;
                    wcSpring = suspensionSpring == -1 ? wheelCollider.suspensionSpring.spring : suspensionSpring;
                    wcDamper = suspensionDamper == -1 ? wheelCollider.suspensionSpring.damper : suspensionDamper;

                    //setup wheel collider radius and suspension distance in case of overrides in config
                    wheelCollider.radius             = wcRadius;
                    wheelCollider.suspensionDistance = wcTravel;
                    wheelCollider.brakeTorque        = 1000f;

                    //setup a new JointSpring for the wheel to use, overriding values from config if needed
                    JointSpring spring = new JointSpring();
                    spring.spring                  = wcSpring;
                    spring.damper                  = wcDamper;
                    spring.targetPosition          = wcTarget;
                    wheelCollider.suspensionSpring = spring;//assign the new spring joint to the wheel collider
                }
            }

            #endregion

            if (controlOn)
            {
                enableModule();
            }
            else
            {
                disableModule();
            }
            setLegState(legState);
            if (!moduleControlEnabled)
            {
                onControlDisabled();
            }
        }