void Base::EquipScreen() { int first, elist[NUMEQUIPTYPES], displaylist[7]; selectbar = -1; sprintf_s(descstring2,2048,"\0"); int items = 0; for(int i=1;i<NUMEQUIPTYPES;i++) if(equipment[i]) elist[items++] = i; if(ship[player].keys.UP) { ship[player].keys.UP = false; if(listselector>0) { --listselector; glyph.CreateGraphicalObject(equipdata[elist[listselector]].graphics.c_str(),1); soundeffect[MENUMOVE].SetSoundEffect(0); } else soundeffect[MENUREJECT].SetSoundEffect(0); } if(ship[player].keys.DOWN) { ship[player].keys.DOWN = false; if(listselector<(items-1)) { ++listselector; glyph.CreateGraphicalObject(equipdata[elist[listselector]].graphics.c_str(),1); soundeffect[MENUMOVE].SetSoundEffect(0); } else soundeffect[MENUREJECT].SetSoundEffect(0); } meter[0].value = ship[player].power; //Ship power usage meter[0].maxvalue = ship[player].maxpower; if(ship[player].equipment[elist[listselector]]) { meter[1].value = 0; //Equipment power usage meter[1].maxvalue = ship[player].maxpower; meter[2].value = ship[player].power; //Predicted power usage meter[2].maxvalue = ship[player].maxpower; } else { if(elist[listselector] == AUXILIARY_GENERATOR) { meter[1].value = 0; //Equipment power usage meter[1].maxvalue = ship[player].maxpower-equipdata[elist[listselector]].power; meter[2].value = ship[player].power; //Predicted power usage meter[2].maxvalue = ship[player].maxpower-equipdata[elist[listselector]].power; } else { meter[1].value = equipdata[elist[listselector]].power; //Equipment power usage meter[1].maxvalue = ship[player].maxpower; meter[2].value = ship[player].power+equipdata[elist[listselector]].power; //Predicted power usage meter[2].maxvalue = ship[player].maxpower; } } meter[0].type = MUSED; meter[1].type = MPOWER; meter[2].type = MTOTAL; if(listselector<=3) first = 0; //First section else if(listselector>=items-4) first = items-7; //Last section else first = listselector-3; //Scrolling section if(items<8) { for(int i=0;i<items;i++) { if(i==listselector) { selectbar = i; sprintf_s(descstring,2048,"%s \0",equipdata[elist[i]].description.c_str()); //DrawSmallString(EqDesc[list[i]],391,276,621,false); } displaylist[i] = elist[i]; } if(items<7) for(int i=0;i<7-items;i++) displaylist[items+i] = -1; } else { for(int i=0;i<7;i++,first++) { if(first==listselector) { selectbar = i; sprintf_s(descstring,2048,"%s \0",equipdata[elist[first]].description.c_str()); //DrawSmallString(EqDesc[elist[first]],391,276,621,false); } displaylist[i] = elist[first]; } } sprintf_s(datastring,2048,"%s\n%s\n%s\n%s\n%s\n%s\n%s\0", displaylist[0]>-1?equipdata[displaylist[0]].name.c_str():"\0", displaylist[1]>-1?equipdata[displaylist[1]].name.c_str():"\0", displaylist[2]>-1?equipdata[displaylist[2]].name.c_str():"\0", displaylist[3]>-1?equipdata[displaylist[3]].name.c_str():"\0", displaylist[4]>-1?equipdata[displaylist[4]].name.c_str():"\0", displaylist[5]>-1?equipdata[displaylist[5]].name.c_str():"\0", displaylist[6]>-1?equipdata[displaylist[6]].name.c_str():"\0"); if(ship[player].keys.OPERATE) { ship[player].keys.OPERATE = false; switch (button[buttonselector]) { case EXIT: ChangeScreen(HOME); return; case SELECT: //Select if(!ship[player].equipment[elist[listselector]]) { if((ship[player].power + equipdata[elist[listselector]].power)<=ship[player].maxpower ) { ship[player].equipment[elist[listselector]] = true; ship[player].power += equipdata[elist[listselector]].power; sprintf_s(messagestring,1024,"Added %s ",equipdata[elist[listselector]].name.c_str()); if(elist[listselector] == BOMB) data->equipment[BOMB]--; if(elist[listselector] == LASER_DRONE) { CreateDrone(player); } if(elist[listselector] == LIGHTNING_DRONE) { CreateLightningDrone(player); } if(elist[listselector] == SHIELD_DRONE) { for(int i=0;i<3;i++) CreateShieldDrone(player,i); } if(elist[listselector] == AUXILIARY_GENERATOR) { ship[player].maxpower -= equipdata[AUXILIARY_GENERATOR].power; ship[player].power -= equipdata[AUXILIARY_GENERATOR].power; //To reverse the addition above } if(elist[listselector] == SHIELD) { ship[player].shields = ship[player].maxshields; } soundeffect[MENUSELECT].SetSoundEffect(0); soundeffect[INSTALLITEM].SetSoundEffect(0); } else { sprintf_s(messagestring,1024,"Not enough power"); soundeffect[MENUREJECT].SetSoundEffect(0); } } else { sprintf_s(messagestring,1024,"Equipment already installed"); soundeffect[MENUREJECT].SetSoundEffect(0); } break; case REMOVE: //Remove if(elist[listselector]==RADAR || elist[listselector]==SCANNER) { sprintf_s(messagestring,1024,"Cannot remove Radar or Scanner"); } else if(elist[listselector]==AUXILIARY_GENERATOR && (ship[player].maxpower + equipdata[AUXILIARY_GENERATOR].power < ship[player].power)) sprintf_s(messagestring,1024,"Cannot remove generator: power overload!"); else if(ship[player].equipment[elist[listselector]]) { ship[player].equipment[elist[listselector]] = false; //data->equipment[elist[listselector]]++; ship[player].power -= equipdata[elist[listselector]].power; sprintf_s(messagestring,1024,"Removed %s",equipdata[elist[listselector]].name.c_str()); if(elist[listselector] == LASER_DRONE) { SET(ship[player].drone->state,FORDESTRUCTION); ship[player].drone = NULL; } if(elist[listselector] == LIGHTNING_DRONE) { SET(ship[player].lightningdrone->state,FORDESTRUCTION); ship[player].lightningdrone = NULL; } if(elist[listselector] == SHIELD_DRONE) { SET(ship[player].shielddrone[0]->state,FORDESTRUCTION); SET(ship[player].shielddrone[1]->state,FORDESTRUCTION); SET(ship[player].shielddrone[2]->state,FORDESTRUCTION); ship[player].shielddrone[0] = NULL; ship[player].shielddrone[1] = NULL; ship[player].shielddrone[2] = NULL; } if(elist[listselector] == BOMB) data->equipment[BOMB]++; if(elist[listselector] == AUXILIARY_GENERATOR) { ship[player].maxpower += equipdata[AUXILIARY_GENERATOR].power; ship[player].power += equipdata[AUXILIARY_GENERATOR].power; //To reverse the subtraction above } if(elist[listselector]==RADAR) { if(ship[player].equipment[SCANNER]) { ship[player].equipment[SCANNER] = false; ship[player].power -= equipdata[SCANNER].power; sprintf_s(messagestring,1024,"Removed Radar and Scanner"); } } soundeffect[MENUSELECT].SetSoundEffect(0); } else { sprintf_s(messagestring,1024,"Equipment not installed"); soundeffect[MENUREJECT].SetSoundEffect(0); } return; case EQUIP: //Equip screen ChangeScreen(EQUIP); return; case WEAPON: //Weapon screen ChangeScreen(WEAPON); return; case SHIP: ChangeScreen(SHIP); return; } } return; }
/** Start an asteroids game. */ void Asteroids::Start() { // Add a player (watcher) to the game world mGameWorld->AddListener(&mPlayer); // Add a score keeper to the game world mGameWorld->AddListener(&mScoreKeeper); // Add this class as a listener of the score keeper mScoreKeeper.AddListener(this); // Add this class as a listener of the game world mGameWorld->AddListener(this); // Add this class as a listener of the player mPlayer.AddListener(this); // Create user interface CreateGUI(); // Create an ambient light to show sprite textures GLfloat ambient_light[] = { 1.0f, 1.0f, 1.0f, 1.0f }; GLfloat diffuse_light[] = { 1.0f, 1.0f, 1.0f, 1.0f }; glLightfv(GL_LIGHT1, GL_AMBIENT, ambient_light); glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse_light); glEnable(GL_LIGHT1); mSelectedShape = new Shape("ASSETS/selected.shape"); Animation *explosion_anim = AnimationManager::GetInstance().CreateAnimationFromRawRGBA("explosion", 64, 1024, 64, 64, "ASSETS/explosion_fs.raw", "ASSETS/explosion_fs_alpha.raw"); Animation *asteroid1_anim = AnimationManager::GetInstance().CreateAnimationFromRawRGBA("asteroid1", 128, 8192, 128, 128, "ASSETS/asteroid1_fs.raw", "ASSETS/asteroid1_fs_alpha.raw"); Animation *asteroidOre1_anim = AnimationManager::GetInstance().CreateAnimationFromRawRGBA("asteroidOre1", 128, 8192, 128, 128, "ASSETS/asteroidOre1_fs.raw", "ASSETS/asteroidOre1_fs_alpha.raw"); //Animation *droid_anim = AnimationManager::GetInstance().CreateAnimationFromRawRGBA("droid1", ); Animation *spaceship_anim = AnimationManager::GetInstance().CreateAnimationFromRawRGBA("spaceship", 128, 128, 128, 128, "ASSETS/spaceship_fs.raw", "ASSETS/spaceship_fs_alpha.raw"); // Add this as a listener to the world and the keyboard mGameWindow->AddKeyboardListener(this); // Add this as a listener to the world and the mouse mGameWindow->AddMouseListener(this); // Add the selection box to the world mGameWorld->GiveSelectionBox(mSelectionBox); // Create a spaceship and add it to the world //mGameWorld->AddObject(CreateSpaceship()); // Create some asteroids and add them to the world mLevel = 1; mAsteroidCount = 1; int w = mGameDisplay->GetWidth(); int h = mGameDisplay->GetHeight(); cout << "width : " << w; cout << "height : " << h; // creating asteroids for (int i = 0; i < 10; i++) { int x = (rand() % w) - w/2; int y = (rand() % h) - h/2; mGameWorld->AddObject(CreateAsteroid(x,y)); mAsteroidCount++; } //creating ore asteroids for (int i = 0; i < 10; i++) { int x = (rand() % w) - w/2; int y = (rand() % h) - h/2; mGameWorld->AddObject(CreateAsteroidOre(x,y)); mAsteroidCount++; } // creating drones float rAngle = 0; GLVector3f zero(0.0, 0.0, 0.0); for(int i = 0; i < 2; i++){ GLVector3f new_drone_offset(cos(DEG2RAD*rAngle), sin(DEG2RAD*rAngle), 0.0); new_drone_offset.normalize(); GLVector3f drone_position = zero + (new_drone_offset * 20); mGameWorld->AddObject(CreateDrone(drone_position.x,drone_position.y)); rAngle += 360 / 2; } // creaing a single ore for testing mGameWorld->AddObject(CreateOre(100,0)); // Start the game GameSession::Start(); }