You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
3.1 KiB
101 lines
3.1 KiB
var sin = func(a) { math.sin(a * math.pi / 180.0) } |
|
var cos = func(a) { math.cos(a * math.pi / 180.0) } |
|
var posx= 0; |
|
var posy= 0; |
|
var posz= 0; |
|
|
|
setlistener("sim/walker/walking", func { |
|
walk(); |
|
}); |
|
|
|
var main_loop = func { |
|
if (getprop ("sim/walker/outside") == 0) { |
|
setprop ("sim/walker/latitude-deg" , (getprop ("position/latitude-deg"))); |
|
setprop ("sim/walker/longitude-deg" , (getprop ("position/longitude-deg"))); |
|
setprop ("sim/walker/altitude-ft" , (getprop ("position/altitude-ft"))); |
|
setprop ("sim/walker/roll-deg" , (getprop ("orientation/roll-deg"))); |
|
setprop ("sim/walker/pitch-deg" , (getprop ("orientation/pitch-deg"))); |
|
setprop ("sim/walker/heading-deg" , (getprop ("orientation/heading-deg"))); |
|
} |
|
settimer(main_loop, 0.008) |
|
} |
|
var walk = func { |
|
|
|
|
|
if (getprop ("sim/current-view/view-number") == view.indexof("Walk View")) { |
|
if (getprop ("devices/status/mice/mouse/mode") == 2){ |
|
|
|
|
|
if (getprop ("sim/walker/outside") == 1) { |
|
ext_mov(); |
|
} else { |
|
int_mov(); |
|
} |
|
} |
|
} |
|
} |
|
|
|
var ext_mov = func { |
|
speed = getprop ("sim/walker/speed"); |
|
head = getprop ("sim/current-view/heading-offset-deg"); |
|
posy = getprop ("sim/walker/latitude-deg"); |
|
posx = getprop ("sim/walker/longitude-deg"); |
|
posz1 = getprop ("sim/walker/altitude-ft"); |
|
posx1 = posx - speed*sin(head); |
|
if (posy < 0 ) { |
|
# southern hemisphere |
|
posy1 = posy + (speed+0.000001*sin(posy))*cos(head); |
|
# print ("south"); |
|
} else { |
|
# northern hemisphere |
|
# print ("north"); |
|
posy1 = posy + (speed-0.000001*sin(posy))*cos(head); |
|
} |
|
# print (head," ",speed," ",speed+0.0000001*sin(posy)); |
|
# print (cos(head)," ",sin(head)); |
|
# print (posy," ",speed+0.000001*sin(posy)); |
|
posz2 = geo.elevation (posy1,posx1); |
|
|
|
if ((posz2 * 3.28084) < (posz1+10)) { |
|
interpolate ("sim/walker/latitude-deg", posy1,0.25,0.3); |
|
# print (posy); |
|
interpolate ("sim/walker/longitude-deg", posx1,0.25,0.3); |
|
# print (posx); |
|
|
|
# print (posz1," ", posz2 * 3.28084); |
|
if ((posz1+0.4) > (posz2 * 3.28084) or (posz1-0.4) < posz2 * 3.28084) { |
|
interpolate ("sim/walker/altitude-ft", posz2 * 3.28084 ,0.25,0.3); |
|
} |
|
} |
|
if (getprop ("sim/walker/walking") == 1) { |
|
settimer(ext_mov, 0.25); |
|
} |
|
} |
|
var get_out = func { |
|
if (getprop ("sim/current-view/view-number") == view.indexof("Walk View")) { |
|
posx = getprop ("position/longitude-deg"); |
|
posy = getprop ("sim/walker/latitude-deg"); |
|
head = getprop ("orientation/heading-deg"); |
|
posy1 = posy + (0.000001*sin(posy))*sin(head); |
|
|
|
setprop ("sim/walker/heading-deg", 0); |
|
setprop ("sim/walker/outside", 1); |
|
setprop ("sim/current-view/x-offset-m", 0); |
|
setprop ("sim/current-view/y-offset-m", 1.87); |
|
setprop ("sim/current-view/z-offset-m", 0); |
|
setprop ("sim/current-view/roll-offset-deg", 0); |
|
} |
|
} |
|
|
|
var get_in = func { |
|
if (getprop ("sim/current-view/view-number") == view.indexof("Walk View")) { |
|
setprop ("sim/walker/outside", 0); |
|
setprop ("sim/current-view/x-offset-m", 0.35); |
|
setprop ("sim/current-view/y-offset-m", 1.5); |
|
setprop ("sim/current-view/z-offset-m", 2.295); |
|
setprop ("sim/current-view/roll-offset-deg", 0); |
|
} |
|
} |
|
var int_mov = func { |
|
print ("Not yet implemented"); |
|
}
|
|
|