tixiv
16 years ago
11 changed files with 427 additions and 547 deletions
@ -0,0 +1,124 @@ |
|||
|
|||
#include <setjmp.h> |
|||
|
|||
#include "config.h" |
|||
#include "scrolltext/scrolltext.h" |
|||
#include "animations/programm.h" |
|||
#include "animations/matrix.h" |
|||
#include "animations/gameoflife.h" |
|||
#include "borg_hw/borg_hw.h" |
|||
#include "can/borg_can.h" |
|||
#include "random/prng.h" |
|||
#include "random/persistentCounter.h" |
|||
#include "mcuf/mcuf.h" |
|||
#include "menu/menu.h" |
|||
#include "pixel.h" |
|||
#include "joystick.h" |
|||
|
|||
|
|||
volatile unsigned char oldMode, oldOldmode, mode; |
|||
|
|||
jmp_buf newmode_jmpbuf; |
|||
|
|||
void display_loop(){ |
|||
// mcuf_serial_mode();
|
|||
|
|||
mode = setjmp(newmode_jmpbuf); |
|||
oldOldmode = oldMode; |
|||
waitForFire = 1; |
|||
for(;;){ |
|||
oldMode = mode; |
|||
switch(mode++) { |
|||
|
|||
#ifdef ANIMATION_SCROLLTEXT |
|||
case 1: |
|||
scrolltext(scrolltext_text); |
|||
{ char a[14]; |
|||
sprintf(a,"</# counter == %lu ", percnt_get()); |
|||
scrolltext(a); |
|||
} |
|||
break; |
|||
#endif |
|||
|
|||
#ifdef ANIMATION_SPIRALE |
|||
case 2: |
|||
spirale(5); |
|||
break; |
|||
#endif |
|||
|
|||
#ifdef ANIMATION_JOERN1 |
|||
case 3: |
|||
joern1(); |
|||
break; |
|||
#endif |
|||
|
|||
#ifdef ANIMATION_SNAKE |
|||
case 4: |
|||
snake(); |
|||
break; |
|||
#endif |
|||
|
|||
#ifdef ANIMATION_SCHACHBRETT |
|||
case 5: |
|||
schachbrett(20); |
|||
break; |
|||
#endif |
|||
|
|||
#ifdef ANIMATION_FEUER |
|||
case 6: |
|||
feuer(); |
|||
break; |
|||
#endif |
|||
|
|||
#ifdef ANIMATION_MATRIX |
|||
case 7: |
|||
matrix(); |
|||
break; |
|||
#endif |
|||
|
|||
#ifdef ANIMATION_RANDOM_BRIGHT |
|||
case 8: |
|||
random_bright(200); |
|||
break; |
|||
#endif |
|||
|
|||
#ifdef ANIMATION_GAMEOFLIFE |
|||
case 9: |
|||
gameoflife(); |
|||
break; |
|||
#endif |
|||
|
|||
case 29: |
|||
mode = 1; |
|||
break; |
|||
|
|||
#ifdef ANIMATION_TESTS |
|||
case 31: |
|||
test_level1(); |
|||
break; |
|||
case 32: |
|||
test_level2(); |
|||
break; |
|||
case 33: |
|||
test_level3(); |
|||
break; |
|||
case 35: |
|||
test1(); |
|||
while(1); |
|||
break; |
|||
#endif |
|||
|
|||
#ifdef ANIMATION_OFF |
|||
case 0xFF: |
|||
off(); |
|||
break; |
|||
#endif |
|||
|
|||
#ifdef MENU_SUPPORT |
|||
case 43: |
|||
menu(); |
|||
mode = oldOldmode; |
|||
#endif |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,4 @@ |
|||
|
|||
void display_loop(); |
|||
|
|||
extern jmp_buf newmode_jmpbuf; |
@ -1,111 +1,9 @@ |
|||
PRG = borgSim |
|||
OPTIMIZE = -O0 |
|||
LIBS = -lglut -lpthread -lGL -lGLU |
|||
CC = gcc |
|||
LD = ld |
|||
TARGET = libanimations.a |
|||
TOPDIR = .. |
|||
|
|||
override CFLAGS = -g -Wall -pedantic -std=c99 $(OPTIMIZE) |
|||
$(DEFS) |
|||
override LDFLAGS = -Wl,-Map,$(PRG).map |
|||
include $(TOPDIR)/defaults.mk |
|||
|
|||
OBJ = breakpoint.o font_arial8.o font_small6.o font_uni53.o invader_draw.o \
|
|||
invader_init.o invader_proc.o invaders2.o joystick.o main.o menu.o pixel.o \
|
|||
programm.o scrolltext3.o snake.o trackball.o util.o tetris/input.o \
|
|||
tetris/logic.o tetris/piece.o tetris/playfield.o tetris/view.o prng.o \
|
|||
memxor_c.o noekeon.o stonefly.o |
|||
SRC_SIM = main.c trackball.c |
|||
|
|||
all: $(PRG) |
|||
|
|||
$(PRG): $(OBJ) |
|||
$(CC) $(CFLAGS) $(LDFLAGS) $(LIBS) $(OBJ) -o $@ |
|||
|
|||
clean: |
|||
rm -rf $(OBJ) $(PRG) $(PRG).map |
|||
|
|||
breakpoint.o: breakpoint.c pixel.h util.h config.h |
|||
$(CC) $(CFLAGS) -c -o breakpoint.o breakpoint.c |
|||
|
|||
font_arial8.o: font_arial8.c font.h |
|||
$(CC) $(CFLAGS) -c -o font_arial8.o font_arial8.c |
|||
|
|||
font_small6.o: font_small6.c font.h |
|||
$(CC) $(CFLAGS) -c -o font_small6.o font_small6.c |
|||
|
|||
font_uni53.o: font_uni53.c font.h |
|||
$(CC) $(CFLAGS) -c -o font_uni53.o font_uni53.c |
|||
|
|||
invader_draw.o: invader_draw.c invaders2.h pixel.h util.h config.h \ |
|||
scrolltext.h joystick.h |
|||
$(CC) $(CFLAGS) -c -o invader_draw.o invader_draw.c |
|||
|
|||
invader_init.o: invader_init.c invaders2.h pixel.h util.h config.h \ |
|||
scrolltext.h joystick.h |
|||
$(CC) $(CFLAGS) -c -o invader_init.o invader_init.c |
|||
|
|||
invader_proc.o: invader_proc.c invaders2.h pixel.h util.h config.h \ |
|||
scrolltext.h joystick.h |
|||
$(CC) $(CFLAGS) -c -o invader_proc.o invader_proc.c |
|||
|
|||
invaders2.o: invaders2.c util.h invaders2.h pixel.h config.h scrolltext.h \ |
|||
joystick.h |
|||
$(CC) $(CFLAGS) -c -o invaders2.o invaders2.c |
|||
|
|||
joystick.o: joystick.c joystick.h |
|||
$(CC) $(CFLAGS) -c -o joystick.o joystick.c |
|||
|
|||
main.o: main.c config.h pixel.h util.h programm.h menu.h tetris/logic.h \ |
|||
tetris/piece.h trackball.h snake.h scrolltext.h |
|||
$(CC) $(CFLAGS) -c -o main.o main.c |
|||
|
|||
menu.o: menu.c menu.h config.h util.h pixel.h joystick.h snake.h \ |
|||
tetris/logic.h tetris/piece.h invaders2.h scrolltext.h |
|||
$(CC) $(CFLAGS) -c -o menu.o menu.c |
|||
|
|||
pixel.o: pixel.c pixel.h util.h config.h |
|||
$(CC) $(CFLAGS) -c -o pixel.o pixel.c |
|||
|
|||
programm.o: programm.c pixel.h util.h config.h programm.h joystick.h |
|||
$(CC) $(CFLAGS) -c -o programm.o programm.c |
|||
|
|||
scrolltext3.o: scrolltext3.c config.h scrolltext.h pixel.h util.h \ |
|||
font_arial8.h font.h font_small6.h font_uni53.h |
|||
$(CC) $(CFLAGS) -c -o scrolltext3.o scrolltext3.c |
|||
|
|||
snake.o: snake.c pixel.h util.h config.h joystick.h |
|||
$(CC) $(CFLAGS) -c -o snake.o snake.c |
|||
|
|||
trackball.o: trackball.c trackball.h |
|||
$(CC) $(CFLAGS) -c -o trackball.o trackball.c |
|||
|
|||
util.o: util.c joystick.h |
|||
$(CC) $(CFLAGS) -c -o util.o util.c |
|||
|
|||
noekeon.o: noekeon.c noekeon.h memxor.h |
|||
$(CC) $(CFLAGS) -c -o $@ $< |
|||
|
|||
memxor_c.o: memxor_c.c memxor.h |
|||
$(CC) $(CFLAGS) -c -o $@ $< |
|||
|
|||
prng.o: prng.c prng.h noekeon.h memxor.h |
|||
$(CC) $(CFLAGS) -c -o $@ $< |
|||
|
|||
tetris/input.o: tetris/input.c joystick.h util.h tetris/input.h |
|||
$(CC) $(CFLAGS) -c -o tetris/input.o tetris/input.c |
|||
|
|||
logic.o: tetris/logic.c tetris/logic.h tetris/piece.h tetris/playfield.h \ |
|||
tetris/view.h tetris/input.h prng.h ../borg-base/prng.h |
|||
$(CC) $(CFLAGS) -c -o tetris/logic.o tetris/logic.c |
|||
|
|||
tetris/piece.o: tetris/piece.c tetris/piece.h |
|||
$(CC) $(CFLAGS) -c -o tetris/piece.o tetris/piece.c |
|||
|
|||
tetris/playfield.o: tetris/playfield.c tetris/playfield.h tetris/piece.h |
|||
$(CC) $(CFLAGS) -c -o tetris/playfield.o tetris/playfield.c |
|||
|
|||
tetris/view.o: tetris/view.c config.h pixel.h util.h scrolltext.h \ |
|||
tetris/logic.h tetris/piece.h tetris/playfield.h tetris/view.h |
|||
$(CC) $(CFLAGS) -c -o tetris/view.o tetris/view.c |
|||
|
|||
stonefly.o: stonefly.h stonefly.c pixel.h util.h config.h prng.h \ |
|||
../borg-base/prng.h tetris/piece.h |
|||
$(CC) $(CFLAGS) -c -o stonefly.o stonefly.c |
|||
include $(TOPDIR)/rules.mk |
|||
|
@ -1,309 +1,259 @@ |
|||
|
|||
|
|||
|
|||
|
|||
#ifdef _WIN32 |
|||
# include <GL/glut.h> |
|||
# include <windows.h> |
|||
# include <process.h> |
|||
# define pthread_t int |
|||
#else |
|||
# include <GL/glut.h> |
|||
# include <windows.h> |
|||
# include <process.h> |
|||
# define pthread_t int |
|||
#else |
|||
# ifdef OSX_ |
|||
# include <GLUT/glut.h> |
|||
# else |
|||
# include <GL/glut.h> |
|||
# endif |
|||
# include <pthread.h> // for threads in linux
|
|||
# include <stdlib.h> |
|||
# include <sys/time.h> |
|||
# include <sys/types.h> |
|||
# include <unistd.h> |
|||
#endif |
|||
|
|||
#include <stdio.h> |
|||
#include <setjmp.h> |
|||
#include "config.h" |
|||
#include "pixel.h" |
|||
#include "programm.h" |
|||
#include "menu.h" |
|||
#include "tetris/logic.h" |
|||
#include "trackball.h" |
|||
#include "snake.h" |
|||
#include "stonefly.h" |
|||
|
|||
#include "scrolltext.h" |
|||
|
|||
|
|||
|
|||
unsigned char fakeport; |
|||
jmp_buf newmode_jmpbuf; |
|||
volatile unsigned char oldMode, oldOldmode, mode; |
|||
extern unsigned char waitForFire; |
|||
|
|||
|
|||
int WindWidth, WindHeight; |
|||
|
|||
unsigned char pixmap[NUMPLANE][NUM_ROWS][LINEBYTES]; |
|||
unsigned char joystick; |
|||
|
|||
float view_rotx = 0, view_roty = 0, view_rotz = 0; |
|||
int win; |
|||
|
|||
|
|||
pthread_t simthread; |
|||
GLUquadric* quad; |
|||
|
|||
void drawLED(int color, float pos_x, float pos_y, float pos_z) { |
|||
glPushMatrix(); |
|||
glTranslatef(pos_x, pos_y, pos_z); |
|||
glCallList(color); |
|||
glPopMatrix(); |
|||
} |
|||
|
|||
void display(void){ |
|||
int x, y, z, level, color; |
|||
tbReshape(WindWidth, WindHeight); |
|||
glClear(GL_COLOR_BUFFER_BIT); |
|||
glPushMatrix(); |
|||
glTranslatef(NUM_COLS*2., 0., NUM_ROWS*2.); |
|||
tbMatrix(); |
|||
glRotatef(view_rotx, 1.0, 0.0, 0.0); |
|||
glRotatef(view_roty, 0.0, 1.0, 0.0); |
|||
glRotatef(view_rotz, 0.0, 0.0, 1.0); |
|||
glTranslatef(-NUM_COLS*2, 0., -NUM_ROWS*2.); |
|||
for (x = 0; x < 1; x++) { |
|||
for (y = 0; y < NUM_COLS; y++) { |
|||
for (z = 0; z < NUM_ROWS; z++) { |
|||
color = 0; |
|||
for (level = 0; level < NUMPLANE; level++) { |
|||
if (pixmap[level][z%NUM_ROWS][y/8] & (1 << y % 8)) { |
|||
color = level+1; |
|||
} |
|||
} |
|||
drawLED(color, (float)y*4.0, |
|||
(float)x*4.0, |
|||
(float)(NUM_ROWS-1-z)*4.0); |
|||
} |
|||
} |
|||
} |
|||
glPopMatrix(); |
|||
glutSwapBuffers(); |
|||
#ifdef _WIN32 |
|||
Sleep(10); |
|||
#else |
|||
usleep(20000); |
|||
#endif |
|||
joystick = 255; |
|||
} |
|||
|
|||
void keyboard(unsigned char key, int x, int y){ |
|||
switch (key) { |
|||
case 'q': printf("Quit\n"); |
|||
glutDestroyWindow(win); |
|||
exit(0); |
|||
break; |
|||
case ' ': |
|||
fakeport |= 0x01; |
|||
break; |
|||
case 'a': |
|||
fakeport |= 0x02; |
|||
break; |
|||
case 'd': |
|||
fakeport |= 0x04; |
|||
break; |
|||
case 's': |
|||
fakeport |= 0x08; |
|||
break; |
|||
case 'w': |
|||
fakeport |= 0x10; |
|||
break; |
|||
} |
|||
} |
|||
|
|||
void keyboardup(unsigned char key, int x, int y){ |
|||
switch (key) { |
|||
case ' ': |
|||
fakeport &= ~0x01; |
|||
break; |
|||
case 'a': |
|||
fakeport &= ~0x02; |
|||
break; |
|||
case 'd': |
|||
fakeport &= ~0x04; |
|||
break; |
|||
case 's': |
|||
fakeport &= ~0x08; |
|||
break; |
|||
case 'w': |
|||
fakeport &= ~0x10; |
|||
break; |
|||
} |
|||
} |
|||
|
|||
void mouse(int button, int state, int x, int y) |
|||
{ |
|||
tbMouse(button, state, x, y); |
|||
} |
|||
|
|||
void motion(int x, int y) |
|||
{ |
|||
tbMotion(x, y); |
|||
} |
|||
|
|||
void reshape(int width, int height) |
|||
{ |
|||
|
|||
tbReshape(width, height); |
|||
|
|||
glViewport(0, 0, width, height); |
|||
|
|||
glMatrixMode(GL_PROJECTION); |
|||
glLoadIdentity(); |
|||
gluPerspective(60.0, (float)WindWidth/(float)WindWidth, 5., 1000.); |
|||
gluLookAt(NUM_ROWS*2., NUM_ROWS*2.+50., NUM_COLS*2., |
|||
NUM_ROWS*2., NUM_ROWS*2., NUM_COLS*2., |
|||
0.0, 0.0, 1.0); |
|||
glMatrixMode(GL_MODELVIEW); |
|||
glLoadIdentity(); |
|||
|
|||
WindWidth = width; |
|||
WindHeight = height; |
|||
} |
|||
|
|||
/* change view angle */ |
|||
static void special(int k, int x, int y) { |
|||
switch (k) { |
|||
case GLUT_KEY_UP: |
|||
view_rotx += 5.0; |
|||
break; |
|||
case GLUT_KEY_DOWN: |
|||
view_rotx -= 5.0; |
|||
break; |
|||
case GLUT_KEY_LEFT: |
|||
view_rotz += 5.0; |
|||
break; |
|||
case GLUT_KEY_RIGHT: |
|||
view_rotz -= 5.0; |
|||
break; |
|||
default: |
|||
return; |
|||
} |
|||
glutPostRedisplay(); |
|||
} |
|||
/*
|
|||
void timf(int value) { |
|||
glutPostRedisplay(); |
|||
glutTimerFunc(1, timf, 0); |
|||
}*/ |
|||
|
|||
void *display_loop(void * unused) { |
|||
unsigned char mode;;; |
|||
mode = setjmp(newmode_jmpbuf); |
|||
oldOldmode = oldMode; |
|||
waitForFire = 1; |
|||
scrolltext("</#Scrolltext3 Test"); |
|||
for(;;){ |
|||
oldMode = mode; |
|||
switch(mode++) { |
|||
case 1: |
|||
stonefly(); |
|||
break; |
|||
case 2: |
|||
breakpoint(); |
|||
break; |
|||
case 3: |
|||
schwarzesLoch(); |
|||
break; |
|||
case 4: |
|||
scrolltext("</#Scrolltext3 Test"); |
|||
break; |
|||
case 5: |
|||
spirale(20); |
|||
break; |
|||
case 6: |
|||
joern1(); |
|||
break; |
|||
case 7: |
|||
snake(); |
|||
break; |
|||
case 8: |
|||
schachbrett(20); |
|||
break; |
|||
case 9: |
|||
feuer(); |
|||
break; |
|||
case 10: |
|||
matrix(); |
|||
break; |
|||
case 31: |
|||
fadein(); |
|||
break; |
|||
case 32: |
|||
test1(); |
|||
break; |
|||
case 43: |
|||
menu(); |
|||
mode = oldOldmode; |
|||
default: |
|||
break; |
|||
} |
|||
} |
|||
|
|||
} |
|||
|
|||
int main(int argc, char **argv){ |
|||
WindHeight = 700; |
|||
WindWidth = 700; |
|||
glutInit(&argc,argv); |
|||
glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); |
|||
glutInitWindowSize(WindHeight, WindWidth); |
|||
win = glutCreateWindow("16x16 Borg Simulator"); |
|||
|
|||
// callback
|
|||
//glutReshapeFunc(reshape);
|
|||
glutDisplayFunc(display); |
|||
glutIdleFunc(display); |
|||
glutSetKeyRepeat(GLUT_KEY_REPEAT_OFF); |
|||
glutKeyboardFunc(keyboard); |
|||
glutKeyboardUpFunc(keyboardup); |
|||
glutSpecialFunc(special); |
|||
glutMouseFunc(mouse); |
|||
glutMotionFunc(motion); |
|||
|
|||
// clearcolor & main loop
|
|||
glClearColor(0,0,0,1.0); |
|||
gluPerspective(60.0, (float)WindWidth/(float)WindWidth, 5., 1000.); |
|||
gluLookAt(NUM_COLS*2., NUM_COLS*2.+50., NUM_ROWS*2., |
|||
NUM_COLS*2., NUM_COLS*2., NUM_ROWS*2., |
|||
0.0, 0.0, 1.0); |
|||
|
|||
// init Call List for LED
|
|||
quad = gluNewQuadric(); |
|||
glNewList(0, GL_COMPILE); |
|||
glColor4f(0.8, 0.0, 0.0, 1.); |
|||
gluSphere(quad, 1.0, 12, 12); |
|||
glEndList(); |
|||
glNewList(1, GL_COMPILE); |
|||
glColor4f(0.5, 0.0, 0.0, 1.); |
|||
gluSphere(quad, 1.4, 12, 12); |
|||
glEndList(); |
|||
glNewList(2, GL_COMPILE); |
|||
glColor4f(0.7, 0.0, 0.0, 1.); |
|||
gluSphere(quad, 1.55, 12, 12); |
|||
glEndList(); |
|||
glNewList(3, GL_COMPILE); |
|||
glColor4f(1.00, 0.0, 0.0, 1.); |
|||
gluSphere(quad, 1.7, 12, 12); |
|||
glEndList(); |
|||
|
|||
tbInit(GLUT_LEFT_BUTTON); |
|||
tbAnimate(GL_FALSE); |
|||
|
|||
// start display_loop thread
|
|||
#ifdef _WIN32 |
|||
_beginthread((void (*)(void*))display_loop, 0, NULL); |
|||
#else |
|||
pthread_create(&simthread, NULL, display_loop, NULL); |
|||
#endif |
|||
//glutTimerFunc(40, timf, 0); // Set up timer for 40ms, about 25 fps
|
|||
glutMainLoop(); |
|||
return 0; |
|||
} |
|||
# include <pthread.h> // for threads in linux
|
|||
# include <stdlib.h> |
|||
# include <sys/time.h> |
|||
# include <sys/types.h> |
|||
# include <unistd.h> |
|||
#endif |
|||
|
|||
#include <stdio.h> |
|||
#include <setjmp.h> |
|||
#include "../config.h" |
|||
#include "../display_loop.h" |
|||
#include "../pixel.h" |
|||
//#include "programm.h"
|
|||
//#include "menu.h"
|
|||
//#include "../tetris/logic.h"
|
|||
#include "trackball.h" |
|||
//#include "../games/snake.h"
|
|||
//#include "stonefly.h"
|
|||
|
|||
//#include "scrolltext.h"
|
|||
|
|||
|
|||
|
|||
unsigned char fakeport; |
|||
jmp_buf newmode_jmpbuf; |
|||
volatile unsigned char oldMode, oldOldmode, mode; |
|||
extern unsigned char waitForFire; |
|||
|
|||
|
|||
int WindWidth, WindHeight; |
|||
|
|||
unsigned char pixmap[NUMPLANE][NUM_ROWS][LINEBYTES]; |
|||
unsigned char joystick; |
|||
|
|||
float view_rotx = 0, view_roty = 0, view_rotz = 0; |
|||
int win; |
|||
|
|||
|
|||
pthread_t simthread; |
|||
GLUquadric* quad; |
|||
|
|||
void drawLED(int color, float pos_x, float pos_y, float pos_z) { |
|||
glPushMatrix(); |
|||
glTranslatef(pos_x, pos_y, pos_z); |
|||
glCallList(color); |
|||
glPopMatrix(); |
|||
} |
|||
|
|||
void display(void){ |
|||
int x, y, z, level, color; |
|||
tbReshape(WindWidth, WindHeight); |
|||
glClear(GL_COLOR_BUFFER_BIT); |
|||
glPushMatrix(); |
|||
glTranslatef(NUM_COLS*2., 0., NUM_ROWS*2.); |
|||
tbMatrix(); |
|||
glRotatef(view_rotx, 1.0, 0.0, 0.0); |
|||
glRotatef(view_roty, 0.0, 1.0, 0.0); |
|||
glRotatef(view_rotz, 0.0, 0.0, 1.0); |
|||
glTranslatef(-NUM_COLS*2, 0., -NUM_ROWS*2.); |
|||
for (x = 0; x < 1; x++) { |
|||
for (y = 0; y < NUM_COLS; y++) { |
|||
for (z = 0; z < NUM_ROWS; z++) { |
|||
color = 0; |
|||
for (level = 0; level < NUMPLANE; level++) { |
|||
if (pixmap[level][z%NUM_ROWS][y/8] & (1 << y % 8)) { |
|||
color = level+1; |
|||
} |
|||
} |
|||
drawLED(color, (float)y*4.0, |
|||
(float)x*4.0, |
|||
(float)(NUM_ROWS-1-z)*4.0); |
|||
} |
|||
} |
|||
} |
|||
glPopMatrix(); |
|||
glutSwapBuffers(); |
|||
#ifdef _WIN32 |
|||
Sleep(10); |
|||
#else |
|||
usleep(20000); |
|||
#endif |
|||
joystick = 255; |
|||
} |
|||
|
|||
void keyboard(unsigned char key, int x, int y){ |
|||
switch (key) { |
|||
case 'q': printf("Quit\n"); |
|||
glutDestroyWindow(win); |
|||
exit(0); |
|||
break; |
|||
case ' ': |
|||
fakeport |= 0x01; |
|||
break; |
|||
case 'a': |
|||
fakeport |= 0x02; |
|||
break; |
|||
case 'd': |
|||
fakeport |= 0x04; |
|||
break; |
|||
case 's': |
|||
fakeport |= 0x08; |
|||
break; |
|||
case 'w': |
|||
fakeport |= 0x10; |
|||
break; |
|||
} |
|||
} |
|||
|
|||
void keyboardup(unsigned char key, int x, int y){ |
|||
switch (key) { |
|||
case ' ': |
|||
fakeport &= ~0x01; |
|||
break; |
|||
case 'a': |
|||
fakeport &= ~0x02; |
|||
break; |
|||
case 'd': |
|||
fakeport &= ~0x04; |
|||
break; |
|||
case 's': |
|||
fakeport &= ~0x08; |
|||
break; |
|||
case 'w': |
|||
fakeport &= ~0x10; |
|||
break; |
|||
} |
|||
} |
|||
|
|||
void mouse(int button, int state, int x, int y) |
|||
{ |
|||
tbMouse(button, state, x, y); |
|||
} |
|||
|
|||
void motion(int x, int y) |
|||
{ |
|||
tbMotion(x, y); |
|||
} |
|||
|
|||
void reshape(int width, int height) |
|||
{ |
|||
|
|||
tbReshape(width, height); |
|||
|
|||
glViewport(0, 0, width, height); |
|||
|
|||
glMatrixMode(GL_PROJECTION); |
|||
glLoadIdentity(); |
|||
gluPerspective(60.0, (float)WindWidth/(float)WindWidth, 5., 1000.); |
|||
gluLookAt(NUM_ROWS*2., NUM_ROWS*2.+50., NUM_COLS*2., |
|||
NUM_ROWS*2., NUM_ROWS*2., NUM_COLS*2., |
|||
0.0, 0.0, 1.0); |
|||
glMatrixMode(GL_MODELVIEW); |
|||
glLoadIdentity(); |
|||
|
|||
WindWidth = width; |
|||
WindHeight = height; |
|||
} |
|||
|
|||
/* change view angle */ |
|||
static void special(int k, int x, int y) { |
|||
switch (k) { |
|||
case GLUT_KEY_UP: |
|||
view_rotx += 5.0; |
|||
break; |
|||
case GLUT_KEY_DOWN: |
|||
view_rotx -= 5.0; |
|||
break; |
|||
case GLUT_KEY_LEFT: |
|||
view_rotz += 5.0; |
|||
break; |
|||
case GLUT_KEY_RIGHT: |
|||
view_rotz -= 5.0; |
|||
break; |
|||
default: |
|||
return; |
|||
} |
|||
glutPostRedisplay(); |
|||
} |
|||
/*
|
|||
void timf(int value) { |
|||
glutPostRedisplay(); |
|||
glutTimerFunc(1, timf, 0); |
|||
}*/ |
|||
|
|||
void *display_loop_run(void * unused) { |
|||
display_loop(); |
|||
} |
|||
|
|||
int main(int argc, char **argv){ |
|||
WindHeight = 700; |
|||
WindWidth = 700; |
|||
glutInit(&argc,argv); |
|||
glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); |
|||
glutInitWindowSize(WindHeight, WindWidth); |
|||
win = glutCreateWindow("16x16 Borg Simulator"); |
|||
|
|||
// callback
|
|||
//glutReshapeFunc(reshape);
|
|||
glutDisplayFunc(display); |
|||
glutIdleFunc(display); |
|||
glutSetKeyRepeat(GLUT_KEY_REPEAT_OFF); |
|||
glutKeyboardFunc(keyboard); |
|||
glutKeyboardUpFunc(keyboardup); |
|||
glutSpecialFunc(special); |
|||
glutMouseFunc(mouse); |
|||
glutMotionFunc(motion); |
|||
|
|||
// clearcolor & main loop
|
|||
glClearColor(0,0,0,1.0); |
|||
gluPerspective(60.0, (float)WindWidth/(float)WindWidth, 5., 1000.); |
|||
gluLookAt(NUM_COLS*2., NUM_COLS*2.+50., NUM_ROWS*2., |
|||
NUM_COLS*2., NUM_COLS*2., NUM_ROWS*2., |
|||
0.0, 0.0, 1.0); |
|||
|
|||
// init Call List for LED
|
|||
quad = gluNewQuadric(); |
|||
glNewList(0, GL_COMPILE); |
|||
glColor4f(0.8, 0.0, 0.0, 1.); |
|||
gluSphere(quad, 1.0, 12, 12); |
|||
glEndList(); |
|||
glNewList(1, GL_COMPILE); |
|||
glColor4f(0.5, 0.0, 0.0, 1.); |
|||
gluSphere(quad, 1.4, 12, 12); |
|||
glEndList(); |
|||
glNewList(2, GL_COMPILE); |
|||
glColor4f(0.7, 0.0, 0.0, 1.); |
|||
gluSphere(quad, 1.55, 12, 12); |
|||
glEndList(); |
|||
glNewList(3, GL_COMPILE); |
|||
glColor4f(1.00, 0.0, 0.0, 1.); |
|||
gluSphere(quad, 1.7, 12, 12); |
|||
glEndList(); |
|||
|
|||
tbInit(GLUT_LEFT_BUTTON); |
|||
tbAnimate(GL_FALSE); |
|||
|
|||
// start display_loop thread
|
|||
#ifdef _WIN32 |
|||
_beginthread((void (*)(void*))display_loop_run, 0, NULL); |
|||
#else |
|||
pthread_create(&simthread, NULL, display_loop_run, NULL); |
|||
#endif |
|||
//glutTimerFunc(40, timf, 0); // Set up timer for 40ms, about 25 fps
|
|||
glutMainLoop(); |
|||
return 0; |
|||
} |
|||
|
@ -1,8 +1,6 @@ |
|||
#ifndef UTIL_H |
|||
#define UTIL_H |
|||
|
|||
#include <avr/io.h> |
|||
|
|||
void wait(int ms); |
|||
|
|||
#endif |
|||
|
Loading…
Reference in new issue