00001
00002
00003
00004 #ifndef _SKYFLY_H
00005 #define _SKYFLY_H
00006
00007 #include "wakevortex.h"
00008 #include <stdlib.h>
00009
00010 #ifdef _WIN32
00011 #pragma warning(disable : 4244)
00012 #endif
00013
00014
00015 #define ESCKEY 0
00016 #define RKEY 1
00017 #define PERIODKEY 2
00018 #define SPACEKEY 3
00019
00020 #define DOWNARROWKEY 4
00021 #define UPARROWKEY 5
00022 #define LEFTARROWKEY 6
00023 #define RIGHTARROWKEY 7
00024
00025 #define PAGEDOWNKEY 8
00026 #define PAGEUPKEY 9
00027
00028 #define LEFTMOUSE 10
00029 #define MIDDLEMOUSE 11
00030 #define RIGHTMOUSE 12
00031 #define BUTCOUNT 13
00032
00033
00034 #define MOUSEX 0
00035 #define MOUSEY 1
00036 #define VALCOUNT 2
00037
00038 #undef random
00039 #ifndef __linux__
00040 #ifndef __CYGWIN__
00041 extern long random(void);
00042 #endif
00043 #endif
00044
00045 #undef MIN
00046 #undef MAX
00047 #define MIN(a,b) (((a)<(b)) ? (a) : (b))
00048 #define MAX(a,b) (((a)>(b)) ? (a) : (b))
00049 #define RAD_TO_DEG (180.0/M_PI)
00050 #define DEG_TO_RAD (M_PI/180.0)
00051 #define IRND(x) ((int)((float)(x) * ((float)random()/(float)0x7fffffff)))
00052 #define M_PI 3.14159265358979323846
00053
00054 #define NUM_PLANES_MAX 100 // ANIRUDH
00055 #define GRID_RANGE 200
00056 #define FOV (M_PI / 4.*4.0/3.0)
00057
00058
00059
00060
00061 #define LX 0.0
00062 #define LY 0.707
00063 #define LZ 0.707
00064
00065 #define FLOATS_PER_VERT_PAIR 16
00066
00067 #define NBUFFERS 2
00068
00069 #define SKY_CYCLOPS 0
00070 #define SKY_DUALCHANNEL 1
00071 #define SKY_SINGLECHANNEL 2
00072
00073
00074
00075
00076 #define PD_TEXTURE_BIND 0
00077 #define PD_DRAW_PAPER_PLANE 1
00078 #define PD_DRAW_TERRAIN_CELL 2
00079 #define PD_PAPER_PLANE_MODE 3
00080 #define PD_PAPER_PLANE_POS 4
00081 #define PD_VIEWER_POS 5
00082 #define PD_DRAW_CLOUDS 6
00083 #define PD_END 0x3fff
00084
00085 #define PLANES_START 0
00086 #define PLANES_SECOND_PASS 1
00087 #define PLANES_END 2
00088
00089
00090
00091
00092 #define PD_V_POINT 0
00093 #define PD_V_CPACK 3
00094 #define PD_V_NORMAL 4
00095 #define PD_V_COLOR 8
00096 #define PD_V_TEX 12
00097 #define PD_V_SIZE 16
00098
00099
00100
00101
00102 typedef struct perfobj_vert_t {
00103 float vert[3];
00104 unsigned long vpad;
00105
00106 float normal[3];
00107 unsigned long npad;
00108
00109 float color[3];
00110 unsigned long cpad;
00111
00112 float texture[2];
00113 unsigned long tpad[2];
00114 } perfobj_vert_t;
00115
00116
00117
00118
00119
00120
00121
00122 typedef struct perfobj_t {
00123 unsigned int *flags;
00124 float *vdata;
00125 } perfobj_t;
00126
00127 extern void drawperfobj( perfobj_t *perfptr );
00128
00129 extern void putv3fdata( float *source, perfobj_vert_t *vertptr );
00130 extern void putn3fdata( float *source, perfobj_vert_t *vertptr );
00131 extern void putc3fdata( float *source, perfobj_vert_t *vertptr );
00132 extern void putt2fdata( float *source, perfobj_vert_t *vertptr );
00133
00134
00135
00136
00137
00138
00139 typedef struct shared_data_struct {
00140
00141 perfobj_t paper_plane_obj;
00142 perfobj_t paper_plane_start_obj;
00143 perfobj_t paper_plane_2ndpass_obj;
00144 perfobj_t paper_plane_end_obj;
00145 perfobj_t terrain_texture_obj;
00146 perfobj_t *terrain_cells;
00147 perfobj_t clouds_texture_obj;
00148 perfobj_t clouds_obj;
00149
00150
00151 unsigned int paper_plane_flags[2];
00152 unsigned int paper_plane_start_flags[3];
00153 unsigned int paper_plane_2ndpass_flags[3];
00154 unsigned int paper_plane_end_flags[3];
00155 unsigned int terrain_texture_flags[3];
00156 unsigned int **terrain_cell_flags;
00157 unsigned int clouds_texture_flags[3];
00158 unsigned int clouds_flags[2];
00159
00160
00161 perfobj_vert_t paper_plane_verts[22];
00162 perfobj_vert_t **terrain_cell_verts;
00163 perfobj_vert_t clouds_verts[4];
00164
00165 } shared_data;
00166
00167
00168
00169
00170 extern shared_data *SharedData;
00171 extern float ScaleZ;
00172 extern int CellDim;
00173 extern int NumCells;
00174 extern int GridDim;
00175 extern float FarCull;
00176 extern float XYScale, CellSize;
00177 extern int Wxsize, Wysize;
00178
00179 extern int Init_pos;
00180 extern float Init_x, Init_y, Init_z, Init_azimuth;
00181
00182 extern float far_cull;
00183 extern int rgbmode;
00184 extern float fog_params[4];
00185 extern int dither, fog;
00186 extern int mipmap;
00187
00188
00189 extern int sky_base, terr_base;
00190 extern int plane_colors[3];
00191
00192 #define SKY_BITS 4
00193 #define SKY_COLORS (1 << SKY_BITS)
00194
00195 #define TERR_BITS 4
00196 #define TERR_COLORS (1 << TERR_BITS)
00197
00198 #define PLANE_BITS 4
00199 #define PLANE_COLORS (1 << PLANE_BITS)
00200
00201 #define FOG_LEVELS 6
00202
00203 #define SKY_HIGH 5.0f
00204
00205 extern void set_fog(int enable);
00206 extern void set_dither(int enable);
00207
00208 #define cosf(a) cos((float)a)
00209 #define sinf(a) sin((float)a)
00210 #define sqrtf(a) sqrt((float)a)
00211 #define expf(a) exp((float)a)
00212
00213
00214 #define PLANE_X0_OFFSET (GRID_RANGE / 2)
00215 #define PLANE_Y0_OFFSET (GRID_RANGE / 2)
00216 #define PLANE_Z0_OFFSET (0.25)
00217 #define PLANE_XYZ_FACTOR 0.001
00218 #define PLANE_X0_FACTOR PLANE_XYZ_FACTOR
00219 #define PLANE_Y0_FACTOR PLANE_XYZ_FACTOR
00220 #define PLANE_Z0_FACTOR PLANE_XYZ_FACTOR
00221 #define PLANE_SPEED_FACTOR 0.01
00222 #define CONV_X(x) (PLANE_X0_OFFSET+PLANE_X0_FACTOR*(x))
00223 #define CONV_Y(x) (PLANE_Y0_OFFSET+PLANE_Y0_FACTOR*(x))
00224 #define CONV_Z(x) (PLANE_Z0_OFFSET+PLANE_Z0_FACTOR*(x))
00225 #define UNCONV_X(x) (((x)-PLANE_X0_OFFSET)/PLANE_X0_FACTOR)
00226 #define UNCONV_Y(y) (((y)-PLANE_Y0_OFFSET)/PLANE_Y0_FACTOR)
00227 #define UNCONV_Z(z) (((z)-PLANE_Z0_OFFSET)/PLANE_Z0_FACTOR)
00228
00229 void DrawVortex(int wingID);
00230 void init_positions(int wingID);
00231 void init_positions(void);
00232
00233 void PushglColor();
00234 void PopglColor();
00235 void loadAirport();
00236
00237 void getPlaneVectors(int i, double p[6]);
00238
00239 #endif // #define _SKYFLY_H