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;
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]
}
}
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]
}
}
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,
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;
_slatDrag = _spoilerDrag = _flapDrag = 1;
_flapLift = 0;
+ _flapEffectiveness = 1;
_slatAlpha = 0;
_spoilerLift = 1;
_inducedDrag = 1;
_flapPos = pos;
}
+void Surface::setFlapEffectiveness(float effectiveness)
+{
+ _flapEffectiveness = effectiveness;
+}
+
+double Surface::getFlapEffectiveness()
+{
+ return _flapEffectiveness;
+}
+
+
void Surface::setSlat(float pos)
{
_slatPos = pos;
// 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;
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);
float _slatDrag;
float _flapLift;
float _flapDrag;
+ float _flapEffectiveness;
float _spoilerLift;
float _spoilerDrag;
#include "Math.hpp"
#include "Surface.hpp"
#include "Wing.hpp"
+
namespace yasim {
Wing::Wing()
}
}
+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);
}
}
+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);
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();