void Tree::draw(){ glPushMatrix(); //trunk glNewList(++list_number,GL_COMPILE); glTranslatef(center_point.x,center_point.y,center_point.z); trunk->set(); glutSolidCube(0.5); glEndList(); glPopMatrix(); list_index = list_number; //cone glPushMatrix(); glNewList(++list_number,GL_COMPILE); leaves->set(); glTranslatef(center_point.x,center_point.y+0.05,center_point.z); glRotatef(-90.0, 1.0, 0.0, 0.0); glutSolidCone(rando.number(5,15)/10.0, rando.number(10,30)/10.0, 50, 50); glEndList(); glPopMatrix(); }
void CHealGuyObject::CruisingAi(){ //just cruising along int x=0; if(g_cTimer.elapsed(m_nHeightTime, m_nHeightDelayTime)) { int rand = g_cRandom.number(1,3000); m_nHeightDelayTime=100+g_cRandom.number(0,1000); if(rand%2 == 1) { m_fXspeed = 5; } else { m_fXspeed = -5; } if(m_fDistance < CLOSE_DISTANCE){ //g_pSoundManager->play(DEADCROW14_SOUND); SetState(herCHASINGS3_STATE);} } }
void Target::ai(){ if(!timer.elapsed(last_time,delay_time)) return; if(center_point.x < -15.0) velocity.x = rando.number(0,50)/1000.0; else if(center_point.x > 15.0) velocity.x = rando.number(-50,0)/1000.0; else velocity.x = rando.number(-50,50)/1000.0; if(center_point.y < 0.0) velocity.y = rando.number(0,50)/1000.0; else if(center_point.y > 3.0) velocity.y = rando.number(-50,0)/1000.0; else velocity.y = rando.number(-50,50)/1000.0; if(center_point.z < -20.0) velocity.z = rando.number(0,50)/1000.0; else if(center_point.z > 5.0) velocity.z = rando.number(-50,0)/1000.0; else velocity.z = rando.number(-50,50)/1000.0; delay_time = 1500 + rando.number(0,2500); last_time = timer.time(); }
void CHealGuyObject::AvoidingAi(){ //avoiding plane if(xdistance > cool.x) { m_fXspeed = (float)-g_cRandom.number(7,10); } if(xdistance < cool.x) { m_fXspeed = (float)-g_cRandom.number(-7,-10); } if(ydistance > cool.y) { m_fYspeed = (float)-g_cRandom.number(-7,-10); } if(ydistance < cool.y) { m_fYspeed = (float)-g_cRandom.number(7,10); } if(ydistance == cool.y && xdistance == cool.x) SetState(herCRUISINGS3_STATE); }
void CHealGuyObject::SetState(HealType state){ m_eState=state; //change state switch(m_eState){ //change behavior settings case herCRUISINGS3_STATE: m_nAiDelayTime=400+g_cRandom.number(0,200); m_nHeightDelayTime=3000+g_cRandom.number(0,5000); break; case herAVOIDINGS3_STATE: m_nAiDelayTime=250+g_cRandom.number(0,250); m_fXspeed=-3; break; case herCHASINGS3_STATE: //m_nAiDelayTime=400+g_cRandom.number(0,200); //m_nHeightDelayTime=300+g_cRandom.number(0,50); break; case herWAITS3_STATE: m_nAiDelayTime=250+g_cRandom.number(0,250); break; default: break; } }
void CRoundManObject::SetState(States5Type state){ m_eState=state; //change state switch(m_eState){ //change behavior settings case CRUISINGS5_STATE: m_nAiDelayTime=400+g_cRandom.number(0,200); m_nHeightDelayTime=3000+g_cRandom.number(0,5000); break; case AVOIDINGS5_STATE: m_nAiDelayTime=250+g_cRandom.number(0,250); m_fXspeed=-3; break; case CHASINGS5_STATE: //m_nAiDelayTime=400+g_cRandom.number(0,200); m_nHeightDelayTime=300+g_cRandom.number(0,50); break; case WAITS5_STATE: m_nAiDelayTime=250+g_cRandom.number(0,250); break; default: break; } }
void CRoundManObject::ChasingAi() { if(g_cTimer.elapsed(m_nHeightTime, m_nHeightDelayTime)) { m_nHeightDelayTime=100+g_cRandom.number(0,50); if(m_fHorizontalDistance > 0) { m_fXspeed = (float)-g_cRandom.number(7,10); } if(m_fHorizontalDistance < 0) { m_fXspeed = (float)-g_cRandom.number(-7,-10); } if(m_fVerticalDistance > 0) { m_fYspeed = (float)-g_cRandom.number(-7,-10); } if(m_fVerticalDistance < 0) { m_fYspeed = (float)-g_cRandom.number(7,10); } if(CLOSE_DISTANCE > m_fDistance) SetState(CRUISINGS5_STATE); } }
void CHomingObject::HomingAi() { if(g_cTimer.elapsed(m_nHeightTime, m_nHeightDelayTime)) { m_nHeightDelayTime=100+g_cRandom.number(0,2000); if(m_fHorizontalDistance > 0) { m_fXspeed = -15; } if(m_fHorizontalDistance < 0) { m_fXspeed = 15; } if(m_fVerticalDistance > 0) { m_fYspeed = 15; } if(m_fVerticalDistance < 0) { m_fYspeed = -15; } }}
void CRoundManObject::CruisingAi(){ //just cruising along if(g_cTimer.elapsed(m_nHeightTime, m_nHeightDelayTime)) { int rand = g_cRandom.number(1,1000); m_nHeightDelayTime=100+g_cRandom.number(0,500); if(rand % 3 == 0) { rand = g_cRandom.number(1,1000); if(rand%2 == 0) { m_fXspeed = 0; m_fXspeed = 8; } else { m_fYspeed = 0; m_fYspeed = 8; } } else if(rand%3 == 1) { rand = g_cRandom.number(1,1000); if(rand%2 == 0) { m_fXspeed = 0; m_fXspeed = -8; } else { m_fYspeed = 0; m_fYspeed = -8; } } else { m_fXspeed = m_fYspeed = 0; } if(CLOSE_DISTANCE > m_fDistance) SetState(CHASINGS5_STATE); } }
BOOL ComposeFrame(){ //compose a frame of animation //draw background static int next_powerup = Timer.time()+Random.number(3000,12000); static int frame = 1; RECT rect; //drawing rectangle rect.left=0; rect.right=g_nScreenWidth; rect.top=0; rect.bottom=g_nScreenHeight; lpSecondary->Blt(&rect,lpBackground,&rect,DDBLT_WAIT,NULL); //move objects Viewpoint.draw_background(lpBackground,lpSecondary,8); int collision = theObjects.collisiondetection(); theObjects.animate(lpSecondary); //animate the current frame theObjects.refresh(collision); //refresh the objects if(Timer.time()>=next_powerup){ theObjects.powerup(); next_powerup += Random.number(10000,30000); //next power up in 10 - 30 sec } //frame rate framecount++; //count frame if(Timer.elapsed(framerate_timer,500)){ theObjects.set_current(STARFIRE_INDEX); theObjects.changedirection(0,0); last_framecount=framecount; framecount=0; } return PageFlip(); //flip video memory surfaces // return TRUE; } //ComposeFrame
void CHealGuyObject::WaitingAi(){ //avoiding plane //height variation if(g_cTimer.elapsed(m_nHeightTime, m_nHeightDelayTime)){ m_nDesiredHeight = g_cRandom.number(100,450); if(m_nDesiredHeight < m_structLocation.y) m_fYspeed= -(float)g_cRandom.number(3,7); if(m_nDesiredHeight > m_structLocation.y) m_fYspeed = (float)g_cRandom.number(3,7); m_nHeightDelayTime = 3000+g_cRandom.number(0,2000); } //speed variation if(g_cTimer.elapsed(m_nSpeedVariationTime, m_nSpeedVariationDuration)){ m_fXspeed = (float)-g_cRandom.number(7,10); m_nSpeedVariationDuration = 10000+g_cRandom.number(0,3000); } if(m_fHorizontalDistance > BEHIND_DISTANCE) //if behind m_fXspeed = -1; //slow down //look for plane, maybe leave avoiding state if(m_fDistance < CLOSE_DISTANCE&& m_fHorizontalDistance+100 > BEHIND_DISTANCE); }
void change_phase(GamePhaseType new_phase){ GamePhase = new_phase; PhaseTime = Timer.time(); endphase = FALSE; static int first = 1; switch(GamePhase){ case LOGO_PHASE: LoadSounds(0); display_screen("./images/logo.bmp"); SoundManager->play(TITLE_SOUND); SoundManager->play(LOGO_SOUND); break; case TITLE_PHASE: SoundManager->stop(); //silence previous phase MidiPlayer.Load(song_list[INTRO_MUSIC].c_str()); MidiPlayer.Play(); display_screen("./images/title.bmp"); break; case HELP_PHASE: SoundManager->stop(); display_screen("./images/help.bmp"); break; case ENEMY_PHASE: display_screen("./images/enemies.bmp"); break; case MENU_PHASE: SoundManager->stop(); //silence previous phase if(!first){ MidiPlayer.Stop(); MidiPlayer.Load(song_list[INTRO_MUSIC].c_str()); MidiPlayer.Play(); } display_screen("./images/menu.bmp"); break; case PLAYING_PHASE: SoundManager->stop(); //silence previous phase SoundManager->clear(); //clear out old sounds LoadSounds(1); if(first){ CreateObjects(); //create new objects first = 0; } SoundManager->play(BEGIN0_SOUND+Random.number(0,2)); MidiPlayer.Stop(); MidiPlayer.Load(song_list[THEME_MUSIC].c_str()); MidiPlayer.Play(); // SoundManager->play(ENGINE_SOUND,LOOP_SOUND); break; case GAMEOVER_PHASE: MidiPlayer.Stop(); display_screen("./images/game_over.bmp"); Sleep(2000); SoundManager->stop(); //silence previous phase SoundManager->play(GAMEOVER1_SOUND); break; } }