コード例 #1
0
ファイル: simulation.cpp プロジェクト: casfire/life-hs
void Simulation::Start(){
	memset(&params.rnd,0,sizeof(Random));
	params.rnd.Set(params.initialRandomAlg);
	params.rnd.Srand(params.initialRandomSeed);
	frameCount = 0;

	for(unsigned int n=0; n<food.size(); n++)food[n].active = false;
	foodCount = 0; food.clear(); food.reserve(params.foodMaxInWorld + FOODRESERVE);
	for(unsigned int n=0; n<critter.size(); n++)critter[n].active = false;
	critCount = 0; critter.clear(); critter.reserve(params.critMaxInWorld + CRITRESERVE);

	float canvasArea = M_PI*pow(params.simRadius,2);
	float energyPerFood = (params.initialFoodDistribution*canvasArea)/params.initialFoodCount;
	for(unsigned int n=0; n<params.initialFoodCount; n++){
		float d = sqrt(params.rnd.xrand(0.,1.))*params.simRadius;
		float a = params.rnd.xrand(-M_PI,M_PI);
		AddFood(cos(a)*d,sin(a)*d,energyPerFood,0.);
	}

	for(unsigned int n=0; n<params.initialCritCount; n++){
		float d = sqrt(params.rnd.xrand(0.,1.))*params.simRadius;
		float a = params.rnd.xrand(-M_PI,M_PI);
		AddCritter(cos(a)*d,sin(a)*d);
	}

}
コード例 #2
0
ファイル: simulation.cpp プロジェクト: casfire/life-hs
void Simulation::RemoveCritter(uint32_t i){
	critCount--;
	critter[i].active = false;
	if(critSelected&&(i==critSelect)){ critSelect = 0; critSelected = false; }
	AddFood(critter[i].x, critter[i].y, critter[i].energy, critter[i].waste, critter[i].rot);
	critter[i].waste = 0.;
	critter[i].energy = 0.;
	if(critCount<params.critMinInWorld){
		float d = sqrt(params.rnd.xrand(0.,1.))*params.simRadius;
		float a = params.rnd.xrand(-M_PI,M_PI);
		Critter *A = NULL, *B = NULL;
		if(critCount>1){
			do{ A = &critter.at(params.rnd.Next()%critter.size()); }while(!(A->active));
			do{ B = &critter.at(params.rnd.Next()%critter.size()); }while(!(B->active));
		}
		if((A!=NULL)&&(B!=NULL))AddCritter(cos(a)*d,sin(a)*d,A,B);
	}
}
コード例 #3
0
ファイル: simulation.cpp プロジェクト: casfire/life-hs
void Simulation::AddFood(float x, float y, float energy, float waste){
	AddFood(x,y,energy,waste,params.rnd.xrand(-M_PI,M_PI));
}
コード例 #4
0
ファイル: gameMain.cpp プロジェクト: Kent0911/GameJam-11-18
void GameMain::Update(){
  if (true == is_game_end){
	  if (ResMed.Get(AudioKey::Game).isPlaying()){
		  ResMed.Get(AudioKey::Game).stop();
	  }
	if (!ResMed.Get(AudioKey::TimeOut).isPlaying()){
		ResMed.Get(AudioKey::TimeOut).play();
	}
  }
  if (true == is_end){
	  scene_manager->ChangeScene(std::shared_ptr<Result>(new Result(result)));
	  return;
  }

  if (!ResMed.Get(AudioKey::Game).isPlaying()){
    ResMed.Get(AudioKey::Game).play();
    ResMed.Get(AudioKey::Game).looping(true);
  }
  if (food_click_limit == 0){
    if (Collision::MouseToBox(App::Get().mousePosition(), food[0]->GetBox())){
      if (App::Get().isPushButton(Mouse::LEFT)){
        ResMed.Get(AudioKey::Eating).play();
        selected.push_back(SelectedFood(Position::Left, food[0]->GetFoodType(), food[0]->GetFoodVariation()));
        AddFood(food[0]->GetFoodType());
        Reset();
      }
    }

    if (App::Get().isPushKey(GLFW_KEY_LEFT_SHIFT) || App::Get().isPushKey('Z')){
      ResMed.Get(AudioKey::Eating).play();
      selected.push_back(SelectedFood(Position::Left, food[0]->GetFoodType(), food[0]->GetFoodVariation()));
      AddFood(food[0]->GetFoodType());
      Reset();
    }

    if (Collision::MouseToBox(App::Get().mousePosition(), food[1]->GetBox())){
      if (App::Get().isPushButton(Mouse::LEFT)){
        ResMed.Get(AudioKey::Eating).play();
        selected.push_back(SelectedFood(Position::Middle, food[1]->GetFoodType(), food[1]->GetFoodVariation()));
        AddFood(food[1]->GetFoodType());
        Reset();
      }
    }

    if (App::Get().isPushKey(GLFW_KEY_SPACE) || App::Get().isPushKey('B')){
      ResMed.Get(AudioKey::Eating).play();
      selected.push_back(SelectedFood(Position::Middle, food[1]->GetFoodType(), food[1]->GetFoodVariation()));
      AddFood(food[1]->GetFoodType());
      Reset();
    }

    if (Collision::MouseToBox(App::Get().mousePosition(), food[2]->GetBox())){
      if (App::Get().isPushButton(Mouse::LEFT) || App::Get().isPushKey(GLFW_KEY_RIGHT_SHIFT)){
        ResMed.Get(AudioKey::Eating).play();
        selected.push_back(SelectedFood(Position::Right, food[2]->GetFoodType(), food[2]->GetFoodVariation()));
        AddFood(food[2]->GetFoodType());
        Reset();
      }
    }

    if (App::Get().isPushKey(GLFW_KEY_RIGHT_SHIFT) || App::Get().isPushKey(GLFW_KEY_SLASH)){
      ResMed.Get(AudioKey::Eating).play();
      selected.push_back(SelectedFood(Position::Right, food[2]->GetFoodType(), food[2]->GetFoodVariation()));
      AddFood(food[2]->GetFoodType());
      Reset();
    }
  }

  for (auto& itr : selected){
    itr.Update();
  }

  UpdateList();
  if (true != is_game_end){
	  if (food_click_limit > 0){
		  food_click_limit--;
	  }
  }

  time_limit--;
  if (time_limit < ENDWAITTIME){
    is_game_end = true;
  }
  if (time_limit < 0){
	  is_end = true;
  }
}