part:proxy

Proxy

Alters a value based on a mathematical expression.

For the sake of simplicity, the easy setup section has been ignored. However, anyone may edit this page to describe it.

This part can be found under:

You can easily find it by clicking on the sign and typing event.

  • Add a Proxy part to an existing part
  • Enter the name of the value with you want changed into variable name or click the button to browse available part parameters
  • Enter a value or mathematical expression into expression (such as 2+2 or sin(time()))

Download: proxy_basic.txt

Proxies can affect parts that are not directly connected to them. Enter the name of the part into target-part or select it with the button.

Download: proxy_target.txt

Simple proxy switch. Press R and T to change size.

Download: proxy_button.txt

The command() proxy can be changed at any time by using console commands, it can be used together with feedback() to affect the previous proxy value. Below you'll find a simple example that lets you change the scale of a model using buttons (Hold F to scale up and R to scale down.)

Affect children sets the proxy to affect all of its children instead of the parent. This also disables the target part field.

Each proxy can use up to 3 expressions, one for each axis (X, Y, Z). These expressions need to be separated with a comma , Setting a value as nil or null will ignore the given axis.

Expression set to time(), null, 2+2 will set the X axis to time(), ignore the Y axis and set the Z axis to 4.

Download: proxy_axis.txt

This method conflicts with the axis field, if you wanna use it make sure that the axis field is empty.

The following is a list of operations/functions available to use in the expression

Operation Operator Example
Multiplication * time()*2
Division / time()/2
Addition + time()+2
Subtraction - time()-2
Parentheses () 3*(time()+2)
Exponent ^ time()^2
Modulus % time()%2


To use, enter an input value or expression between the parenthesis. Remember to respect the number of arguments in the function, since not all functions have one argument. clamp(x, min, max) for example has three arguments.

Function Explanation
abs(x) Returns the absolute value of a given number.
x — a number
sgn(x) Returns the sign of the given number (-1 for values below 0, 0 for 0 and 1 for values above 0).
x — a number
ceil(x) Rounds a number up.
x — a number
floor(x) Rounds a number down.
x — a number
min(numbers) Returns the smallest value of all arguments.
numbers — numbers to get the smallest from, separated with a comma (,)
max(numbers) Returns the largest value of all arguments.
numbers - numbers to get the largest from, separated with a comma (,)
clamp(x, min, max) Clamps a number between a minimum and maximum value.
x - the input value/function
min - the minimum value that the function can return
max - the maximum value that the function can return
PI This is NOT a function, it's a variable containing the mathematical constant pi.
log(x, base) With one argument, returns the natural logarithm of x (to base e). With two arguments, returns the logarithm of x to the given base.
x - a number
base - the logarithmic base, optional
log10(x) Returns the base-10 logarithm of x. This is usually more accurate than log(x, 10).
x — a number
sqrt(x) Returns the square root of the number.
x - a number
rand(m, n) When called without arguments returns a random float between 0 and 1. When called with one argument (m) returns an integer between 1 and m. When called with both arguments (m and n) returns an integer between m and n.
m - lower limit (two arguments) or upper limit (one argument)
n - upper limit
randx(min, max) Returns a random float between min and max.
min - the minimum value
max - the maximum value
rad(x) Returns the value converted to radians.
x - the angle measured in degrees
deg(x) Returns the value converted to degrees.
x - the angle measured in radians
sin(x) Returns the sine of a given angle.
x - angle in radians
asin(sin) Returns the arc sine (an angle in radians, between -PI/2 and PI/2, which has the given sine value). NaN if the argument is out of range.
sin - sine value in range of -1 to 1
sinh(x) Returns the hyperbolic sine of the given angle.
x - angle in radians
cos(x) Returns the cosine of a given angle.
x - angle in radians
acos(cos) Returns the arc cosine (an angle in radians, between 0 and PI, which has the given cosine value). NaN if the argument is out of range.
cos - cosine value in range of -1 to 1
cosh(x) Returns the hyperbolic cosine of the given angle.
x - angle in radians
tan(x) Returns the tangent of a given angle.
x - angle in radians
atan(tan) Returns the arc tangent (an angle in radians, between -pi/2 and pi/2, which has the given tangent value).
tan - a tangent value
atan2(y, x) Returns the 2-argument arc tangent (the angle of the line from (0, 0) to (x, y) in radians, between -PI and PI).
y - Y coordinate
x - X coordinate
tanh(x) Returns the hyperbolic tangent of the given angle.
x - angle in radians


Remember to include the parentheses for each function even if there is nothing between them. Most of these are nullary functions (without arguments) but they are nevertheless Lua functions that need to be written with proper syntax to be interpreted as such.

