1
0
Fork 0

YASim flap changes from Vivian Meazza

This commit is contained in:
timoore 2008-09-29 08:00:20 +00:00
parent d3819c5f0c
commit 62bca8368e
7 changed files with 53 additions and 2 deletions

View file

@ -206,7 +206,9 @@ void ControlMap::applyControls(float dt)
case CASTERING:((Gear*)obj)->setCastering(lval != 0); break;
case SLAT: ((Wing*)obj)->setSlat(lval); break;
case FLAP0: ((Wing*)obj)->setFlap0(lval, rval); break;
case FLAP0EFFECTIVENESS: ((Wing*)obj)->setFlap0Effectiveness(lval); break;
case FLAP1: ((Wing*)obj)->setFlap1(lval, rval); break;
case FLAP1EFFECTIVENESS: ((Wing*)obj)->setFlap1Effectiveness(lval); break;
case SPOILER: ((Wing*)obj)->setSpoiler(lval, rval); break;
case COLLECTIVE: ((Rotor*)obj)->setCollective(lval); break;
case CYCLICAIL: ((Rotor*)obj)->setCyclicail(lval,rval); break;
@ -250,6 +252,8 @@ float ControlMap::rangeMin(int type)
case COLLECTIVE: return -1;
case WINCHRELSPEED: return -1;
case MAGNETOS: return 0; // [0:3]
case FLAP0EFFECTIVENESS: return 1; // [0:10]
case FLAP1EFFECTIVENESS: return 1; // [0:10]
default: return 0; // [0:1]
}
}
@ -262,6 +266,8 @@ float ControlMap::rangeMax(int type)
case FLAP1: return 1;
case STEER: return 1;
case MAGNETOS: return 3; // [0:3]
case FLAP0EFFECTIVENESS: return 10;// [0:10]
case FLAP1EFFECTIVENESS: return 10;// [0:10]
default: return 1; // [0:1]
}
}

View file

@ -13,12 +13,14 @@ public:
ADVANCE, REHEAT, PROP,
BRAKE, STEER, EXTEND, HEXTEND, LEXTEND,
INCIDENCE, FLAP0, FLAP1, SLAT, SPOILER, VECTOR,
FLAP0EFFECTIVENESS, FLAP1EFFECTIVENESS,
BOOST, CASTERING, PROPPITCH, PROPFEATHER,
COLLECTIVE, CYCLICAIL, CYCLICELE, ROTORENGINEON,
TILTYAW, TILTPITCH, TILTROLL,
ROTORBRAKE, ROTORENGINEMAXRELTORQUE, ROTORRELTARGET,
ROTORBALANCE, REVERSE_THRUST, WASTEGATE,
WINCHRELSPEED, HITCHOPEN, PLACEWINCH, FINDAITOW};
WINCHRELSPEED, HITCHOPEN, PLACEWINCH, FINDAITOW
};
enum { OPT_SPLIT = 0x01,
OPT_INVERT = 0x02,

View file

@ -948,7 +948,9 @@ int FGFDM::parseOutput(const char* name)
if(eq(name, "LEXTEND")) return ControlMap::LEXTEND;
if(eq(name, "INCIDENCE")) return ControlMap::INCIDENCE;
if(eq(name, "FLAP0")) return ControlMap::FLAP0;
if(eq(name, "FLAP0EFFECTIVENESS")) return ControlMap::FLAP0EFFECTIVENESS;
if(eq(name, "FLAP1")) return ControlMap::FLAP1;
if(eq(name, "FLAP1EFFECTIVENESS")) return ControlMap::FLAP1EFFECTIVENESS;
if(eq(name, "SLAT")) return ControlMap::SLAT;
if(eq(name, "SPOILER")) return ControlMap::SPOILER;
if(eq(name, "CASTERING")) return ControlMap::CASTERING;

View file

@ -25,6 +25,7 @@ Surface::Surface()
_slatDrag = _spoilerDrag = _flapDrag = 1;
_flapLift = 0;
_flapEffectiveness = 1;
_slatAlpha = 0;
_spoilerLift = 1;
_inducedDrag = 1;
@ -132,6 +133,17 @@ void Surface::setFlap(float pos)
_flapPos = pos;
}
void Surface::setFlapEffectiveness(float effectiveness)
{
_flapEffectiveness = effectiveness;
}
double Surface::getFlapEffectiveness()
{
return _flapEffectiveness;
}
void Surface::setSlat(float pos)
{
_slatPos = pos;
@ -294,7 +306,8 @@ float Surface::stallFunc(float* v)
// stall alpha
float Surface::flapLift(float alpha)
{
float flapLift = _cz * _flapPos * (_flapLift-1);
float flapLift = _cz * _flapPos * (_flapLift-1) * _flapEffectiveness;
if(_stalls[0] == 0)
return 0;

View file

@ -34,6 +34,10 @@ public:
void setSlat(float pos);
void setSpoiler(float pos);
// Modifier for flap lift coefficient, useful for simulating flap blowing etc.
void setFlapEffectiveness(float effectiveness);
double getFlapEffectiveness();
// local -> Surface coords
void setOrientation(float* o);
@ -88,6 +92,7 @@ private:
float _slatDrag;
float _flapLift;
float _flapDrag;
float _flapEffectiveness;
float _spoilerLift;
float _spoilerDrag;

View file

@ -1,6 +1,7 @@
#include "Math.hpp"
#include "Surface.hpp"
#include "Wing.hpp"
namespace yasim {
Wing::Wing()
@ -176,6 +177,16 @@ void Wing::setFlap0(float lval, float rval)
}
}
void Wing::setFlap0Effectiveness(float lval)
{
lval = Math::clamp(lval, 1, 10);
int i;
for(i=0; i<_flap0Surfs.size(); i++) {
((Surface*)_flap0Surfs.get(i))->setFlapEffectiveness(lval);
// if(_mirror) ((Surface*)_flap0Surfs.get(++i))->setFlapEffectiveness(rval);
}
}
void Wing::setFlap1(float lval, float rval)
{
lval = Math::clamp(lval, -1, 1);
@ -187,6 +198,16 @@ void Wing::setFlap1(float lval, float rval)
}
}
void Wing::setFlap1Effectiveness(float lval)
{
lval = Math::clamp(lval, 1, 10);
int i;
for(i=0; i<_flap1Surfs.size(); i++) {
((Surface*)_flap1Surfs.get(i))->setFlapEffectiveness(lval);
// if(_mirror) ((Surface*)_flap1Surfs.get(++i))->setFlap(rval);
}
}
void Wing::setSpoiler(float lval, float rval)
{
lval = Math::clamp(lval, 0, 1);

View file

@ -42,6 +42,8 @@ public:
void setFlap1(float lval, float rval);
void setSpoiler(float lval, float rval);
void setSlat(float val);
void setFlap0Effectiveness(float lval);
void setFlap1Effectiveness(float lval);
// Compile the thing into a bunch of Surface objects
void compile();