Profile image

Funky Trees!

Dev WNP78  4.5 years ago

Andrew decided to call the new inputs system I cooked up "funky trees". Somehow escapes me why, but I'll roll with it. Here I'll describe what you can do in the land of funk.


Essentially what this means is that you can enter any mathematical expression (following this syntax) into an input field and it will be evaluated every frame. You can pull in data from a variety of sources, and process these how you like.

Inputs

What you can now do is use the normal input axes:

  • Pitch
  • Roll
  • Yaw
  • Throttle
  • Brake
  • Trim
  • VTOL
  • LandingGear
  • FireGuns
  • FireWeapons
  • LaunchCountermeasures
  • Activate1
  • Activate2
  • Activate3
  • Activate4
  • Activate5
  • Activate6
  • Activate7
  • Activate8

Flight data

In addition to this you can access some information from the aircraft:

  • Altitude - Aircraft's altitude in metres
  • AltitudeAgl - Aircraft's altitude above ground level in metres
  • GS - The speed relative to the ground (m/s)
  • IAS - The speed relative to the air, adjusted for the desnity of the air (m/s)
  • TAS - The speed relative to the air (m/s)
  • Fuel - The amount of fuel remaining as a proportion of capacity (0 to 1)
  • AngleOfAttack - The angle of attack (angle airflow vertically meets the boresight) in degrees
  • AngleOfSlip - The horizontal equivalent of angle of attack (degrees)
  • PitchAngle - The pitch of the aircraft (degrees)
  • RollAngle - The roll of the aircraft (degrees)
  • Heading - The heading of the aircraft (degrees)
  • Time - The time since the level loaded (seconds)
  • GForce - The acceleration and gravitational "force" acting on the cockpit in G. I know it's not a force. Shut up.
  • VerticalG - The signed vertical component of the "G Force".
  • SelectedWeaponName - The name of the selected weapon
  • Latitude - The North/South position of the craft (metres)
  • Longitude - The East/West position of the craft (metres)
  • PitchRate - The pitch angular velocity in degrees/second
  • YawRate - The yaw angular velocity in degrees/second
  • RollRate - The roll angular velocity in degrees/second (these 3 inputs are better than using rate(PitchAngle) etc, because they account for wrapping around the angle, as well as being in local space: rate(Heading) is different to YawRate)
  • TargetSelected - true if a target is selected, else false.
  • TargetHeading - the heading to the selected target in degrees.
  • TargetElevation - the vertical angle to the selected target in degrees.
  • TargetDistance - the distance to the selected target in metres.

Constants

Values that are always the same:

  • pi the mathematical constant pi (half a tau, if you will).
  • e the mathematical constant e.
  • true a true boolean value
  • false a false boolean value

Operators