Function Explanation
aim_length() Returns the distance between a model and the point it is aiming at (aim direction is defined by the red arrow). Maximum distance is 16000.
aim_length_fraction() Same as above but outputs a fraction calculated from distance/16000.
ambient_light_r() Returns the RED color value of the ambient color of the map.
ambient_light_g() Returns the GREEN color value of the ambient color of the map.
ambient_light_b() Returns the BLUE color value of the ambient color of the map.
command() Can be controlled by the pac_proxy <name> <value> console command.
<name> is name of the proxy part you want to affect
<value> is the value you want to set it to.
eye_angle_distance() Returns the normalized distance between the object and the view angle. Looking directly at the object equals 0.5, looking away from the object lowers the value. There is no negative values so an object that is directly behind your view angle also equals 0.5.
eye_position_distance() Returns the distance between the object and the view position.
feedback() Returns the proxy's previous value.
feedback_x() or feedback_y() or feedback_z() Returns the proxy's previous value on a given axis.
framenumber() or fnumber() Returns the number of frames rendered since the game was launched.
frametime() or ftime() Returns the time in seconds it took to render the last frame. Equal to FrameTime
hsv_to_color(h, s, v) Converts HSV formatted color into RGB formatted color. Returns red, green, blue.
h - color hue, from 0 to 360
s - color saturation, optional, from 0 to 1, default is 1
v - color value, optional, from 0 to 1, default is 1
lerp(f, start, end) Linear interpolation from one value to another.
f - the fraction for finding the result
start - the starting number, the result will be equal to this when f is 0
end - the ending number, the result will be equal to this when f is 1
light_amount_r() Returns the RED color value of the light amount at the current position of the object.
light_amount_g() Returns the GREEN color value of the light amount at the current position of the object.
light_amount_b() Returns the BLUE color value of the light amount at the current position of the object.
light_value() Returns the light value in 0 to 1 range.
owner_armor() Returns the amount of player's armor.
owner_eye_angle_pitch() Returns the pitch value of the owner's eye angle in the 0 (looking down) to 1 (looking up) range. Doesn't seem to work properly on entities other than the player model.
owner_eye_angle_yaw() Returns the yaw value of the owner's eye angle in the -2 to 2 range. Multiply by 90 to match object's yaw to owner's yaw.
owner_eye_angle_roll() Returns the roll value of the owner's eye angle in the -2 to 2 range. Multiply by 90 to match object's roll to owner's roll.
owner_fov() Returns the owner's field of view value.
owner_health() Returns the owner's health value.
owner_max_health() Returns the owner's maximum health value.
owner_position() Returns the owner's X,Y,Z position.
owner_scale_x() or owner_scale_y() or owner_scale_z() Returns the owner's scale on a given axis.
owner_position() Outputs the position of the owner x, y, z
owner_fov() Outputs the field of view ( FOV ) of the owner x
visible() Outputs whether the part is visible within a radius radius x
time() Outputs a time value that is not synced/affected by the game ( equal to RealTime ) x
synced_time() Outputs a time value that is synced to the game ( equal to CurTime ) x
systime() or stime() Returns a highly accurate time in seconds since the start up
frametime() or ftime() Returns the CurTime-based time in seconds it took to render the last frame. Equal to FrameTime
framenumber() or fnumber() Returns the number of frames rendered since the game was launched.
random() Quickly outputs random numbers between 0 and 1 x
timeex() Outputs a time value that begins to count the seconds when the proxy is shown x
eye_position_distance() Outputs the distance between the part and eye position x
eye_angle_distance() Outputs the distance between the part and eye angle x
owner_eye_angle_pitch() Outputs the pitch of the owner's eye angle (between 0 and 1) x
owner_eye_angle_yaw() Outputs the yaw of the owner's eye angle (between -2 and 2) y
owner_eye_angle_roll() Outputs the roll of the owner's eye angle z
owner_velocity_length() Outputs the velocity of the owner, in any direction x
owner_velocity_forward() Outputs the velocity of the owner, either forwards or backwards x
owner_velocity_right() Outputs the velocity of the owner, either right or left x
owner_velocity_up() Outputs the velocity of the owner, either up or down x
owner_velocity_length_increase() Outputs the velocity of the owner, in any direction ( additive ) x
owner_velocity_forward_increase() Outputs the velocity of the owner, either forwards or backwards ( additive ) x
owner_velocity_right_increase() Outputs the velocity of the owner, either right or left ( additive ) x
owner_velocity_up_increase() Outputs the velocity of the owner, either up or down ( additive ) x
parent_velocity_length() Outputs the velocity of the parent part, in any direction x
parent_velocity_forward() Outputs the velocity of the parent part, either forwards or backwards x
parent_velocity_right() Outputs the velocity of the parent part, either right or left x
parent_velocity_up() Outputs the velocity of the parent part, either up or down x
command() Can be controlled by the pac_proxy <name> <value> console command.
<name> is name of the proxy part you want to affect
<value> is the value you want to set it to.
x
voice_volume() Outputs a number between 0 and 1 based on the owner's voice chat microphone input x
light_amount_r() Outputs a value based on the brightness of red ambient/world light in the area x
light_amount_g() Outputs a value based on the brightness of green ambient/world light in the area y
light_amount_b() Outputs a value based on the brightness of blue ambient/world light in the area z
owner_health() Outputs how much health the owner has x
owner_armor() Outputs how much armor the owner has x
player_color_r() Outputs the red value of the owner's player color ( between 0 and 1 ) x
player_color_g() Outputs the green value of the owner's player color ( between 0 and 1 ) y
player_color_b() Outputs the blue value of the owner's player color ( between 0 and 1 ) z
weapon_color_r() Outputs the red value of the owner's weapon color ( between 0 and 1 ) x
weapon_color_g() Outputs the green value of the owner's weapon color ( between 0 and 1 ) y
weapon_color_b() Outputs the blue value of the owner's weapon color ( between 0 and 1 ) z
feedback() Outputs the proxy's previous value ( similar to additive mode ) x
hsv_to_color(h, s, v) Converts HSV formatted color into RGB formatted color. Returns red, green, blue.
h - color hue, from 0 to 360
s - color saturation, optional, from 0 to 1, default is 1
v - color value, optional, from 0 to 1, default is 1
lerp(f, start, end) Linear interpolation from one value to another.
f - the fraction for finding the result
start - the starting number, the result will be equal to this when f is 0
end - the ending number, the result will be equal to this when f is 1

