예제 #1
0
파일: BlockInfo.cpp 프로젝트: bpeake13/Dim
void BlockInfo::GenerateHallway(FRandomStream* randStream)
{
	bool canRemove = IsRemoveable();

	bIsSolid = false;

	if (!canRemove)
		return;

	bool needsGeneration = true;

	do
	{
		//get a random direction
		int direction = randStream->RandRange(0, 3);
		EGridDirection::Type gridDirection;

		switch (direction)
		{
		case 0:
			gridDirection = EGridDirection::GD_UP;
			break;
		case 1:
			gridDirection = EGridDirection::GD_RIGHT;
			break;
		case 2:
			gridDirection = EGridDirection::GD_DOWN;
			break;
		case 3:
			gridDirection = EGridDirection::GD_LEFT;
			break
		}

		BlockInfo* randBlock = GetAdjacent(gridDirection);//get a block in a random direction

		if (!randBlock || randBlock->IsEdge())//check if that block is removeable
		{
			continue;
		}

		randBlock->GenerateHallway(randStream);

		needsGeneration = false;
	} while (needsGeneration);
}
예제 #2
0
파일: BlockInfo.cpp 프로젝트: bpeake13/Dim
void BlockInfo::Generate(FRandomStream* randStream)
{
	bIsSolid = false;

	bool needsGeneration = true;
	int genTryCount = 0;

	do 
	{
		//get a random direction
		int direction = randStream->RandRange(0, 3);
		EGridDirection::Type gridDirection;

		switch (direction)
		{
		case 0:
			gridDirection = EGridDirection::GD_UP;
			break;
		case 1:
			gridDirection = EGridDirection::GD_RIGHT;
			break;
		case 2:
			gridDirection = EGridDirection::GD_DOWN;
			break;
		case 3:
			gridDirection = EGridDirection::GD_LEFT;
			break
		}

		BlockInfo* randBlock = GetAdjacent(gridDirection);//get a block in a random direction

		if (!randBlock || !randBlock->IsRemoveable() || randBlock->IsEdge())//check if that block is removeable
		{
			genTryCount++;
			continue;
		}

		randBlock->Generate(randStream);

		genTryCount++;
	} 
	while (needsGeneration && genTryCount < 4);
}