YASIM refactoring Wing class (flaps)
This commit is contained in:
parent
95ee37c9b9
commit
77a9cca6d5
3 changed files with 43 additions and 67 deletions
|
@ -219,12 +219,12 @@ void ControlMap::applyControls(float dt)
|
|||
case LEXTEND: ((Launchbar*)obj)->setExtension(lval); break;
|
||||
case LACCEL: ((Launchbar*)obj)->setAcceleration(lval); break;
|
||||
case CASTERING:((Gear*)obj)->setCastering(lval != 0); break;
|
||||
case SLAT: ((Wing*)obj)->setSlatPos(lval); break;
|
||||
case FLAP0: ((Wing*)obj)->setFlap0Pos(lval, rval); break;
|
||||
case FLAP0EFFECTIVENESS: ((Wing*)obj)->setFlap0Effectiveness(lval); break;
|
||||
case FLAP1: ((Wing*)obj)->setFlap1Pos(lval, rval); break;
|
||||
case FLAP1EFFECTIVENESS: ((Wing*)obj)->setFlap1Effectiveness(lval); break;
|
||||
case SPOILER: ((Wing*)obj)->setSpoilerPos(lval, rval); break;
|
||||
case SLAT: ((Wing*)obj)->setFlapPos(WING_SLAT,lval); break;
|
||||
case FLAP0: ((Wing*)obj)->setFlapPos(WING_FLAP0, lval, rval); break;
|
||||
case FLAP0EFFECTIVENESS: ((Wing*)obj)->setFlapEffectiveness(WING_FLAP0,lval); break;
|
||||
case FLAP1: ((Wing*)obj)->setFlapPos(WING_FLAP1,lval, rval); break;
|
||||
case FLAP1EFFECTIVENESS: ((Wing*)obj)->setFlapEffectiveness(WING_FLAP1,lval); break;
|
||||
case SPOILER: ((Wing*)obj)->setFlapPos(WING_SPOILER, lval, rval); break;
|
||||
case COLLECTIVE: ((Rotor*)obj)->setCollective(lval); break;
|
||||
case CYCLICAIL: ((Rotor*)obj)->setCyclicail(lval,rval); break;
|
||||
case CYCLICELE: ((Rotor*)obj)->setCyclicele(lval,rval); break;
|
||||
|
|
|
@ -44,59 +44,40 @@ void Wing::setFlapParams(WingFlaps i, FlapParams fp)
|
|||
_flapParams[i] = fp;
|
||||
}
|
||||
|
||||
void Wing::setFlap0Pos(float lval, float rval)
|
||||
void Wing::setFlapPos(WingFlaps f,float lval, float rval)
|
||||
{
|
||||
lval = Math::clamp(lval, -1, 1);
|
||||
rval = Math::clamp(rval, -1, 1);
|
||||
for(int i=0; i<_flap0Surfs.size(); i++) {
|
||||
((Surface*)_flap0Surfs.get(i))->setFlapPos(lval);
|
||||
if(_mirror) ((Surface*)_flap0Surfs.get(++i))->setFlapPos(rval);
|
||||
float min {-1};
|
||||
if (f == WING_SPOILER || f == WING_SLAT) {
|
||||
min = 0;
|
||||
}
|
||||
lval = Math::clamp(lval, min, 1);
|
||||
rval = Math::clamp(rval, min, 1);
|
||||
for(int i=0; i<_flapSurfs[f].size(); i++) {
|
||||
switch (f) {
|
||||
case WING_FLAP0:
|
||||
case WING_FLAP1:
|
||||
((Surface*)_flapSurfs[f].get(i))->setFlapPos(lval);
|
||||
if(_mirror) ((Surface*)_flapSurfs[f].get(++i))->setFlapPos(rval);
|
||||
break;
|
||||
case WING_SLAT:
|
||||
((Surface*)_flapSurfs[f].get(i))->setSlatPos(lval);
|
||||
break;
|
||||
case WING_SPOILER:
|
||||
((Surface*)_flapSurfs[f].get(i))->setSpoilerPos(lval);
|
||||
if(_mirror) ((Surface*)_flapSurfs[f].get(++i))->setSpoilerPos(rval);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Wing::setFlap0Effectiveness(float lval)
|
||||
void Wing::setFlapEffectiveness(WingFlaps f, float lval)
|
||||
{
|
||||
lval = Math::clamp(lval, 1, 10);
|
||||
for(int i=0; i<_flap0Surfs.size(); i++) {
|
||||
((Surface*)_flap0Surfs.get(i))->setFlapEffectiveness(lval);
|
||||
for(int i=0; i<_flapSurfs[f].size(); i++) {
|
||||
((Surface*)_flapSurfs[f].get(i))->setFlapEffectiveness(lval);
|
||||
}
|
||||
}
|
||||
|
||||
void Wing::setFlap1Pos(float lval, float rval)
|
||||
{
|
||||
lval = Math::clamp(lval, -1, 1);
|
||||
rval = Math::clamp(rval, -1, 1);
|
||||
for(int i=0; i<_flap1Surfs.size(); i++) {
|
||||
((Surface*)_flap1Surfs.get(i))->setFlapPos(lval);
|
||||
if(_mirror) ((Surface*)_flap1Surfs.get(++i))->setFlapPos(rval);
|
||||
}
|
||||
}
|
||||
|
||||
void Wing::setFlap1Effectiveness(float lval)
|
||||
{
|
||||
lval = Math::clamp(lval, 1, 10);
|
||||
for(int i=0; i<_flap1Surfs.size(); i++) {
|
||||
((Surface*)_flap1Surfs.get(i))->setFlapEffectiveness(lval);
|
||||
}
|
||||
}
|
||||
|
||||
void Wing::setSpoilerPos(float lval, float rval)
|
||||
{
|
||||
lval = Math::clamp(lval, 0, 1);
|
||||
rval = Math::clamp(rval, 0, 1);
|
||||
for(int i=0; i<_spoilerSurfs.size(); i++) {
|
||||
((Surface*)_spoilerSurfs.get(i))->setSpoilerPos(lval);
|
||||
if(_mirror) ((Surface*)_spoilerSurfs.get(++i))->setSpoilerPos(rval);
|
||||
}
|
||||
}
|
||||
|
||||
void Wing::setSlatPos(float val)
|
||||
{
|
||||
val = Math::clamp(val, 0, 1);
|
||||
for(int i=0; i<_slatSurfs.size(); i++)
|
||||
((Surface*)_slatSurfs.get(i))->setSlatPos(val);
|
||||
}
|
||||
|
||||
void Wing::calculateWingCoordinateSystem() {
|
||||
// prepare wing coordinate system, ignoring incidence and twist for now
|
||||
// (tail incidence is varied by the solver)
|
||||
|
@ -335,10 +316,10 @@ Surface* Wing::newSurface(float* pos, float* orient, float chord,
|
|||
if(hasSlat) s->setSlatParams(_flapParams[WING_SLAT].aoa, _flapParams[WING_SLAT].drag);
|
||||
if(hasSpoiler) s->setSpoilerParams(_flapParams[WING_SPOILER].lift, _flapParams[WING_SPOILER].drag);
|
||||
|
||||
if(hasFlap0) _flap0Surfs.add(s);
|
||||
if(hasFlap1) _flap1Surfs.add(s);
|
||||
if(hasSlat) _slatSurfs.add(s);
|
||||
if(hasSpoiler) _spoilerSurfs.add(s);
|
||||
if(hasFlap0) _flapSurfs[WING_FLAP0].add(s);
|
||||
if(hasFlap1) _flapSurfs[WING_FLAP1].add(s);
|
||||
if(hasSlat) _flapSurfs[WING_SLAT].add(s);
|
||||
if(hasSpoiler) _flapSurfs[WING_SPOILER].add(s);
|
||||
|
||||
s->setInducedDrag(_inducedDrag);
|
||||
|
||||
|
|
|
@ -20,8 +20,8 @@ struct FlapParams {
|
|||
enum WingFlaps {
|
||||
WING_FLAP0,
|
||||
WING_FLAP1,
|
||||
WING_SPOILER,
|
||||
WING_SLAT,
|
||||
WING_SPOILER
|
||||
};
|
||||
|
||||
// FIXME: need to handle "inverted" controls for mirrored wings.
|
||||
|
@ -65,13 +65,9 @@ public:
|
|||
|
||||
void setFlapParams(WingFlaps i, FlapParams fp);
|
||||
|
||||
// Set the control axes for the sub-surfaces
|
||||
void setFlap0Pos(float lval, float rval);
|
||||
void setFlap1Pos(float lval, float rval);
|
||||
void setSpoilerPos(float lval, float rval);
|
||||
void setSlatPos(float val);
|
||||
void setFlap0Effectiveness(float lval);
|
||||
void setFlap1Effectiveness(float lval);
|
||||
// propergate the control axes value for the sub-surfaces
|
||||
void setFlapPos(WingFlaps i, float lval, float rval = 0);
|
||||
void setFlapEffectiveness(WingFlaps f, float lval);
|
||||
|
||||
// Compile the thing into a bunch of Surface objects
|
||||
void compile();
|
||||
|
@ -116,11 +112,10 @@ private:
|
|||
|
||||
struct SurfRec { Surface * surface; float weight; };
|
||||
|
||||
Vector _surfs;
|
||||
Vector _flap0Surfs;
|
||||
Vector _flap1Surfs;
|
||||
Vector _slatSurfs;
|
||||
Vector _spoilerSurfs;
|
||||
// all surfaces of this wing
|
||||
Vector _surfs;
|
||||
// surfaces having a certain type of flap (flap, slat, spoiler)
|
||||
Vector _flapSurfs[sizeof(WingFlaps)];
|
||||
|
||||
Version * _version;
|
||||
bool _mirror {false};
|
||||
|
|
Loading…
Reference in a new issue