예제 #1
0
    public void cycleForceAxis()
    {
        switch (forceAxis)
        {
        case "left":
            forceAxis = "right";
            break;

        case "right":
            forceAxis = "up";
            break;

        case "up":
            forceAxis = "down";
            break;

        case "down":
            forceAxis = "forward";
            break;

        case "forward":
            forceAxis = "back";
            break;

        case "back":
            forceAxis = "left";
            break;
        }

        Log.info("FSrudder forceAxis: {0}", forceAxis);
    }
예제 #2
0
    public override void OnStart(PartModule.StartState state)
    {
        FARActive = AssemblyLoader.loadedAssemblies.Any(a => a.assembly.GetName().Name.Equals("FerramAerospaceResearch", StringComparison.InvariantCultureIgnoreCase));
        // This line breaks the plugin :(
        if (FARActive)
        {
            this.enabled = false;
        }

        if (liftTransformName == string.Empty)
        {
            liftTransform = part.transform;
        }
        else
        {
            liftTransform = part.FindModelTransform(liftTransformName);
        }

        if (liftTransform == null)
        {
            Log.info("FSliftSurface: Can't find lift transform {0}", liftTransformName);
        }
        //if (moduleID == 0)
        //{
        liftSurfaces = part.GetComponents <FSliftSurface>().ToList();
        //liftSurfaces.Add(this); // uhm, what?
        //}
    }
예제 #3
0
    public void ApplyDamage(float amount) // used by InfiniteDice's damage code. 0f is broken, 1f is OK
    {
        partHealth = amount;
        Log.info("=== FSwing damage set to {0} ===", amount);
        ctrlSurfaceRange = originalCtrlSurfaceRange * amount;
        Log.info("=== FSwing range now {0} ===", ctrlSurfaceRange);

        if (amount >= 1f)
        {
            status = "Undamaged";
        }
        else if (amount > 0.5f)
        {
            status = "Damaged";
        }
        else
        {
            status = "Broken";
            jammed = true;
        }

        if (showTweakables)
        {
            Log.info("FSwing - setting fields to {0}", jammed);
            Fields["status"].guiActive        = (amount < 1f);
            Fields["pitchResponse"].guiActive = !jammed;
            Fields["rollResponse"].guiActive  = !jammed;
            Fields["yawResponse"].guiActive   = !jammed;
            Fields["flapResponse"].guiActive  = !jammed;
        }
    }
예제 #4
0
 public void increaseRange()
 {
     range += 1f;
     if (range > 60f)
     {
         range = 60f;
     }
     Log.info("FSrudder range: {0}", range);
 }
예제 #5
0
 public void decreaseRange()
 {
     range -= 1f;
     if (range < 0f)
     {
         range = 0f;
     }
     Log.info("FSrudder range: {0}", range);
 }
예제 #6
0
 public void decreasePower()
 {
     power -= 0.01f;
     if (power < 0f)
     {
         power = 0f;
     }
     Log.info("FSrudder power: {0}", power);
 }
예제 #7
0
 public void toggleRequiresWaterContact()
 {
     if (requiresWaterContact == 0)
     {
         requiresWaterContact = 1;
     }
     else
     {
         requiresWaterContact = 0;
     }
     Log.info("FSrudder req. water contact: {0}", requiresWaterContact);
 }
예제 #8
0
 public void addWheel(string wheelName)
 {
     if (wheelName != string.Empty)
     {
         Transform newWheel = base.internalProp.FindModelTransform(wheelName);
         if (newWheel != null)
         {
             analogCounter.wheels.Add(newWheel);
         }
         else
         {
             Log.info("FSaltimeterCounter: Could not find dial wheel {0}", wheelName);
         }
     }
 }
예제 #9
0
        public static List <int> parseIntegers(string stringOfInts)
        {
            List <int> newIntList = new List <int>();

            string[] valueArray = stringOfInts.Split(';');
            for (int i = 0; i < valueArray.Length; i++)
            {
                int newValue = 0;
                if (int.TryParse(valueArray[i], out newValue))
                {
                    newIntList.Add(newValue);
                }
                else
                {
                    Log.info("invalid integer: {0}", valueArray[i]);
                }
            }
            return(newIntList);
        }
예제 #10
0
    void Start()
    {
        refTransform          = new GameObject().transform;
        refTransform.parent   = part.transform;
        refTransform.rotation = Quaternion.LookRotation(vessel.ReferenceTransform.up, -vessel.ReferenceTransform.forward);
        shipHeading           = new Firespitter.ShipHeading(refTransform);

        try // overdoing the error protection a bit just because I can't be sure the renderer will be valid
        {
            Transform innerDiscTransform = base.internalProp.FindModelTransform(innerDiscName);
            if (innerDiscTransform != null)
            {
                innerDisc = innerDiscTransform.gameObject;
                discMat   = innerDisc.GetComponent <Renderer>().material;
            }
        }
        catch
        {
            Log.err("FSartificialHorizon: Can't find object, or its material: {0}", innerDiscName);
        }

        if (discMat == null)
        {
            useOffset = false;
            Log.info("FSartificialHorizon: Couldn't find disc material");
        }

        if (useOffset)
        {
            testButton         = base.internalProp.FindModelTransform(testButtonName).gameObject;
            minusButton        = base.internalProp.FindModelTransform(minusButtonName).gameObject;
            plusButton         = base.internalProp.FindModelTransform(plusButtonName).gameObject;
            testButtonHandler  = testButton.AddComponent <FSgenericButtonHandler>();
            minusButtonHandler = minusButton.AddComponent <FSgenericButtonHandler>();
            plusButtonHandler  = plusButton.AddComponent <FSgenericButtonHandler>();
            testButtonHandler.mouseDownFunction  = testCageToggle;
            minusButtonHandler.mouseDownFunction = cageMinus;
            plusButtonHandler.mouseDownFunction  = cagePlus;
        }

        needle = base.internalProp.FindModelTransform(outerRingName);
    }
