Zitat:
Original geschrieben von Kamikazeflieger
Ist das sehr aufwändig Mit C Zu programmieren???
|
Wie Hans schon sagt, wenn es gut werden soll geht einige Zeit ins Land. Dazu kommt noch das es nicht nur mit dem programmieren getan ist. Auch mit Bildbearbeitung sollte man sich etwas auskennen (oder jemanden kennen der sich damit auskennt). Je nach Flieger kann das schon ein "Mammutprojekt" sein. Wenn man ein Team bildet kann man die Aufgaben einteilen.
Hier mal ein Beispiel. Erst der Code, danach das Ergebnis. Es ist ein relativ einfaches Gauge für die Kontrolle der Ruderfunktionen an einer 707. Man kann wohl nur erahnen welch ein Aufwand hinter solchen Projekten wie PMDG, PT TU154 oder Flight1 ATR steckt:
Code:
// Project Boeing B707 Control Surfaces Source Code
// Copyright 2004 Sven Goericke/Project Boeing. All rights reserved.
char surfaces_gauge_name[] = GAUGE_NAME;
extern PELEMENT_HEADER surfaces_list;
extern MOUSERECT surfaces_mouse_rect[];
GAUGE_HEADER_FS700( GAUGE_W, surfaces_gauge_name, &surfaces_list, surfaces_mouse_rect, 0, 0, 0, 0 );
FLOAT64 FSAPI rudder_slider_cb( PELEMENT_SLIDER pelement )
{
FLOAT64 val = pelement-> source_var_x.var_value.n;
if (val > 0 && (MainBusNo1Volts < 22 || MainBusNo2Volts < 22))
val = 0;
else if (val < 0 && (MainBusNo1Volts < 22 || MainBusNo2Volts < 22))
val = 0;
return val;
}
MAKE_SLIDER( rudder,
SURF_RUDDER_BMP,
NULL,
0,
IMAGE_USE_TRANSPARENCY | IMAGE_USE_ERASE | IMAGE_USE_LUMINOUS,
0,
{ 98, 27 },
OBSOLETE_RUDDER_POS, rudder_slider_cb, 0.001,
MODULE_VAR_NONE, NULL, 0);
PELEMENT_HEADER surfaces_list1[]=
{
&rudder.header,
NULL
};
FLOAT64 FSAPI elevator_slider_cb( PELEMENT_SLIDER pelement )
{
FLOAT64 val = pelement->source_var_y.var_value.n;
if (val > 0 && (MainBusNo1Volts < 22 || MainBusNo2Volts < 22))
val = 0;
else if (val < 0 && (MainBusNo1Volts < 22 || MainBusNo2Volts < 22))
val = 0;
return val;
}
MAKE_SLIDER( elevator,
SURF_ELEVATOR_BMP,
&surfaces_list1,
NULL,
IMAGE_USE_TRANSPARENCY | IMAGE_USE_ERASE | IMAGE_USE_LUMINOUS,
0,
{ 81, 146 },
MODULE_VAR_NONE, NULL, 0,
OBSOLETE_ELEVATOR_POS, elevator_slider_cb, -0.001 );
PELEMENT_HEADER surfaces_list2[]=
{
&elevator.header,
NULL
};
NONLINEARITY aileron_nonlinearity[] =
{
{{0, 132}, -16200, 0},
{{0, 54}, 16200, 0}
};
#define aileron_MIN_pos -16200
#define aileron_MAX_pos 16200
FLOAT64 FSAPI aileron_needle_cb( PELEMENT_NEEDLE pelement )
{
FLOAT64 val = pelement->source_var.var_value.n;
if (val > aileron_MAX_pos)
val = aileron_MAX_pos;
else if (val < aileron_MIN_pos)
val = aileron_MIN_pos;
else if (val > 0 && (MainBusNo1Volts < 22 || MainBusNo2Volts < 22))
val = 0;
else if (val < 0 && (MainBusNo1Volts < 22 || MainBusNo2Volts < 22))
val = 0;
return val;
}
MAKE_NEEDLE( aileron,
SURF_AILERON_BMP,
&surfaces_list2,
NULL,
IMAGE_USE_TRANSPARENCY | IMAGE_USE_ERASE | IMAGE_USE_LUMINOUS,
0,
{99, 94},
{52, 2},
OBSOLETE_AILERON_POS,
aileron_needle_cb,
aileron_nonlinearity,
6 )
PELEMENT_HEADER surfaces_list3[]=
{
&aileron.header,
NULL
};
MAKE_STATIC( surf_background,
SURF_BG_BMP,
&surfaces_list3,
NULL,
IMAGE_USE_TRANSPARENCY | IMAGE_USE_LUMINOUS,
0,
{0, 0} )
PELEMENT_HEADER surfaces_list = &surf_background.header;
MOUSE_BEGIN( surfaces_mouse_rect, HELP_NONE, 0, 0 )
MOUSE_PARENT( 73,21,54,44, HELPID_GAUGE_YAW_TRIM)
MOUSE_PARENT( 46,65,107,54, HELPID_GAUGE_ROLL_TRIM)
MOUSE_PARENT( 76,119,47,58, HELPID_GAUGE_PITCH_TRIM)
MOUSE_END
/////////////////////////////////////////////////////////////////////////////
#undef GAUGE_NAME
#undef GAUGEHDR_VAR_NAME
#undef GAUGE_W
So sieht das dann im FS aus (ich bin nicht der Bildbearbeitungsprofi, das macht jemand anders

):
Hier mal ein EPR-Gauge Hintergrund-Bitmap was mein "Kumpane" schon nachbearbeitet hat:
Dabei steht noch nicht fest ob der Code so bleibt. Das Gauge funktioniert zwar. Nur steht noch nicht fest ob evtl. noch Abhängigkeiten zu anderen Systemen implementiert werden müssen. Es ist also auch wichtig das man sich gute Informationen über das jeweilige Flugzeug organisiert. Danach noch überlegen was man wie im FS umsetzen kann/möchte. Ich denke aber die meiste Zeit nehmen die Tests in Anspruch wenn es darum geht die Funktionen mit dem realen Vorbild zu vergleichen und Fehler allgemein auszumerzen.
Viele Grüße