Example #1
0
int main(int argc, char **argv) {
    struct planet sun, mercury, venus, earth, moon, mars;
    init_planet(&sun, 0xfc9a24, 695800, 0, 0, NULL);
    init_planet(&mercury, 0x99989D, 2440, 57910000, 0.01, NULL);
    init_planet(&venus, 0x6894D2, 6052, 108200000, 0.002, NULL);
    init_planet(&moon, 0xffffff, 1737.10, 384400, 0.0035 * 12, NULL);
    init_planet(&earth, 0x005db3, 6371, 149600000, 0.0035, &moon);
    init_planet(&mars, 0xD0331A, 3390, 227900000, 0.0015, NULL);
    
    init_planet_system(&ps, sun);
    add_planet(&ps, mercury);
    add_planet(&ps, venus);
    add_planet(&ps, earth);
    add_planet(&ps, mars);
    
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
    
    glutInitWindowSize(1200, 800);
    glutCreateWindow("Solar System");
    
    glutReshapeFunc(reshape);
    glutDisplayFunc(display);
    
    glutTimerFunc(TIMER_DELAY, timer, 0);
    glutMainLoop();
}
Example #2
0
ENTRYPOINT void
init_grav(ModeInfo * mi)
{
	Display    *display = MI_DISPLAY(mi);
	GC          gc = MI_GC(mi);
	unsigned char ball;
	gravstruct *gp;

	if (gravs == NULL) {
		if ((gravs = (gravstruct *) calloc(MI_NUM_SCREENS(mi),
					       sizeof (gravstruct))) == NULL)
			return;
	}
	gp = &gravs[MI_SCREEN(mi)];

	gp->width = MI_WIDTH(mi);
	gp->height = MI_HEIGHT(mi);

	gp->sr = STARRADIUS;

	gp->nplanets = MI_COUNT(mi);
	if (gp->nplanets < 0) {
		if (gp->planets) {
			(void) free((void *) gp->planets);
			gp->planets = (planetstruct *) NULL;
		}
		gp->nplanets = NRAND(-gp->nplanets) + 1;	/* Add 1 so its not too boring */
	}
	if (gp->planets == NULL) {
		if ((gp->planets = (planetstruct *) calloc(gp->nplanets,
				sizeof (planetstruct))) == NULL)
			return;
	}

	MI_CLEARWINDOW(mi);

	if (MI_NPIXELS(mi) > 2)
		gp->starcolor = MI_PIXEL(mi, NRAND(MI_NPIXELS(mi)));
	else
		gp->starcolor = MI_WHITE_PIXEL(mi);
	for (ball = 0; ball < (unsigned char) gp->nplanets; ball++)
		init_planet(mi, &gp->planets[ball]);

	/* Draw centrepoint */
	XDrawArc(display, MI_WINDOW(mi), gc,
		 gp->width / 2 - gp->sr / 2, gp->height / 2 - gp->sr / 2, gp->sr, gp->sr,
		 0, 23040);
}
Example #3
0
ENTRYPOINT void
init_grav(ModeInfo * mi)
{
	unsigned char ball;
	gravstruct *gp;

	MI_INIT (mi, gravs);
	gp = &gravs[MI_SCREEN(mi)];

	gp->width = MI_WIDTH(mi);
	gp->height = MI_HEIGHT(mi);

	gp->sr = STARRADIUS;

	gp->nplanets = MI_COUNT(mi);
	if (gp->nplanets < 0) {
		if (gp->planets) {
			(void) free((void *) gp->planets);
			gp->planets = (planetstruct *) NULL;
		}
		gp->nplanets = NRAND(-gp->nplanets) + 1;	/* Add 1 so its not too boring */
	}
	if (gp->planets == NULL) {
		if ((gp->planets = (planetstruct *) calloc(gp->nplanets,
				sizeof (planetstruct))) == NULL)
			return;
	}

	MI_CLEARWINDOW(mi);

	if (MI_NPIXELS(mi) > 2)
		gp->starcolor = MI_PIXEL(mi, NRAND(MI_NPIXELS(mi)));
	else
		gp->starcolor = MI_WHITE_PIXEL(mi);
	for (ball = 0; ball < (unsigned char) gp->nplanets; ball++)
		init_planet(mi, &gp->planets[ball]);
}
Example #4
0
LRESULT WINAPI ScreenSaverProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {

	RECT	rc;
	HANDLE	hPalMem;	

    switch (msg)
    {                
        case WM_CREATE:
        {
			gravstruct	*gp = &gravs;
        	int		i, R,G,B;
			unsigned char ball;

			vLoadStrings();					// load strings from table
			GetIniSettings();				// get settings from ini file (control.ini)
        	
            wTimer = SetTimer(hWnd, ID_TIMER, wElapse, NULL);	// create timer to move image
                        
            GetClientRect(hWnd, &rc);							// find size of screen
			gp->width = rc.right;
			gp->height = rc.bottom;

			gp->sr = STARRADIUS;

			gp->nplanets = iPlanets;
			srand((unsigned)time(NULL));	// seed random w/ timer

			if (!gp->planets) {
				gp->planets = (planetstruct*)malloc((gp->nplanets+1)*sizeof(planetstruct));
				memset(gp->planets, 0, (gp->nplanets+1)*sizeof(planetstruct));
				gp->starcolor = rand() % (PALSIZE-21);
			}

			for (ball = 0; ball <= gp->nplanets; ball++)
				init_planet(&(gp->planets[ball]));

			// Create a logical palette to play with
			hPalMem = LocalAlloc(LMEM_FIXED,
								sizeof(LOGPALETTE)
								+ PALSIZE * sizeof(PALETTEENTRY));
			if (!hPalMem) {
				// error("No memory for palette");
				return -1;
			}
			pLogPal = (NPLOGPALETTE) LocalLock(hPalMem);
			pLogPal->palVersion = 0x300;
			pLogPal->palNumEntries = PALSIZE;
	        for (i=0, R=255,G=0,B=0; i<PALSIZE; i++) {
	        
	        	cycle_colors(&R,&G,&B,255,0,6);
	        	
	            pLogPal->palPalEntry[i].peRed = LOBYTE(R);
	            pLogPal->palPalEntry[i].peGreen = LOBYTE(G);
	            pLogPal->palPalEntry[i].peBlue = LOBYTE(B);
	            pLogPal->palPalEntry[i].peFlags = PC_RESERVED;
	        }
	        hPal = CreatePalette((LPLOGPALETTE)pLogPal);
	        if (!hPal) {
	            //Error("CreatePalette() failed");
	            return -1;
	        }
			break;
        }
        
        case WM_TIMER:                              // BOUNCER-specific
            MoveImage(hWnd);						// move image around
            break;

        case WM_DESTROY:                            // BOUNCER-specific
            if( wTimer )
            	KillTimer(hWnd, ID_TIMER);
			if (hPal)
				DeleteObject(hPal);
			free(gravs.planets);            
            break;

        case WM_ERASEBKGND:
			GetClientRect(hWnd,&rc);
			FillRect((HDC)wParam,&rc,(HBRUSH)GetStockObject(BLACK_BRUSH));
            return 0L;

        default:
            break;
        }

    return DefScreenSaverProc(hWnd, msg, wParam, lParam);
}