Remember that all of the functions above can be mixed together, you can use one function as input for another, add functions together, etc.

Expression: hsv_to_color(timeex()*50)

Variable: Color

Explanation: timeex() is used as (h)ue input for hsv_to_color(h,s,v) which makes it change the color value over time. Multiplying the timeex() by 50 speeds up the color transition.

Notes: This doesn't work with experimental parts. Look below for a solution.

Expression: clamp(5+timeex(),5,10)

Variable: Position

Explanation: When shown, the proxy starts at 5 and moves up over time thanks to timeex(), clamp(input, min, max) is used to limit the output so the value never goes above 10.

Expression: clamp(feedback()+(command(s)*ftime()),1,5)

Variable: Size

Explanation: Since the command() proxy can be changed at any time by using console commands, we can use the Command part together with button events to control it. Below you'll find a simple example that lets you change the scale of a model using buttons (Hold F to scale up and R to scale down.)

Download: controlled_proxy.txt

I'll add some more stuff later. Maybe.


Copy this code into the expression field.


easy setup
input Select a miscellaneous function
function Select a math function to act on the miscellaneous function ( none = use misc. function directly )
axis (??) FIXME
min Sets the minimum value that the function may be ( if a sine or cosine )
max Sets the maximum value that the function may be ( if a sine or cosine )
offset Sets the horizontal offset ( adding/removing the input before applying the function, ie. sin(time()-2) )
input multiplier Multiplies the input before applying the function, ie. sin(time()*2))
input divider Divides the input before applying the function, ie. sin(time()/2))
pow Raises the entire expression up by an exponential power, ie. sin(time())^2
behavior
additive Determines whether to output normally ( disabled ) or add each output to the previous output ( enabled )
player angles (??) FIXME
zero eye pitch (??) FIXME
reset velocities on hide Determines whether to treat velocity functions normally ( disabled ) or set them to 0 upon hiding/unhiding ( enabled )
velocity roughness Sets how quickly velocity functions change their value
generic
variable name The name of the value you'd like the proxy to alter
root owner (??) FIXME
target part name Name of a part to be affected by the proxy ( leave empty to affect the parent or child of the proxy )
affect children Determines whether to affect a target part or parent ( disabled ) or affect all of the proxy's children ( enabled )
expression A mathematical expression to alter the value ( overrides easy setup )
name The name of the proxy ( not altering this will allow the proxy to display its output )
hide Determines whether to render the proxy or ignore/hide it
is disturbing Determines whether to hide the proxy for players who have pac_hide_disturbing set to 1
orientation
parent name The name of the proxy's parent part ( the proxy will move under said part if you decide to change this )

Contributing authors:

Cédric Léonard Yagira textstack

  • part/proxy.txt
  • Last modified: 4 weeks ago
  • by yagira