후디니 내에서 쓸 수 있는 함수를 만들때의 기본 틀:
[return_type] functionName([[arg_type1] arg_name1 [, [arg_type2] arg_name2] ...])
{
...
}
반환형 타입과 인수 타입은 float, string, vector, or matrix 를 쓸 수 있다.
#은 주석처리.
만약 반환형과 인수의 타입을 명시하지 않으면 후디니는 자료형에 float이 있는 것처럼 인식한다.
그리고, 만약 인수타입에 string을 넣어야 하는데 그것을 잊고 넣지않으면, float으로 인식해서 잠재적 버그를
열심히 찾는다고 한다.
자료형을 꼭 명시해야겠다.
Examples
# Function to find the minimum value of two
# floating point numbers
min(v1, v2) {
if (v1 < v2) {
return v1;
} else {
return v2;
}
}
# Function to reverse the order of a string
string strreverse(string in) {
float len = strlen(in);
string result = "";
for (src = len-1; src >= 0; src--) {
result += in[src]; return result;
}
}
# Example to find the minimum element in a vector
float vecmin(vector vec) {
min = vec[0];
for (i = 1; i < vsize(vec); i++) {
if (vec[i] < min) min = vec[i];
}
return min;
}
# Example to transform a vector into the space
# of an object passed in.
vector opxform(string oname, vector v) {
matrix xform = 1;
if (index(oname, "/obj/")) {
xform = optransform(oname);
} else {
xform = optransform("/obj/"+oname);
}
return v * xform;
}
# Example to find all objects which have their
# display flag set
string opdisplay() {
string objects = run("opls /obj");
string result = "";
nargs = argc(objects);
for (i = 0; i < nargs; i++) {
string obj = arg(objects, i);
if ( index(run("opset " + obj), " -d on") >= 0 ) result += " " + obj;
}
return result;
}