Starting a bit of reorganization of lighting code.
+++ /dev/null
-/**************************************************************************
- * GLUTkey.c -- handle GLUT keyboard events
- *
- * Written by Curtis Olson, started May 1997.
- *
- * Copyright (C) 1997 Curtis L. Olson - curt@infoplane.com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id$
- * (Log is kept at end of this file)
- **************************************************************************/
-
-
-#include <config.h>
-
-#ifdef HAVE_WINDOWS_H
-# include <windows.h>
-#endif
-
-#include <GL/glut.h>
-#include <XGL/xgl.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <Debug/fg_debug.h>
-#include <Main/GLUTkey.h>
-#include <Main/views.h>
-
-#include <Include/fg_constants.h>
-
-#include <Aircraft/aircraft.h>
-#include <Autopilot/autopilot.h> // Added autopilot.h to list, Jeff Goeke-Smith
-#include <Weather/weather.h>
-
-
-extern int show_hud; /* HUD state */
-extern int displayInstruments;
-
-
-/* Handle keyboard events */
-void GLUTkey(unsigned char k, int x, int y) {
- fgCONTROLS *c;
- struct fgTIME *t;
- struct fgVIEW *v;
- struct fgWEATHER *w;
-
- c = current_aircraft.controls;
- t = &cur_time_params;
- v = ¤t_view;
- w = ¤t_weather;
-
- fgPrintf( FG_INPUT, FG_DEBUG, "Key hit = %d", k);
-
- if ( GLUT_ACTIVE_ALT && glutGetModifiers() ) {
- fgPrintf( FG_INPUT, FG_DEBUG, " SHIFTED\n");
- switch (k) {
- case 49: /* numeric keypad 1 */
- v->goal_view_offset = FG_PI * 0.75;
- return;
- case 50: /* numeric keypad 2 */
- v->goal_view_offset = FG_PI;
- return;
- case 51: /* numeric keypad 3 */
- v->goal_view_offset = FG_PI * 1.25;
- return;
- case 52: /* numeric keypad 4 */
- v->goal_view_offset = FG_PI * 0.50;
- return;
- case 54: /* numeric keypad 6 */
- v->goal_view_offset = FG_PI * 1.50;
- return;
- case 55: /* numeric keypad 7 */
- v->goal_view_offset = FG_PI * 0.25;
- return;
- case 56: /* numeric keypad 8 */
- v->goal_view_offset = 0.00;
- return;
- case 57: /* numeric keypad 9 */
- v->goal_view_offset = FG_PI * 1.75;
- return;
- case 72: /* H key */
- show_hud = !show_hud;
- return;
- case 77: /* M key */
- t->warp -= 60;
- return;
- case 84: /* T key */
- t->warp_delta -= 30;
- return;
- case 87: /* W key */
- displayInstruments = !displayInstruments;
- return;
- case 90: /* Z key */
- w->visibility /= 1.10;
- xglFogf(GL_FOG_END, w->visibility);
- fgPrintf( FG_INPUT, FG_DEBUG,
- "Fog density = %.4f\n", w->visibility );
- return;
- // autopilot additions
- case 65: /* A key */
- fgAPSetMode(1);
- return;
- case 83: /* S key */
- fgAPSetMode(0);
- return;
-
- }
- } else {
- fgPrintf( FG_INPUT, FG_DEBUG, "\n");
- switch (k) {
- case 50: /* numeric keypad 2 */
- fgElevMove(-0.05);
- return;
- case 56: /* numeric keypad 8 */
- fgElevMove(0.05);
- return;
- case 49: /* numeric keypad 1 */
- fgElevTrimMove(-0.001);
- return;
- case 55: /* numeric keypad 7 */
- fgElevTrimMove(0.001);
- return;
- case 52: /* numeric keypad 4 */
- fgAileronMove(-0.05);
- return;
- case 54: /* numeric keypad 6 */
- fgAileronMove(0.05);
- return;
- case 48: /* numeric keypad Ins */
- fgRudderMove(-0.05);
- return;
- case 13: /* numeric keypad Enter */
- fgRudderMove(0.05);
- return;
- case 53: /* numeric keypad 5 */
- fgAileronSet(0.0);
- fgElevSet(0.0);
- fgRudderSet(0.0);
- return;
- case 57: /* numeric keypad 9 (Pg Up) */
- fgThrottleMove(0, 0.01);
- return;
- case 51: /* numeric keypad 3 (Pg Dn) */
- fgThrottleMove(0, -0.01);
- return;
- case 109: /* m key */
- t->warp += 60;
- return;
- case 116: /* t key */
- t->warp_delta += 30;
- return;
- case 122: /* z key */
- w->visibility *= 1.10;
- xglFogf(GL_FOG_END, w->visibility);
- fgPrintf( FG_INPUT, FG_DEBUG, "Fog density = %.4f\n", w->visibility);
- return;
- case 27: /* ESC */
- exit(0);
- }
- }
-
-}
-
-
-/* Handle "special" keyboard events */
-void GLUTspecialkey(int k, int x, int y) {
- fgCONTROLS *c;
- struct fgVIEW *v;
-
- c = current_aircraft.controls;
- v = ¤t_view;
-
- fgPrintf( FG_INPUT, FG_DEBUG, "Special key hit = %d", k);
-
- if ( GLUT_ACTIVE_SHIFT && glutGetModifiers() ) {
- fgPrintf( FG_INPUT, FG_DEBUG, " SHIFTED\n");
- switch (k) {
- case GLUT_KEY_END: /* numeric keypad 1 */
- v->goal_view_offset = FG_PI * 0.75;
- return;
- case GLUT_KEY_DOWN: /* numeric keypad 2 */
- v->goal_view_offset = FG_PI;
- return;
- case GLUT_KEY_PAGE_DOWN: /* numeric keypad 3 */
- v->goal_view_offset = FG_PI * 1.25;
- return;
- case GLUT_KEY_LEFT: /* numeric keypad 4 */
- v->goal_view_offset = FG_PI * 0.50;
- return;
- case GLUT_KEY_RIGHT: /* numeric keypad 6 */
- v->goal_view_offset = FG_PI * 1.50;
- return;
- case GLUT_KEY_HOME: /* numeric keypad 7 */
- v->goal_view_offset = FG_PI * 0.25;
- return;
- case GLUT_KEY_UP: /* numeric keypad 8 */
- v->goal_view_offset = 0.00;
- return;
- case GLUT_KEY_PAGE_UP: /* numeric keypad 9 */
- v->goal_view_offset = FG_PI * 1.75;
- return;
- }
- } else {
- fgPrintf( FG_INPUT, FG_DEBUG, "\n");
- switch (k) {
- case GLUT_KEY_UP:
- fgElevMove(0.05);
- return;
- case GLUT_KEY_DOWN:
- fgElevMove(-0.05);
- return;
- case GLUT_KEY_LEFT:
- fgAileronMove(-0.05);
- return;
- case GLUT_KEY_RIGHT:
- fgAileronMove(0.05);
- return;
- case GLUT_KEY_HOME: /* numeric keypad 1 */
- fgElevTrimMove(0.001);
- return;
- case GLUT_KEY_END: /* numeric keypad 7 */
- fgElevTrimMove(-0.001);
- return;
- case GLUT_KEY_INSERT: /* numeric keypad Ins */
- fgRudderMove(-0.05);
- return;
- case 13: /* numeric keypad Enter */
- fgRudderMove(0.05);
- return;
- case 53: /* numeric keypad 5 */
- fgAileronSet(0.0);
- fgElevSet(0.0);
- fgRudderSet(0.0);
- return;
- case GLUT_KEY_PAGE_UP: /* numeric keypad 9 (Pg Up) */
- fgThrottleMove(0, 0.01);
- return;
- case GLUT_KEY_PAGE_DOWN: /* numeric keypad 3 (Pg Dn) */
- fgThrottleMove(0, -0.01);
- return;
- }
- }
-}
-
-
-/* $Log$
-/* Revision 1.33 1998/04/18 04:11:25 curt
-/* Moved fg_debug to it's own library, added zlib support.
-/*
- * Revision 1.32 1998/04/14 02:21:01 curt
- * Incorporated autopilot heading hold contributed by: Jeff Goeke-Smith
- * <jgoeke@voyager.net>
- *
- * Revision 1.31 1998/04/08 23:34:05 curt
- * Patch from Durk to fix trim reversal with numlock key active.
- *
- * Revision 1.30 1998/04/03 22:09:02 curt
- * Converting to Gnu autoconf system.
- *
- * Revision 1.29 1998/02/07 15:29:40 curt
- * Incorporated HUD changes and struct/typedef changes from Charlie Hotchkiss
- * <chotchkiss@namg.us.anritsu.com>
- *
- * Revision 1.28 1998/02/03 23:20:23 curt
- * Lots of little tweaks to fix various consistency problems discovered by
- * Solaris' CC. Fixed a bug in fg_debug.c with how the fgPrintf() wrapper
- * passed arguments along to the real printf(). Also incorporated HUD changes
- * by Michele America.
- *
- * Revision 1.27 1998/01/27 00:47:55 curt
- * Incorporated Paul Bleisch's <bleisch@chromatic.com> new debug message
- * system and commandline/config file processing code.
- *
- * Revision 1.26 1998/01/19 19:27:07 curt
- * Merged in make system changes from Bob Kuehne <rpk@sgi.com>
- * This should simplify things tremendously.
- *
- * Revision 1.25 1998/01/05 18:44:34 curt
- * Add an option to advance/decrease time from keyboard.
- *
- * Revision 1.24 1997/12/30 16:36:46 curt
- * Merged in Durk's changes ...
- *
- * Revision 1.23 1997/12/15 23:54:44 curt
- * Add xgl wrappers for debugging.
- * Generate terrain normals on the fly.
- *
- * Revision 1.22 1997/12/10 22:37:45 curt
- * Prepended "fg" on the name of all global structures that didn't have it yet.
- * i.e. "struct WEATHER {}" became "struct fgWEATHER {}"
- *
- * Revision 1.21 1997/08/27 21:32:23 curt
- * Restructured view calculation code. Added stars.
- *
- * Revision 1.20 1997/08/27 03:30:13 curt
- * Changed naming scheme of basic shared structures.
- *
- * Revision 1.19 1997/08/25 20:27:21 curt
- * Merged in initial HUD and Joystick code.
- *
- * Revision 1.18 1997/08/22 21:34:38 curt
- * Doing a bit of reorganizing and house cleaning.
- *
- * Revision 1.17 1997/07/19 22:34:02 curt
- * Moved PI definitions to ../constants.h
- * Moved random() stuff to ../Utils/ and renamed fg_random()
- *
- * Revision 1.16 1997/07/18 23:41:24 curt
- * Tweaks for building with Cygnus Win32 compiler.
- *
- * Revision 1.15 1997/07/16 20:04:47 curt
- * Minor tweaks to aid Win32 port.
- *
- * Revision 1.14 1997/07/12 03:50:20 curt
- * Added an #include <Windows32/Base.h> to help compiling for Win32
- *
- * Revision 1.13 1997/06/25 15:39:46 curt
- * Minor changes to compile with rsxnt/win32.
- *
- * Revision 1.12 1997/06/21 17:12:52 curt
- * Capitalized subdirectory names.
- *
- * Revision 1.11 1997/06/18 04:10:31 curt
- * A couple more runway tweaks ...
- *
- * Revision 1.10 1997/06/18 02:21:23 curt
- * Hacked in a runway
- *
- * Revision 1.9 1997/06/02 03:40:06 curt
- * A tiny bit more view tweaking.
- *
- * Revision 1.8 1997/06/02 03:01:38 curt
- * Working on views (side, front, back, transitions, etc.)
- *
- * Revision 1.7 1997/05/31 19:16:25 curt
- * Elevator trim added.
- *
- * Revision 1.6 1997/05/31 04:13:52 curt
- * WE CAN NOW FLY!!!
- *
- * Continuing work on the LaRCsim flight model integration.
- * Added some MSFS-like keyboard input handling.
- *
- * Revision 1.5 1997/05/30 23:26:19 curt
- * Added elevator/aileron controls.
- *
- * Revision 1.4 1997/05/27 17:44:31 curt
- * Renamed & rearranged variables and routines. Added some initial simple
- * timer/alarm routines so the flight model can be updated on a regular interval.
- *
- * Revision 1.3 1997/05/23 15:40:25 curt
- * Added GNU copyright headers.
- * Fog now works!
- *
- * Revision 1.2 1997/05/23 00:35:12 curt
- * Trying to get fog to work ...
- *
- * Revision 1.1 1997/05/21 15:57:50 curt
- * Renamed due to added GLUT support.
- *
- * Revision 1.2 1997/05/19 18:22:41 curt
- * Parameter tweaking ... starting to stub in fog support.
- *
- * Revision 1.1 1997/05/16 16:05:51 curt
- * Initial revision.
- *
- */
--- /dev/null
+/**************************************************************************
+ * GLUTkey.c -- handle GLUT keyboard events
+ *
+ * Written by Curtis Olson, started May 1997.
+ *
+ * Copyright (C) 1997 Curtis L. Olson - curt@infoplane.com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * $Id$
+ * (Log is kept at end of this file)
+ **************************************************************************/
+
+
+#include <config.h>
+
+#ifdef HAVE_WINDOWS_H
+# include <windows.h>
+#endif
+
+#include <GL/glut.h>
+#include <XGL/xgl.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <Aircraft/aircraft.h>
+#include <Autopilot/autopilot.h> // Added autopilot.h to list, Jeff Goeke-Smith
+#include <Debug/fg_debug.h>
+#include <Include/fg_constants.h>
+#include <Weather/weather.h>
+
+#include "GLUTkey.hxx"
+#include "views.hxx"
+
+
+extern int show_hud; /* HUD state */
+extern int displayInstruments;
+
+
+/* Handle keyboard events */
+void GLUTkey(unsigned char k, int x, int y) {
+ fgCONTROLS *c;
+ struct fgTIME *t;
+ struct fgVIEW *v;
+ struct fgWEATHER *w;
+
+ c = current_aircraft.controls;
+ t = &cur_time_params;
+ v = ¤t_view;
+ w = ¤t_weather;
+
+ fgPrintf( FG_INPUT, FG_DEBUG, "Key hit = %d", k);
+
+ if ( GLUT_ACTIVE_ALT && glutGetModifiers() ) {
+ fgPrintf( FG_INPUT, FG_DEBUG, " SHIFTED\n");
+ switch (k) {
+ case 49: /* numeric keypad 1 */
+ v->goal_view_offset = FG_PI * 0.75;
+ return;
+ case 50: /* numeric keypad 2 */
+ v->goal_view_offset = FG_PI;
+ return;
+ case 51: /* numeric keypad 3 */
+ v->goal_view_offset = FG_PI * 1.25;
+ return;
+ case 52: /* numeric keypad 4 */
+ v->goal_view_offset = FG_PI * 0.50;
+ return;
+ case 54: /* numeric keypad 6 */
+ v->goal_view_offset = FG_PI * 1.50;
+ return;
+ case 55: /* numeric keypad 7 */
+ v->goal_view_offset = FG_PI * 0.25;
+ return;
+ case 56: /* numeric keypad 8 */
+ v->goal_view_offset = 0.00;
+ return;
+ case 57: /* numeric keypad 9 */
+ v->goal_view_offset = FG_PI * 1.75;
+ return;
+ case 72: /* H key */
+ show_hud = !show_hud;
+ return;
+ case 77: /* M key */
+ t->warp -= 60;
+ return;
+ case 84: /* T key */
+ t->warp_delta -= 30;
+ return;
+ case 87: /* W key */
+ displayInstruments = !displayInstruments;
+ return;
+ case 90: /* Z key */
+ w->visibility /= 1.10;
+ xglFogf(GL_FOG_END, w->visibility);
+ fgPrintf( FG_INPUT, FG_DEBUG,
+ "Fog density = %.4f\n", w->visibility );
+ return;
+ // autopilot additions
+ case 65: /* A key */
+ fgAPSetMode(1);
+ return;
+ case 83: /* S key */
+ fgAPSetMode(0);
+ return;
+
+ }
+ } else {
+ fgPrintf( FG_INPUT, FG_DEBUG, "\n");
+ switch (k) {
+ case 50: /* numeric keypad 2 */
+ fgElevMove(-0.05);
+ return;
+ case 56: /* numeric keypad 8 */
+ fgElevMove(0.05);
+ return;
+ case 49: /* numeric keypad 1 */
+ fgElevTrimMove(-0.001);
+ return;
+ case 55: /* numeric keypad 7 */
+ fgElevTrimMove(0.001);
+ return;
+ case 52: /* numeric keypad 4 */
+ fgAileronMove(-0.05);
+ return;
+ case 54: /* numeric keypad 6 */
+ fgAileronMove(0.05);
+ return;
+ case 48: /* numeric keypad Ins */
+ fgRudderMove(-0.05);
+ return;
+ case 13: /* numeric keypad Enter */
+ fgRudderMove(0.05);
+ return;
+ case 53: /* numeric keypad 5 */
+ fgAileronSet(0.0);
+ fgElevSet(0.0);
+ fgRudderSet(0.0);
+ return;
+ case 57: /* numeric keypad 9 (Pg Up) */
+ fgThrottleMove(0, 0.01);
+ return;
+ case 51: /* numeric keypad 3 (Pg Dn) */
+ fgThrottleMove(0, -0.01);
+ return;
+ case 109: /* m key */
+ t->warp += 60;
+ return;
+ case 116: /* t key */
+ t->warp_delta += 30;
+ return;
+ case 122: /* z key */
+ w->visibility *= 1.10;
+ xglFogf(GL_FOG_END, w->visibility);
+ fgPrintf( FG_INPUT, FG_DEBUG, "Fog density = %.4f\n", w->visibility);
+ return;
+ case 27: /* ESC */
+ exit(0);
+ }
+ }
+
+}
+
+
+/* Handle "special" keyboard events */
+void GLUTspecialkey(int k, int x, int y) {
+ fgCONTROLS *c;
+ struct fgVIEW *v;
+
+ c = current_aircraft.controls;
+ v = ¤t_view;
+
+ fgPrintf( FG_INPUT, FG_DEBUG, "Special key hit = %d", k);
+
+ if ( GLUT_ACTIVE_SHIFT && glutGetModifiers() ) {
+ fgPrintf( FG_INPUT, FG_DEBUG, " SHIFTED\n");
+ switch (k) {
+ case GLUT_KEY_END: /* numeric keypad 1 */
+ v->goal_view_offset = FG_PI * 0.75;
+ return;
+ case GLUT_KEY_DOWN: /* numeric keypad 2 */
+ v->goal_view_offset = FG_PI;
+ return;
+ case GLUT_KEY_PAGE_DOWN: /* numeric keypad 3 */
+ v->goal_view_offset = FG_PI * 1.25;
+ return;
+ case GLUT_KEY_LEFT: /* numeric keypad 4 */
+ v->goal_view_offset = FG_PI * 0.50;
+ return;
+ case GLUT_KEY_RIGHT: /* numeric keypad 6 */
+ v->goal_view_offset = FG_PI * 1.50;
+ return;
+ case GLUT_KEY_HOME: /* numeric keypad 7 */
+ v->goal_view_offset = FG_PI * 0.25;
+ return;
+ case GLUT_KEY_UP: /* numeric keypad 8 */
+ v->goal_view_offset = 0.00;
+ return;
+ case GLUT_KEY_PAGE_UP: /* numeric keypad 9 */
+ v->goal_view_offset = FG_PI * 1.75;
+ return;
+ }
+ } else {
+ fgPrintf( FG_INPUT, FG_DEBUG, "\n");
+ switch (k) {
+ case GLUT_KEY_UP:
+ fgElevMove(0.05);
+ return;
+ case GLUT_KEY_DOWN:
+ fgElevMove(-0.05);
+ return;
+ case GLUT_KEY_LEFT:
+ fgAileronMove(-0.05);
+ return;
+ case GLUT_KEY_RIGHT:
+ fgAileronMove(0.05);
+ return;
+ case GLUT_KEY_HOME: /* numeric keypad 1 */
+ fgElevTrimMove(0.001);
+ return;
+ case GLUT_KEY_END: /* numeric keypad 7 */
+ fgElevTrimMove(-0.001);
+ return;
+ case GLUT_KEY_INSERT: /* numeric keypad Ins */
+ fgRudderMove(-0.05);
+ return;
+ case 13: /* numeric keypad Enter */
+ fgRudderMove(0.05);
+ return;
+ case 53: /* numeric keypad 5 */
+ fgAileronSet(0.0);
+ fgElevSet(0.0);
+ fgRudderSet(0.0);
+ return;
+ case GLUT_KEY_PAGE_UP: /* numeric keypad 9 (Pg Up) */
+ fgThrottleMove(0, 0.01);
+ return;
+ case GLUT_KEY_PAGE_DOWN: /* numeric keypad 3 (Pg Dn) */
+ fgThrottleMove(0, -0.01);
+ return;
+ }
+ }
+}
+
+
+/* $Log$
+/* Revision 1.1 1998/04/22 13:25:40 curt
+/* C++ - ifing the code.
+/* Starting a bit of reorganization of lighting code.
+/*
+ * Revision 1.33 1998/04/18 04:11:25 curt
+ * Moved fg_debug to it's own library, added zlib support.
+ *
+ * Revision 1.32 1998/04/14 02:21:01 curt
+ * Incorporated autopilot heading hold contributed by: Jeff Goeke-Smith
+ * <jgoeke@voyager.net>
+ *
+ * Revision 1.31 1998/04/08 23:34:05 curt
+ * Patch from Durk to fix trim reversal with numlock key active.
+ *
+ * Revision 1.30 1998/04/03 22:09:02 curt
+ * Converting to Gnu autoconf system.
+ *
+ * Revision 1.29 1998/02/07 15:29:40 curt
+ * Incorporated HUD changes and struct/typedef changes from Charlie Hotchkiss
+ * <chotchkiss@namg.us.anritsu.com>
+ *
+ * Revision 1.28 1998/02/03 23:20:23 curt
+ * Lots of little tweaks to fix various consistency problems discovered by
+ * Solaris' CC. Fixed a bug in fg_debug.c with how the fgPrintf() wrapper
+ * passed arguments along to the real printf(). Also incorporated HUD changes
+ * by Michele America.
+ *
+ * Revision 1.27 1998/01/27 00:47:55 curt
+ * Incorporated Paul Bleisch's <bleisch@chromatic.com> new debug message
+ * system and commandline/config file processing code.
+ *
+ * Revision 1.26 1998/01/19 19:27:07 curt
+ * Merged in make system changes from Bob Kuehne <rpk@sgi.com>
+ * This should simplify things tremendously.
+ *
+ * Revision 1.25 1998/01/05 18:44:34 curt
+ * Add an option to advance/decrease time from keyboard.
+ *
+ * Revision 1.24 1997/12/30 16:36:46 curt
+ * Merged in Durk's changes ...
+ *
+ * Revision 1.23 1997/12/15 23:54:44 curt
+ * Add xgl wrappers for debugging.
+ * Generate terrain normals on the fly.
+ *
+ * Revision 1.22 1997/12/10 22:37:45 curt
+ * Prepended "fg" on the name of all global structures that didn't have it yet.
+ * i.e. "struct WEATHER {}" became "struct fgWEATHER {}"
+ *
+ * Revision 1.21 1997/08/27 21:32:23 curt
+ * Restructured view calculation code. Added stars.
+ *
+ * Revision 1.20 1997/08/27 03:30:13 curt
+ * Changed naming scheme of basic shared structures.
+ *
+ * Revision 1.19 1997/08/25 20:27:21 curt
+ * Merged in initial HUD and Joystick code.
+ *
+ * Revision 1.18 1997/08/22 21:34:38 curt
+ * Doing a bit of reorganizing and house cleaning.
+ *
+ * Revision 1.17 1997/07/19 22:34:02 curt
+ * Moved PI definitions to ../constants.h
+ * Moved random() stuff to ../Utils/ and renamed fg_random()
+ *
+ * Revision 1.16 1997/07/18 23:41:24 curt
+ * Tweaks for building with Cygnus Win32 compiler.
+ *
+ * Revision 1.15 1997/07/16 20:04:47 curt
+ * Minor tweaks to aid Win32 port.
+ *
+ * Revision 1.14 1997/07/12 03:50:20 curt
+ * Added an #include <Windows32/Base.h> to help compiling for Win32
+ *
+ * Revision 1.13 1997/06/25 15:39:46 curt
+ * Minor changes to compile with rsxnt/win32.
+ *
+ * Revision 1.12 1997/06/21 17:12:52 curt
+ * Capitalized subdirectory names.
+ *
+ * Revision 1.11 1997/06/18 04:10:31 curt
+ * A couple more runway tweaks ...
+ *
+ * Revision 1.10 1997/06/18 02:21:23 curt
+ * Hacked in a runway
+ *
+ * Revision 1.9 1997/06/02 03:40:06 curt
+ * A tiny bit more view tweaking.
+ *
+ * Revision 1.8 1997/06/02 03:01:38 curt
+ * Working on views (side, front, back, transitions, etc.)
+ *
+ * Revision 1.7 1997/05/31 19:16:25 curt
+ * Elevator trim added.
+ *
+ * Revision 1.6 1997/05/31 04:13:52 curt
+ * WE CAN NOW FLY!!!
+ *
+ * Continuing work on the LaRCsim flight model integration.
+ * Added some MSFS-like keyboard input handling.
+ *
+ * Revision 1.5 1997/05/30 23:26:19 curt
+ * Added elevator/aileron controls.
+ *
+ * Revision 1.4 1997/05/27 17:44:31 curt
+ * Renamed & rearranged variables and routines. Added some initial simple
+ * timer/alarm routines so the flight model can be updated on a regular interval.
+ *
+ * Revision 1.3 1997/05/23 15:40:25 curt
+ * Added GNU copyright headers.
+ * Fog now works!
+ *
+ * Revision 1.2 1997/05/23 00:35:12 curt
+ * Trying to get fog to work ...
+ *
+ * Revision 1.1 1997/05/21 15:57:50 curt
+ * Renamed due to added GLUT support.
+ *
+ * Revision 1.2 1997/05/19 18:22:41 curt
+ * Parameter tweaking ... starting to stub in fog support.
+ *
+ * Revision 1.1 1997/05/16 16:05:51 curt
+ * Initial revision.
+ *
+ */
+++ /dev/null
-/**************************************************************************
- * GLUTkey.h -- handle GLUT keyboard events
- *
- * Written by Curtis Olson, started May 1997.
- *
- * Copyright (C) 1997 Curtis L. Olson - curt@infoplane.com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id$
- * (Log is kept at end of this file)
- **************************************************************************/
-
-
-#ifndef _GLUTKEY_H
-#define _GLUTKEY_H
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-#include <config.h>
-
-#ifdef HAVE_WINDOWS_H
-# include <windows.h>
-#endif
-
-#include <GL/glut.h>
-#include <XGL/xgl.h>
-
-/* Handle keyboard events */
-void GLUTkey(unsigned char k, int x, int y);
-void GLUTspecialkey(int k, int x, int y);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* _GLUTKEY_H */
-
-
-/* $Log$
-/* Revision 1.9 1998/04/21 17:02:36 curt
-/* Prepairing for C++ integration.
-/*
- * Revision 1.8 1998/04/03 22:09:02 curt
- * Converting to Gnu autoconf system.
- *
- * Revision 1.7 1998/02/12 21:59:44 curt
- * Incorporated code changes contributed by Charlie Hotchkiss
- * <chotchkiss@namg.us.anritsu.com>
- *
- * Revision 1.6 1998/01/22 02:59:36 curt
- * Changed #ifdef FILE_H to #ifdef _FILE_H
- *
- * Revision 1.5 1997/07/23 21:52:23 curt
- * Put comments around the text after an #endif for increased portability.
- *
- * Revision 1.4 1997/06/02 03:40:06 curt
- * A tiny bit more view tweaking.
- *
- * Revision 1.3 1997/05/31 04:13:52 curt
- * WE CAN NOW FLY!!!
- *
- * Continuing work on the LaRCsim flight model integration.
- * Added some MSFS-like keyboard input handling.
- *
- * Revision 1.2 1997/05/23 15:40:25 curt
- * Added GNU copyright headers.
- * Fog now works!
- *
- * Revision 1.1 1997/05/21 15:57:51 curt
- * Renamed due to added GLUT support.
- *
- * Revision 1.2 1997/05/17 00:17:34 curt
- * Trying to stub in support for standard OpenGL.
- *
- * Revision 1.1 1997/05/16 16:05:53 curt
- * Initial revision.
- *
- */
--- /dev/null
+/**************************************************************************
+ * GLUTkey.h -- handle GLUT keyboard events
+ *
+ * Written by Curtis Olson, started May 1997.
+ *
+ * Copyright (C) 1997 Curtis L. Olson - curt@infoplane.com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * $Id$
+ * (Log is kept at end of this file)
+ **************************************************************************/
+
+
+#ifndef _GLUTKEY_H
+#define _GLUTKEY_H
+
+
+#ifndef __cplusplus
+# error This library requires C++
+#endif
+
+
+#include <config.h>
+
+#ifdef HAVE_WINDOWS_H
+# include <windows.h>
+#endif
+
+#include <GL/glut.h>
+#include <XGL/xgl.h>
+
+
+/* Handle keyboard events */
+void GLUTkey(unsigned char k, int x, int y);
+void GLUTspecialkey(int k, int x, int y);
+
+
+#endif /* _GLUTKEY_H */
+
+
+/* $Log$
+/* Revision 1.1 1998/04/22 13:25:41 curt
+/* C++ - ifing the code.
+/* Starting a bit of reorganization of lighting code.
+/*
+ * Revision 1.9 1998/04/21 17:02:36 curt
+ * Prepairing for C++ integration.
+ *
+ * Revision 1.8 1998/04/03 22:09:02 curt
+ * Converting to Gnu autoconf system.
+ *
+ * Revision 1.7 1998/02/12 21:59:44 curt
+ * Incorporated code changes contributed by Charlie Hotchkiss
+ * <chotchkiss@namg.us.anritsu.com>
+ *
+ * Revision 1.6 1998/01/22 02:59:36 curt
+ * Changed #ifdef FILE_H to #ifdef _FILE_H
+ *
+ * Revision 1.5 1997/07/23 21:52:23 curt
+ * Put comments around the text after an #endif for increased portability.
+ *
+ * Revision 1.4 1997/06/02 03:40:06 curt
+ * A tiny bit more view tweaking.
+ *
+ * Revision 1.3 1997/05/31 04:13:52 curt
+ * WE CAN NOW FLY!!!
+ *
+ * Continuing work on the LaRCsim flight model integration.
+ * Added some MSFS-like keyboard input handling.
+ *
+ * Revision 1.2 1997/05/23 15:40:25 curt
+ * Added GNU copyright headers.
+ * Fog now works!
+ *
+ * Revision 1.1 1997/05/21 15:57:51 curt
+ * Renamed due to added GLUT support.
+ *
+ * Revision 1.2 1997/05/17 00:17:34 curt
+ * Trying to stub in support for standard OpenGL.
+ *
+ * Revision 1.1 1997/05/16 16:05:53 curt
+ * Initial revision.
+ *
+ */
# include <getopt.h>
#endif
-#include <Debug/fg_debug.h>
-#include <Main/GLUTkey.h>
-#include <Main/fg_init.h>
-#include <Main/fg_getopt.h>
-#include <Main/views.h>
-
#include <Include/cmdargs.h> // Line to command line arguments
#include <Include/fg_constants.h> // for VERSION
#include <Include/general.h>
#include <Aircraft/aircraft.h>
-#include <Astro/moon.h>
-#include <Astro/planets.h>
-#include <Astro/sky.h>
-#include <Astro/stars.h>
-#include <Astro/sun.h>
+#include <Astro/moon.hxx>
+#include <Astro/planets.hxx>
+#include <Astro/sky.hxx>
+#include <Astro/stars.hxx>
+#include <Astro/sun.hxx>
#include <Cockpit/cockpit.h>
+#include <Debug/fg_debug.h>
#include <Joystick/joystick.h>
#include <Math/fg_geodesy.h>
#include <Math/mat3.h>
#include <Math/polar.h>
#include <Scenery/scenery.h>
-#include <Scenery/tilemgr.h>
+#include <Scenery/tilemgr.hxx>
#include <Time/event.h>
#include <Time/fg_time.h>
#include <Time/fg_timer.h>
-#include <Time/sunpos.h>
+#include <Time/sunpos.hxx>
#include <Weather/weather.h>
+#include "GLUTkey.hxx"
+#include "fg_init.hxx"
+#include "fg_getopt.h"
+#include "views.hxx"
+
// This is a record containing global housekeeping information
fgGENERAL general;
// $Log$
+// Revision 1.2 1998/04/22 13:25:41 curt
+// C++ - ifing the code.
+// Starting a bit of reorganization of lighting code.
+//
// Revision 1.1 1998/04/21 17:02:39 curt
// Prepairing for C++ integration.
//
bin_SCRIPTS = runfg runfg.bat
fg_SOURCES = \
- GLUTkey.c GLUTkey.h \
+ GLUTkey.cxx GLUTkey.hxx \
GLUTmain.cxx \
fg_config.h \
fg_getopt.c fg_getopt.h \
- fg_init.c fg_init.h \
- views.c views.h
+ fg_init.cxx fg_init.hxx \
+ views.cxx views.hxx
fg_LDADD = \
$(top_builddir)/Simulator/Aircraft/libAircraft.la \
bin_SCRIPTS = runfg runfg.bat
fg_SOURCES = \
- GLUTkey.c GLUTkey.h \
+ GLUTkey.cxx GLUTkey.hxx \
GLUTmain.cxx \
fg_config.h \
fg_getopt.c fg_getopt.h \
- fg_init.c fg_init.h \
- views.c views.h
+ fg_init.cxx fg_init.hxx \
+ views.cxx views.hxx
fg_LDADD = \
$(top_builddir)/Simulator/Aircraft/libAircraft.la \
extern void print_desc(int num_opt, Option **optarr); // Not original code
+
#ifdef __cplusplus
}
#endif
+
#endif
/* $Log$
-/* Revision 1.2 1998/04/21 17:02:41 curt
-/* Prepairing for C++ integration.
+/* Revision 1.3 1998/04/22 13:25:43 curt
+/* C++ - ifing the code.
+/* Starting a bit of reorganization of lighting code.
/*
+ * Revision 1.2 1998/04/21 17:02:41 curt
+ * Prepairing for C++ integration.
+ *
* Revision 1.1 1998/02/13 00:23:39 curt
* Initial revision.
*
+++ /dev/null
-/* -*- Mode: C++ -*-
- *
- * fg_init.c -- Flight Gear top level initialization routines
- *
- * Written by Curtis Olson, started August 1997.
- *
- * Copyright (C) 1997 Curtis L. Olson - curt@infoplane.com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- *
- * $Id$
- * (Log is kept at end of this file)
- **************************************************************************/
-
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <Main/fg_init.h>
-#include <Main/views.h>
-
-#include <Include/cmdargs.h>
-#include <Include/fg_constants.h>
-#include <Include/general.h>
-
-#include <Aircraft/aircraft.h>
-#include <Astro/moon.h>
-#include <Astro/planets.h>
-#include <Astro/sky.h>
-#include <Astro/stars.h>
-#include <Astro/sun.h>
-#include <Autopilot/autopilot.h>
-#include <Cockpit/cockpit.h>
-#include <Debug/fg_debug.h>
-#include <Joystick/joystick.h>
-#include <Math/fg_random.h>
-#include <Scenery/scenery.h>
-#include <Scenery/tilemgr.h>
-#include <Time/event.h>
-#include <Time/fg_time.h>
-#include <Time/sunpos.h>
-#include <Weather/weather.h>
-
-extern int show_hud; /* HUD state */
-extern int displayInstruments;
-extern const char *default_root;
-
-/* General house keeping initializations */
-
-int fgInitGeneral( void ) {
- fgGENERAL *g;
-
- g = &general;
-
- fgInitDebug();
-
- fgPrintf( FG_GENERAL, FG_INFO, "General Initialization\n" );
- fgPrintf( FG_GENERAL, FG_INFO, "======= ==============\n" );
-
- /* seed the random number generater */
- fg_srandom();
-
- // determine the fg root path. The command line parser getargs() will
- // fill in a root directory if the option was used.
-
- if( !(g->root_dir) ) {
- // If not set by command line test for environmental var..
- g->root_dir = getenv("FG_ROOT");
- if ( !g->root_dir ) {
- // No root path set? Then assume, we will exit if this is
- // wrong when looking for support files.
- g->root_dir = (char *)DefaultRootDir;
- }
- }
- fgPrintf( FG_GENERAL, FG_INFO, "FG_ROOT = %s\n\n", g->root_dir);
-
- // Dummy value can be changed if future initializations
- // fail a critical task.
- return ( 0 /* FALSE */ );
-}
-
-
-// This is the top level init routine which calls all the other
-// initialization routines. If you are adding a subsystem to flight
-// gear, its initialization call should located in this routine.
-// Returns non-zero if a problem encountered.
-
-int fgInitSubsystems( void ) {
- double cur_elev;
-
- // Ok will be flagged only if we get EVERYTHING done.
- int ret_val = 1 /* TRUE */;
-
- fgFLIGHT *f;
- struct fgLIGHT *l;
- struct fgTIME *t;
- struct fgVIEW *v;
-
- l = &cur_light_params;
- t = &cur_time_params;
- v = ¤t_view;
-
- fgPrintf( FG_GENERAL, FG_INFO, "Initialize Subsystems\n");
- fgPrintf( FG_GENERAL, FG_INFO, "========== ==========\n");
-
- /****************************************************************
- * The following section sets up the flight model EOM parameters and
- * should really be read in from one or more files.
- ****************************************************************/
-
- /* Must happen before any of the flight model or control
- * parameters are set */
-
- fgAircraftInit(); // In the future this might not be the case.
- f = current_aircraft.flight;
-
- // Initial Position at (P13) Globe, AZ
- FG_Longitude = ( -110.6642444 ) * DEG_TO_RAD;
- FG_Latitude = ( 33.3528917 ) * DEG_TO_RAD;
- FG_Runway_altitude = (3234.5 + 300);
- FG_Altitude = FG_Runway_altitude + 3.758099;
-
- // Initial Position at (E81) Superior, AZ
- // FG_Longitude = ( -111.1270650 ) * DEG_TO_RAD;
- // FG_Latitude = ( 33.2778339 ) * DEG_TO_RAD;
- // FG_Runway_altitude = (2646 + 100);
- // FG_Altitude = FG_Runway_altitude + 3.758099;
-
- // Initial Position at (TUS) Tucson, AZ
- // FG_Longitude = ( -110.9412597 ) * DEG_TO_RAD;
- // FG_Latitude = ( 32.1162439 ) * DEG_TO_RAD;
- // FG_Runway_altitude = (2641 + 0);
- // FG_Altitude = FG_Runway_altitude + 3.758099;
-
- // Initial Position at (SEZ) SEDONA airport
- // FG_Longitude = (-111.7884614 + 0.01) * DEG_TO_RAD;
- // FG_Latitude = ( 34.8486289 - 0.015) * DEG_TO_RAD;
- // FG_Runway_altitude = (4827 + 450);
- // FG_Altitude = FG_Runway_altitude + 3.758099;
-
- // Initial Position at near Anchoraze, AK
- // FG_Longitude = ( -152.00 ) * DEG_TO_RAD;
- // FG_Latitude = ( 61.17 ) * DEG_TO_RAD;
- // FG_Runway_altitude = (0);
- // FG_Altitude = FG_Runway_altitude + 3.758099;
-
- // Initial Position at (HSP) Hot Springs, VA
- // FG_Longitude = (-79.8338964 + 0.01) * DEG_TO_RAD;
- // FG_Latitude = ( 37.9514564 + 0.008) * DEG_TO_RAD;
- // FG_Runway_altitude = (3792 + 1300);
- // FG_Altitude = FG_Runway_altitude + 3.758099;
-
- // Initial Position at (ANE) Anoka County airport
- // FG_Longitude = -93.2113889 * DEG_TO_RAD;
- // FG_Latitude = 45.145 * DEG_TO_RAD;
- // FG_Runway_altitude = 912;
- // FG_Altitude = FG_Runway_altitude + 3.758099;
-
- // Initial Position north of the city of Globe
- // FG_Longitude = ( -398673.28 / 3600.0 ) * DEG_TO_RAD;
- // FG_Latitude = ( 120625.64 / 3600.0 ) * DEG_TO_RAD;
- // FG_Longitude = ( -397867.44 / 3600.0 ) * DEG_TO_RAD;
- // FG_Latitude = ( 119548.21 / 3600.0 ) * DEG_TO_RAD;
- // FG_Altitude = 0.0 + 3.758099;
-
- // Initial Position near where I used to live in Globe, AZ
- // FG_Longitude = ( -398757.6 / 3600.0 ) * DEG_TO_RAD;
- // FG_Latitude = ( 120160.0 / 3600.0 ) * DEG_TO_RAD;
- // FG_Runway_altitude = 4000.0;
- // FG_Altitude = FG_Runway_altitude + 3.758099;
-
- // Initial Position: 10125 Jewell St. NE
- // FG_Longitude = ( -93.15 ) * DEG_TO_RAD;
- // FG_Latitude = ( 45.15 ) * DEG_TO_RAD;
- // FG_Runway_altitude = 950.0;
- // FG_Altitude = FG_Runway_altitude + 3.758099;
-
- // Initial Position: Somewhere near the Grand Canyon
- // FG_Longitude = ( -112.5 ) * DEG_TO_RAD;
- // FG_Latitude = ( 36.5 ) * DEG_TO_RAD;
- // FG_Runway_altitude = 8000.0;
- // FG_Altitude = FG_Runway_altitude + 3.758099;
-
- // Initial Position: (GCN) Grand Canyon Airport, AZ
- // FG_Longitude = ( -112.1469647 ) * DEG_TO_RAD;
- // FG_Latitude = ( 35.9523539 ) * DEG_TO_RAD;
- // FG_Runway_altitude = 6606.0;
- // FG_Altitude = FG_Runway_altitude + 3.758099;
-
- // Initial Position: Jim Brennon's Kingmont Observatory
- // FG_Longitude = ( -121.1131667 ) * DEG_TO_RAD;
- // FG_Latitude = ( 38.8293917 ) * DEG_TO_RAD;
- // FG_Runway_altitude = 920.0;
- // FG_Altitude = FG_Runway_altitude + 3.758099;
-
- // probably interesting for european team members
- // That is: If I can get the scenery to work -;) (Durk)
-
- // Initial Position: Groningen Airport Eelde, the netherlands
- // FG_Longitude = ( 6.583333 ) * DEG_TO_RAD;
- // FG_Latitude = ( 53.125 ) * DEG_TO_RAD;
- // FG_Runway_altitude = 920.0;
- // FG_Altitude = FG_Runway_altitude + 3.758099;
-
- // Initial Position: Schiphol Amsterdam Airport, the netherlands
- // FG_Longitude = ( -4.7641667 ) * DEG_TO_RAD;
- // FG_Latitude = ( 52.308056 ) * DEG_TO_RAD;
- // FG_Runway_altitude = 920.0;
- // FG_Altitude = FG_Runway_altitude + 3.758099;
-
- // Eclipse Watching w73.5 n10 (approx) 18:00 UT
- // FG_Longitude = ( -73.5 ) * DEG_TO_RAD;
- // FG_Latitude = ( 10.0 ) * DEG_TO_RAD;
- // FG_Runway_altitude = 0.0;
- // FG_Altitude = FG_Runway_altitude + 3.758099;
-
- // Test Position
- // FG_Longitude = ( -109.5 ) * DEG_TO_RAD;
- // FG_Latitude = ( 32.5 ) * DEG_TO_RAD;
- // FG_Runway_altitude = (2646 + 2000);
- // FG_Altitude = FG_Runway_altitude + 3.758099;
-
- fgPrintf( FG_GENERAL, FG_INFO,
- "Initial position is: (%.4f, %.4f, %.2f)\n",
- FG_Longitude * RAD_TO_DEG, FG_Latitude * RAD_TO_DEG,
- FG_Altitude * FEET_TO_METER);
-
- /* Initial Velocity */
- FG_V_north = 0.0 /* 7.287719E+00 */;
- FG_V_east = 0.0 /* 1.521770E+03 */;
- FG_V_down = 0.0 /* -1.265722E-05 */;
-
- /* Initial Orientation */
- FG_Phi = -2.658474E-06;
- FG_Theta = 7.401790E-03;
- FG_Psi = 260.0 * DEG_TO_RAD;
-
- /* Initial Angular B rates */
- FG_P_body = 7.206685E-05;
- FG_Q_body = 0.000000E+00;
- FG_R_body = 9.492658E-05;
-
- FG_Earth_position_angle = 0.000000E+00;
-
- /* Mass properties and geometry values */
- FG_Mass = 8.547270E+01;
- FG_I_xx = 1.048000E+03;
- FG_I_yy = 3.000000E+03;
- FG_I_zz = 3.530000E+03;
- FG_I_xz = 0.000000E+00;
-
- /* CG position w.r.t. ref. point */
- FG_Dx_cg = 0.000000E+00;
- FG_Dy_cg = 0.000000E+00;
- FG_Dz_cg = 0.000000E+00;
-
- /* Set initial position and slew parameters */
- /* fgSlewInit(-398391.3, 120070.41, 244, 3.1415); */ /* GLOBE Airport */
- /* fgSlewInit(-335340,162540, 15, 4.38); */
- /* fgSlewInit(-398673.28,120625.64, 53, 4.38); */
-
- /* Initialize the event manager */
- fgEventInit();
-
- /* Dump event stats every 60 seconds */
- fgEventRegister( "fgEventPrintStats()", fgEventPrintStats,
- FG_EVENT_READY, 60000 );
-
- /* Initialize "time" */
- fgTimeInit(t);
- fgTimeUpdate(f, t);
-
- /* fgViewUpdate() needs the sun in the right place, while
- * fgUpdateSunPos() needs to know the view position. I'll get
- * around this interdependency for now by calling fgUpdateSunPos()
- * once, then moving on with normal initialization. */
- fgUpdateSunPos();
-
- /* Initialize view parameters */
- fgViewInit(v);
- fgViewUpdate(f, v, l);
-
- /* Initialize the weather modeling subsystem */
- fgWeatherInit();
-
- /* update the weather for our current position */
- fgEventRegister( "fgWeatherUpdate()", fgWeatherUpdate,
- FG_EVENT_READY, 120000 );
-
- /* Initialize the Cockpit subsystem */
- if( fgCockpitInit( ¤t_aircraft )) {
- // Cockpit initialized ok.
- } else {
- fgPrintf( FG_GENERAL, FG_EXIT, "Error in Cockpit initialization!\n" );
- }
-
- // Initialize the orbital elements of sun, moon and mayor planets
- fgSolarSystemInit(*t);
-
- // Initialize the Stars subsystem
- if( fgStarsInit() ) {
- // Stars initialized ok.
- } else {
- fgPrintf( FG_GENERAL, FG_EXIT, "Error in Stars initialization!\n" );
- }
-
- // Initialize the planetary subsystem
- fgEventRegister("fgPlanetsInit()", fgPlanetsInit, FG_EVENT_READY, 600000);
-
- // Initialize the sun's position
- fgEventRegister("fgSunInit()", fgSunInit, FG_EVENT_READY, 30000 );
-
- // Intialize the moon's position
- fgEventRegister( "fgMoonInit()", fgMoonInit, FG_EVENT_READY, 600000 );
-
- // Initialize the "sky"
- fgSkyInit();
-
- // Initialize the Scenery Management subsystem
- if ( fgSceneryInit() ) {
- // Scenery initialized ok.
- } else {
- fgPrintf( FG_GENERAL, FG_EXIT, "Error in Scenery initialization!\n" );
- }
-
-
- if( fgTileMgrInit() ) {
- // Load the local scenery data
- fgTileMgrUpdate();
- } else {
- fgPrintf( FG_GENERAL, FG_EXIT,
- "Error in Tile Manager initialization!\n" );
- }
-
- // I'm just sticking this here for now, it should probably move
- // eventually
- // cur_elev = mesh_altitude(FG_Longitude * RAD_TO_DEG * 3600.0,
- // FG_Latitude * RAD_TO_DEG * 3600.0); */
- // fgPrintf( FG_GENERAL, FG_INFO,
- // "True ground elevation is %.2f meters here.\n",
- // cur_elev); */
-
- cur_elev = FG_Runway_altitude * FEET_TO_METER;
- if ( cur_elev > -9990.0 ) {
- FG_Runway_altitude = cur_elev * METER_TO_FEET;
- }
-
- if ( FG_Altitude < FG_Runway_altitude ) {
- FG_Altitude = FG_Runway_altitude + 3.758099;
- }
-
- fgPrintf(FG_GENERAL, FG_INFO,
- "Updated position (after elevation adj): (%.4f, %.4f, %.2f)\n",
- FG_Latitude * RAD_TO_DEG, FG_Longitude * RAD_TO_DEG,
- FG_Altitude * FEET_TO_METER);
-
- /* end of thing that I just stuck in that I should probably move */
-
- /* Initialize the flight model subsystem data structures base on
- * above values */
-
- fgFlightModelInit( FG_LARCSIM, f, 1.0 / DEFAULT_MODEL_HZ );
-
- // To HUD or not to HUD - Now a command line issue
- // show_hud = 0;
-
- // Let's not show the instrument panel
- displayInstruments = 0;
-
- // Joystick support
- if (fgJoystickInit(0) ) {
- // Joystick initialized ok.
- } else {
- fgPrintf( FG_GENERAL, FG_EXIT, "Error in Joystick initialization!\n" );
- }
-
- /// Autopilot init added here, by Jeff Goeke-Smith
- fgAPInit(¤t_aircraft);
- // end added section;
-
- // One more try here to get the sky synced up
- fgSkyColorsInit();
- ret_val = 0;
-
- fgPrintf(FG_GENERAL, FG_INFO,"\n");
- return ret_val;
-}
-
-
-/* $Log$
-/* Revision 1.56 1998/04/18 04:11:28 curt
-/* Moved fg_debug to it's own library, added zlib support.
-/*
- * Revision 1.55 1998/04/14 02:21:03 curt
- * Incorporated autopilot heading hold contributed by: Jeff Goeke-Smith
- * <jgoeke@voyager.net>
- *
- * Revision 1.54 1998/04/08 23:35:36 curt
- * Tweaks to Gnu automake/autoconf system.
- *
- * Revision 1.53 1998/04/03 22:09:06 curt
- * Converting to Gnu autoconf system.
- *
- * Revision 1.52 1998/03/23 21:24:38 curt
- * Source code formating tweaks.
- *
- * Revision 1.51 1998/03/14 00:31:22 curt
- * Beginning initial terrain texturing experiments.
- *
- * Revision 1.50 1998/03/09 22:46:19 curt
- * Minor tweaks.
- *
- * Revision 1.49 1998/02/23 19:07:59 curt
- * Incorporated Durk's Astro/ tweaks. Includes unifying the sun position
- * calculation code between sun display, and other FG sections that use this
- * for things like lighting.
- *
- * Revision 1.48 1998/02/21 14:53:15 curt
- * Added Charlie's HUD changes.
- *
- * Revision 1.47 1998/02/19 13:05:53 curt
- * Incorporated some HUD tweaks from Michelle America.
- * Tweaked the sky's sunset/rise colors.
- * Other misc. tweaks.
- *
- * Revision 1.46 1998/02/18 15:07:06 curt
- * Tweaks to build with SGI OpenGL (and therefor hopefully other accelerated
- * drivers will work.)
- *
- * Revision 1.45 1998/02/16 13:39:43 curt
- * Miscellaneous weekend tweaks. Fixed? a cache problem that caused whole
- * tiles to occasionally be missing.
- *
- * Revision 1.44 1998/02/12 21:59:50 curt
- * Incorporated code changes contributed by Charlie Hotchkiss
- * <chotchkiss@namg.us.anritsu.com>
- *
- * Revision 1.43 1998/02/11 02:50:40 curt
- * Minor changes.
- *
- * Revision 1.42 1998/02/09 22:56:58 curt
- * Removed "depend" files from cvs control. Other minor make tweaks.
- *
- * Revision 1.41 1998/02/09 15:07:50 curt
- * Minor tweaks.
- *
- * Revision 1.40 1998/02/07 15:29:44 curt
- * Incorporated HUD changes and struct/typedef changes from Charlie Hotchkiss
- * <chotchkiss@namg.us.anritsu.com>
- *
- * Revision 1.39 1998/02/03 23:20:25 curt
- * Lots of little tweaks to fix various consistency problems discovered by
- * Solaris' CC. Fixed a bug in fg_debug.c with how the fgPrintf() wrapper
- * passed arguments along to the real printf(). Also incorporated HUD changes
- * by Michele America.
- *
- * Revision 1.38 1998/02/02 20:53:58 curt
- * Incorporated Durk's changes.
- *
- * Revision 1.37 1998/02/01 03:39:54 curt
- * Minor tweaks.
- *
- * Revision 1.36 1998/01/31 00:43:13 curt
- * Added MetroWorks patches from Carmen Volpe.
- *
- * Revision 1.35 1998/01/27 00:47:57 curt
- * Incorporated Paul Bleisch's <bleisch@chromatic.com> new debug message
- * system and commandline/config file processing code.
- *
- * Revision 1.34 1998/01/22 02:59:37 curt
- * Changed #ifdef FILE_H to #ifdef _FILE_H
- *
- * Revision 1.33 1998/01/21 21:11:34 curt
- * Misc. tweaks.
- *
- * Revision 1.32 1998/01/19 19:27:08 curt
- * Merged in make system changes from Bob Kuehne <rpk@sgi.com>
- * This should simplify things tremendously.
- *
- * Revision 1.31 1998/01/19 18:40:32 curt
- * Tons of little changes to clean up the code and to remove fatal errors
- * when building with the c++ compiler.
- *
- * Revision 1.30 1998/01/13 00:23:09 curt
- * Initial changes to support loading and management of scenery tiles. Note,
- * there's still a fair amount of work left to be done.
- *
- * Revision 1.29 1998/01/08 02:22:08 curt
- * Beginning to integrate Tile management subsystem.
- *
- * Revision 1.28 1998/01/07 03:18:58 curt
- * Moved astronomical stuff from .../Src/Scenery to .../Src/Astro/
- *
- * Revision 1.27 1998/01/05 18:44:35 curt
- * Add an option to advance/decrease time from keyboard.
- *
- * Revision 1.26 1997/12/30 23:09:04 curt
- * Tweaking initialization sequences.
- *
- * Revision 1.25 1997/12/30 22:22:33 curt
- * Further integration of event manager.
- *
- * Revision 1.24 1997/12/30 20:47:44 curt
- * Integrated new event manager with subsystem initializations.
- *
- * Revision 1.23 1997/12/30 16:36:50 curt
- * Merged in Durk's changes ...
- *
- * Revision 1.22 1997/12/19 23:34:05 curt
- * Lot's of tweaking with sky rendering and lighting.
- *
- * Revision 1.21 1997/12/19 16:45:00 curt
- * Working on scene rendering order and options.
- *
- * Revision 1.20 1997/12/18 23:32:33 curt
- * First stab at sky dome actually starting to look reasonable. :-)
- *
- * Revision 1.19 1997/12/17 23:13:36 curt
- * Began working on rendering a sky.
- *
- * Revision 1.18 1997/12/15 23:54:49 curt
- * Add xgl wrappers for debugging.
- * Generate terrain normals on the fly.
- *
- * Revision 1.17 1997/12/15 20:59:09 curt
- * Misc. tweaks.
- *
- * Revision 1.16 1997/12/12 19:52:48 curt
- * Working on lightling and material properties.
- *
- * Revision 1.15 1997/12/11 04:43:55 curt
- * Fixed sun vector and lighting problems. I thing the moon is now lit
- * correctly.
- *
- * Revision 1.14 1997/12/10 22:37:47 curt
- * Prepended "fg" on the name of all global structures that didn't have it yet.
- * i.e. "struct WEATHER {}" became "struct fgWEATHER {}"
- *
- * Revision 1.13 1997/11/25 19:25:32 curt
- * Changes to integrate Durk's moon/sun code updates + clean up.
- *
- * Revision 1.12 1997/11/15 18:16:35 curt
- * minor tweaks.
- *
- * Revision 1.11 1997/10/30 12:38:42 curt
- * Working on new scenery subsystem.
- *
- * Revision 1.10 1997/10/25 03:24:23 curt
- * Incorporated sun, moon, and star positioning code contributed by Durk Talsma.
- *
- * Revision 1.9 1997/09/23 00:29:39 curt
- * Tweaks to get things to compile with gcc-win32.
- *
- * Revision 1.8 1997/09/22 14:44:20 curt
- * Continuing to try to align stars correctly.
- *
- * Revision 1.7 1997/09/16 15:50:30 curt
- * Working on star alignment and time issues.
- *
- * Revision 1.6 1997/09/05 14:17:30 curt
- * More tweaking with stars.
- *
- * Revision 1.5 1997/09/04 02:17:36 curt
- * Shufflin' stuff.
- *
- * Revision 1.4 1997/08/27 21:32:26 curt
- * Restructured view calculation code. Added stars.
- *
- * Revision 1.3 1997/08/27 03:30:19 curt
- * Changed naming scheme of basic shared structures.
- *
- * Revision 1.2 1997/08/25 20:27:23 curt
- * Merged in initial HUD and Joystick code.
- *
- * Revision 1.1 1997/08/23 01:46:20 curt
- * Initial revision.
- *
- */
--- /dev/null
+/* -*- Mode: C++ -*-
+ *
+ * fg_init.c -- Flight Gear top level initialization routines
+ *
+ * Written by Curtis Olson, started August 1997.
+ *
+ * Copyright (C) 1997 Curtis L. Olson - curt@infoplane.com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *
+ * $Id$
+ * (Log is kept at end of this file)
+ **************************************************************************/
+
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <Include/cmdargs.h>
+#include <Include/fg_constants.h>
+#include <Include/general.h>
+
+#include <Aircraft/aircraft.h>
+#include <Astro/moon.hxx>
+#include <Astro/planets.hxx>
+#include <Astro/sky.hxx>
+#include <Astro/stars.hxx>
+#include <Astro/sun.hxx>
+#include <Autopilot/autopilot.h>
+#include <Cockpit/cockpit.h>
+#include <Debug/fg_debug.h>
+#include <Joystick/joystick.h>
+#include <Math/fg_random.h>
+#include <Scenery/scenery.h>
+#include <Scenery/tilemgr.hxx>
+#include <Time/event.h>
+#include <Time/fg_time.h>
+#include <Time/light.hxx>
+#include <Time/sunpos.hxx>
+#include <Weather/weather.h>
+
+#include "fg_init.hxx"
+#include "views.hxx"
+
+extern int show_hud; /* HUD state */
+extern int displayInstruments;
+extern const char *default_root;
+
+/* General house keeping initializations */
+
+int fgInitGeneral( void ) {
+ fgGENERAL *g;
+
+ g = &general;
+
+ fgInitDebug();
+
+ fgPrintf( FG_GENERAL, FG_INFO, "General Initialization\n" );
+ fgPrintf( FG_GENERAL, FG_INFO, "======= ==============\n" );
+
+ /* seed the random number generater */
+ fg_srandom();
+
+ // determine the fg root path. The command line parser getargs() will
+ // fill in a root directory if the option was used.
+
+ if( !(g->root_dir) ) {
+ // If not set by command line test for environmental var..
+ g->root_dir = getenv("FG_ROOT");
+ if ( !g->root_dir ) {
+ // No root path set? Then assume, we will exit if this is
+ // wrong when looking for support files.
+ g->root_dir = (char *)DefaultRootDir;
+ }
+ }
+ fgPrintf( FG_GENERAL, FG_INFO, "FG_ROOT = %s\n\n", g->root_dir);
+
+ // Dummy value can be changed if future initializations
+ // fail a critical task.
+ return ( 0 /* FALSE */ );
+}
+
+
+// This is the top level init routine which calls all the other
+// initialization routines. If you are adding a subsystem to flight
+// gear, its initialization call should located in this routine.
+// Returns non-zero if a problem encountered.
+
+int fgInitSubsystems( void ) {
+ double cur_elev;
+
+ // Ok will be flagged only if we get EVERYTHING done.
+ int ret_val = 1 /* TRUE */;
+
+ fgFLIGHT *f;
+ struct fgLIGHT *l;
+ struct fgTIME *t;
+ struct fgVIEW *v;
+
+ l = &cur_light_params;
+ t = &cur_time_params;
+ v = ¤t_view;
+
+ fgPrintf( FG_GENERAL, FG_INFO, "Initialize Subsystems\n");
+ fgPrintf( FG_GENERAL, FG_INFO, "========== ==========\n");
+
+ /****************************************************************
+ * The following section sets up the flight model EOM parameters and
+ * should really be read in from one or more files.
+ ****************************************************************/
+
+ // Must happen before any of the flight model or control
+ // parameters are set
+
+ fgAircraftInit(); // In the future this might not be the case.
+ f = current_aircraft.flight;
+
+ // Initial Position at (P13) Globe, AZ
+ FG_Longitude = ( -110.6642444 ) * DEG_TO_RAD;
+ FG_Latitude = ( 33.3528917 ) * DEG_TO_RAD;
+ FG_Runway_altitude = (3234.5 + 300);
+ FG_Altitude = FG_Runway_altitude + 3.758099;
+
+ // Initial Position at (E81) Superior, AZ
+ // FG_Longitude = ( -111.1270650 ) * DEG_TO_RAD;
+ // FG_Latitude = ( 33.2778339 ) * DEG_TO_RAD;
+ // FG_Runway_altitude = (2646 + 100);
+ // FG_Altitude = FG_Runway_altitude + 3.758099;
+
+ // Initial Position at (TUS) Tucson, AZ
+ // FG_Longitude = ( -110.9412597 ) * DEG_TO_RAD;
+ // FG_Latitude = ( 32.1162439 ) * DEG_TO_RAD;
+ // FG_Runway_altitude = (2641 + 0);
+ // FG_Altitude = FG_Runway_altitude + 3.758099;
+
+ // Initial Position at (SEZ) SEDONA airport
+ // FG_Longitude = (-111.7884614 + 0.01) * DEG_TO_RAD;
+ // FG_Latitude = ( 34.8486289 - 0.015) * DEG_TO_RAD;
+ // FG_Runway_altitude = (4827 + 450);
+ // FG_Altitude = FG_Runway_altitude + 3.758099;
+
+ // Initial Position at near Anchoraze, AK
+ // FG_Longitude = ( -152.00 ) * DEG_TO_RAD;
+ // FG_Latitude = ( 61.17 ) * DEG_TO_RAD;
+ // FG_Runway_altitude = (0);
+ // FG_Altitude = FG_Runway_altitude + 3.758099;
+
+ // Initial Position at (HSP) Hot Springs, VA
+ // FG_Longitude = (-79.8338964 + 0.01) * DEG_TO_RAD;
+ // FG_Latitude = ( 37.9514564 + 0.008) * DEG_TO_RAD;
+ // FG_Runway_altitude = (3792 + 1300);
+ // FG_Altitude = FG_Runway_altitude + 3.758099;
+
+ // Initial Position at (ANE) Anoka County airport
+ // FG_Longitude = -93.2113889 * DEG_TO_RAD;
+ // FG_Latitude = 45.145 * DEG_TO_RAD;
+ // FG_Runway_altitude = 912;
+ // FG_Altitude = FG_Runway_altitude + 3.758099;
+
+ // Initial Position north of the city of Globe
+ // FG_Longitude = ( -398673.28 / 3600.0 ) * DEG_TO_RAD;
+ // FG_Latitude = ( 120625.64 / 3600.0 ) * DEG_TO_RAD;
+ // FG_Longitude = ( -397867.44 / 3600.0 ) * DEG_TO_RAD;
+ // FG_Latitude = ( 119548.21 / 3600.0 ) * DEG_TO_RAD;
+ // FG_Altitude = 0.0 + 3.758099;
+
+ // Initial Position near where I used to live in Globe, AZ
+ // FG_Longitude = ( -398757.6 / 3600.0 ) * DEG_TO_RAD;
+ // FG_Latitude = ( 120160.0 / 3600.0 ) * DEG_TO_RAD;
+ // FG_Runway_altitude = 4000.0;
+ // FG_Altitude = FG_Runway_altitude + 3.758099;
+
+ // Initial Position: 10125 Jewell St. NE
+ // FG_Longitude = ( -93.15 ) * DEG_TO_RAD;
+ // FG_Latitude = ( 45.15 ) * DEG_TO_RAD;
+ // FG_Runway_altitude = 950.0;
+ // FG_Altitude = FG_Runway_altitude + 3.758099;
+
+ // Initial Position: Somewhere near the Grand Canyon
+ // FG_Longitude = ( -112.5 ) * DEG_TO_RAD;
+ // FG_Latitude = ( 36.5 ) * DEG_TO_RAD;
+ // FG_Runway_altitude = 8000.0;
+ // FG_Altitude = FG_Runway_altitude + 3.758099;
+
+ // Initial Position: (GCN) Grand Canyon Airport, AZ
+ // FG_Longitude = ( -112.1469647 ) * DEG_TO_RAD;
+ // FG_Latitude = ( 35.9523539 ) * DEG_TO_RAD;
+ // FG_Runway_altitude = 6606.0;
+ // FG_Altitude = FG_Runway_altitude + 3.758099;
+
+ // Initial Position: Jim Brennon's Kingmont Observatory
+ // FG_Longitude = ( -121.1131667 ) * DEG_TO_RAD;
+ // FG_Latitude = ( 38.8293917 ) * DEG_TO_RAD;
+ // FG_Runway_altitude = 920.0;
+ // FG_Altitude = FG_Runway_altitude + 3.758099;
+
+ // probably interesting for european team members
+ // That is: If I can get the scenery to work -;) (Durk)
+
+ // Initial Position: Groningen Airport Eelde, the netherlands
+ // FG_Longitude = ( 6.583333 ) * DEG_TO_RAD;
+ // FG_Latitude = ( 53.125 ) * DEG_TO_RAD;
+ // FG_Runway_altitude = 920.0;
+ // FG_Altitude = FG_Runway_altitude + 3.758099;
+
+ // Initial Position: Schiphol Amsterdam Airport, the netherlands
+ // FG_Longitude = ( -4.7641667 ) * DEG_TO_RAD;
+ // FG_Latitude = ( 52.308056 ) * DEG_TO_RAD;
+ // FG_Runway_altitude = 920.0;
+ // FG_Altitude = FG_Runway_altitude + 3.758099;
+
+ // Eclipse Watching w73.5 n10 (approx) 18:00 UT
+ // FG_Longitude = ( -73.5 ) * DEG_TO_RAD;
+ // FG_Latitude = ( 10.0 ) * DEG_TO_RAD;
+ // FG_Runway_altitude = 0.0;
+ // FG_Altitude = FG_Runway_altitude + 3.758099;
+
+ // Test Position
+ // FG_Longitude = ( -109.5 ) * DEG_TO_RAD;
+ // FG_Latitude = ( 32.5 ) * DEG_TO_RAD;
+ // FG_Runway_altitude = (2646 + 2000);
+ // FG_Altitude = FG_Runway_altitude + 3.758099;
+
+ fgPrintf( FG_GENERAL, FG_INFO,
+ "Initial position is: (%.4f, %.4f, %.2f)\n",
+ FG_Longitude * RAD_TO_DEG, FG_Latitude * RAD_TO_DEG,
+ FG_Altitude * FEET_TO_METER);
+
+ // Initial Velocity
+ FG_V_north = 0.0 /* 7.287719E+00 */;
+ FG_V_east = 0.0 /* 1.521770E+03 */;
+ FG_V_down = 0.0 /* -1.265722E-05 */;
+
+ // Initial Orientation
+ FG_Phi = -2.658474E-06;
+ FG_Theta = 7.401790E-03;
+ FG_Psi = 270.0 * DEG_TO_RAD;
+
+ // Initial Angular B rates
+ FG_P_body = 7.206685E-05;
+ FG_Q_body = 0.000000E+00;
+ FG_R_body = 9.492658E-05;
+
+ FG_Earth_position_angle = 0.000000E+00;
+
+ // Mass properties and geometry values
+ FG_Mass = 8.547270E+01;
+ FG_I_xx = 1.048000E+03;
+ FG_I_yy = 3.000000E+03;
+ FG_I_zz = 3.530000E+03;
+ FG_I_xz = 0.000000E+00;
+
+ // CG position w.r.t. ref. point
+ FG_Dx_cg = 0.000000E+00;
+ FG_Dy_cg = 0.000000E+00;
+ FG_Dz_cg = 0.000000E+00;
+
+ // Set initial position and slew parameters
+ // fgSlewInit(-398391.3, 120070.41, 244, 3.1415); // GLOBE Airport
+ // fgSlewInit(-335340,162540, 15, 4.38);
+ // fgSlewInit(-398673.28,120625.64, 53, 4.38);
+
+ // Initialize the event manager
+ fgEventInit();
+
+ // Dump event stats every 60 seconds
+ fgEventRegister( "fgEventPrintStats()", fgEventPrintStats,
+ FG_EVENT_READY, 60000 );
+
+ // Initialize "time"
+ fgTimeInit(t);
+ fgTimeUpdate(f, t);
+
+ // fgViewUpdate() needs the sun in the right place, while
+ // fgUpdateSunPos() needs to know the view position. I'll get
+ // around this interdependency for now by calling fgUpdateSunPos()
+ // once, then moving on with normal initialization.
+ fgUpdateSunPos();
+
+ // Initialize view parameters
+ fgViewInit(v);
+ fgViewUpdate(f, v, l);
+
+ // Initialize Lighting interpolation tables
+ fgLightInit();
+
+ // update the lighting parameters (based on sun angle)
+ fgEventRegister( "fgLightUpdate()", fgLightUpdate,
+ FG_EVENT_READY, 30000 );
+
+ // Initialize the weather modeling subsystem
+ fgWeatherInit();
+
+ // update the weather for our current position
+ fgEventRegister( "fgWeatherUpdate()", fgWeatherUpdate,
+ FG_EVENT_READY, 120000 );
+
+ // Initialize the Cockpit subsystem
+ if( fgCockpitInit( ¤t_aircraft )) {
+ // Cockpit initialized ok.
+ } else {
+ fgPrintf( FG_GENERAL, FG_EXIT, "Error in Cockpit initialization!\n" );
+ }
+
+ // Initialize the orbital elements of sun, moon and mayor planets
+ fgSolarSystemInit(*t);
+
+ // Initialize the Stars subsystem
+ if( fgStarsInit() ) {
+ // Stars initialized ok.
+ } else {
+ fgPrintf( FG_GENERAL, FG_EXIT, "Error in Stars initialization!\n" );
+ }
+
+ // Initialize the planetary subsystem
+ fgEventRegister("fgPlanetsInit()", fgPlanetsInit, FG_EVENT_READY, 600000);
+
+ // Initialize the sun's position
+ fgEventRegister("fgSunInit()", fgSunInit, FG_EVENT_READY, 30000 );
+
+ // Intialize the moon's position
+ fgEventRegister( "fgMoonInit()", fgMoonInit, FG_EVENT_READY, 600000 );
+
+ // Initialize the "sky"
+ fgSkyInit();
+
+ // Initialize the Scenery Management subsystem
+ if ( fgSceneryInit() ) {
+ // Scenery initialized ok.
+ } else {
+ fgPrintf( FG_GENERAL, FG_EXIT, "Error in Scenery initialization!\n" );
+ }
+
+
+ if( fgTileMgrInit() ) {
+ // Load the local scenery data
+ fgTileMgrUpdate();
+ } else {
+ fgPrintf( FG_GENERAL, FG_EXIT,
+ "Error in Tile Manager initialization!\n" );
+ }
+
+ // I'm just sticking this here for now, it should probably move
+ // eventually
+ // cur_elev = mesh_altitude(FG_Longitude * RAD_TO_DEG * 3600.0,
+ // FG_Latitude * RAD_TO_DEG * 3600.0);
+ // fgPrintf( FG_GENERAL, FG_INFO,
+ // "True ground elevation is %.2f meters here.\n",
+ // cur_elev);
+
+ cur_elev = FG_Runway_altitude * FEET_TO_METER;
+ if ( cur_elev > -9990.0 ) {
+ FG_Runway_altitude = cur_elev * METER_TO_FEET;
+ }
+
+ if ( FG_Altitude < FG_Runway_altitude ) {
+ FG_Altitude = FG_Runway_altitude + 3.758099;
+ }
+
+ fgPrintf(FG_GENERAL, FG_INFO,
+ "Updated position (after elevation adj): (%.4f, %.4f, %.2f)\n",
+ FG_Latitude * RAD_TO_DEG, FG_Longitude * RAD_TO_DEG,
+ FG_Altitude * FEET_TO_METER);
+
+ // end of thing that I just stuck in that I should probably move
+
+ // Initialize the flight model subsystem data structures base on
+ // above values
+
+ fgFlightModelInit( FG_LARCSIM, f, 1.0 / DEFAULT_MODEL_HZ );
+
+ // To HUD or not to HUD - Now a command line issue
+ // show_hud = 0;
+
+ // Let's not show the instrument panel
+ displayInstruments = 0;
+
+ // Joystick support
+ if (fgJoystickInit(0) ) {
+ // Joystick initialized ok.
+ } else {
+ fgPrintf( FG_GENERAL, FG_EXIT, "Error in Joystick initialization!\n" );
+ }
+
+ // Autopilot init added here, by Jeff Goeke-Smith
+ fgAPInit(¤t_aircraft);
+ // end added section;
+
+ // One more try here to get the sky synced up
+ fgSkyColorsInit();
+ ret_val = 0;
+
+ fgPrintf(FG_GENERAL, FG_INFO,"\n");
+ return ret_val;
+}
+
+
+/* $Log$
+/* Revision 1.1 1998/04/22 13:25:44 curt
+/* C++ - ifing the code.
+/* Starting a bit of reorganization of lighting code.
+/*
+ * Revision 1.56 1998/04/18 04:11:28 curt
+ * Moved fg_debug to it's own library, added zlib support.
+ *
+ * Revision 1.55 1998/04/14 02:21:03 curt
+ * Incorporated autopilot heading hold contributed by: Jeff Goeke-Smith
+ * <jgoeke@voyager.net>
+ *
+ * Revision 1.54 1998/04/08 23:35:36 curt
+ * Tweaks to Gnu automake/autoconf system.
+ *
+ * Revision 1.53 1998/04/03 22:09:06 curt
+ * Converting to Gnu autoconf system.
+ *
+ * Revision 1.52 1998/03/23 21:24:38 curt
+ * Source code formating tweaks.
+ *
+ * Revision 1.51 1998/03/14 00:31:22 curt
+ * Beginning initial terrain texturing experiments.
+ *
+ * Revision 1.50 1998/03/09 22:46:19 curt
+ * Minor tweaks.
+ *
+ * Revision 1.49 1998/02/23 19:07:59 curt
+ * Incorporated Durk's Astro/ tweaks. Includes unifying the sun position
+ * calculation code between sun display, and other FG sections that use this
+ * for things like lighting.
+ *
+ * Revision 1.48 1998/02/21 14:53:15 curt
+ * Added Charlie's HUD changes.
+ *
+ * Revision 1.47 1998/02/19 13:05:53 curt
+ * Incorporated some HUD tweaks from Michelle America.
+ * Tweaked the sky's sunset/rise colors.
+ * Other misc. tweaks.
+ *
+ * Revision 1.46 1998/02/18 15:07:06 curt
+ * Tweaks to build with SGI OpenGL (and therefor hopefully other accelerated
+ * drivers will work.)
+ *
+ * Revision 1.45 1998/02/16 13:39:43 curt
+ * Miscellaneous weekend tweaks. Fixed? a cache problem that caused whole
+ * tiles to occasionally be missing.
+ *
+ * Revision 1.44 1998/02/12 21:59:50 curt
+ * Incorporated code changes contributed by Charlie Hotchkiss
+ * <chotchkiss@namg.us.anritsu.com>
+ *
+ * Revision 1.43 1998/02/11 02:50:40 curt
+ * Minor changes.
+ *
+ * Revision 1.42 1998/02/09 22:56:58 curt
+ * Removed "depend" files from cvs control. Other minor make tweaks.
+ *
+ * Revision 1.41 1998/02/09 15:07:50 curt
+ * Minor tweaks.
+ *
+ * Revision 1.40 1998/02/07 15:29:44 curt
+ * Incorporated HUD changes and struct/typedef changes from Charlie Hotchkiss
+ * <chotchkiss@namg.us.anritsu.com>
+ *
+ * Revision 1.39 1998/02/03 23:20:25 curt
+ * Lots of little tweaks to fix various consistency problems discovered by
+ * Solaris' CC. Fixed a bug in fg_debug.c with how the fgPrintf() wrapper
+ * passed arguments along to the real printf(). Also incorporated HUD changes
+ * by Michele America.
+ *
+ * Revision 1.38 1998/02/02 20:53:58 curt
+ * Incorporated Durk's changes.
+ *
+ * Revision 1.37 1998/02/01 03:39:54 curt
+ * Minor tweaks.
+ *
+ * Revision 1.36 1998/01/31 00:43:13 curt
+ * Added MetroWorks patches from Carmen Volpe.
+ *
+ * Revision 1.35 1998/01/27 00:47:57 curt
+ * Incorporated Paul Bleisch's <bleisch@chromatic.com> new debug message
+ * system and commandline/config file processing code.
+ *
+ * Revision 1.34 1998/01/22 02:59:37 curt
+ * Changed #ifdef FILE_H to #ifdef _FILE_H
+ *
+ * Revision 1.33 1998/01/21 21:11:34 curt
+ * Misc. tweaks.
+ *
+ * Revision 1.32 1998/01/19 19:27:08 curt
+ * Merged in make system changes from Bob Kuehne <rpk@sgi.com>
+ * This should simplify things tremendously.
+ *
+ * Revision 1.31 1998/01/19 18:40:32 curt
+ * Tons of little changes to clean up the code and to remove fatal errors
+ * when building with the c++ compiler.
+ *
+ * Revision 1.30 1998/01/13 00:23:09 curt
+ * Initial changes to support loading and management of scenery tiles. Note,
+ * there's still a fair amount of work left to be done.
+ *
+ * Revision 1.29 1998/01/08 02:22:08 curt
+ * Beginning to integrate Tile management subsystem.
+ *
+ * Revision 1.28 1998/01/07 03:18:58 curt
+ * Moved astronomical stuff from .../Src/Scenery to .../Src/Astro/
+ *
+ * Revision 1.27 1998/01/05 18:44:35 curt
+ * Add an option to advance/decrease time from keyboard.
+ *
+ * Revision 1.26 1997/12/30 23:09:04 curt
+ * Tweaking initialization sequences.
+ *
+ * Revision 1.25 1997/12/30 22:22:33 curt
+ * Further integration of event manager.
+ *
+ * Revision 1.24 1997/12/30 20:47:44 curt
+ * Integrated new event manager with subsystem initializations.
+ *
+ * Revision 1.23 1997/12/30 16:36:50 curt
+ * Merged in Durk's changes ...
+ *
+ * Revision 1.22 1997/12/19 23:34:05 curt
+ * Lot's of tweaking with sky rendering and lighting.
+ *
+ * Revision 1.21 1997/12/19 16:45:00 curt
+ * Working on scene rendering order and options.
+ *
+ * Revision 1.20 1997/12/18 23:32:33 curt
+ * First stab at sky dome actually starting to look reasonable. :-)
+ *
+ * Revision 1.19 1997/12/17 23:13:36 curt
+ * Began working on rendering a sky.
+ *
+ * Revision 1.18 1997/12/15 23:54:49 curt
+ * Add xgl wrappers for debugging.
+ * Generate terrain normals on the fly.
+ *
+ * Revision 1.17 1997/12/15 20:59:09 curt
+ * Misc. tweaks.
+ *
+ * Revision 1.16 1997/12/12 19:52:48 curt
+ * Working on lightling and material properties.
+ *
+ * Revision 1.15 1997/12/11 04:43:55 curt
+ * Fixed sun vector and lighting problems. I thing the moon is now lit
+ * correctly.
+ *
+ * Revision 1.14 1997/12/10 22:37:47 curt
+ * Prepended "fg" on the name of all global structures that didn't have it yet.
+ * i.e. "struct WEATHER {}" became "struct fgWEATHER {}"
+ *
+ * Revision 1.13 1997/11/25 19:25:32 curt
+ * Changes to integrate Durk's moon/sun code updates + clean up.
+ *
+ * Revision 1.12 1997/11/15 18:16:35 curt
+ * minor tweaks.
+ *
+ * Revision 1.11 1997/10/30 12:38:42 curt
+ * Working on new scenery subsystem.
+ *
+ * Revision 1.10 1997/10/25 03:24:23 curt
+ * Incorporated sun, moon, and star positioning code contributed by Durk Talsma.
+ *
+ * Revision 1.9 1997/09/23 00:29:39 curt
+ * Tweaks to get things to compile with gcc-win32.
+ *
+ * Revision 1.8 1997/09/22 14:44:20 curt
+ * Continuing to try to align stars correctly.
+ *
+ * Revision 1.7 1997/09/16 15:50:30 curt
+ * Working on star alignment and time issues.
+ *
+ * Revision 1.6 1997/09/05 14:17:30 curt
+ * More tweaking with stars.
+ *
+ * Revision 1.5 1997/09/04 02:17:36 curt
+ * Shufflin' stuff.
+ *
+ * Revision 1.4 1997/08/27 21:32:26 curt
+ * Restructured view calculation code. Added stars.
+ *
+ * Revision 1.3 1997/08/27 03:30:19 curt
+ * Changed naming scheme of basic shared structures.
+ *
+ * Revision 1.2 1997/08/25 20:27:23 curt
+ * Merged in initial HUD and Joystick code.
+ *
+ * Revision 1.1 1997/08/23 01:46:20 curt
+ * Initial revision.
+ *
+ */
+++ /dev/null
-/**************************************************************************
- * fg_init.h -- Flight Gear top level initialization routines
- *
- * Written by Curtis Olson, started August 1997.
- *
- * Copyright (C) 1997 Curtis L. Olson - curt@infoplane.com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id$
- * (Log is kept at end of this file)
- **************************************************************************/
-
-
-#ifndef _FG_INIT_H
-#define _FG_INIT_H
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-// General house keeping initializations
-int fgInitGeneral ( void );
-
-// This is the top level init routine which calls all the other
-// initialization routines. If you are adding a subsystem to flight
-// gear, its initialization call should located in this routine.
-int fgInitSubsystems( void );
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* _FG_INIT_H */
-
-
-/* $Log$
-/* Revision 1.4 1998/04/21 17:02:41 curt
-/* Prepairing for C++ integration.
-/*
- * Revision 1.3 1998/02/12 21:59:50 curt
- * Incorporated code changes contributed by Charlie Hotchkiss
- * <chotchkiss@namg.us.anritsu.com>
- *
- * Revision 1.2 1998/01/22 02:59:38 curt
- * Changed #ifdef FILE_H to #ifdef _FILE_H
- *
- * Revision 1.1 1997/08/23 01:46:20 curt
- * Initial revision.
- *
- */
--- /dev/null
+/**************************************************************************
+ * fg_init.h -- Flight Gear top level initialization routines
+ *
+ * Written by Curtis Olson, started August 1997.
+ *
+ * Copyright (C) 1997 Curtis L. Olson - curt@infoplane.com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * $Id$
+ * (Log is kept at end of this file)
+ **************************************************************************/
+
+
+#ifndef _FG_INIT_H
+#define _FG_INIT_H
+
+
+#ifndef __cplusplus
+# error This library requires C++
+#endif
+
+
+// General house keeping initializations
+int fgInitGeneral ( void );
+
+// This is the top level init routine which calls all the other
+// initialization routines. If you are adding a subsystem to flight
+// gear, its initialization call should located in this routine.
+int fgInitSubsystems( void );
+
+
+#endif /* _FG_INIT_H */
+
+
+/* $Log$
+/* Revision 1.1 1998/04/22 13:25:44 curt
+/* C++ - ifing the code.
+/* Starting a bit of reorganization of lighting code.
+/*
+ * Revision 1.4 1998/04/21 17:02:41 curt
+ * Prepairing for C++ integration.
+ *
+ * Revision 1.3 1998/02/12 21:59:50 curt
+ * Incorporated code changes contributed by Charlie Hotchkiss
+ * <chotchkiss@namg.us.anritsu.com>
+ *
+ * Revision 1.2 1998/01/22 02:59:38 curt
+ * Changed #ifdef FILE_H to #ifdef _FILE_H
+ *
+ * Revision 1.1 1997/08/23 01:46:20 curt
+ * Initial revision.
+ *
+ */
+++ /dev/null
-/**************************************************************************
- * views.c -- data structures and routines for managing and view parameters.
- *
- * Written by Curtis Olson, started August 1997.
- *
- * Copyright (C) 1997 Curtis L. Olson - curt@infoplane.com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id$
- * (Log is kept at end of this file)
- **************************************************************************/
-
-
-#include <Main/views.h>
-
-#include <Include/fg_constants.h>
-
-#include <Debug/fg_debug.h>
-#include <Flight/flight.h>
-#include <Math/mat3.h>
-#include <Math/polar.h>
-#include <Math/vector.h>
-#include <Scenery/scenery.h>
-#include <Time/fg_time.h>
-
-/* This is a record containing current view parameters */
-struct fgVIEW current_view;
-
-
-/* Initialize a view structure */
-void fgViewInit(struct fgVIEW *v) {
- fgPrintf( FG_VIEW, FG_INFO, "Initializing View parameters\n");
-
- v->view_offset = 0.0;
- v->goal_view_offset = 0.0;
-}
-
-
-/* Update the view parameters */
-void fgViewUpdate(fgFLIGHT *f, struct fgVIEW *v, struct fgLIGHT *l) {
- MAT3vec vec, forward, v0, minus_z;
- MAT3mat R, TMP, UP, LOCAL, VIEW;
- double ntmp;
-
- scenery.center.x = scenery.next_center.x;
- scenery.center.y = scenery.next_center.y;
- scenery.center.z = scenery.next_center.z;
-
- /* calculate the cartesion coords of the current lat/lon/0 elev */
- v->cur_zero_elev = fgPolarToCart(FG_Longitude, FG_Lat_geocentric,
- FG_Sea_level_radius * FEET_TO_METER);
- v->cur_zero_elev.x -= scenery.center.x;
- v->cur_zero_elev.y -= scenery.center.y;
- v->cur_zero_elev.z -= scenery.center.z;
-
- /* calculate view position in current FG view coordinate system */
- v->abs_view_pos = fgPolarToCart(FG_Longitude, FG_Lat_geocentric,
- FG_Radius_to_vehicle * FEET_TO_METER + 1.0);
- v->view_pos.x = v->abs_view_pos.x - scenery.center.x;
- v->view_pos.y = v->abs_view_pos.y - scenery.center.y;
- v->view_pos.z = v->abs_view_pos.z - scenery.center.z;
-
- fgPrintf( FG_VIEW, FG_DEBUG, "Absolute view pos = %.4f, %.4f, %.4f\n",
- v->abs_view_pos.x, v->abs_view_pos.y, v->abs_view_pos.z);
- fgPrintf( FG_VIEW, FG_DEBUG, "Relative view pos = %.4f, %.4f, %.4f\n",
- v->view_pos.x, v->view_pos.y, v->view_pos.z);
-
- /* make a vector to the current view position */
- MAT3_SET_VEC(v0, v->view_pos.x, v->view_pos.y, v->view_pos.z);
-
- /* calculate vector to sun's position on the earth's surface */
- v->to_sun[0] = l->fg_sunpos.x - (v->view_pos.x + scenery.center.x);
- v->to_sun[1] = l->fg_sunpos.y - (v->view_pos.y + scenery.center.y);
- v->to_sun[2] = l->fg_sunpos.z - (v->view_pos.z + scenery.center.z);
- /* printf("Vector to sun = %.2f %.2f %.2f\n",
- v->to_sun[0], v->to_sun[1], v->to_sun[2]); */
-
- /* Derive the LOCAL aircraft rotation matrix (roll, pitch, yaw) */
- MAT3_SET_VEC(vec, 0.0, 0.0, 1.0);
- MAT3rotate(R, vec, FG_Phi);
- /* printf("Roll matrix\n"); */
- /* MAT3print(R, stdout); */
-
- MAT3_SET_VEC(vec, 0.0, 1.0, 0.0);
- /* MAT3mult_vec(vec, vec, R); */
- MAT3rotate(TMP, vec, FG_Theta);
- /* printf("Pitch matrix\n"); */
- /* MAT3print(TMP, stdout); */
- MAT3mult(R, R, TMP);
-
- MAT3_SET_VEC(vec, 1.0, 0.0, 0.0);
- /* MAT3mult_vec(vec, vec, R); */
- /* MAT3rotate(TMP, vec, FG_Psi - FG_PI_2); */
- MAT3rotate(TMP, vec, -FG_Psi);
- /* printf("Yaw matrix\n");
- MAT3print(TMP, stdout); */
- MAT3mult(LOCAL, R, TMP);
- /* printf("LOCAL matrix\n"); */
- /* MAT3print(LOCAL, stdout); */
-
- /* Derive the local UP transformation matrix based on *geodetic*
- * coordinates */
- MAT3_SET_VEC(vec, 0.0, 0.0, 1.0);
- MAT3rotate(R, vec, FG_Longitude); /* R = rotate about Z axis */
- /* printf("Longitude matrix\n"); */
- /* MAT3print(R, stdout); */
-
- MAT3_SET_VEC(vec, 0.0, 1.0, 0.0);
- MAT3mult_vec(vec, vec, R);
- MAT3rotate(TMP, vec, -FG_Latitude); /* TMP = rotate about X axis */
- /* printf("Latitude matrix\n"); */
- /* MAT3print(TMP, stdout); */
-
- MAT3mult(UP, R, TMP);
- /* printf("Local up matrix\n"); */
- /* MAT3print(UP, stdout); */
-
- MAT3_SET_VEC(v->local_up, 1.0, 0.0, 0.0);
- MAT3mult_vec(v->local_up, v->local_up, UP);
-
- /* printf("Local Up = (%.4f, %.4f, %.4f)\n",
- v->local_up[0], v->local_up[1], v->local_up[2]); */
-
- /* Alternative method to Derive local up vector based on
- * *geodetic* coordinates */
- /* alt_up = fgPolarToCart(FG_Longitude, FG_Latitude, 1.0); */
- /* printf(" Alt Up = (%.4f, %.4f, %.4f)\n",
- alt_up.x, alt_up.y, alt_up.z); */
-
- /* Calculate the VIEW matrix */
- MAT3mult(VIEW, LOCAL, UP);
- /* printf("VIEW matrix\n"); */
- /* MAT3print(VIEW, stdout); */
-
- /* generate the current up, forward, and fwrd-view vectors */
- MAT3_SET_VEC(vec, 1.0, 0.0, 0.0);
- MAT3mult_vec(v->view_up, vec, VIEW);
-
- MAT3_SET_VEC(vec, 0.0, 0.0, 1.0);
- MAT3mult_vec(forward, vec, VIEW);
- /* printf("Forward vector is (%.2f,%.2f,%.2f)\n", forward[0], forward[1],
- forward[2]); */
-
- MAT3rotate(TMP, v->view_up, v->view_offset);
- MAT3mult_vec(v->view_forward, forward, TMP);
-
- /* Given a vector from the view position to the point on the
- * earth's surface the sun is directly over, map into onto the
- * local plane representing "horizontal". */
- map_vec_onto_cur_surface_plane(v->local_up, v0, v->to_sun,
- v->surface_to_sun);
- MAT3_NORMALIZE_VEC(v->surface_to_sun, ntmp);
- /* printf("Surface direction to sun is %.2f %.2f %.2f\n",
- v->surface_to_sun[0], v->surface_to_sun[1], v->surface_to_sun[2]); */
- /* printf("Should be close to zero = %.2f\n",
- MAT3_DOT_PRODUCT(v->local_up, v->surface_to_sun)); */
-
- /* Given a vector pointing straight down (-Z), map into onto the
- * local plane representing "horizontal". This should give us the
- * local direction for moving "south". */
- MAT3_SET_VEC(minus_z, 0.0, 0.0, -1.0);
- map_vec_onto_cur_surface_plane(v->local_up, v0, minus_z, v->surface_south);
- MAT3_NORMALIZE_VEC(v->surface_south, ntmp);
- /* printf("Surface direction directly south %.2f %.2f %.2f\n",
- v->surface_south[0], v->surface_south[1], v->surface_south[2]); */
-
- /* now calculate the surface east vector */
- MAT3rotate(TMP, v->view_up, FG_PI_2);
- MAT3mult_vec(v->surface_east, v->surface_south, TMP);
- /* printf("Surface direction directly east %.2f %.2f %.2f\n",
- v->surface_east[0], v->surface_east[1], v->surface_east[2]); */
- /* printf("Should be close to zero = %.2f\n",
- MAT3_DOT_PRODUCT(v->surface_south, v->surface_east)); */
-}
-
-
-/* $Log$
-/* Revision 1.16 1998/04/18 04:11:29 curt
-/* Moved fg_debug to it's own library, added zlib support.
-/*
- * Revision 1.15 1998/02/20 00:16:24 curt
- * Thursday's tweaks.
- *
- * Revision 1.14 1998/02/09 15:07:50 curt
- * Minor tweaks.
- *
- * Revision 1.13 1998/02/07 15:29:45 curt
- * Incorporated HUD changes and struct/typedef changes from Charlie Hotchkiss
- * <chotchkiss@namg.us.anritsu.com>
- *
- * Revision 1.12 1998/01/29 00:50:28 curt
- * Added a view record field for absolute x, y, z position.
- *
- * Revision 1.11 1998/01/27 00:47:58 curt
- * Incorporated Paul Bleisch's <bleisch@chromatic.com> new debug message
- * system and commandline/config file processing code.
- *
- * Revision 1.10 1998/01/19 19:27:09 curt
- * Merged in make system changes from Bob Kuehne <rpk@sgi.com>
- * This should simplify things tremendously.
- *
- * Revision 1.9 1998/01/13 00:23:09 curt
- * Initial changes to support loading and management of scenery tiles. Note,
- * there's still a fair amount of work left to be done.
- *
- * Revision 1.8 1997/12/30 22:22:33 curt
- * Further integration of event manager.
- *
- * Revision 1.7 1997/12/30 20:47:45 curt
- * Integrated new event manager with subsystem initializations.
- *
- * Revision 1.6 1997/12/22 04:14:32 curt
- * Aligned sky with sun so dusk/dawn effects can be correct relative to the sun.
- *
- * Revision 1.5 1997/12/18 04:07:02 curt
- * Worked on properly translating and positioning the sky dome.
- *
- * Revision 1.4 1997/12/17 23:13:36 curt
- * Began working on rendering a sky.
- *
- * Revision 1.3 1997/12/15 23:54:50 curt
- * Add xgl wrappers for debugging.
- * Generate terrain normals on the fly.
- *
- * Revision 1.2 1997/12/10 22:37:48 curt
- * Prepended "fg" on the name of all global structures that didn't have it yet.
- * i.e. "struct WEATHER {}" became "struct fgWEATHER {}"
- *
- * Revision 1.1 1997/08/27 21:31:17 curt
- * Initial revision.
- *
- */
--- /dev/null
+/**************************************************************************
+ * views.c -- data structures and routines for managing and view parameters.
+ *
+ * Written by Curtis Olson, started August 1997.
+ *
+ * Copyright (C) 1997 Curtis L. Olson - curt@infoplane.com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * $Id$
+ * (Log is kept at end of this file)
+ **************************************************************************/
+
+
+#include <config.h>
+
+#include <Debug/fg_debug.h>
+#include <Flight/flight.h>
+#include <Include/fg_constants.h>
+#include <Math/mat3.h>
+#include <Math/polar.h>
+#include <Math/vector.h>
+#include <Scenery/scenery.h>
+#include <Time/fg_time.h>
+
+#include "views.hxx"
+
+
+/* This is a record containing current view parameters */
+struct fgVIEW current_view;
+
+
+/* Initialize a view structure */
+void fgViewInit(struct fgVIEW *v) {
+ fgPrintf( FG_VIEW, FG_INFO, "Initializing View parameters\n");
+
+ v->view_offset = 0.0;
+ v->goal_view_offset = 0.0;
+}
+
+
+/* Update the view parameters */
+void fgViewUpdate(fgFLIGHT *f, struct fgVIEW *v, fgLIGHT *l) {
+ MAT3vec vec, forward, v0, minus_z;
+ MAT3mat R, TMP, UP, LOCAL, VIEW;
+ double ntmp;
+
+ scenery.center.x = scenery.next_center.x;
+ scenery.center.y = scenery.next_center.y;
+ scenery.center.z = scenery.next_center.z;
+
+ /* calculate the cartesion coords of the current lat/lon/0 elev */
+ v->cur_zero_elev = fgPolarToCart(FG_Longitude, FG_Lat_geocentric,
+ FG_Sea_level_radius * FEET_TO_METER);
+ v->cur_zero_elev.x -= scenery.center.x;
+ v->cur_zero_elev.y -= scenery.center.y;
+ v->cur_zero_elev.z -= scenery.center.z;
+
+ /* calculate view position in current FG view coordinate system */
+ v->abs_view_pos = fgPolarToCart(FG_Longitude, FG_Lat_geocentric,
+ FG_Radius_to_vehicle * FEET_TO_METER + 1.0);
+ v->view_pos.x = v->abs_view_pos.x - scenery.center.x;
+ v->view_pos.y = v->abs_view_pos.y - scenery.center.y;
+ v->view_pos.z = v->abs_view_pos.z - scenery.center.z;
+
+ fgPrintf( FG_VIEW, FG_DEBUG, "Absolute view pos = %.4f, %.4f, %.4f\n",
+ v->abs_view_pos.x, v->abs_view_pos.y, v->abs_view_pos.z);
+ fgPrintf( FG_VIEW, FG_DEBUG, "Relative view pos = %.4f, %.4f, %.4f\n",
+ v->view_pos.x, v->view_pos.y, v->view_pos.z);
+
+ /* make a vector to the current view position */
+ MAT3_SET_VEC(v0, v->view_pos.x, v->view_pos.y, v->view_pos.z);
+
+ /* calculate vector to sun's position on the earth's surface */
+ v->to_sun[0] = l->fg_sunpos.x - (v->view_pos.x + scenery.center.x);
+ v->to_sun[1] = l->fg_sunpos.y - (v->view_pos.y + scenery.center.y);
+ v->to_sun[2] = l->fg_sunpos.z - (v->view_pos.z + scenery.center.z);
+ /* printf("Vector to sun = %.2f %.2f %.2f\n",
+ v->to_sun[0], v->to_sun[1], v->to_sun[2]); */
+
+ /* Derive the LOCAL aircraft rotation matrix (roll, pitch, yaw) */
+ MAT3_SET_VEC(vec, 0.0, 0.0, 1.0);
+ MAT3rotate(R, vec, FG_Phi);
+ /* printf("Roll matrix\n"); */
+ /* MAT3print(R, stdout); */
+
+ MAT3_SET_VEC(vec, 0.0, 1.0, 0.0);
+ /* MAT3mult_vec(vec, vec, R); */
+ MAT3rotate(TMP, vec, FG_Theta);
+ /* printf("Pitch matrix\n"); */
+ /* MAT3print(TMP, stdout); */
+ MAT3mult(R, R, TMP);
+
+ MAT3_SET_VEC(vec, 1.0, 0.0, 0.0);
+ /* MAT3mult_vec(vec, vec, R); */
+ /* MAT3rotate(TMP, vec, FG_Psi - FG_PI_2); */
+ MAT3rotate(TMP, vec, -FG_Psi);
+ /* printf("Yaw matrix\n");
+ MAT3print(TMP, stdout); */
+ MAT3mult(LOCAL, R, TMP);
+ /* printf("LOCAL matrix\n"); */
+ /* MAT3print(LOCAL, stdout); */
+
+ /* Derive the local UP transformation matrix based on *geodetic*
+ * coordinates */
+ MAT3_SET_VEC(vec, 0.0, 0.0, 1.0);
+ MAT3rotate(R, vec, FG_Longitude); /* R = rotate about Z axis */
+ /* printf("Longitude matrix\n"); */
+ /* MAT3print(R, stdout); */
+
+ MAT3_SET_VEC(vec, 0.0, 1.0, 0.0);
+ MAT3mult_vec(vec, vec, R);
+ MAT3rotate(TMP, vec, -FG_Latitude); /* TMP = rotate about X axis */
+ /* printf("Latitude matrix\n"); */
+ /* MAT3print(TMP, stdout); */
+
+ MAT3mult(UP, R, TMP);
+ /* printf("Local up matrix\n"); */
+ /* MAT3print(UP, stdout); */
+
+ MAT3_SET_VEC(v->local_up, 1.0, 0.0, 0.0);
+ MAT3mult_vec(v->local_up, v->local_up, UP);
+
+ /* printf("Local Up = (%.4f, %.4f, %.4f)\n",
+ v->local_up[0], v->local_up[1], v->local_up[2]); */
+
+ /* Alternative method to Derive local up vector based on
+ * *geodetic* coordinates */
+ /* alt_up = fgPolarToCart(FG_Longitude, FG_Latitude, 1.0); */
+ /* printf(" Alt Up = (%.4f, %.4f, %.4f)\n",
+ alt_up.x, alt_up.y, alt_up.z); */
+
+ /* Calculate the VIEW matrix */
+ MAT3mult(VIEW, LOCAL, UP);
+ /* printf("VIEW matrix\n"); */
+ /* MAT3print(VIEW, stdout); */
+
+ /* generate the current up, forward, and fwrd-view vectors */
+ MAT3_SET_VEC(vec, 1.0, 0.0, 0.0);
+ MAT3mult_vec(v->view_up, vec, VIEW);
+
+ MAT3_SET_VEC(vec, 0.0, 0.0, 1.0);
+ MAT3mult_vec(forward, vec, VIEW);
+ /* printf("Forward vector is (%.2f,%.2f,%.2f)\n", forward[0], forward[1],
+ forward[2]); */
+
+ MAT3rotate(TMP, v->view_up, v->view_offset);
+ MAT3mult_vec(v->view_forward, forward, TMP);
+
+ /* Given a vector from the view position to the point on the
+ * earth's surface the sun is directly over, map into onto the
+ * local plane representing "horizontal". */
+ map_vec_onto_cur_surface_plane(v->local_up, v0, v->to_sun,
+ v->surface_to_sun);
+ MAT3_NORMALIZE_VEC(v->surface_to_sun, ntmp);
+ /* printf("Surface direction to sun is %.2f %.2f %.2f\n",
+ v->surface_to_sun[0], v->surface_to_sun[1], v->surface_to_sun[2]); */
+ /* printf("Should be close to zero = %.2f\n",
+ MAT3_DOT_PRODUCT(v->local_up, v->surface_to_sun)); */
+
+ /* Given a vector pointing straight down (-Z), map into onto the
+ * local plane representing "horizontal". This should give us the
+ * local direction for moving "south". */
+ MAT3_SET_VEC(minus_z, 0.0, 0.0, -1.0);
+ map_vec_onto_cur_surface_plane(v->local_up, v0, minus_z, v->surface_south);
+ MAT3_NORMALIZE_VEC(v->surface_south, ntmp);
+ /* printf("Surface direction directly south %.2f %.2f %.2f\n",
+ v->surface_south[0], v->surface_south[1], v->surface_south[2]); */
+
+ /* now calculate the surface east vector */
+ MAT3rotate(TMP, v->view_up, FG_PI_2);
+ MAT3mult_vec(v->surface_east, v->surface_south, TMP);
+ /* printf("Surface direction directly east %.2f %.2f %.2f\n",
+ v->surface_east[0], v->surface_east[1], v->surface_east[2]); */
+ /* printf("Should be close to zero = %.2f\n",
+ MAT3_DOT_PRODUCT(v->surface_south, v->surface_east)); */
+}
+
+
+/* $Log$
+/* Revision 1.1 1998/04/22 13:25:45 curt
+/* C++ - ifing the code.
+/* Starting a bit of reorganization of lighting code.
+/*
+ * Revision 1.16 1998/04/18 04:11:29 curt
+ * Moved fg_debug to it's own library, added zlib support.
+ *
+ * Revision 1.15 1998/02/20 00:16:24 curt
+ * Thursday's tweaks.
+ *
+ * Revision 1.14 1998/02/09 15:07:50 curt
+ * Minor tweaks.
+ *
+ * Revision 1.13 1998/02/07 15:29:45 curt
+ * Incorporated HUD changes and struct/typedef changes from Charlie Hotchkiss
+ * <chotchkiss@namg.us.anritsu.com>
+ *
+ * Revision 1.12 1998/01/29 00:50:28 curt
+ * Added a view record field for absolute x, y, z position.
+ *
+ * Revision 1.11 1998/01/27 00:47:58 curt
+ * Incorporated Paul Bleisch's <bleisch@chromatic.com> new debug message
+ * system and commandline/config file processing code.
+ *
+ * Revision 1.10 1998/01/19 19:27:09 curt
+ * Merged in make system changes from Bob Kuehne <rpk@sgi.com>
+ * This should simplify things tremendously.
+ *
+ * Revision 1.9 1998/01/13 00:23:09 curt
+ * Initial changes to support loading and management of scenery tiles. Note,
+ * there's still a fair amount of work left to be done.
+ *
+ * Revision 1.8 1997/12/30 22:22:33 curt
+ * Further integration of event manager.
+ *
+ * Revision 1.7 1997/12/30 20:47:45 curt
+ * Integrated new event manager with subsystem initializations.
+ *
+ * Revision 1.6 1997/12/22 04:14:32 curt
+ * Aligned sky with sun so dusk/dawn effects can be correct relative to the sun.
+ *
+ * Revision 1.5 1997/12/18 04:07:02 curt
+ * Worked on properly translating and positioning the sky dome.
+ *
+ * Revision 1.4 1997/12/17 23:13:36 curt
+ * Began working on rendering a sky.
+ *
+ * Revision 1.3 1997/12/15 23:54:50 curt
+ * Add xgl wrappers for debugging.
+ * Generate terrain normals on the fly.
+ *
+ * Revision 1.2 1997/12/10 22:37:48 curt
+ * Prepended "fg" on the name of all global structures that didn't have it yet.
+ * i.e. "struct WEATHER {}" became "struct fgWEATHER {}"
+ *
+ * Revision 1.1 1997/08/27 21:31:17 curt
+ * Initial revision.
+ *
+ */
+++ /dev/null
-/**************************************************************************
- * views.h -- data structures and routines for managing and view parameters.
- *
- * Written by Curtis Olson, started August 1997.
- *
- * Copyright (C) 1997 Curtis L. Olson - curt@infoplane.com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id$
- * (Log is kept at end of this file)
- **************************************************************************/
-
-
-#ifndef _VIEWS_H
-#define _VIEWS_H
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-#include <Include/fg_types.h>
-#include <Flight/flight.h>
-#include <Math/mat3.h>
-#include <Time/fg_time.h>
-
-
-/* Define a structure containing view information */
-struct fgVIEW {
- /* absolute view position */
- struct fgCartesianPoint abs_view_pos;
-
- /* view position translated to scenery.center */
- struct fgCartesianPoint view_pos;
-
- /* cartesion coordinates of current lon/lat if at sea level
- * translated to scenery.center*/
- struct fgCartesianPoint cur_zero_elev;
-
- /* vector in cartesian coordinates from current position to the
- * postion on the earth's surface the sun is directly over */
- MAT3vec to_sun;
-
- /* surface direction to go to head towards sun */
- MAT3vec surface_to_sun;
-
- /* surface vector heading south */
- MAT3vec surface_south;
-
- /* surface vector heading east (used to unambiguously align sky with sun) */
- MAT3vec surface_east;
-
- /* local up vector (normal to the plane tangent to the earth's
- * surface at the spot we are directly above */
- MAT3vec local_up;
-
- /* up vector for the view (usually point straight up through the
- * top of the aircraft */
- MAT3vec view_up;
-
- /* the vector pointing straight out the nose of the aircraft */
- MAT3vec view_forward;
-
- /* the current offset from forward for viewing */
- double view_offset;
-
- /* the goal view offset for viewing (used for smooth view changes) */
- double goal_view_offset;
-};
-
-
-extern struct fgVIEW current_view;
-
-
-/* Initialize a view structure */
-void fgViewInit(struct fgVIEW *v);
-
-/* Update the view parameters */
-void fgViewUpdate(fgFLIGHT *f, struct fgVIEW *v, struct fgLIGHT *l);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* _VIEWS_H */
-
-
-/* $Log$
-/* Revision 1.11 1998/04/21 17:02:42 curt
-/* Prepairing for C++ integration.
-/*
- * Revision 1.10 1998/02/07 15:29:45 curt
- * Incorporated HUD changes and struct/typedef changes from Charlie Hotchkiss
- * <chotchkiss@namg.us.anritsu.com>
- *
- * Revision 1.9 1998/01/29 00:50:29 curt
- * Added a view record field for absolute x, y, z position.
- *
- * Revision 1.8 1998/01/27 00:47:58 curt
- * Incorporated Paul Bleisch's <bleisch@chromatic.com> new debug message
- * system and commandline/config file processing code.
- *
- * Revision 1.7 1998/01/22 02:59:38 curt
- * Changed #ifdef FILE_H to #ifdef _FILE_H
- *
- * Revision 1.6 1998/01/19 19:27:10 curt
- * Merged in make system changes from Bob Kuehne <rpk@sgi.com>
- * This should simplify things tremendously.
- *
- * Revision 1.5 1997/12/22 04:14:32 curt
- * Aligned sky with sun so dusk/dawn effects can be correct relative to the sun.
- *
- * Revision 1.4 1997/12/17 23:13:36 curt
- * Began working on rendering a sky.
- *
- * Revision 1.3 1997/12/15 23:54:51 curt
- * Add xgl wrappers for debugging.
- * Generate terrain normals on the fly.
- *
- * Revision 1.2 1997/12/10 22:37:48 curt
- * Prepended "fg" on the name of all global structures that didn't have it yet.
- * i.e. "struct WEATHER {}" became "struct fgWEATHER {}"
- *
- * Revision 1.1 1997/08/27 21:31:18 curt
- * Initial revision.
- *
- */
--- /dev/null
+/**************************************************************************
+ * views.hxx -- data structures and routines for managing and view parameters.
+ *
+ * Written by Curtis Olson, started August 1997.
+ *
+ * Copyright (C) 1997 Curtis L. Olson - curt@infoplane.com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * $Id$
+ * (Log is kept at end of this file)
+ **************************************************************************/
+
+
+#ifndef _VIEWS_H
+#define _VIEWS_H
+
+
+#ifndef __cplusplus
+# error This library requires C++
+#endif
+
+
+#include <Include/fg_types.h>
+#include <Flight/flight.h>
+#include <Math/mat3.h>
+#include <Time/fg_time.h>
+#include <Time/light.hxx>
+
+
+/* Define a structure containing view information */
+struct fgVIEW {
+ /* absolute view position */
+ struct fgCartesianPoint abs_view_pos;
+
+ /* view position translated to scenery.center */
+ struct fgCartesianPoint view_pos;
+
+ /* cartesion coordinates of current lon/lat if at sea level
+ * translated to scenery.center*/
+ struct fgCartesianPoint cur_zero_elev;
+
+ /* vector in cartesian coordinates from current position to the
+ * postion on the earth's surface the sun is directly over */
+ MAT3vec to_sun;
+
+ /* surface direction to go to head towards sun */
+ MAT3vec surface_to_sun;
+
+ /* surface vector heading south */
+ MAT3vec surface_south;
+
+ /* surface vector heading east (used to unambiguously align sky with sun) */
+ MAT3vec surface_east;
+
+ /* local up vector (normal to the plane tangent to the earth's
+ * surface at the spot we are directly above */
+ MAT3vec local_up;
+
+ /* up vector for the view (usually point straight up through the
+ * top of the aircraft */
+ MAT3vec view_up;
+
+ /* the vector pointing straight out the nose of the aircraft */
+ MAT3vec view_forward;
+
+ /* the current offset from forward for viewing */
+ double view_offset;
+
+ /* the goal view offset for viewing (used for smooth view changes) */
+ double goal_view_offset;
+};
+
+
+extern struct fgVIEW current_view;
+
+
+/* Initialize a view structure */
+void fgViewInit(struct fgVIEW *v);
+
+/* Update the view parameters */
+void fgViewUpdate(fgFLIGHT *f, struct fgVIEW *v, fgLIGHT *l);
+
+
+#endif /* _VIEWS_HXX */
+
+
+/* $Log$
+/* Revision 1.1 1998/04/22 13:25:46 curt
+/* C++ - ifing the code.
+/* Starting a bit of reorganization of lighting code.
+/*
+ * Revision 1.11 1998/04/21 17:02:42 curt
+ * Prepairing for C++ integration.
+ *
+ * Revision 1.10 1998/02/07 15:29:45 curt
+ * Incorporated HUD changes and struct/typedef changes from Charlie Hotchkiss
+ * <chotchkiss@namg.us.anritsu.com>
+ *
+ * Revision 1.9 1998/01/29 00:50:29 curt
+ * Added a view record field for absolute x, y, z position.
+ *
+ * Revision 1.8 1998/01/27 00:47:58 curt
+ * Incorporated Paul Bleisch's <bleisch@chromatic.com> new debug message
+ * system and commandline/config file processing code.
+ *
+ * Revision 1.7 1998/01/22 02:59:38 curt
+ * Changed #ifdef FILE_H to #ifdef _FILE_H
+ *
+ * Revision 1.6 1998/01/19 19:27:10 curt
+ * Merged in make system changes from Bob Kuehne <rpk@sgi.com>
+ * This should simplify things tremendously.
+ *
+ * Revision 1.5 1997/12/22 04:14:32 curt
+ * Aligned sky with sun so dusk/dawn effects can be correct relative to the sun.
+ *
+ * Revision 1.4 1997/12/17 23:13:36 curt
+ * Began working on rendering a sky.
+ *
+ * Revision 1.3 1997/12/15 23:54:51 curt
+ * Add xgl wrappers for debugging.
+ * Generate terrain normals on the fly.
+ *
+ * Revision 1.2 1997/12/10 22:37:48 curt
+ * Prepended "fg" on the name of all global structures that didn't have it yet.
+ * i.e. "struct WEATHER {}" became "struct fgWEATHER {}"
+ *
+ * Revision 1.1 1997/08/27 21:31:18 curt
+ * Initial revision.
+ *
+ */