Exemple #1
0
/*------------------
  the main program
  C.Wang 0904, 2012
 -------------------*/
void FyMain(int argc, char **argv)
{
   // create a new world
   FyStartFlyWin32("Hello Fly2 !", 0, 0, 800, 600, FALSE);

   FySetModelPath("Data\\Models");
   FySetTexturePath("Data\\textures");
   FySetShaderPath("Data\\shaders");

   // create a viewport
   vID = FyCreateViewport(0, 0, 800, 600);
   FnViewport vp;
   vp.ID(vID);
   vp.SetBackgroundColor(0.3f, 0.4f, 0.5f);

   // create a 3D scene & the 3D entities
   sID = FyCreateScene(1);

   FnScene scene;
   scene.ID(sID);
   nID = scene.CreateObject(OBJECT);
   cID = scene.CreateObject(CAMERA);
   lID = scene.CreateObject(LIGHT);

   // load the teapot model
   FnObject model;
   model.ID(nID);
   model.Load("teapot");

   // translate the camera
   FnCamera camera;
   camera.ID(cID);
   camera.Rotate(X_AXIS, 90.0f, LOCAL);
   camera.Translate(0.0f, 10.0f, 100.0f, LOCAL);

   // translate the light
   FnLight light;
   light.ID(lID);
   light.SetName("MainLight");
   light.Translate(-50.0f, -50.0f, 50.0f, GLOBAL);

   // set Hotkeys
   FyDefineHotKey(FY_ESCAPE, QuitGame, FALSE);

   // define some mouse functions
   FyBindMouseFunction(LEFT_MOUSE, InitPivot, PivotCam, NULL, NULL);
   FyBindMouseFunction(MIDDLE_MOUSE, InitZoom, ZoomCam, NULL, NULL);
   FyBindMouseFunction(RIGHT_MOUSE, InitMove, MoveCam, NULL, NULL);

   // bind a timer, frame rate = 30 fps
   FyBindTimer(0, 30.0f, GameAI, TRUE);

   // invoke the system
   FyInvokeFly(TRUE);
}
/*------------------
  the main program
  C.Wang 0308, 2004
 -------------------*/
void FyMain(int argc, char **argv)
{
   // create a new world
   FyStartFlyWin32("Hello TheFly3D !", 0, 0, 800, 600, beFullScreen);

   FySetModelPath("Data\\Models");
   FySetTexturePath("Data\\textures");
   FySetShaderPath("Data\\Shaders");

   FyBeginMedia("data\\media", 2);
   //mmID = FyCreateMediaPlayer("dawn.mpg", 0, 0, 800, 600);
   //mmID = FyCreateMediaPlayer("opening.avi", 0, 0, 800, 600);
   mmID = FyCreateMediaPlayer("MUSIC_fogforest.mp3", 0, 0, 800, 600);
   FnMedia mP;
   mP.Object(mmID);
   mP.Play(ONCE);
   //mP.SetVolume(0.1f);
   
   // create a viewport
   vID = FyCreateViewport(0, 0, 800, 600);
   FnViewport vp;
   vp.Object(vID);
   vp.SetBackgroundColor(0.3f, 0.4f, 0.5f);

   // create a 3D scene & the 3D entities
   sID = FyCreateScene(1);

   FnScene scene;
   scene.Object(sID);
   nID = scene.CreateObject(OBJECT);
   cID = scene.CreateObject(CAMERA);
   lID = scene.CreateObject(LIGHT);

   // load the teapot
   FnObject model;
   model.ID(nID);
   model.Load("teapot.cw3");
   model.Translate(20.0f, 0.0f, 0.0f, GLOBAL);
   
   // translate the camera
   FnCamera camera;
   camera.ID(cID);
   camera.Rotate(X_AXIS, 90.0f, LOCAL);
   camera.SetAspectRatio(800.0f/600.0f);
   camera.Translate(0.0f, 10.0f, 200.0f, LOCAL);

   // translate the light
   FnLight light;
   light.ID(lID);
   light.Translate(-30.0f, -30.0f, 0.0f, GLOBAL);
   light.SetName("MainLight");
   light.SetColor(0.9f, 0.9f, 0.7f);

   // set Hotkeys
   FyDefineHotKey(FY_ESCAPE, QuitGame, FALSE);

   // define some mouse functions
   FyBindMouseFunction(LEFT_MOUSE, InitPivot, PivotCam, NULL, NULL);
   FyBindMouseFunction(MIDDLE_MOUSE, InitZoom, ZoomCam, NULL, NULL);
   FyBindMouseFunction(RIGHT_MOUSE, InitMove, MoveCam, NULL, NULL);

   /* bind a timer, frame rate = 30 fps */
   FyBindTimer(0, 30.0f, GameAI, TRUE);

   // invoke the system
   FyInvokeFly(TRUE);
}
void FyMain(int argc, char **argv) {
	
	srand(time(NULL));

	AllocConsole(); 
	freopen("CONIN$", "r", stdin);
	freopen("CONOUT$", "w", stdout);
	freopen("CONOUT$", "w", stderr);
	string ip, port;
	cout << "Enter ip   [" << GAME_PROGRAMMING_DEFAULT_IP << "]: ";getline(cin, ip);
	cout << "Enter port [" << GAME_PROGRAMMING_DEFAULT_PORT << "]: ";getline(cin, port);

	if(ip.empty()) {ip = GAME_PROGRAMMING_DEFAULT_IP;}
	if(port.empty()) {port = GAME_PROGRAMMING_DEFAULT_PORT;}

	cout << "Connect to server: " << ip << "/" << port << endl;
	game_client.initialize(ip, port, &game_updater);
	game_client.connectServer();
	cout << "Server connected." << endl;
	game_timer.initialize(&game_updater, game_client.getGmTree().getTotalGameTime(), game_client.getGmTree().getTotalGameRounds());
	std::cout<<"Start Game" << std::endl;
	//create a new window
	FyStartFlyWin32("Final Project - with Fly2", 0, 0, window_w, window_h, FALSE);
	
	//set up path
	FySetShaderPath("C:\\Fly2Data\\Shaders");
	FySetModelPath("C:\\Fly2Data\\Scenes");
	FySetTexturePath("C:\\Fly2Data\\Scenes\\Textures");
	FySetScenePath("C:\\Fly2Data\\Scenes");
	FySetAudioPath("C:\\Fly2Data\\Audio");

	//create a viewport
	viewportID = FyCreateViewport(0, 0, viewPortWidth, viewPortHeight);
	FnViewport viewport(viewportID);

	mouseInput.setWindowSize(wndWidth, wndHeight);
	//create 3D scene
	sceneID = FyCreateScene(10);
	FnScene scene(sceneID);

	scene.Load("gameScene01");
	scene.SetAmbientLights(1.0f, 1.0f, 1.0f, 0.6f, 0.6f, 0.6f);

	 // create a 2D scene for sprite rendering which will be rendered on the top of 3D
    FnScene scene2D;
    sID2 = FyCreateScene(1);
    scene2D.Object(sID2);
    scene2D.SetSpriteWorldSize(1024, 768);         // 2D scene size in pixels

	FnSprite sp;
    spID0 = scene2D.CreateObject(SPRITE);
    sp.Object(spID0);
	sp.SetSize(sight_w, sight_h);
    sp.SetImage("C:\\Fly2Data\\Image\\spiner", 0, NULL, FALSE, NULL, 2, TRUE, FILTER_LINEAR);
	sp.SetPosition(window_w/2-sight_w/2, window_h/2-sight_h/2, 0);

	FnScene scene2Dmenu;
	sID2menu = FyCreateScene(1);
    scene2Dmenu.Object(sID2menu);
    scene2Dmenu.SetSpriteWorldSize(1024, 768);         // 2D scene size in pixels

	FnSprite spExit;
    OBJECTid spIDexit = scene2Dmenu.CreateObject(SPRITE);
    spExit.Object(spIDexit);
	spExit.SetSize(400, 70);
    spExit.SetImage("C:\\Fly2Data\\Image\\exit_button", 0, NULL, FALSE, NULL, 2, TRUE, FILTER_LINEAR);
	spExit.SetPosition(window_w/2-400/2, window_h/2-70/2, 0);
	/*
	FnSprite sp1;
    spID1 = scene2Dmenu.CreateObject(SPRITE);
    sp1.Object(spID1);
	sp1.SetSize(C:\\Fly2Data\\Image\\mouse_w, mouse_h);
    sp1.SetImage("mouse", 0, NULL, FALSE, NULL, 2, TRUE, FILTER_LINEAR);
	sp1.SetPosition(window_w/2-mouse_w/2, window_h/2-mouse_h/2, 0);
	*/
	//load the terrain
	terrainID = scene.CreateObject(OBJECT);
	FnObject terrain;
	terrain.ID(terrainID);
	terrain.Load("terrain");
	terrain.Show(FALSE);

	//set terrain environment
	terrainRoomID = scene.CreateRoom(SIMPLE_ROOM, 10);
	FnRoom room;
	room.ID(terrainRoomID);
	room.AddObject(terrainID);

	//load the character
	FySetModelPath("C:\\Fly2Data\\Characters");
	FySetTexturePath("C:\\Fly2Data\\Characters");
	FySetCharacterPath("C:\\Fly2Data\\Characters");

   // put the character on terrain
   float pos[3], fDir[3], uDir[3];
	pos[0] = 3569.0, pos[1] = -3108; pos[2] = 0;
	fDir[0] = 1, fDir[1] = 0; fDir[2] = 0;
	uDir[0] = 0, uDir[1] = 0, uDir[2] = 1;


	map<int, GmCharacter*> charNode = game_client.getGmTree().getCharacterNode();
	cout << "Number of Character: " << charNode.size() << endl;
	map<int, Character *> actors;


    for (map<int, GmCharacter*>::iterator it = charNode.begin(); it != charNode.end(); it++) {
		actors[it->first] = new Character();
		cout << "Local character:" << it->second->game_id << "/" << it->second->id << endl;
		actors[it->first]->setMeshFileName(it->second->mesh);
		actors[it->first]->setCharacterName(it->second->mesh);
		actors[it->first]->initialize(sceneID, NULL, terrainRoomID, it->second->fdir,  it->second->udir,  it->second->pos);
		actors[it->first]->setIsAI(it->second->is_ai);
		//actorID = actors[it->first]->getCharacterId();
		chrMgtSystem.addCharacter(*(actors[it->first]), it->second->is_main_actor);
		game_updater.registerCharacter(it->second->game_id, actors[it->first]->getCharacterId());
    }

	if(game_client.getClientId() == 0) { // AI Master!!!
		cout << "I am AI Master !!!" << endl;
		chrMgtSystem.becomeAIMaster();
	}

	cameraID = scene.CreateObject(CAMERA);
	FnCamera camera;
	camera.ID(cameraID);
	camera.SetNearPlane(5.0f);
	camera.SetFarPlane(100000.0f);
	setCamera();
   // setup a point light
   /*
   FnLight light;
   lightID = scene.CreateObject(LIGHT);
   light.ID(lightID);
   light.Translate(70.0f, -70.0f, 70.0f, REPLACE);
   light.SetColor(1.0f, 1.0f, 1.0f);
   light.SetIntensity(1.0f);
   */
   //create a text object for display message on screen
   textID = FyCreateText("Trebuchet MS", 18, FALSE, FALSE);
   textCharID = FyCreateText("Trebuchet MS", 20, TRUE, FALSE);
   textHP_vID = FyCreateText("Trebuchet MS", 60, TRUE, FALSE);
   textInfo_vID = FyCreateText("Trebuchet MS", 30, TRUE, FALSE);

   //set up audio
	bckMiscID = FyCreateAudio();
	FnAudio fnAudio(bckMiscID);
	fnAudio.Load("game_bckgnd");
	fnAudio.SetVolume(0.1);
	fnAudio.Play(LOOP);

	mouseInput.hideMouse();
	stateGhost = 0; //設定鬼一開始看不到的狀態
   // set Hotkeys
   /*
   FyDefineHotKey(FY_ESCAPE, QuitGame, FALSE);  // escape for quiting the game
   FyDefineHotKey(FY_UP, Movement, FALSE);      // Up for moving forward
   FyDefineHotKey(FY_RIGHT, Movement, FALSE);   // Right for turning right
   FyDefineHotKey(FY_LEFT, Movement, FALSE);    // Left for turning left
   FyDefineHotKey(FY_DOWN, Movement, FALSE);    // Down for moving backward
	*/
   FyDefineHotKey(FY_TAB, ChangeActor, FALSE);
   FyDefineHotKey(FY_ESC, showMenu, FALSE);
   //define some mouse function
   FyBindMouseFunction(LEFT_MOUSE, InitPivot, PivotCam, NULL, NULL);
   FyBindMouseFunction(MIDDLE_MOUSE, InitZoom, ZoomCam, NULL, NULL);
   FyBindMouseFunction(RIGHT_MOUSE, InitMove, MoveCam, NULL, NULL);

   //bind timers, frame rate = 30 fps
   FyBindTimer(0, 30.0f, GameAI, TRUE);
   FyBindTimer(1, 30.0f, RenderIt, TRUE);

	//invoke the system
   FyInvokeFly(TRUE);

     system("pause");

   fclose(stdout);
   fclose(stderr);
   fclose(stdin);
   //FreeConsole();

}
/* ------------------
the main program
C.Wang 1010, 2014
-------------------*/
void FyMain(int argc, char **argv)
{
	// create a new world
	BOOL4 beOK = FyStartFlyWin32("NTU@2014 Homework #02 - Use Fly2", 0, 0, 1024, 768, FALSE);

	// setup the data searching paths
	FySetShaderPath("Data\\NTU6\\Shaders");
	FySetModelPath("Data\\NTU6\\Scenes");
	FySetTexturePath("Data\\NTU6\\Scenes\\Textures");
	FySetScenePath("Data\\NTU6\\Scenes");

	// create a viewport
	vID = FyCreateViewport(0, 0, 1024, 768);
	FnViewport vp;
	vp.ID(vID);

	// create a 3D scene
	sID = FyCreateScene(10);
	FnScene scene;
	scene.ID(sID);

	// load the scene
	scene.Load("gameScene02");
	scene.SetAmbientLights(1.0f, 1.0f, 1.0f, 0.6f, 0.6f, 0.6f);

	// load the terrain
	tID = scene.CreateObject(OBJECT);
	FnObject terrain;
	terrain.ID(tID);
	BOOL beOK1 = terrain.Load("terrain");
	terrain.Show(FALSE);

	// set terrain environment
	terrainRoomID = scene.CreateRoom(SIMPLE_ROOM, 10);
	FnRoom room;
	room.ID(terrainRoomID);
	room.AddObject(tID);

	// load the character
	FySetModelPath("Data\\NTU6\\Characters");
	FySetTexturePath("Data\\NTU6\\Characters");
	FySetCharacterPath("Data\\NTU6\\Characters");
	actorID = scene.LoadCharacter("Lyubu2");
	npc1ID = scene.LoadCharacter("Donzo2");
	npc2ID = scene.LoadCharacter("Robber02");

	// put the character on terrain
	float apos[3], cpos[3], fDir[3], uDir[3];
	FnCharacter actor, npc1, npc2;
	actor.ID(actorID);
	npc1.ID(npc1ID);
	npc2.ID(npc2ID);
	apos[0] = 3569.0f; apos[1] = -3208.0f; apos[2] = 1000.0f;
	fDir[0] = 1.0f; fDir[1] = 0.0f; fDir[2] = 0.0f;
	uDir[0] = 0.0f; uDir[1] = 0.0f; uDir[2] = 1.0f;
	actor.SetDirection(fDir, uDir);
	fDir[0] = -1.0f; fDir[1] = -1.0f;
	npc1.SetDirection(fDir, uDir);
	fDir[0] = 1.0f;
	npc2.SetDirection(fDir, uDir);

	actor.SetTerrainRoom(terrainRoomID, 10.0f);
	npc1.SetTerrainRoom(terrainRoomID, 10.0f);
	npc2.SetTerrainRoom(terrainRoomID, 10.0f);
	beOK = actor.PutOnTerrain(apos);
	apos[1] -= 150.0f;
	beOK = npc1.PutOnTerrain(apos);
	apos[1] -= 50.0f;
	beOK = npc2.PutOnTerrain(apos);

	// Get two character actions pre-defined at Lyubu2
	idleID = actor.GetBodyAction(NULL, "Idle");
	runID = actor.GetBodyAction(NULL, "Run");
	attackID = actor.GetBodyAction(NULL, "NormalAttack1");

	idle1ID = npc1.GetBodyAction(NULL, "Idle");
	damage1ID = npc1.GetBodyAction(NULL, "DamageL");
	die1ID = npc1.GetBodyAction(NULL, "Die");
	idle2ID = npc2.GetBodyAction(NULL, "CombatIdle");
	damage2ID = npc2.GetBodyAction(NULL, "Damage1");
	die2ID = npc2.GetBodyAction(NULL, "DEAD");

	// set the character to idle action
	curPoseID = idleID;
	actor.SetCurrentAction(NULL, 0, curPoseID);
	actor.Play(START, 0.0f, FALSE, TRUE);
	actor.TurnRight(90.0f);

	npc1.SetCurrentAction(NULL, 0, idle1ID);
	npc1.Play(START, 0.0f, FALSE, TRUE);
	npc2.SetCurrentAction(NULL, 0, idle2ID);
	npc2.Play(START, 0.0f, FALSE, TRUE);

	// translate the camera
	cID = scene.CreateObject(CAMERA);
	FnCamera camera;
	camera.ID(cID);
	camera.SetNearPlane(5.0f);
	camera.SetFarPlane(100000.0f);

	// set camera initial position and orientation
	actor.GetPosition(apos);
	//cpos[0] = 4315.783f; cpos[1] = -3199.686f; cpos[2] = 93.046f;
	fDir[0] = DIST; fDir[1] = 0.0f; fDir[2] = -HEIGHT;
	cpos[0] = apos[0] - fDir[0]; cpos[1] = apos[1] - fDir[1]; cpos[2] = apos[2] - fDir[2];
	float distance = sqrt(double((fDir[0])*(fDir[0]) + (fDir[1])*(fDir[1])));
	uDir[0] = -fDir[2] * fDir[0] / distance; uDir[1] = -fDir[2] * fDir[1] / distance; uDir[2] = distance;
	//fDir[0] = -0.983f; fDir[1] = -0.143f; fDir[2] = -0.119f;
	//uDir[0] = -0.116f; uDir[1] = -0.031f; uDir[2] = 0.993f;
	camera.SetPosition(cpos);
	camera.SetDirection(fDir, uDir);

	float mainLightPos[3] = { -4579.0, -714.0, 15530.0 };
	float mainLightFDir[3] = { 0.276, 0.0, -0.961 };
	float mainLightUDir[3] = { 0.961, 0.026, 0.276 };

	FnLight lgt;
	lgt.ID(scene.CreateObject(LIGHT));
	lgt.Translate(mainLightPos[0], mainLightPos[1], mainLightPos[2], REPLACE);
	lgt.SetDirection(mainLightFDir, mainLightUDir);
	lgt.SetLightType(PARALLEL_LIGHT);
	lgt.SetColor(1.0f, 1.0f, 1.0f);
	lgt.SetName("MainLight");
	lgt.SetIntensity(0.4f);

	// create a text object for displaying messages on screen
	textID = FyCreateText("Trebuchet MS", 18, FALSE, FALSE);

	// set Hotkeys
	FyDefineHotKey(FY_ESCAPE, QuitGame, FALSE);  // escape for quiting the game
	FyDefineHotKey(FY_UP, Movement, FALSE);      // Up for moving forward
	FyDefineHotKey(FY_DOWN, Movement, FALSE);    // Down for turning right
	FyDefineHotKey(FY_RIGHT, Movement, FALSE);   // Right for turning right
	FyDefineHotKey(FY_LEFT, Movement, FALSE);    // Left for turning left
	FyDefineHotKey('W', Movement, FALSE);        // Up for moving forward
	FyDefineHotKey('S', Movement, FALSE);        // Down for turning right
	FyDefineHotKey('D', Movement, FALSE);        // Right for turning right
	FyDefineHotKey('A', Movement, FALSE);        // Left for turning left
	FyDefineHotKey('J', Movement, FALSE);

	// define some mouse functions
	FyBindMouseFunction(LEFT_MOUSE, InitPivot, PivotCam, NULL, NULL);
	FyBindMouseFunction(MIDDLE_MOUSE, InitZoom, ZoomCam, NULL, NULL);
	FyBindMouseFunction(RIGHT_MOUSE, InitMove, MoveCam, NULL, NULL);

	// bind timers, frame rate = 30 fps
	FyBindTimer(0, 30.0f, GameAI, TRUE);
	FyBindTimer(1, 30.0f, RenderIt, TRUE);

	// invoke the system
	FyInvokeFly(TRUE);
}
/*------------------
the main program
C.Wang 1010, 2014
-------------------*/
void FyMain(int argc, char **argv)
{
	// create a new world
	BOOL4 beOK = FyStartFlyWin32("NTU@2014 Homework #01 - Use Fly2", 0, 0, 1024, 768, FALSE);

	// setup the data searching paths
	FySetShaderPath("Data\\NTU6\\Shaders");
	FySetModelPath("Data\\NTU6\\Scenes");
	FySetTexturePath("Data\\NTU6\\Scenes\\Textures");
	FySetScenePath("Data\\NTU6\\Scenes");

	// create a viewport
	vID = FyCreateViewport(0, 0, 1024, 768);
	FnViewport vp;
	vp.ID(vID);

	// create a 3D scene
	sID = FyCreateScene(10);
	FnScene scene;
	scene.ID(sID);

	// load the scene
	scene.Load("gameScene02");
	scene.SetAmbientLights(1.0f, 1.0f, 1.0f, 0.6f, 0.6f, 0.6f);

	// load the terrain
	tID = scene.CreateObject(OBJECT);
	FnObject terrain;
	terrain.ID(tID);
	BOOL beOK1 = terrain.Load("terrain");
	terrain.Show(FALSE);

	// set terrain environment
	terrainRoomID = scene.CreateRoom(SIMPLE_ROOM, 10);
	FnRoom room;
	room.ID(terrainRoomID);
	room.AddObject(tID);

	// load the character
	FySetModelPath("Data\\NTU6\\Characters");
	FySetTexturePath("Data\\NTU6\\Characters");
	FySetCharacterPath("Data\\NTU6\\Characters");
	actorID = scene.LoadCharacter("Lyubu2");

	// put the character on terrain
	float pos[3], fDir[3], uDir[3];
	FnCharacter actor;
	actor.ID(actorID);
	pos[0] = 3569.0f; pos[1] = -3208.0f; pos[2] = 1000.0f;
	fDir[0] = 1.0f; fDir[1] = -1.0f; fDir[2] = 0.0f;
	uDir[0] = 0.0f; uDir[1] = 0.0f; uDir[2] = 1.0f;
	actor.SetDirection(fDir, uDir);

	actor.SetTerrainRoom(terrainRoomID, 10.0f);
	beOK = actor.PutOnTerrain(pos);

	// Get two character actions pre-defined at Lyubu2
	idleID = actor.GetBodyAction(NULL, "Idle");
	runID = actor.GetBodyAction(NULL, "Run");

	// set the character to idle action
	curPoseID = idleID;
	actor.SetCurrentAction(NULL, 0, curPoseID);
	actor.Play(START, 0.0f, FALSE, TRUE);
	actor.TurnRight(90.0f);

	// translate the camera
	cID = scene.CreateObject(CAMERA);
	FnCamera camera;
	camera.ID(cID);
	camera.SetNearPlane(5.0f);
	camera.SetFarPlane(100000.0f);

	// set camera initial position and orientation
	pos[0] = 4069.0f; pos[1] = -3208.0f; pos[2] = 93.046f;
	fDir[0] = -500.0f; fDir[1] = -0.0f; fDir[2] = -0.0f;
	uDir[0] = -0.116f; uDir[1] = -0.031f; uDir[2] = 0.993f;
	camera.SetPosition(pos);
	camera.SetDirection(fDir, uDir);

	float mainLightPos[3] = { -4579.0, -714.0, 15530.0 };
	float mainLightFDir[3] = { 0.276, 0.0, -0.961 };
	float mainLightUDir[3] = { 0.961, 0.026, 0.276 };

	FnLight lgt;
	lgt.ID(scene.CreateObject(LIGHT));
	lgt.Translate(mainLightPos[0], mainLightPos[1], mainLightPos[2], REPLACE);
	lgt.SetDirection(mainLightFDir, mainLightUDir);
	lgt.SetLightType(PARALLEL_LIGHT);
	lgt.SetColor(1.0f, 1.0f, 1.0f);
	lgt.SetName("MainLight");
	lgt.SetIntensity(0.4f);

	// create a text object for displaying messages on screen
	textID = FyCreateText("Trebuchet MS", 18, FALSE, FALSE);

	// set Hotkeys
	FyDefineHotKey(FY_ESCAPE, QuitGame, FALSE);  // escape for quiting the game
	FyDefineHotKey(FY_UP, Movement, FALSE);      // Up for moving forward
	FyDefineHotKey(FY_RIGHT, Movement, FALSE);   // Right for turning right
	FyDefineHotKey(FY_LEFT, Movement, FALSE);    // Left for turning left

	// define some mouse functions
	if (!IsCameraFollow)
	{
		FyBindMouseFunction(LEFT_MOUSE, InitPivot, PivotCam, NULL, NULL);
		FyBindMouseFunction(MIDDLE_MOUSE, InitZoom, ZoomCam, NULL, NULL);
		FyBindMouseFunction(RIGHT_MOUSE, InitMove, MoveCam, NULL, NULL);
	}
	else
	{
		FyBindMouseFunction(LEFT_MOUSE, InitZoom2, ZoomCam2, NULL, NULL);
		FyBindMouseFunction(RIGHT_MOUSE, NULL, RotateCam, NULL, NULL);
	}

	// bind timers, frame rate = 30 fps
	FyBindTimer(0, 30.0f, GameAI, TRUE);
	FyBindTimer(1, 30.0f, RenderIt, TRUE);

	// invoke the system
	FyInvokeFly(TRUE);
}