예제 #1
0
void updateGame(Game *game){
  game->totalTime++;
  if(game->levelTime){
    game->levelTime++;
    addEnemies(game);//Adds enemies and checks if level is finished
  }

  updateTowers(game);
  updateEnemies(game);
  updateBullets(game);
};
예제 #2
0
void rScene5::update(float deltaTime)
{
	pollEvents();
	m_deltaTime = deltaTime;

	playerStep();
	moveSpotlight(player->getX(), player->getY());

	updatePotatoes();
	updateEnemies();
	updateBullets();

	if (player->getX() > 928)
		message = "go:Scene6";
}
예제 #3
0
void GameScene::update(float dt)
{
	updateHero(dt);
	adaptPlayerPosition();
	updateAnimationState();
	
	m_flamesParticle->setPosition(ccpAdd(m_hero->getPosition(), ccp(-m_hero->getContentSize().width * 0.25f, -m_hero->getContentSize().height * 0.25f)));

	spawnEnemies(dt);	
	updateEnemies(dt);
	updateProjectiles(dt);	

	if (m_hp <= 0)
	{
		gameOver();
	}
	m_background->update();
	// Update Box2D world
	//world->Step(dt, 6, 3);

    // BOX2D TIP
    // Update objects from box2d coordinates here
}
예제 #4
0
//--------------------------------------------------------------
void ofApp::update(){	
  float dt = ofGetLastFrameTime();

  pRetryBtn->update();  
  pHpBar->update();

  if(bGameRunning)
  {
    randBornEnemy(dt);
    updateEnemies(dt);

    deque<ofPtr<DrawGame::CircleSprite> >::iterator itEnemy;  
    for(itEnemy=Enemies.begin();
      itEnemy!=Enemies.end();
      itEnemy++)
    {
      ofPtr<DrawGame::CircleSprite> En = *itEnemy;     
      if(pPlayer->isSameColor(*En)&&pPlayer->encompass(*En))
      {      
        HP += HPEatAmt;
        eraseEnemy(itEnemy, "Eat");
        break;
      }
      if(!pPlayer->isSameColor(*En)&&En->encompass(*pPlayer))
      {
        eraseEnemy(itEnemy,"Coin");  
        HP+= CoinValue;
        break;
      }     
      if(pPlayer->isSameColor(*En)&&En->encompass(*pPlayer))
      {
        HP-=HPBeatAmt; 
        eraseEnemy(itEnemy,"Beat");        
        if(HP<=0.0f)
        {
          GameOverString = "You're Exhausted!";
          gameOver();           
        }   
        break;
      }    
      if(En->getSize()<25.0f&&En->getbWhite())
      {
        eraseEnemy(itEnemy," ");
        break;
      }
    }

    if(KeysState['a'])
    {
      pPlayer->changeRot(-360.0f*dt);
    }
    else if(KeysState['d'])
    {
      pPlayer->changeRot(360.0f*dt);
    }

    if(MouseKeyState[0])
    {
      HP+= dt*HPIncSpd;     
    }    
  } 
  HP = ofClamp(HP,0,HPMax);

  // 根据是否按住GUI来判断是否显示光标
  bool bPressGUI = GUI_Debug.getShape().inside(
    ofVec2f(ofGetMouseX(),ofGetMouseY()));
  if(bPressGUI&&bShowDebug)
  {
    ofShowCursor();
  }
  else
  {
    ofHideCursor();
  }
  
}
예제 #5
0
void LevelGenerator::update(core::Siika2D *siika)
{
	glm::vec2 ushikoPos = siika->transfCrds()->deviceToUser(ushiko.go->getComponent<misc::TransformComponent>()->getPosition());

	ushikoPos.x += 100;
	ushikoPos.y = -ushikoPos.y;

	// Ushiko has fallen and can't get up
	if (ushikoPos.y < -siika->_graphicsContext->getDisplaySize().y * 3)
	{
		ushiko.health -= ushiko.healthMax;
		sound.playSound(KUOLONKORINA);
		return;
	}

	updateTiles(ushikoPos);
	updateCollectables(ushikoPos);
	updatePuffs(siika);

	/* ----- SPAWNING TILES & ENEMIES ----- */

	updateEnemies(siika, ushikoPos);

	tileMovement += 1;
	if (tileMovement >= 14)
	{
		tileMovement = 0;

		glm::vec2 screenSize = siika->_graphicsContext->getDisplaySize();
		if (platformSpawned < platformLength)
		{
			spawnTile(siika, screenSize.x * 1.8, -yLevel);
			platformSpawned += 1;

			// 25% chance (per tile) to spawn an enemy on a tile past the half-way point of the platform
			if (!platformHasEnemy && platformSpawned > (int)(platformLength / 2) &&
				platformSpawned != platformLength && lrand48() % 4 == 0 &&
				generatorName != "boss")
			{
				spawnEnemy(siika, screenSize.x * 1.8, -yLevel + 240);
				platformHasEnemy = true;
			}

			// Spawn a coin on every 4th platform, starting from 3rd platform (#2)
			if (platformNum == 2 && platformSpawned == (int)(platformLength / 2) - 1)
			{
				spawnCollectable(siika, screenSize.x * 1.8, -yLevel + 220);
			}
		}
		else
		{
			platformLength = lrand48() % 10;
			if (generatorName == "forest")
				platformLength += 4;
			else if (generatorName == "castle" || generatorName == "boss")
				platformLength += 2;
			else platformLength += 6;

			platformSpawned = 0;
			platformHasEnemy = false;

			platformNum += 1;
			if (platformNum > 3) // Platforms are #0-3
				platformNum = 0;

			int previousY = yLevel;
			while (yLevel == previousY)
			{
				// Change the (Y) level of the new platform
				yLevel = lrand48() % 3;
				switch (yLevel)
				{
					case 0: yLevel = 580; break;
					case 1: yLevel = screenSize.y * 2 - 240; break;
					default: yLevel = screenSize.y * 2 + 400; break;
				}
			}
		}
	}
}
예제 #6
0
void PlayState::update()
{
	// Shake the background up and down when bomb is used
	if(bombAnimation)
	{
		bombAnimationCount++;
		bombShakeCounter++;
		// Up
		if(bombShakeCounter < 5)
		{
			starsBG_Pos.y -= 2;
		}
		// Down + Down
		else if(bombShakeCounter < 15)
		{
			starsBG_Pos.y += 2;
		}
		// Up
		else if(bombShakeCounter < 20)
		{
			starsBG_Pos.y -= 2;
		}
		// Reset
		else
		{
			bombShakeCounter = 0;
			--starsBG_Pos.y;
		}

		if(bombAnimationCount == BOMB_ANIMATION_LENGTH)
		{
			bombAnimationCount = 0;
			bombAnimation = false;
		}
	}

	// Move BG
	++bgMoveCounter;

	if(bgMoveCounter > 2)
	{
		++starsBG_Pos.x;
		bgMoveCounter = 0;
	}

	REG_BG0VOFS = starsBG_Pos.y;
	REG_BG0HOFS = starsBG_Pos.x;

	updateText();

	// Update the stage
	currentStage->update();

	// Checks for button pushes and updates accordingly
	checkInput();

	updatePlayer();
	
	// Udates the PowerUp and checks for collisions
	updatePowerUp();

	// Updates all of the enemies and has them fire.
	updateEnemies();

	// Updates all of the bullets and checks for collisions
	updateBullets();
}
예제 #7
0
	/*
		Uses: 
		Affects: 
	*/
