David Culp, Vivian Meazza:
Last night I sent these new files to Vivian to fix a problem he found. Since we can have more than one submodel we need more than one "count" property. The new code creates a property systems/submodels/submodel[n]/count for each submodel. Vivian is using this count property for his sound.
This commit is contained in:
parent
c4aa3fa661
commit
065d4d8da1
1 changed files with 23 additions and 11 deletions
|
@ -59,13 +59,17 @@ void
|
||||||
SubmodelSystem::update (double dt)
|
SubmodelSystem::update (double dt)
|
||||||
{
|
{
|
||||||
if (!(_serviceable_node->getBoolValue())) return;
|
if (!(_serviceable_node->getBoolValue())) return;
|
||||||
|
int i=-1;
|
||||||
submodel_iterator = submodels.begin();
|
submodel_iterator = submodels.begin();
|
||||||
while(submodel_iterator != submodels.end()) {
|
while(submodel_iterator != submodels.end()) {
|
||||||
|
i++;
|
||||||
if ((*submodel_iterator)->trigger->getBoolValue()) {
|
if ((*submodel_iterator)->trigger->getBoolValue()) {
|
||||||
if ((*submodel_iterator)->count > 0) {
|
if ((*submodel_iterator)->count > 0) {
|
||||||
release( (*submodel_iterator), dt);
|
release( (*submodel_iterator), dt);
|
||||||
|
// now update the "count" property for this submodel
|
||||||
|
char name[80];
|
||||||
|
snprintf(name, 80, "/systems/submodels/submodel[%d]/count", i);
|
||||||
|
fgSetInt(name, (*submodel_iterator)->count);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
++submodel_iterator;
|
++submodel_iterator;
|
||||||
|
@ -82,9 +86,12 @@ SubmodelSystem::release (submodel* sm, double dt)
|
||||||
|
|
||||||
transform(sm); // calculate submodel's initial conditions in world-coordinates
|
transform(sm); // calculate submodel's initial conditions in world-coordinates
|
||||||
|
|
||||||
|
//cout << "Creating a submodel." << endl;
|
||||||
int rval = ai->createBallistic( sm->model, IC.lat, IC.lon, IC.alt, IC.azimuth,
|
int rval = ai->createBallistic( sm->model, IC.lat, IC.lon, IC.alt, IC.azimuth,
|
||||||
IC.elevation, IC.speed );
|
IC.elevation, IC.speed );
|
||||||
sm->count--;
|
//cout << "Submodel created." << endl;
|
||||||
|
(sm->count)--;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,7 +124,7 @@ SubmodelSystem::load ()
|
||||||
SGPropertyNode * entry_node = root.getChild(i);
|
SGPropertyNode * entry_node = root.getChild(i);
|
||||||
sm->trigger = fgGetNode(entry_node->getStringValue("trigger", "none"), true);
|
sm->trigger = fgGetNode(entry_node->getStringValue("trigger", "none"), true);
|
||||||
sm->name = entry_node->getStringValue("name", "none_defined");
|
sm->name = entry_node->getStringValue("name", "none_defined");
|
||||||
sm->model = entry_node->getStringValue("model", "Models/Geometry/tracer.ac");
|
sm->model = entry_node->getStringValue("model", "Models/Geometry/rocket.ac");
|
||||||
sm->speed = entry_node->getDoubleValue("speed", 0.0);
|
sm->speed = entry_node->getDoubleValue("speed", 0.0);
|
||||||
sm->repeat = entry_node->getBoolValue ("repeat", false);
|
sm->repeat = entry_node->getBoolValue ("repeat", false);
|
||||||
sm->delay = entry_node->getDoubleValue("delay", 0.25);
|
sm->delay = entry_node->getDoubleValue("delay", 0.25);
|
||||||
|
@ -131,22 +138,27 @@ SubmodelSystem::load ()
|
||||||
|
|
||||||
sm->trigger->setBoolValue(false);
|
sm->trigger->setBoolValue(false);
|
||||||
sm->timer = 0.0;
|
sm->timer = 0.0;
|
||||||
}
|
|
||||||
|
|
||||||
|
char name[80];
|
||||||
|
snprintf(name, 80, "/systems/submodels/submodel[%d]/count", i);
|
||||||
|
fgSetInt(name, sm->count);
|
||||||
|
}
|
||||||
|
|
||||||
submodel_iterator = submodels.begin();
|
submodel_iterator = submodels.begin();
|
||||||
// cout << submodels.size() << " submodels read." << endl;
|
// cout << submodels.size() << " submodels read." << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
SubmodelSystem::transform( submodel* sm)
|
SubmodelSystem::transform( submodel* sm)
|
||||||
{
|
{
|
||||||
IC.lat = _user_lat_node->getDoubleValue();
|
IC.lat = _user_lat_node->getDoubleValue();
|
||||||
IC.lon = _user_lon_node->getDoubleValue();
|
IC.lon = _user_lon_node->getDoubleValue();
|
||||||
IC.alt = _user_alt_node->getDoubleValue();
|
IC.alt = _user_alt_node->getDoubleValue();
|
||||||
IC.azimuth = _user_heading_node->getDoubleValue() + sm->yaw_offset;
|
IC.azimuth = _user_heading_node->getDoubleValue() + sm->yaw_offset;
|
||||||
IC.elevation = _user_pitch_node->getDoubleValue() + sm->pitch_offset;
|
IC.elevation = _user_pitch_node->getDoubleValue() + sm->pitch_offset;
|
||||||
IC.speed = _user_speed_node->getDoubleValue() + sm->speed;
|
IC.speed = _user_speed_node->getDoubleValue() + sm->speed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// end of submodel.cxx
|
// end of submodel.cxx
|
||||||
|
|
Loading…
Reference in a new issue