예제 #11
0
    public override void OnStart(PartModule.StartState state)
    {
        try
        {
            deploymentStateEnum = (DeploymentStates)Enum.Parse(typeof(DeploymentStates), deploymentState);
        }
        catch
        {
            Log.dbg("FSwheel: Could not set deployment state {0}", deploymentState);
        }

        #region animation

        anim = part.FindModelAnimators(animationName).FirstOrDefault();
        if (anim != null)
        {
            hasAnimation = true;
            anim[animationName].layer = animationLayer;
            float startAnimTime = 0f;
            if (deploymentStateEnum == DeploymentStates.Retracted)
            {
                startAnimTime = 1f;
                animSpeed     = 1f * customAnimationSpeed;
            }
            else
            {
                animSpeed = -1f * customAnimationSpeed;
            }
            anim[animationName].normalizedTime = startAnimTime;
            anim[animationName].speed          = animSpeed;
            anim.Play(animationName);
        }
        #endregion

        #region In flight
        if (HighLogic.LoadedSceneIsFlight)
        {
            #region create wheel setup
            List <WheelCollider> colliderList   = new List <WheelCollider>();
            List <Transform>     wheelMeshList  = new List <Transform>();
            List <Transform>     suspensionList = new List <Transform>();

            for (int i = 0; i < numberOfWheels; i++)
            {
                string suffix = (i + 1).ToString(); // the names used are e.g. "Wheel", "Wheel2", "Wheel3", to remain compatible with stock wheels
                if (i == 0)
                {
                    suffix = "";
                }
                Transform colliderTransform = part.FindModelTransform(wheelColliderName + suffix);
                if (colliderTransform != null)
                {
                    WheelCollider collider = colliderTransform.GetComponent <WheelCollider>();
                    if (collider != null)
                    {
                        colliderList.Add(collider);

                        Transform wheelMeshTransform = part.FindModelTransform(wheelMeshName + suffix);
                        if (wheelMeshTransform != null)
                        {
                            wheelMeshList.Add(wheelMeshTransform);
                        }
                        else
                        {
                            Log.info("FSwheel: missing wheel mesh {0}{1}", wheelMeshName, suffix);
                        }
                        Transform suspensionTransform = part.FindModelTransform(suspensionParentName + suffix);
                        if (suspensionTransform != null)
                        {
                            suspensionList.Add(suspensionTransform);
                        }
                        else
                        {
                            Log.info("FSwheel: missing suspensionParent {0}{1}", suspensionParentName, suffix);
                        }
                    }
                }
                else
                {
                    Log.info("FSwheel: missing wheel collider {0}{1}", wheelColliderName, suffix);
                }
            }

            wheelList.Create(colliderList, wheelMeshList, suspensionList);
            if (wheelList != null)
            {
                if (!wheelList.enabled)
                {
                    wheelList.enabled = true;
                }
            }

            // set the motor direction based on the first found wheelColliders orientation
            Log.dbg("FSwheel: wheelist count is {0}", wheelList.wheels.Count);
            if (wheelList.wheels.Count > 0)
            {
                Log.info("FSwheel: reversemotorset: {0}", reverseMotorSet);
                if (!reverseMotorSet)                                                                                           //run only the first time the craft is loaded
                {
                    float dot = Vector3.Dot(wheelList.wheels[0].wheelCollider.transform.forward, vessel.ReferenceTransform.up); // up is forward
                    if (dot < 0)                                                                                                // below 0 means the engine is on the left side of the craft
                    {
                        reverseMotor = true;
                        Log.dbg("FSwheel: Reversing motor, dot: {0}", dot);
                    }
                    else
                    {
                        reverseMotor = false;
                        Log.dbg("FSwheel: Motor reversing skipped, dot: {0}", dot);
                    }
                    if (motorStartsReversed)
                    {
                        reverseMotor = !reverseMotor;
                    }
                    reverseMotorSet = true;
                }
            }

            if (disableColliderWhenRetracted)
            {
                if (deploymentStateEnum == DeploymentStates.Retracted)
                {
                    wheelList.enabled = false;
                }
            }

            //friction override
            if (overrideModelFrictionValues)
            {
                wheelList.forwardStiffness       = forwardsStiffness;
                wheelList.forwardsAsymptoteSlip  = forwardsAsymptoteSlip;
                wheelList.forwardsAsymptoteValue = forwardsAsymptoteValue;
                wheelList.forwardsExtremumSlip   = forwardsExtremumSlip;
                wheelList.forwardsExtremumValue  = forwardsExtremumValue;
                wheelList.sidewaysStiffness      = sidewaysStiffness;
                wheelList.sidewaysAsymptoteSlip  = sidewaysAsymptoteSlip;
                wheelList.sidewaysAsymptoteValue = sidewaysAsymptoteValue;
                wheelList.sidewaysExtremumSlip   = sidewaysExtremumSlip;
                wheelList.sidewaysExtremumValue  = sidewaysExtremumValue;
                wheelList.updateWheelFriction();
            }

            //optionally set collider and spring values
            if ((suspensionSpring >= 0f && suspensionDamper >= 0f && suspensionTargetPosition >= 0f) || overrideModelSpringValues)
            {
                wheelList.updateSpring(suspensionSpring, suspensionDamper, suspensionTargetPosition);
            }
            if (wheelColliderRadius >= 0f)
            {
                wheelList.radius = wheelColliderRadius;
            }
            else
            {
                wheelColliderRadius = wheelList.radius;
            }
            if (wheelColliderMass >= 0f)
            {
                wheelList.mass = wheelColliderMass;
            }
            if (wheelColliderSuspensionDistance >= 0f || overrideSuspensionDistance)
            {
                wheelList.suspensionDistance = wheelColliderSuspensionDistance;
            }
            else
            {
                wheelColliderSuspensionDistance = wheelList.suspensionDistance;
            }

            #endregion

            #region GUI popup

            popup                           = new FSGUIPopup(part, "FSwheel", moduleID, FSGUIwindowID.wheel, new Rect(500f, 300f, 250f, 100f), "Wheel settings", new PopupElement("Suspension Settings:"));
            popup.useInFlight               = true;
            wheelRadiusElement              = new PopupElement("Radius", wheelColliderRadius.ToString());
            suspensionDistanceElement       = new PopupElement("Distance", wheelColliderSuspensionDistance.ToString());
            suspensionSpringElement         = new PopupElement("Spring", suspensionSpring.ToString());
            suspensionDamperElement         = new PopupElement("Damper", suspensionDamper.ToString());
            suspensionTargetPositionElement = new PopupElement("Target pos", suspensionTargetPosition.ToString());
            popup.sections[0].elements.Add(wheelRadiusElement);
            popup.sections[0].elements.Add(suspensionDistanceElement);
            popup.sections[0].elements.Add(suspensionSpringElement);
            popup.sections[0].elements.Add(suspensionDamperElement);
            popup.sections[0].elements.Add(suspensionTargetPositionElement);

            suspensionUpdateElement = new PopupElement(new PopupButton("Update", 0f, popupUpdateSuspension));
            popup.sections[0].elements.Add(suspensionUpdateElement);

            #endregion

            if (brakeEmissiveObjectName != string.Empty)
            {
                brakeEmissiveObject = part.FindModelTransform(brakeEmissiveObjectName);
            }
            setBrakeLight(brakesEngaged);

            #region set up fx
            if (useCustomParticleFX)
            {
                smokeFXtexture = GameDatabase.Instance.GetTexture(smokeFXtextureName, false);
                if (smokeFXtexture == null)
                {
                    useCustomParticleFX = false;
                }
                else
                {
                    for (int i = 0; i < wheelList.wheels.Count; i++)
                    {
                        wheelList.wheels[i].smokeFX = new Firespitter.FSparticleFX(wheelList.wheels[i].fxLocation, smokeFXtexture);
                        wheelList.wheels[i].smokeFX.AnimatorColor0 = new Color(1.0f, 1.0f, 1.0f, 0.8f);
                        wheelList.wheels[i].smokeFX.AnimatorColor1 = new Color(1.0f, 1.0f, 1.0f, 0.5f);
                        wheelList.wheels[i].smokeFX.AnimatorColor2 = new Color(1.0f, 1.0f, 1.0f, 0.2f);
                        wheelList.wheels[i].smokeFX.AnimatorColor3 = new Color(1.0f, 1.0f, 1.0f, 0.1f);
                        wheelList.wheels[i].smokeFX.AnimatorColor4 = new Color(1.0f, 1.0f, 1.0f, 0.0f);

                        wheelList.wheels[i].smokeFX.EmitterMinSize     = 0.3f;
                        wheelList.wheels[i].smokeFX.EmitterMaxSize     = 0.5f;
                        wheelList.wheels[i].smokeFX.EmitterMinEnergy   = 0.1f;
                        wheelList.wheels[i].smokeFX.EmitterMaxEnergy   = 0.3f;
                        wheelList.wheels[i].smokeFX.EmitterMinEmission = 0f;
                        wheelList.wheels[i].smokeFX.EmitterMaxEmission = 0f;
                        wheelList.wheels[i].smokeFX.AnimatorSizeGrow   = 0.1f;

                        wheelList.wheels[i].smokeFX.setupFXValues();
                    }
                }
            }

            #endregion
        }

        #endregion

        #region GUI element changes
        Events["RaiseGear"].guiActiveUnfocused = guiActiveUnfocused;
        Events["RaiseGear"].unfocusedRange     = unfocusedRange;

        Events["LowerGear"].guiActiveUnfocused = guiActiveUnfocused;
        Events["LowerGear"].unfocusedRange     = unfocusedRange;

        Events["EnableMotorEvent"].guiActive        = !motorEnabled;
        Events["DisableMotorEvent"].guiActive       = motorEnabled;
        Events["EnableMotorEvent"].guiActiveEditor  = !motorEnabled;
        Events["DisableMotorEvent"].guiActiveEditor = motorEnabled;

        Events["brakesOnEvent"].guiActive        = !brakesEngaged;
        Events["brakesOffEvent"].guiActive       = brakesEngaged;
        Events["brakesOnEvent"].guiActiveEditor  = !brakesEngaged;
        Events["brakesOffEvent"].guiActiveEditor = brakesEngaged;

        Events["EnableReverseMotorEvent"].guiActive        = !reverseMotor;
        Events["DisableReverseMotorEvent"].guiActive       = reverseMotor;
        Events["EnableReverseMotorEvent"].guiActiveEditor  = !reverseMotor;
        Events["DisableReverseMotorEvent"].guiActiveEditor = reverseMotor;

        Events["brakesOnEvent"].guiActiveUnfocused  = guiActiveUnfocused;
        Events["brakesOffEvent"].guiActiveUnfocused = guiActiveUnfocused;

        if (!hasMotor)
        {
            //Events["EnableMotorEvent"].guiActive = false;
            //Events["DisableMotorEvent"].guiActive = false;
            Events["EnableMotorEvent"].active         = false;
            Events["DisableMotorEvent"].active        = false;
            Events["EnableReverseMotorEvent"].active  = false;
            Events["DisableReverseMotorEvent"].active = false;
        }
        if (!hasAnimation)
        {
            Events["RaiseGear"].active = false;
            Events["LowerGear"].active = false;
        }
        if (debugMode)
        {
            Events["increaseFrictionEvent"].guiActive = true;
            Events["decreaseFrictionEvent"].guiActive = true;
            Events["suspensionGUIEvent"].guiActive    = true;
        }

        if (brakesLockedOn)
        {
            Events["brakesOnEvent"].guiActive           = false;
            Events["brakesOffEvent"].guiActive          = false;
            Events["brakesOnEvent"].guiActiveUnfocused  = false;
            Events["brakesOffEvent"].guiActiveUnfocused = false;
        }

        #endregion
    }
    public void toggleEvent()
    {
        Events["toggleEvent"].active = false; //see if this removes the button when clicking
        isAnimating = true;

        //if (startDeployed && reverseAnimation && anim[animationName].normalizedTime == 0f)
        //    anim[animationName].normalizedTime = 0.999f;

        if (reverseAnimation)
        {
            Actions["toggleAction"].guiName = startEventGUIName;
            Events["toggleEvent"].guiName   = startEventGUIName;
            if (toggleActionName != string.Empty)
            {
                Actions["toggleAction"].guiName = toggleActionName;
            }
            // Following two commented out lines (anim[animationName].speed =, and anim.Play) now taken care of in LateUpdate
            //anim[animationName].speed = -1f *  customAnimationSpeed;
            if (anim[animationName].normalizedTime == 0f || anim[animationName].normalizedTime == 1f)
            {
                anim[animationName].normalizedTime = 1f;
            }

            anim.Play(animationName);
            startDeployed = false; // to get the hangar toggle button state right
            if (startRetractEffect != string.Empty)
            {
                part.Effect(startRetractEffect);
                Log.info("start retract effect");
            }
            rampDirection = RampDirection.down;
        }
        else
        {
            Actions["toggleAction"].guiName = endEventGUIName;
            Events["toggleEvent"].guiName   = endEventGUIName;
            if (toggleActionName != string.Empty)
            {
                Actions["toggleAction"].guiName = toggleActionName;
            }
            // Following two commented out lines (anim[animationName].speed =, and anim.Play) now taken care of in LateUpdate
            //anim[animationName].speed = 1f * customAnimationSpeed;
            if (anim[animationName].normalizedTime == 0f || anim[animationName].normalizedTime == 1f)
            {
                anim[animationName].normalizedTime = 0f;
                Log.info("normalizedTime 2 ");
            }

            anim.Play(animationName);
            startDeployed = true; // to get the hangar toggle button state right
            if (startDeployEffect != string.Empty)
            {
                part.Effect(startDeployEffect);
                Log.info("start deploy effect");
            }
            rampDirection = RampDirection.up;
        }

        reverseAnimation = !reverseAnimation;
        oldspeed         = -9999f;

        //if (isOneShot)
        //{
        //    locked = true;
        //    Events["toggleEvent"].active = false;
        //}
    }
예제 #13
0
 public void increasePower()
 {
     power += 0.01f;
     Log.info("FSrudder power: {0}", power);
 }
예제 #14
0
 private void Start()
 {
     Log.info("Version {0}", Version.Text);
 }
 public void refForward(KSPActionParam param)
 {
     Log.info("Setting vessel reference transform");
     vessel.SetReferenceTransform(part);
 }