Пример #1
0
void RegionViewer::drawTransition(Surface *dst,
                                  int room,
                                  Direction direction,
                                  int prevRoom,
                                  Direction prevDirection,
                                  Direction transitionDirection,
                                  double time,
                                  Player *player,
                                  list<Bounce *> bounceList,
                                  list<Bounce *> prevBounceList)
{
	if (!finishedPainting())
	{
		draw(dst, room, direction);
		return;
	}
	
	Surface *prevSurface = m_roomSurfaces[prevDirection][prevRoom];
	Surface *nextSurface = m_roomSurfaces[direction][room];

	int vx = 0;
	int vy = 0;

	switch (transitionDirection)
	{
	case NORTH: vy = -1; break;
	case SOUTH: vy = 1; break;
	case WEST: vx = -1; break;
	case EAST: vx = 1; break;
	default: break;
	}

	vx *= m_roomWidth;
	vy *= m_roomHeight;

	int prevX = -vx * (1 - time);
	int prevY = -vy * (1 - time);
	int nextX = vx * time;
	int nextY = vy * time;

	drawRoom(dst, prevSurface, prevX, prevY);
	drawRoom(dst, nextSurface, nextX, nextY);

	player->draw(dst, nextX, nextY);
	for (auto bounce : bounceList)
		bounce->draw(dst, nextX, nextY);
	for (auto bounce : prevBounceList)
		bounce->draw(dst, prevX, prevY);
}
Пример #2
0
void MirrorDemo::drawScene()
{
	// Clear the backbuffer and depth buffer.
	HR(gd3dDevice->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER |
		D3DCLEAR_STENCIL, 0xffeeeeee, 1.0f, 0));

	HR(gd3dDevice->BeginScene());

	HR(mFX->SetTechnique(mhTech));
	HR(mFX->SetValue(mhLightVecW, &mLightVecW, sizeof(D3DXVECTOR3)));
	HR(mFX->SetValue(mhDiffuseLight, &mDiffuseLight, sizeof(D3DXCOLOR)));
	HR(mFX->SetValue(mhAmbientLight, &mAmbientLight, sizeof(D3DXCOLOR)));
	HR(mFX->SetValue(mhSpecularLight, &mSpecularLight, sizeof(D3DXCOLOR)));

	// All objects use the same material.
	HR(mFX->SetValue(mhAmbientMtrl, &mWhiteMtrl.ambient, sizeof(D3DXCOLOR)));
	HR(mFX->SetValue(mhDiffuseMtrl, &mWhiteMtrl.diffuse, sizeof(D3DXCOLOR)));
	HR(mFX->SetValue(mhSpecularMtrl, &mWhiteMtrl.spec, sizeof(D3DXCOLOR)));
	HR(mFX->SetFloat(mhSpecularPower, mWhiteMtrl.specPower));

	drawRoom();
	drawMirror();
	drawTeapot();

	drawReflectedTeapot();

	mGfxStats->display();

	HR(gd3dDevice->EndScene());

	// Present the backbuffer.
	HR(gd3dDevice->Present(0, 0, 0, 0));
}
Пример #3
0
void drawScene(camera_s* c, portal_s* p, int depth, u8 stencil)
{
	if(!c)return;

	gsMatrixMode(GS_MODELVIEW);
	gsPushMatrix();
		gsLoadIdentity();
		useCamera(c);

		drawRoom(&testRoom);

		drawCubeDispensers();
		drawEnergyDevices();
		drawEnergyBalls();
		drawPlatforms();
		drawBigButtons();
		drawTimedButtons();
		drawWallDoors();
		drawDoors();
		drawOBBs();

		if(p && depth)drawPlayer(&testPlayer);
		
		drawSludge(&testRoom);

		drawEmancipators();
		drawEmancipationGrids();

		if(p == &portals[0])drawPortals((portal_s*[]){&portals[0]}, 1, drawScene, c, depth, stencil);
Пример #4
0
void TileMap::drawAllRooms(){
    
	for(z=0; z < numRooms; z++){
		drawRoom(z);
	}
    
}
Пример #5
0
static void display()
{
	// Position Vertex
	vert pos;
	replaceVert(&pos, 0, 0, 0);	

	//  Erase the window and the depth buffer
   	glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
   	//  Enable Z-buffering in OpenGL
   	glEnable(GL_DEPTH_TEST);
   	//  Undo previous transformations
   	glLoadIdentity();

	//  Switch to manipulating the model matrix
  	glMatrixMode(GL_MODELVIEW);
   	//  Undo previous transformations
   	glLoadIdentity();
	
	// User Rotation
	glRotatef(xrot, 1, 0, 0);
	glRotatef(yrot, 0, 1, 0);

	// Main Room
	drawRoom();
	glColor3f(1,1,1);

	// Draw Cylinder
	glPushMatrix();
	replaceVert(&pos, 0, 1.75, 0);
	drawCylinder(0.125, 1.5, pos, cyl_verts);	
	glPopMatrix();
	
	// Draw Box Method (Coordinates used as verts)
	replaceVert(&pos, -1.25, -1.25, 0);
	drawBox(1, 1, 2.5, pos);
	
	replaceVert(&pos, 1.25, 0, -2);
	drawBox(1, 2.5, 0.125, pos);

	glPushMatrix();
	
	// Draw Box Method, Translation 
	glTranslatef(2, -2, 1.5);

	replaceVert(&pos, 0, 0, 0);
	drawBox(1, 1, 1, pos);
	
	glPopMatrix();


	glColor3f(1, 1, 1);

	glWindowPos2i(5, 5);
	Print("Xrot: %.4f Yrot: %.4f", xrot, yrot);

   	glFlush();
	glutSwapBuffers();

}
Пример #6
0
void interpToks(struct gameData * bigPicPtr) {
	
	int i=0;	
	while(strcmp(bigPicPtr->tok[i], "end") != 0) {	
		// First element from the string tokenized
		char * f = &bigPicPtr->tok[i][0];

		// CASE - Room dimensions rowXcol
		if (isdigit(bigPicPtr->tok[i][0]) != 0) {
			drawRoom(bigPicPtr->tok[i], bigPicPtr);
		}

		// CASE - Draw the doors
		else if (strncmp(f, "d", 1) == 0) {
			drawDoors(bigPicPtr, i);
		} else {
			int j=0;
			int coord[2];	
		    char * s = &bigPicPtr->tok[i][1];	    
		    
		    while ((s = strtok(s, ",")) != NULL) {
		        coord[j] = atoi(s);
		        s = NULL;
		        j++;
		    }
			
		    int room = bigPicPtr->room - 2;
			int row = bigPicPtr->sqrPos[room][0];
			int col = bigPicPtr->sqrPos[room][1];
			coord[0] = coord[0] + 1; // Considering first position of room as 0x0
			coord[1] = coord[1] + 1; 
		    
		    if (strncmp(f, "g", 1) == 0) mvwprintw(stdscr, row + coord[0], col + coord[1], "%s", "*");
		    if (strncmp(f, "p", 1) == 0) mvwprintw(stdscr, row + coord[0], col + coord[1], "%s", "p");
		    if (strncmp(f, "s", 1) == 0) mvwprintw(stdscr, row + coord[0], col + coord[1], "%s", "s");
		    if (strncmp(f, "m", 1) == 0) mvwprintw(stdscr, row + coord[0], col + coord[1], "%s", "?");
		    if (strncmp(f, "w", 1) == 0) mvwprintw(stdscr, row + coord[0], col + coord[1], "%s", ")");
		    if (strncmp(f, "M", 1) == 0) {
		    	mvwprintw(stdscr, row + coord[0], col + coord[1], "%s", "M");
		    	bigPicPtr->nMonst++;
		    }
		    
		    if (strncmp(f, "h", 1) == 0) {
		    	mvwprintw(stdscr, row + coord[0], col + coord[1], "%s", "@");
		    	bigPicPtr->cRow = row + coord[0];
		    	bigPicPtr->cCol = col + coord[1];
		    }
		}	
		i++;
	}
	
	// Malloc monsters array
	bigPicPtr->MonstData = malloc(sizeof(int*)*bigPicPtr->nMonst);
	for(i=0; i<=bigPicPtr->nMonst; i++) {
		bigPicPtr->MonstData[i] = malloc(sizeof(int*)*3);
	}
}
Пример #7
0
void Floor::drawMap(int x, int y, char sym){
	int xRoom = 0;
	int yRoom = 0;
	for(int i = x-MAP_TILES_VISIBLE; i <= x+MAP_TILES_VISIBLE; i++){
		for(int k = y-MAP_TILES_VISIBLE; k <= y+MAP_TILES_VISIBLE;k++){
			//std::cout << xRoom << ":" << yRoom << "\n";
			if(i == x && k == y){
				drawRoom(xRoom,yRoom,i,k,sym);
			}
			else{
				drawRoom(xRoom, yRoom, i, k, Tile::EMPTY_SPACE);
			}
			yRoom += Tile::TILE_WIDTH;
		}
		xRoom += Tile::TILE_HEIGHT;
		yRoom = 0;
	}
}
Пример #8
0
void RegionViewer::draw(Surface *dst, int room, Direction direction)
{
	if (finishedPainting())
	{
		Surface *roomSurface = m_roomSurfaces[direction][room];
		drawRoom(dst, roomSurface, 0, 0);
	}
	else
		drawProgress(dst);
}
Пример #9
0
void draw()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );	//Efface le frame buffer et le Z-buffer
    glMatrixMode(GL_MODELVIEW);	//Choisit la matrice MODELVIEW
    glLoadIdentity();	//Réinitialise la matrice
    lookAt(character->getPos(),character->getDir(),character->getUp());

    drawRoom();
    drawOrigin();
    drawScreenSurface();
    drawMouse();

    glutSwapBuffers();
    glutPostRedisplay();

}
Пример #10
0
void Renderer::display(void)
{
	//clear window
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glLoadIdentity();

	//draw splash screen
	if(splash){
		glEnable(GL_TEXTURE_2D);
		glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
		glBindTexture(GL_TEXTURE_2D, textureID[3]);
		glPushMatrix();

		glBegin(GL_QUADS);
			glTexCoord2f(0.0f, 1.0f); glVertex3f(-1, 1, -2);
			glTexCoord2f(0.0f, 0.0f); glVertex3f(-1, -1, -2);
			glTexCoord2f(1.0f, 0.0f); glVertex3f(1, -1, -2);
			glTexCoord2f(1.0f, 1.0f); glVertex3f(1, 1, -2);	
		glEnd();
		
		glPopMatrix();
		glDisable(GL_TEXTURE_2D);
	}
	else {
		if(lighting){
			glEnable(GL_LIGHTING);
		}
		
		glPushMatrix();									//Push -- camera
		glLoadMatrixd(camera->getModelViewMatrix());
		
		glPushMatrix();									//Push -- draw world
		drawRoom();
		glPopMatrix();									//Pop  -- draw world

		drawTreasures();
		glPopMatrix();									//Pop  -- camera

		if(lighting){
			glDisable(GL_LIGHTING);
		}

		drawHUD();
		frameCount++;
	}
	glutSwapBuffers();
}
Пример #11
0
void draw(Map** level, int xPos, int yPos, int room, Player * chris, Enemy * enemy[20], int * eneNum)
{
    //declare variables
    int width, height;

    //intialize variables and srand
    width = level[room]->width;
    height = level[room]->height;
    srand(time(NULL));

    //initailize cursor
    move(yPos, xPos);

    //call subdrawing functions
    drawRoom(&yPos, &xPos, width, height);
    drawElements(level, xPos, yPos, chris, room, width, height, enemy, eneNum);

}//end draw
Пример #12
0
int main(int argc, char const *argv[])
{
    FILE *fp = NULL;
    char *buffer = malloc(sizeof(char) * 150);
    char roomElements[300] = {0};
    char *roomSize = NULL;
    int i = 1;
    int *size = NULL; // does this need to be malloced?
    char input = '\0';

    check(argc == 2, "Please enter two arguments");

    fp = openFile((char*)argv[1], "r");

    initscr();
    noecho();

    /*Draws rooms and items*/
    while (fgets(buffer, 150, fp)) {
        removeNewLine(buffer);
        strcpy(roomElements, strchr(buffer, ' '));
        roomSize = strtok(buffer, " "); // get the room size
        size = getRoomSize(roomSize, i); // convert room size to int pointer
        drawRoom(size, i); // draw the room
        tokenizeRoom(roomElements, i); // draw the elements
        i++;
        free(size);
    }

    /*This is the user input loop*/
    do {
        input = getch();
        getInput(input);
    } while (input != 'q');

    free(buffer);
    fclose(fp);
    endwin();

    return 0;
error:
    return -1;
}
Пример #13
0
void displayObjects(int frame_no, int sceneRotation)
{
	GLfloat mat_diffuse[]    = { lightIntense*0.5, lightIntense*0.5,  lightIntense*0.5, 1.0 };
	glLightfv(GL_LIGHT1, GL_DIFFUSE, mat_diffuse);
	reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
	glDepthMask(GL_TRUE);
	glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
    glPushMatrix();																//scene
		//glTranslatef( 0.0, 0.0, -55.0 ); 
		//glRotatef( 180.0, 1.0, 0.0, 0.0 );
		//glRotatef( 90.0, 0.0, 1.0, 0.0 );
		glPushMatrix();															//group 1
			//glRotatef( 45*sin((float)sceneRotation*0.01), 1.0, 0.0, 0.0 );
			//glRotatef( 100.0, 0.0, 1.0, 0.0 );
			//glRotatef( (float)sceneRotation*1.0, 0.0, 1.0, 0.0 );
			glPushMatrix();
				//drawHelpers();
			glPopMatrix();
			glPushMatrix();
				drawRoom();
				drawCrankshaft(frame_no  );
				draw4Pistons( frame_no  );
				putFlywheel(frame_no);
				drawCovers(frame_no + 90, transEnable);
				

				//drawValve();
				//drawCamshaft(); //debug
				//drawCamshaftCoverLeft(); // debug
				//drawTriangle(); // debug
				//drawFlywheel(); // debug
				//drawCamshaftMechanism(); //debug
			glPopMatrix();
		glPopMatrix();															//end of group 1
    glPopMatrix();																//end of scene	 
}
Пример #14
0
void display(void)
{
	//step1:環境マップの作成
	//オブジェクト中心から見た6方向のシーンを作成し、テクスチャメモリに転送

	//framebuffer object を有効化
	glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, fbName );

  // 透視変換行列の設定 (texture作成)
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  gluPerspective(90.0, 1.0, 0.1, 30.0);//視野角を90°
  
  // モデルビュー変換行列の設定 
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();

  // オブジェクトから見たシーンをテクスチャに利用 
  for (int i = 0; i < 6; ++i) 
  {
    glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
                              target[i].name, texName, 0);
    glViewport(0, 0, TEX_WIDTH, TEX_HEIGHT);
		//カラーバッファ,デプスバッファのクリア
		glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
		// オブジェクト中心から見えるものをレンダリング 
		glPushMatrix();
		gluLookAt(pos[0], pos[1], pos[2], 
		    pos[0]+target[i].cx, pos[1]+target[i].cy, pos[2]+target[i].cz,
				target[i].ux, target[i].uy, target[i].uz);
		glLightfv(GL_LIGHT0, GL_POSITION, lightPos);
		//3D空間の描画
		drawRoom(10.0, 10.0, 5.0);
		glTranslatef(0.0, 1.0, 0.0);
		pet.draw(frameCount);
		glPopMatrix();
  }
	glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, 0 );

  //step2:通常の描画ルーチンに戻す
  //カラーバッファ,デプスバッファのクリア
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  resize(width, height);  
	//texture unit と texture object の関連付け
	glActiveTexture(GL_TEXTURE0);
  glBindTexture(GL_TEXTURE_CUBE_MAP, texName);

  // シェーダプログラムの適用 
  glUseProgram(shaderProg);
  GLint tranLoc = glGetUniformLocation(shaderProg, "transparency");
  glUniform1f(tranLoc, transparency0);
  GLint ratioLoc = glGetUniformLocation(shaderProg, "nRatio");
  glUniform1f(ratioLoc, nRatio0);
  float m[16] ;
  glGetFloatv(GL_MODELVIEW_MATRIX, m);
  GLint ViewTransLoc = glGetUniformLocation(shaderProg, "ViewTranspose");
  glUniformMatrix4fv(ViewTransLoc, 1, GL_TRUE, m);

  //光源設定//'l'を押した後光源位置可変
  glLightfv(GL_LIGHT0, GL_POSITION, lightPos);

  if(flagWireframe)//'w'でwireframeとsolid model切り替え
  {
	  glPolygonMode(GL_FRONT,GL_LINE);
	  glPolygonMode(GL_BACK,GL_POINT);
  }
  else glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);

  //fragment shaderのユニフォーム変数texのインデックスを取得
  GLint samplerLoc = glGetUniformLocation(shaderProg, "sampler");
  glUniform1i(samplerLoc, 0);//GL_TEXTURE0を適用
  //描画
  draw(); 
  // シェーダプログラムの適用を解除	
  glUseProgram(0);

  drawRoom(10.0, 10.0, 5.0);//room2.hにある
  glTranslatef(0.0, 1.0, 0.0);
  pet.draw(frameCount);

  curTime = timeGetTime();
  //1コマの所要時間
  float dt = (float)(curTime - lastTime) * 0.001;//sec
  lastTime = curTime;
  elapseTime += dt;
  fps ++;
  if(elapseTime >= 1.0)
  {
  	printf("frame per sec = %d , dt = %f\n", fps, dt);
	  elapseTime = 0.0;
	  fps = 0;
  }
  frameCount++;

	if(flagHelp)
  {
		printf("矢印キーによるアフィン変換/光源移動 \n");
		printf(" →,←:x軸 \n");
		printf(" ↑,↓:y軸 \n");
		printf(" [Shift]+↑,↓:z軸 \n");
		printf(" 'r'を押した後:回転 \n");
		printf(" 't'を押した後:平行移動 \n");
		printf(" 's'を押した後:スケーリング \n");
		printf(" 'l'を押した後、光源位置の移動可 \n");
		printf("'w'でワイヤーフレームとソリッドモデル切り替え \n");
		printf("マウス操作で視点変更可 \n");
		printf("  dolly:中央付近を左ボタンクリックで近づき,右ボタンクリックで遠ざかる \n");
		printf("  pan:左横および右横を右ボタンクリックで注視点が左右に変化する \n");
		printf("  tilt:真上および真下を右ボタンクリックで注視点が上下に変化する \n");
		printf("  tumble:左右にドラッグすると視点が左右に変化する \n");
		printf("  crane:上下にドラッグすると視点が上下に変化する \n");
		printf("  zoom:左下を右ボタンクリックでズームイン \n");
		printf("        右下を右ボタンクリックでズームアウト \n");
		printf("[Shift]+'r'でリセット \n");
		printf("[F1]キー:アニメーションスタート \n");
		printf("[F2]キー:透過率の増減 \n");
		printf("[F3]キー:屈折率の増減 \n");
		flagHelp = false;
  }
  //終了
  glutSwapBuffers();
}
Пример #15
0
void drawFrame()
{
    // Borramos el buffer de color y el de profundidad
    glClearColor(SCREEN_COLOR);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    // Posicionamos la cámara (V)
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    //drawInterface();

    // Posicionamos la cámara (V)
    gluLookAt(cameraPos[0], cameraPos[1], cameraPos[2],
                 lookat[0],    lookat[1],    lookat[2],
                     up[0],        up[1],        up[2]);
    
    // Plano base
    /*glPushMatrix();
    {
        glTranslatef(yellowSphereInit[0], yellowSphereInit[1] - 5.0, yellowSphereInit[2]);
        glRotatef(90.0, 0.0, 1.0, 0.0);
        glRotatef(90.0, 1.0, 0.0, 0.0);
        drawPlane(20.0, 20.0);
    }
    glPopMatrix();*/

    // Dibujamos los objetos (M)

    // Numero
    /*glPushMatrix();
    {
        glTranslatef(yellowSphereInit[0], yellowSphereInit[1], yellowSphereInit[2]);
        glRotatef(0, 0.0, 1.0, 0.0);
        glRotatef(0, 1.0, 0.0, 0.0);
        glTranslatef(0.0, 0.0, 3.0);
        drawNumber();
    }
    glPopMatrix();*/
    
    switch (scene)
    {
        case SCENE_PLANETS:
        {
            // Sun
            glPushMatrix();
            {
                glTranslatef(yellowSphereInit[0], yellowSphereInit[1], yellowSphereInit[2]);
                glRotatef(rotSun[0], 1.0, 0.0, 0.0);
	            glLightfv(GL_LIGHT0, GL_POSITION, yellowSphereInit);
                drawSphere(2.0f, 'y');
            }
            glPopMatrix();
    
            // Earth
            glPushMatrix();
            {
                glTranslatef(yellowSphereInit[0], yellowSphereInit[1], yellowSphereInit[2]);
                glRotatef(translationEarth[0], 1.0, 0.0, 0.0);
                glRotatef(translationEarth[1], 0.0, 1.0, 0.0);
                glRotatef(translationEarth[2], 0.0, 0.0, 1.0);
                glTranslatef(blueSphereInit[0], 0.0, 0.0);
                glRotatef(rotEarth[0], 1.0, 0.0, 0.0);
                glRotatef(rotEarth[1], 0.0, 1.0, 0.0);
                drawSphere(0.5f, 'b');
            }
            glPopMatrix();
    
            // Moon
            glPushMatrix();
            {
                glTranslatef(yellowSphereInit[0], yellowSphereInit[1], yellowSphereInit[2]);
                glRotatef(translationEarth[0], 1.0, 0.0, 0.0);
                glRotatef(translationEarth[1], 0.0, 1.0, 0.0);
                glRotatef(translationEarth[2], 0.0, 0.0, 1.0);
                glTranslatef(blueSphereInit[0], 0.0, 0.0);
                glRotatef(translationMoon[0], 1.0, 0.0, 0.0);
                glRotatef(translationMoon[1], 0.0, 1.0, 0.0);
                glRotatef(translationMoon[2], 0.0, 0.0, 1.0);
                glTranslatef(whiteSphereInit[0], 0.0, 0.0);
	            glLightfv(GL_LIGHT1, GL_POSITION, whiteSphereInit);
                drawSphere(0.1f, 'w');
            }
            glPopMatrix();
            break;
        }
        case SCENE_PIEZA:
        {
            glPushMatrix();
            {
                glTranslatef(translationBlue[0], translationBlue[1], translationBlue[2]);
                drawPieza(3.0, 1.0, 'b');
            }
            glPopMatrix();

            glPushMatrix();
            {
                glTranslatef(translationBlue[0], translationBlue[1], translationBlue[2]);
                glTranslatef(translationOrange[0], translationOrange[1], translationOrange[2]);
                glRotatef(rotationOrange[2], 0.0, 0.0, 1.0);
                drawPieza(3.0, 1.0, 'o');
            }
            glPopMatrix();
        
            glPushMatrix();
            {
                glTranslatef(translationBlue[0], translationBlue[1], translationBlue[2]);
                glTranslatef(translationOrange[0], translationOrange[1], translationOrange[2]);
                glRotatef(rotationOrange[2], 0.0, 0.0, 1.0);
                glTranslatef(translationGreen[0], translationGreen[1], translationGreen[2]);
                drawPieza(3.0, 1.0, 'g');
            }
            glPopMatrix();
            break;
        }
        case SCENE_ROOM:
        {
            drawRoom();
            break;
        }
        default:
            break;
    }

    /*glPushMatrix();
    {
        glTranslatef(initialDist, 0.0, -8.0);
        glRotatef(rotY, 0.0, 1.0, 0.0);
        drawPieza(3.0f, 1.0f);
    }
    glPopMatrix();*/
    
    /*glPushMatrix();
    {
        glRotatef(translationEarth[0], 1.0, 0.0, 0.0);
        glRotatef(translationEarth[1], 0.0, 1.0, 0.0);
        drawCube();
    }
    glPopMatrix();*/
    
    /*glPushMatrix();
    {
        glTranslatef(initialDist, 0.0, -8.0);
        glRotatef(rotY, 0.0, 1.0, 0.0);
        drawSphere(1.0f, 'y');
    }
    glPopMatrix();*/

    // Intercambiamos los buffers
    glutSwapBuffers();
}
Пример #16
0
void Troll::gameLoop() {
    bool done = false;
    char menu[160+5];
    int currentOption, numberOfOptions;
    int roomParam;
    int haveFlashlight;

    _moves = 0;
    _roomPicture = 1;
    _treasuresLeft = IDI_TRO_MAX_TREASURE;
    haveFlashlight = false;
    _currentRoom = 0;
    _isTrollAway = true;
    _soundOn = true;

    memset(_roomStates, 0, sizeof(_roomStates));

    memset(_inventory, 0, sizeof(_inventory));

    while (!done && !_vm->shouldQuit()) {
        *menu = 0;

        currentOption = 0;

        numberOfOptions = drawRoom(menu);

        if (getMenuSel(menu, &currentOption, numberOfOptions)) {
            _moves++;
        } else {
            continue;
        }

        roomParam = _roomDescs[_roomPicture - 1].roomDescIndex[currentOption];

        switch (_roomDescs[_roomPicture - 1].optionTypes[currentOption]) {
        case OT_FLASHLIGHT:
            if (!haveFlashlight) {
                printUserMessage(13);
                break;
            }
        // fall down
        case OT_GO:
            _currentRoom = roomParam;
            _roomPicture = _roomPicStartIdx[_currentRoom];
            _roomPicture += _roomStates[_currentRoom];

            if (_currentRoom < 6 || _treasuresLeft == 0) {
                _isTrollAway = true;
            } else { // make odd 1:3
                _isTrollAway = (_vm->rnd(3) != 2);
            }
            break;
        case OT_GET:
            if (!_isTrollAway) {
                printUserMessage(34);
            } else {
                for (int i = 0; i < 4; i++) {
                    playTune(1, 3);
                    // delayMillis()
                }

                _roomStates[_currentRoom] = 1;
                _roomPicDeltas[_currentRoom] = 0;

                _roomPicture++;

                if (_roomConnects[roomParam - 1] != 0xff) {
                    _roomStates[_roomConnects[roomParam - 1]] = 1;
                }

                if (roomParam == 1)
                    haveFlashlight = true;

                _locMessagesIdx[_currentRoom] = IDO_TRO_LOCMESSAGES +
                                                (roomParam + 42) * 39;

                pickupTreasure(roomParam);
            }
            break;
        case OT_DO:
            if (roomParam != 16) {
                printUserMessage(roomParam);
                break;
            }

            done = true;
            break;
        default:
            break;
        }
    }

}