Merge branch 'master' of git://gitorious.org/fg/fgdata
This commit is contained in:
commit
0a3b6128ce
1 changed files with 41 additions and 8 deletions
|
@ -107,6 +107,7 @@ var active_walker = func {
|
||||||
var Walker = {
|
var Walker = {
|
||||||
new : func (view_name, constraints = nil, managers = nil) {
|
new : func (view_name, constraints = nil, managers = nil) {
|
||||||
var obj = { parents : [Walker] };
|
var obj = { parents : [Walker] };
|
||||||
|
obj.view_name = view_name;
|
||||||
obj.view = view.views[view.indexof(view_name)];
|
obj.view = view.views[view.indexof(view_name)];
|
||||||
obj.constraints = constraints;
|
obj.constraints = constraints;
|
||||||
obj.managers = managers;
|
obj.managers = managers;
|
||||||
|
@ -180,17 +181,26 @@ var Walker = {
|
||||||
var cur = props.globals.getNode("/sim/current-view");
|
var cur = props.globals.getNode("/sim/current-view");
|
||||||
me.heading = cur.getNode("heading-offset-deg").getValue();
|
me.heading = cur.getNode("heading-offset-deg").getValue();
|
||||||
|
|
||||||
me.position[0] -=
|
var new_pos =
|
||||||
me.speed_fwd * dt * math.cos(me.heading * TO_RAD) +
|
[me.position[0] -
|
||||||
me.speed_side * dt * math.sin(me.heading * TO_RAD);
|
me.speed_fwd * dt * math.cos(me.heading * TO_RAD) +
|
||||||
me.position[1] -=
|
me.speed_side * dt * math.sin(me.heading * TO_RAD),
|
||||||
me.speed_fwd * dt * math.sin(me.heading * TO_RAD) -
|
me.position[1] -
|
||||||
me.speed_side * dt * math.cos(me.heading * TO_RAD);
|
me.speed_fwd * dt * math.sin(me.heading * TO_RAD) -
|
||||||
|
me.speed_side * dt * math.cos(me.heading * TO_RAD),
|
||||||
|
me.position[2]];
|
||||||
|
|
||||||
var cur_height = me.position[2];
|
var cur_height = me.position[2];
|
||||||
if (me.constraints != nil) {
|
if (me.constraints != nil) {
|
||||||
me.position = me.constraints.constrain(me.position);
|
new_pos = me.constraints.constrain(new_pos);
|
||||||
me.goal_height = me.position[2] + me.eye_height;
|
if (new_pos == NO_POS) {
|
||||||
|
printlog("warn",
|
||||||
|
"WalkView: Constraint for " ~ me.view_name ~
|
||||||
|
" returned NO_POS.");
|
||||||
|
} else {
|
||||||
|
me.position = new_pos;
|
||||||
|
me.goal_height = me.position[2] + me.eye_height;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
# Change the view height smoothly
|
# Change the view height smoothly
|
||||||
if (math.abs(me.goal_height - cur_height) > 2.0 * dt) {
|
if (math.abs(me.goal_height - cur_height) > 2.0 * dt) {
|
||||||
|
@ -399,6 +409,27 @@ var ActionConstraint = {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Conditional constraint
|
||||||
|
# The area is only available when the predicate function returns true.
|
||||||
|
# constraint - the area in question : constraint
|
||||||
|
# predicate() - boolean function that determines if the area is available.
|
||||||
|
var ConditionalConstraint = {
|
||||||
|
new : func (constraint, predicate = nil) {
|
||||||
|
var obj = { parents : [ConditionalConstraint] };
|
||||||
|
obj.constraint = constraint;
|
||||||
|
obj.predicate = predicate;
|
||||||
|
return obj;
|
||||||
|
},
|
||||||
|
constrain : func (pos) {
|
||||||
|
if (me.predicate == nil or me.predicate()) {
|
||||||
|
return me.constraint.constrain(pos);
|
||||||
|
} else {
|
||||||
|
return NO_POS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Manager classes.
|
# Manager classes.
|
||||||
|
|
||||||
|
@ -443,6 +474,8 @@ var JSBSimPointmass = {
|
||||||
var TO_RAD = math.pi/180;
|
var TO_RAD = math.pi/180;
|
||||||
var TO_DEG = 180/math.pi;
|
var TO_DEG = 180/math.pi;
|
||||||
|
|
||||||
|
var NO_POS = [-9999.0, -9999.0, -9999.0];
|
||||||
|
|
||||||
var walkers = {};
|
var walkers = {};
|
||||||
|
|
||||||
var closerXY = func (pos, p1, p2) {
|
var closerXY = func (pos, p1, p2) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue