/*------------------ the main program C.Wang 1010, 2014 -------------------*/ void FyMain(int argc, char **argv) { // create a new world BOOL4 beOK = FyStartFlyWin32("NTU@2015 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"); //Tang: FX FySetGameFXPath("Data\\NTU6\\FX"); //Tang // 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]; SetValues(pos, 3569.0f, -3208.0f, 1000.0f); SetValues(fDir, 1.0f, 1.0f, 0.0f); SetValues(uDir, 0.0f, 0.0f, 1.0f); ActorGen(scene, terrainRoomID, LyubuID, "Lyubu2", "Idle", pos, fDir, uDir); actorID = LyubuID.actorID; FnCharacter actor; actor.ID(actorID); // Get two character actions pre-defined at Lyubu2 idleID = actor.GetBodyAction(NULL, "Idle"); runID = actor.GetBodyAction(NULL, "Run"); NormalAttack1ID = actor.GetBodyAction(NULL, "NormalAttack1"); NormalAttack2ID = actor.GetBodyAction(NULL, "NormalAttack2"); HeavyAttack1ID = actor.GetBodyAction(NULL, "HeavyAttack1"); // translate the camera cID = scene.CreateObject(CAMERA); FnCamera camera; camera.ID(cID); camera.SetNearPlane(5.0f); camera.SetFarPlane(100000.0f); //hw3 : Donzo and Robber02 initialization float temp_pos[3]; float temp_fDir[3]; /* for (int i = 0; i < NUM_OF_BADGUYS; i++) { temp_pos[0] = pos[0] + 30 * (rand()%8); temp_pos[1] = pos[1] + 30 * (rand()%8); temp_pos[2] = pos[2] + 30 * (rand()%8); temp_fDir[0] = -1.0f; temp_fDir[1] = -1.0f; temp_fDir[2] = 1.0f; ActorGen(scene, terrainRoomID, badguyID[i], "Robber02", "CombatIdle", temp_pos, temp_fDir, uDir); } */ for (int i = 0; i < NUM_OF_BOSS; i++) { temp_pos[0] = pos[0] + 30 * (rand() % 8); temp_pos[1] = pos[1] + 30 * (rand() % 8); temp_pos[2] = pos[2] + 30 * (rand() % 8); SetValues(temp_fDir, -1.0f, -1.0f, 1.0f); ActorGen(scene, terrainRoomID, BossID[i], "Donzo2", "CombatIdle", temp_pos, temp_fDir, uDir); } // hw2 initial : set camera position actor.GetPosition(pos); pos[0] = pos[0] - SHORTDIST * fDir[0]; pos[1] = pos[1] - SHORTDIST * fDir[1]; pos[2] = pos[2] + HEIGHTOFFSET; SetValues(fDir, 1.0f, 1.0f, 0.0f); SetValues(uDir, 0.0f, 0.0f, 1.0f); camera.SetPosition(pos); camera.SetDirection(fDir, uDir); // the same as actor 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); // create a 2D scene for sprite rendering which will be rendered on the top of 3D sID2 = FyCreateScene(1); scene.ID(sID2); scene.SetSpriteWorldSize(800, 600); // 2D scene size in pixels spID0 = scene.CreateObject(SPRITE); sp.ID(spID0); //showPicture(sp, "talk_mission.jpg", 780, 200 , 10, 10); //showPicture parameter : FnSprite ,imageName, size, position // 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); FyDefineHotKey(FY_Q, Movement, FALSE); FyDefineHotKey(FY_W, Movement, FALSE); FyDefineHotKey(FY_E, Movement, FALSE); FyDefineHotKey(FY_A, Movement, FALSE); // Turn left with camera rotation FyDefineHotKey(FY_D, Movement, FALSE); // Turn right with camera rotation FyDefineHotKey(FY_S, 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); }