1
0
Fork 0

add support for x/y/z axes. The built-in function is (still) a NOOP, but

aircraft can plug a custom function. This function can access all internal
variables of the ViewManager class. It can set me.{x,y,z}_offset, and also
add offsets to me.{heading,pitch,roll}_offset. Example:

dynamic_view.register_headshake(func {
        me.x_offset = rand() * 0.02;  # Parkinson effect
});

The advantage of this implementation is that it doesn't break MMB drag
functionality, and that is can be frozen by mouse movements.
This commit is contained in:
mfranz 2007-02-07 22:13:51 +00:00
parent b07ebf0dfa
commit 12f5714b37

View file

@ -61,7 +61,10 @@ var Input = {
var ViewAxis = { var ViewAxis = {
new : func(prop) { new : func(prop) {
var m = { parents : [ViewAxis] }; var m = { parents : [ViewAxis] };
m.prop = props.globals.getNode(prop, 0); m.prop = props.globals.getNode(prop, 1);
if (m.prop.getType() == "NONE") {
m.prop.setDoubleValue(0);
}
m.reset(); m.reset();
return m; return m;
}, },
@ -110,6 +113,10 @@ var ViewManager = {
m.pitch_axis = ViewAxis.new("/sim/current-view/goal-pitch-offset-deg"); m.pitch_axis = ViewAxis.new("/sim/current-view/goal-pitch-offset-deg");
m.roll_axis = ViewAxis.new("/sim/current-view/goal-roll-offset-deg"); m.roll_axis = ViewAxis.new("/sim/current-view/goal-roll-offset-deg");
m.x_axis = ViewAxis.new("/sim/current-view/x-offset-m");
m.y_axis = ViewAxis.new("/sim/current-view/y-offset-m");
m.z_axis = ViewAxis.new("/sim/current-view/z-offset-m");
# accelerations are converted to G (Earth gravitation is omitted) # accelerations are converted to G (Earth gravitation is omitted)
m.ax = Input.new("/accelerations/pilot/x-accel-fps_sec", 0.03108095, 0, 0.58, 0); m.ax = Input.new("/accelerations/pilot/x-accel-fps_sec", 0.03108095, 0, 0.58, 0);
m.ay = Input.new("/accelerations/pilot/y-accel-fps_sec", 0.03108095, 0, 0.95); m.ay = Input.new("/accelerations/pilot/y-accel-fps_sec", 0.03108095, 0, 0.95);
@ -167,6 +174,7 @@ var ViewManager = {
me.roll = me.rollN.getValue(); me.roll = me.rollN.getValue();
me.calculate(); me.calculate();
me.headshake();
var b = me.blendN.getValue(); var b = me.blendN.getValue();
var B = 1 - b; var B = 1 - b;
@ -177,6 +185,10 @@ var ViewManager = {
me.heading_axis.apply(me.heading); me.heading_axis.apply(me.heading);
me.pitch_axis.apply(me.pitch); me.pitch_axis.apply(me.pitch);
me.roll_axis.apply(me.roll); me.roll_axis.apply(me.roll);
me.x_axis.apply(me.x_offset);
me.y_axis.apply(me.y_offset);
me.z_axis.apply(me.z_offset);
}, },
lookat : func(heading = nil, pitch = nil, roll = nil) { lookat : func(heading = nil, pitch = nil, roll = nil) {
if (heading == nil) { if (heading == nil) {
@ -258,6 +270,13 @@ ViewManager.default_helicopter = func {
# default headshaking code (NOOP)
#
ViewManager.headshake = func {
me.x_offset = me.y_offset = me.z_offset = 0;
}
# Update loop for the whole dynamic view manager. It only runs if # Update loop for the whole dynamic view manager. It only runs if
# /sim/view[0]/dynamic/enabled is true. # /sim/view[0]/dynamic/enabled is true.
# #
@ -285,6 +304,10 @@ var register = func(f) {
view_manager.calculate = f; view_manager.calculate = f;
} }
var register_headshake = func(f) {
view_manager.headshake = f;
}
var reset = func { var reset = func {
view_manager.reset(); view_manager.reset();
} }