void Territory::update(UpdateInfo info, Controls * controls, Sounds * sounds)
{
	this->sounds = sounds;
	// Update all player projectiles
	/*
		Uses: playerProjectile
		Affects: playerProjectile
	*/
	updatePlayerProjectiles(info, controls);
	/*
		Uses: playerProjectiles(boundingBox),  enemies(boundingBox), playerProjectiles(piercing)
		Affects: playerProjectiles(piercing),  enemies(hp), effects(spawns)
	*/
	collidePlayerProjectiles(info, controls);

	// Update all enemies.
	/*
		Uses: enemies
		Affects: enemies
	*/
	updateEnemies(info);

	// Check if the player is hit by enemy projectiles.
	/*
		Uses: enemyProjectiles
		Affects: enemyProjectiles
	*/
	updateEnemyProjectiles(info, controls);
	/*
		Uses: enemyProjectiles(boundingBox),  player(boundingBox), enemyProjectiles(piercing)
		Affects: enemyProjectiles(piercing), player(hp), sounds(play)
	*/
	collideEnemyProjectiles(info, controls);
	/*
		Uses: enemyProjectiles(boundingBox), player(isInSafe), partitionedSafeZonesTiles(boundingBox)
		Affects: enemyProjectiles(expend)
	*/
	collideEnemyProjectilesSafe(info, controls);

	// Update player and safe zone checks.
	/*
		Uses: player(getBoundingBox, getConvexHull, getSpeed), safeZonesTiles(getBoundingBox, getConvexHull)
		Affects: player(update, setIsInSafeZone, setSafeZoneIndex)
	*/
	updatePlayer(info, controls);

	// Update all effects.
	/*
		Uses: effects
		Affects: effects
	*/
	updateEffects(info);

	// Spawn enemy
	/*
		Uses: enemySpawner, getSpawnPoints
		Affects: enemySpawner, spawnQueue, entityCluster.getCollection(1), entityCluster.getCollection(0)
	*/
	enemySpawner.update(getSpawnPoints(), spawnQueue, player, entityCluster.getCollection(1), entityCluster.getCollection(0), info);

	// Background tile stuff.
	/*
		Uses: tileColorings
		Affects: floorTiles(setColor), tileColorings
	*/
	cleanFloorTiles();

	// Enemy aura colorization on floor tiles.
	/*
		Uses: enemies(getPosition), territory(getPosition), floorTiles(getColor)	
		Affects: floorTiles(setColor), tileColorings
	*/
	colorEnemyAuraTiles();

	// Beware this section can change if this territory is active.
	// Handle the case of the player trying to cross the territory border.
	/*
		Uses: floorTiles,player(getBoundingBox, getConvexHull, getPosition, getSpeed), this(position)
		Affects: world(changeTerritory), player(setPosition)
	*/
	collideBorderTiles();
}