Collision Player::checkForShubbery(const glm::vec3& newPosition)
{
	glm::vec3 noXZ = glm::vec3(m_currentPosition.x, newPosition.y, m_currentPosition.y);

	if (m_collisionMode == CollisionMode::AABB)
	{
		AABBCollider me = AABBCollider::centeredOnPoint(newPosition, 1.2f);
		AABBCollider me2 = AABBCollider::centeredOnPoint(noXZ, 1.2f);

		if (m_chunkPositionsFoliage.size() > 0)
		{
			for (auto& it : m_chunkPositionsFoliage)
			{
				AABBCollider other = AABBCollider::centeredOnPoint(it, 1.2f);
				if (AABBCollider::checkCollision(me, other))
				{
					if (AABBCollider::checkCollision(me2, other))
					{
						std::cout << "almost hittin' them good'ol foliage-xz" << std::endl;
						return Collision::CollidingXZ;
					}
					std::cout << "hittin' them good'ol foliage" << std::endl;
					return Collision::Colliding;
				}
			}
		}
	}
	else
	{
		SphereCollider meAll = SphereCollider(newPosition, 1.0f);
		SphereCollider meNoXZ = SphereCollider(noXZ, 1.0f);

		if (m_chunkPositionsFoliage.size() > 0)
		{
			for (auto& it : m_chunkPositionsFoliage)
			{
				SphereCollider other = SphereCollider(it, 1.0f);
				if (SphereCollider::checkCollision(meAll, other))
				{
					if (SphereCollider::checkCollision(meNoXZ, other))
					{
						std::cout << "almost hittin' them good'ol foliage-xz" << std::endl;
						return Collision::CollidingXZ;
					}
					std::cout << "hittin' them good'ol foliage" << std::endl;
					return Collision::Colliding;
				}
			}
		}
	}

	return Collision::NoCollision;
}
Exemplo n.º 2
0
void CSword::Initialise(){
	m_collisionObject.SetActive(false);
	m_position = { 0.0f, 0.0f, 0.0f };
	m_collisionObject = SphereCollider(2.0f, m_position);
	m_gameObjectType = SWORD;
	p_flagged = false;
	m_alive = false;
	m_timer = 0.0f;
}
Exemplo n.º 3
0
Arquivo: Enemy.cpp Projeto: hdt80/SSS
    void Enemy::tick(float delta) {
        movement(delta);
        if(canFire())
            fire();

        if(getCollider()->collides(SphereCollider(Game::getGame().getPlayer().getPosition(), 1))) {
            // TODO: what side we were hit on
            Connection::getInstance().write("EVN#1;0;");
            destroy();
        }
    }
Exemplo n.º 4
0
void Level00::LoadLights(LegacySceneObject** sceneObjects, mat4f** transforms, SphereColliderComponent** colliders, vec3f* positions, int size)
{
	// Allocate size SceneObjects
	*sceneObjects = reinterpret_cast<LegacySceneObject*>(mSceneAllocator.Allocate(sizeof(LegacySceneObject) * size, alignof(LegacySceneObject), 0));
	*transforms = reinterpret_cast<mat4f*>(mSceneAllocator.Allocate(sizeof(mat4f) * size, alignof(mat4f), 0));
	*colliders = reinterpret_cast<SphereColliderComponent*>(mSceneAllocator.Allocate(sizeof(SphereColliderComponent) * size, alignof(SphereColliderComponent), 0));

	for (int i = 0; i < size; i++)
	{
		(*transforms)[i] = mat4f::translate(positions[i]).transpose();
		(*colliders)[i].mCollider = SphereCollider({ positions[i], 1.0f });

		(*sceneObjects)[i].mWorldMatrix = transforms[i];
		(*sceneObjects)[i].mSphereCollider = colliders[i];
	}
}
Collision Player::checkForSurroundingBlocks(const glm::vec3& newPosition)
{
	glm::vec3 noY = glm::vec3(newPosition.x, m_currentPosition.y, newPosition.z);
	glm::vec3 upOne = glm::vec3(newPosition.x, m_currentPosition.y + 1.0f, newPosition.z);
	if (m_collisionMode == CollisionMode::AABB)
	{
		AABBCollider me = AABBCollider::centeredOnPoint(newPosition, 1.2f);
		AABBCollider me2 = AABBCollider::centeredOnPoint(noY, 1.2f);
		AABBCollider me3 = AABBCollider::centeredOnPoint(upOne, 1.2f);

		if (m_chunkPositions.size() > 0)
		{
			for (auto& it : m_chunkPositions)
			{
				AABBCollider other = AABBCollider::centeredOnPoint(it, 1.2f);
				if (AABBCollider::checkCollision(me, other))
				{
					//ok you collided... is there a block above you?
					bool blockCrawl = false;
					for (auto& it2 : m_chunkPositions)
					{
						if (it2.x == it.x && it2.z == it.z && it2.y != it.y)
						{
							blockCrawl = true;
							break;// once is enough
						}
					}

					if (AABBCollider::checkCollision(me2, other))
					{
						if (AABBCollider::checkCollision(me3, other))
							return Collision::Colliding;
						else if(!blockCrawl)
							return Collision::NoCollisionUpOne;
						else
							return Collision::Colliding;
					}
					else
						return Collision::CollidingNotY;
				}
			}
		}
	}
	else
	{
		SphereCollider meAll = SphereCollider(newPosition, 1.0f);
		SphereCollider meNoY = SphereCollider(noY, 1.0f);
		SphereCollider meUpOne = SphereCollider(upOne, 1.0f);
		if (m_chunkPositions.size() > 0)
		{
			for (auto& it : m_chunkPositions)
			{
				SphereCollider other = SphereCollider(it, 1.0f);
				if (SphereCollider::checkCollision(meAll, other))
				{
					//ok you collided... is there a block above you?
					bool blockCrawl = false;
					for (auto& it2 : m_chunkPositions)
					{
						if (it2.x == it.x && it2.z == it.z && it2.y != it.y)
						{
							blockCrawl = true;
							break;// once is enough
						}
					}

					if (SphereCollider::checkCollision(meNoY, other))
					{
						if (SphereCollider::checkCollision(meUpOne, other))
							return Collision::Colliding;
						else if (!blockCrawl)
							return Collision::NoCollisionUpOne;
						else
							return Collision::Colliding;
					}
					else
						return Collision::CollidingNotY;
				}
			}
		}
	}

	return Collision::NoCollision;
}