Profile image

Funky Trees!

Dev WNP78  5.1 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

    Can anyone explain how to make a rotator to move using the activate commands in the input variable?

    +1 13 days ago
  • Profile image

    can someone tell me how to do the leading edge slats

    14 days ago
  • Profile image
    75 NGC543

    Nvm but for infinite ammo for guns are
    ammoCount section
    Just type -1

    19 days ago
  • Profile image

    @NGC543 ???

    19 days ago
  • Profile image
    75 NGC543

    @MobileBuilder21 it has look on Overload

    20 days ago
  • Profile image
    285 RNMD

    @Palash Throttle<=0.9?Throttle:0,If it doesn't work, delete"="

    23 days ago
  • Profile image
    0 Palash

    How to make the engine active at 0-90% throttle and inactive when more than 90%

    +1 25 days ago
  • Profile image
    112 Peterwrpl

    How can you display ias on text in kph?

    26 days ago
  • Profile image

    can you make me allow make a 2nd input systema?

    one month ago
  • Profile image
    30 Kamera

    @BlackBanan наконец-то ру чел) Наведись на камеру, и нажми на кнопки справа, которая выше шестерёнки. Появятся дополнительные кнопки и среди них нажми на самую верхнюю. Тебе откроется менюшка и найди там пункты LookPitch и LookYaw. Дай им название (Пускай будет на LookPitch "LoPi", а на LookYaw "LoYa"). И впиши на ротор команду с названиями и подели число на градусы ротора

    one month ago
  • Profile image
    0 Andros

    @ChaseRacliot Get a rotator with an angle max of 90
    Make it’s input “(TargetHeading-Heading)/90”

    one month ago
  • Profile image

    hello, help me how to make sure that when I press a certain button, my plane does not rise above a certain height

    one month ago
  • Profile image
    15.5k ChaseRacliot

    Is there any way to make the rotor turn it direction to the locked target?

    +2 one month ago
  • Profile image

    yo im aking a mode on a plane to automatically stay lowand my throttle is stuck at what it was when i left the low to the ground mode outside of this mode. Can someone help? This is my code: (Throttle(Activate5>0.3 ? 0 : 1))+((1(Activate5>0.3 ? 1 : 0))/((AltitudeAgl/5)*(Activate5>0.3 ? 1 : 0))) I think it has something to do with the way engines work but still. I should be able to control the throttle. BTW im using the old simpleplanes prop engines so that might have something to do with it

    2 months ago
  • Profile image

    @laquatra5 hello

    2 months ago
  • Profile image

    I'm making a human (yeah...) and I need to make fully moving legs when you using the W A S D or pitch & yaw. How do I make the system, what when you moves pitch down, moving the top part of leg, under knee part and foot, and making the other body moving?

    Pls reply

    2 months ago
  • Profile image

    Hello

    2 months ago
  • Profile image

    @Wallaby

    2 months ago
  • Profile image

    @PlanerIndustries9

    2 months ago
  • Profile image

    @GeneralCorpInc create a variable that doesn't depend on LandingGear

    +2 2 months ago
  • Profile image

    tnx bod!

    2 months ago
  • Profile image

    anyone have any ideas how i could put some FT on a engine that limits its top speed intul something is then activated. I'm making a manual transmission car to go with my g29 wheel.

    +1 2 months ago
  • Profile image

    I got a variable named this:maxForwardThrustForce

    +2 3 months ago
  • Profile image
    345 SamuelC

    @ACEVIPER9710 I gave up on that old project, now i need a way to make it activate below a certain altitude, for my nuclear bomb’s Parachute on my Tu-95.

    3 months ago
  • Profile image
    2,690 ACEVIPER9710

    @SamuelC (AltitudeAgl/(value) * (activated group)

    +2 4 months ago
  • Log in to see more comments