Пример #1
0
void Game::drawCursor(int screen_width)
{
	if (m_Enemies.size())
	{
		for (auto iter = m_Enemies.begin(); iter != m_Enemies.end(); iter++)
		{
			shared_ptr<Enemy> enemy = *iter;
			if (circleCollision(enemy->getX(), enemy->getY(), input::getMouseX(), input::getMouseY(), screen_width / Map::width() / 2))
			{
				if (Map::distance(player->getTilePos(), enemy->getTilePos()) <= Map::fogVisibility())
				{
					gfx::drawCursor("aim_cursor.png", input::getMouseX() - 16, input::getMouseY() - 16);
					if (input::buttonHeld(SDL_BUTTON_RIGHT))
					{
						player->setTarget(enemy.get());
					}
				}
				else
				{
					gfx::drawCursor("cursor.png", input::getMouseX(), input::getMouseY());
				}
				break;
			}
			else if (*iter == m_Enemies.back())
			{
				gfx::drawCursor("cursor.png", input::getMouseX(), input::getMouseY());
				break;
			}
		}
	}
	else
	{
		gfx::drawCursor("cursor.png", input::getMouseX(), input::getMouseY());
	}
}
Пример #2
0
glm::vec3 spawn() {
    glm::vec3 cand;
    do {
        cand = glm::vec3(randf(-10.0f, 10.0f), 2.0f, randf(-10.0f, 10.0f));
    } while (glm::length(circleCollision(cand, MINE_RADIUS, 4, true, true)) > 0.0f);

    return cand;
}
Пример #3
0
void MyGame::processGameplay()
{
	processPlayer();
	map->update(this->player->getPosition(), SCREEN_WIDTH, SCREEN_HEIGHT);
	Vector2 playerPos = { player->getPosition().x, player->getPosition().y };
	for (int i = 0; i < enemies.size(); i++)
	{
		Vector2 hunterPos = { enemies[i]->getPosition().x, enemies[i]->getPosition().y };
		if (player->isAtDamageFrame() && distanceBetweenVectors(playerPos, hunterPos) <= 100)
		{
			if (circleCollision(player->getAttackCollision(), enemies[i]->getDamageCollision()))
			{
				enemies[i]->updateHealth(5);
			}
		}
		if (enemies[i]->getStatus() != DEAD)
		{
			enemies[i]->update(player->getPosition(), this->gameTimer.getCurrentRuntime(), this->mapTexture->getLocation().w, this->mapTexture->getLocation().h, this->obstacles);
			if (enemies[i]->getStatus() == SHOOTING)
			{
				std::vector<Projectile> newBullets = enemies[i]->shootBullets(this->gameTimer.getCurrentRuntime());
				for (int i = 0; i < newBullets.size(); i++)
				{
					activeProjectiles.push_back(newBullets[i]);
				}

			}
		}
		else if (enemies[i]->getStatus() == DEAD)
		{
			std::uniform_int_distribution<int> keyDropChance(1, 1);
			if (keyDropChance(this->randomNumberGen) == 1 && keyDropped == false)
			{
				keyDropped = true;
				keyLocation = { enemies[i]->getPosition().x - map->getDrawLocation().x - 16, enemies[i]->getPosition().y - map->getDrawLocation().y - 16, 32, 32 };
				keyCollision = { enemies[i]->getPosition().x - 16, enemies[i]->getPosition().y - 16, 32, 32 };
				keyDropTimeout = gameTimer.getCurrentRuntime() + 1000;
			}
		}
		for (int i = activeProjectiles.size() - 1; i > 0; i--)
		{
			if (activeProjectiles[i].isActive())
			{
				bool hitSomething = false;
				Vector2 playerPos = { this->player->getPosition().x, this->player->getPosition().y };
				Vector2 bulletPos = { this->activeProjectiles[i].getLocation().x, this->activeProjectiles[i].getLocation().y };
				if (distanceBetweenVectors(playerPos, bulletPos) < 100)
				{
					if (circleCollision(this->player->getDamageCollision(), this->activeProjectiles[i].getCollision()))
					{
						hitSomething = true;
					}
					if (hitSomething)
					{
						player->updateHealth(-5);
					}
				}
				for (int j = 0; j < obstacles.size(); j++)
				{
					if (AABBCollision(this->activeProjectiles[i].getObjCollision(), obstacles[j].getCollisionBox()))
					{
						hitSomething = true;
						break;
					}
				}
				activeProjectiles[i].update(hitSomething);
			}
			if (!activeProjectiles[i].isActive())
			{
				activeProjectiles.erase(activeProjectiles.begin() + i);
			}
		}
	}
}