These are useful for... maths or something.

  • Mathematical:

    • +, - addition and subtraction (- can be used as a unary operator, for instance -Pitch

    • *, / multiplication and division

  • Comparison:

    • <, > less than, greater than

    • <=, >= less than or equal to, greater than or equal to

    • ==, != equal to, not equal to

  • Boolean:

    • &, AND

    • |, OR

    • !, NOT (this is a unary operator)

    • Ternary operator: condition ? value_if_true : value_if_false - this chooses between two values based on the condition.

Functions

Finally, there's some helpful functions to do maths for you!

  • abs(x) - The absolute (positive) value of x.
  • ammo(name) - The amount of ammo of the weapon with name. Remember to put the name in " quotes.
  • ceil(x) - x rounded up to an integer.
  • clamp(x, min, max) - x clamped between min and max.
  • clamp01(x) - Equivalent to clamp(x, 0, 1).
  • deltaangle(a, b) - The shortest angle delta between angles a and b in degrees.
  • exp(x) - Returns e raised to the power of x.
  • floor(x) - x rounded down to an integer.
  • inverselerp(a, b, x) - Calculates the linear parameter t that produces the interpolant value within the range [a, b].
  • lerp(a, b, t) - Linearly interpolates between a and b, by a proportion of t.
  • lerpangle(a, b, t) - Similar to lerp, but interpolates correctly when values pass 360 degrees.
  • lerpunclamped(a, b, t) - Similar to lerp, but doesn't clamp the value between a and b.
  • log(x, p) - The logarithm of x in base p.
  • log10(x) - Equivalent to log(x, 10).
  • pingpong(x, l) - "Ping-pongs" the value x so it is never larger than l and never less than 0.
  • max(a, b) - The largest value between a and b.
  • min(a, b) - The smallest value between a and b.
  • pow(x, p) - x raised to the power of p.
  • repeat(x, l) - Loops the value x so it is never larger than l and never less than 0.
  • round(x) - Rounds x to the nearest integer.
  • sign(x) - The sign of x (1 if x positive, -1 if x negative)
  • smoothstep(a, b, t) - Similar to lerp, but with smoothing at the ends.
  • sqrt(x) - The square root of x.
  • sin(x) - The sine of x (degrees)
  • cos(x) - The cosine of x (degrees)
  • tan(x) - The tangent of x (degrees)
  • asin(x) - The arc-sine of x (degrees)
  • acos(x) - The arc-cosine of x (degrees)
  • atan(x) - The arc-tangent of x (degrees)
  • atan2(y, x) - The angle in degrees whose tangent is y/x. In other words the angle (argument) of a vector

Memory Functions

These are functions that are special because their output not only depends on inputs but their previous state.
- sum(x) - Returns the sum of all it's inputs over time (the integral of x)
- rate(x) - Returns the rate of change of x relative to its value last frame (the derivative of x)
- smooth(x, t) - When loaded, it's output is set to x. As x changes, the output tries to move to x, but at a rate of no greater than t. This is vaguely equivalent to changing the speed of a rotator.
- PID(target, current, p, i , d) - Evaluates a PID controller with the setpoint of "target", process variable "current" and the gains p, i, and d. Equivalent to: p * (target - current) + i * sum(target - current) - d * rate(current)

With all of these at your disposal, I'm excited to see what kind of contraptions you guys come up with, and I'm also open to some suggestions as to some things that could be added.

-WNP78, your funk master.

  • Log in to leave a comment
  • Profile image

    @UssrLENINGRAD me sirvió demasiado, muchas gracias... Si tienes otros ejemplos te agradecería si los puedes pasar

    yesterday
  • Profile image

    @SLSD11ph nah

    10 days ago
  • Profile image

    If you want to input funky,just read the body👍

    10 days ago
  • Profile image
    Dev WNP78

    @Softballyesssss not sure what you mean by the old way, there should be backwards compatibility for all crafts, so you're free to just.. do things the however the "old way" is and it should still work.

    11 days ago
  • Profile image

    Can you revert it to the old way?

    11 days ago
  • Profile image

    Paste this:
    clamp01(AltitudeAgl<25)*sin(Time*250)
    .
    .
    This blinks under 25m (Ground level and not sea level).
    Change the altitude constant (25) to any alt u need.

    +1 11 days ago
  • Profile image

    @Legendarynoob123 hie again ,.
    I give you code you can paste directly for simple purpose.

    11 days ago
  • Profile image

    @UssrLENINGRAD hey, ummm it dose not seem to be working

    12 days ago
  • Profile image

    @UssrLENINGRAD Thank you for your help, I can now continue my plane with some safety and comfort things for the “virtual passengers”

    12 days ago
  • Profile image

    @Legendarynoob123
    AltitudeAgl<[whatever altitude]?sin(Time*250):0
    You can change the time multiplication to whatever number u like.
    More the number Faster blink , lower number slower blink.

    +2 12 days ago
  • Profile image

    And how to make a delay code, thank you.

    +2 15 days ago
  • Profile image

    Has anyone idea how to make a low altitude alert for the beacon light? I am just new to the XML code or what this is called.

    15 days ago
  • Profile image
    1,577 Eeoo

    @Iamsam if its a build variable just click the button beside finetuner, if its a part variable click the part, open rotate menu then click variable output

    one month ago
  • Profile image
    375 Iamsam

    @Eeoo is there a way to find the viable?

    one month ago
  • Profile image
    1,577 Eeoo

    @Iamsam that means there's a variable in the build or one of the part if there's not it means something is incorrect in the code

    one month ago
  • Profile image
    375 Iamsam

    When I copy funky trees code from a rotator on someone else's aircraft and paste in into the input on my aircraft, the rotator on my aircraft won't move at all. Any suggestions?

    one month ago
  • Profile image
    375 Iamsam

    @Eeoo the only flight computer is the primary one. I'm trying to take the stabs off the original jet and make them a sub assembly. Does that still apply?

    one month ago
  • Profile image
    1,577 Eeoo

    @Iamsam is there any flight computer/cockpit? if yes you must drag it separately and make it the EXACT relative position of the turret/rotator

    one month ago
  • Profile image
    375 Iamsam

    I'm trying to make a funky tree rotator from somebody else's build a sub assembly, but when I drag out the rotator onto my build, it doesn't work at all. Anybody have any suggestions?

    one month ago
  • Profile image
    1,974 SLSD11ph

    Hi I'm gonna ask some question
    It is possible to make auto dump flares??(Like on F-111 in War thunder)With Funky tree??

    +3 one month ago
  • Profile image

    @Stephen22 if you mean a ammo cap just set burst count to 1000 then set "TimeBetweenBursts" to 9E+37. If you mean 1000 rounds a second then put that in there if you mean 1000 per minute divide 1000 by 60 then put that number hope this helped good luck

    one month ago
  • Profile image

    @Stephen22 if you mean a ammo cap just set burst count to 1000 then set "TimeBetweenBursts" to 9E+37. If you mean 1000 rounds a second then put that in there if you mean 1000 per minute divide 1000 by 60 then put that number hope this helped good luck

    one month ago
  • Profile image
    1,165 Stephen22

    Can someone give me the thing to be able to have it so my machine gun has 1000 rounds. It's the machine gun so it doesn't have a name

    one month ago
  • Profile image

    @Kerbango Look at the code for the in game hornet aircraft you should be able to steal that.

    one month ago
  • Profile image

    How do I get a Hinge rotator to go back to the 0 position without having to decrease throttle? And then it goes back to the max position at a constantly repetitively (For an ornithopter)

    one month ago
  • Log in to see more comments