예제 #1
0
파일: ChmEngine.cpp 프로젝트: Livit/moonpdf
void ChmEngineImpl::Navigate(int dir)
{
    if (!htmlWindow)
        return;
    if (dir < 0) {
        for (; dir < 0 && CanNavigate(dir); dir++)
            htmlWindow->GoBack();
    } else {
        for (; dir > 0 && CanNavigate(dir); dir--)
            htmlWindow->GoForward();
    }
}
예제 #2
0
void EbookController::Navigate(int dir)
{
    if (!CanNavigate(dir))
        return;
    // update the current history entry
    int idx = currPageReparseIdx;
    if (navHistoryIx < navHistory.Count())
        navHistory.At(navHistoryIx) = idx;
    else
        navHistory.Append(idx);
    navHistoryIx += dir;
    idx = navHistory.At(navHistoryIx);
    int pageNo = PageForReparsePoint(pages, idx);
    if (0 == pageNo)
        pageNo = GetMaxPageCount();
    if (pageNo > 0)
        GoToPage(pageNo, false);
}
TArray<FVector> ADonNavigationManagerUnbound::NeighborsAsVectors(FVector Location)
{
	TArray<FVector> neighbors;
	neighbors.Reserve(Volume6DOF + VolumeImplicitDOF);

	/*FVector volumeId = VolumeIdAt(Location);
	int x = volumeId.X, y = volumeId.Y, z = volumeId.Z;*/

	// 6 DOF neighbors (Direct neighbors)
	for (int32 i = 0; i < Volume6DOF; i++)
	{
		/*int32 xN = x + x6DOFCoords[i];
		int32 yN = y + y6DOFCoords[i];
		int32 zN = z + z6DOFCoords[i];

		neighbors.Add(LocationAtId(xN, yN, zN));*/

		FVector neighbor = Location + VoxelSize * FVector(x6DOFCoords[i], y6DOFCoords[i], z6DOFCoords[i]);

		neighbors.Add(neighbor);
	}

	// Implicit:
	
	// X		

	if (CanNavigate(LocationAtId(Location, 1, 0, 0)) && CanNavigate(LocationAtId(Location, 0, 0, 1)))
		neighbors.Add(LocationAtId(Location, 1, 0, 1));

	if (CanNavigate(LocationAtId(Location, -1, 0, 0)) && CanNavigate(LocationAtId(Location, 0, 0, 1)))
		neighbors.Add(LocationAtId(Location, -1, 0, 1));

	if (CanNavigate(LocationAtId(Location, 1, 0, 0)) && CanNavigate(LocationAtId(Location, 0, 0, -1)))
		neighbors.Add(LocationAtId(Location, 1, 0, -1));

	if (CanNavigate(LocationAtId(Location, -1, 0, 0)) && CanNavigate(LocationAtId(Location, 0, 0, -1)))
		neighbors.Add(LocationAtId(Location, -1, 0, -1));

	//Y
	if (CanNavigate(LocationAtId(Location, 0, 1, 0)) && CanNavigate(LocationAtId(Location, 0, 0, 1)))
		neighbors.Add(LocationAtId(Location, 0, 1, 1));

	if (CanNavigate(LocationAtId(Location, 0, -1, 0)) && CanNavigate(LocationAtId(Location, 0, 0, 1)))
		neighbors.Add(LocationAtId(Location, 0, -1, 1));

	if (CanNavigate(LocationAtId(Location, 0, 1, 0)) && CanNavigate(LocationAtId(Location, 0, 0, -1)))
		neighbors.Add(LocationAtId(Location, 0, 1, -1));

	if (CanNavigate(LocationAtId(Location, 0, -1, 0)) && CanNavigate(LocationAtId(Location, 0, 0, -1)))
		neighbors.Add(LocationAtId(Location, 0, -1, -1));

	//Z
	if (CanNavigate(LocationAtId(Location, 1, 0, 0)) && CanNavigate(LocationAtId(Location, 0, 1, 0)))
		neighbors.Add(LocationAtId(Location, 1, 1, 0));

	if (CanNavigate(LocationAtId(Location, -1, 0, 0)) && CanNavigate(LocationAtId(Location, 0, 1, 0)))
		neighbors.Add(LocationAtId(Location, -1, 1, 0));

	if (CanNavigate(LocationAtId(Location, 1, 0, 0)) && CanNavigate(LocationAtId(Location, 0, -1, 0)))
		neighbors.Add(LocationAtId(Location, 1, -1, 0));

	if (CanNavigate(LocationAtId(Location, -1, 0, 0)) && CanNavigate(LocationAtId(Location, 0, -1, 0)))
		neighbors.Add(LocationAtId(Location, -1, -1, 0));

	// Note:- The commented code below is just a different way of performing the same operations done above.
	// Need to remove the commented code at some point, leaving it in there for now as the Unbound solution
	// might needs some time to mature.	

	// X		

	/*if (CanNavigate(LocationAtId(x + 1, y, z)) && CanNavigate(LocationAtId(x, y, z + 1)))
		neighbors.Add(LocationAtId(x + 1, y, z + 1));

	if (CanNavigate(LocationAtId(x - 1, y, z)) && CanNavigate(LocationAtId(x, y, z + 1)))
		neighbors.Add(LocationAtId(x - 1, y, z + 1));

	if (CanNavigate(LocationAtId(x + 1, y, z)) && CanNavigate(LocationAtId(x, y, z - 1)))
		neighbors.Add(LocationAtId(x + 1, y, z - 1));

	if (CanNavigate(LocationAtId(x - 1, y, z)) && CanNavigate(LocationAtId(x, y, z - 1)))
		neighbors.Add(LocationAtId(x - 1, y, z - 1));

	//Y
	if (CanNavigate(LocationAtId(x, y + 1, z)) && CanNavigate(LocationAtId(x, y, z + 1)))
		neighbors.Add(LocationAtId(x, y + 1, z + 1));

	if (CanNavigate(LocationAtId(x, y - 1, z)) && CanNavigate(LocationAtId(x, y, z + 1)))
		neighbors.Add(LocationAtId(x, y - 1, z + 1));

	if (CanNavigate(LocationAtId(x, y + 1, z)) && CanNavigate(LocationAtId(x, y, z - 1)))
		neighbors.Add(LocationAtId(x, y + 1, z - 1));

	if (CanNavigate(LocationAtId(x, y - 1, z)) && CanNavigate(LocationAtId(x, y, z - 1)))
		neighbors.Add(LocationAtId(x, y - 1, z - 1));

	//Z
	if (CanNavigate(LocationAtId(x + 1, y, z)) && CanNavigate(LocationAtId(x, y + 1, z)))
		neighbors.Add(LocationAtId(x + 1, y + 1, z));

	if (CanNavigate(LocationAtId(x - 1, y, z)) && CanNavigate(LocationAtId(x, y + 1, z)))
		neighbors.Add(LocationAtId(x - 1, y + 1, z));

	if (CanNavigate(LocationAtId(x + 1, y, z)) && CanNavigate(LocationAtId(x, y - 1, z)))
		neighbors.Add(LocationAtId(x + 1, y - 1, z));

	if (CanNavigate(LocationAtId(x - 1, y, z)) && CanNavigate(LocationAtId(x, y - 1, z)))
		neighbors.Add(LocationAtId(x - 1, y - 1, z));*/

	return neighbors;
}