コード例 #1
0
void ACEController::Tick(float DeltaSeconds)
{
	// Отслеживаем хит под мышкой
	FHitResult Hit;
	GetHitResultUnderCursorByChannel(ETraceTypeQuery::TraceTypeQuery_MAX, true, Hit);
	
	// Если какой то модуль выделен - то снимаем выделение (SetRenderCustomDepth)
	if (SelectedActorPtr)
	{
		TArray<UStaticMeshComponent*> comps;
		SelectedActorPtr->GetComponents(comps);
		for (auto comp : comps){ comp->SetRenderCustomDepth(false); }
		SelectedActorPtr = NULL;
	}

	// Если включен режим постановки модуля (установлен курсор)
	if (Cursor)
	{
		bCursorValid = false;
		Cursor->SetActorHiddenInGame(true);
		// И мы наведены мышкой на один из модулей которые ловят хит
		if (Hit.Component != NULL)
		{	
			FVector loc = Hit.Component->GetComponentLocation();
			
			// Находим вариант установки модуля
			CursorVariant = Cursor->FindNextValidVariant(CursorVariant, loc, Hit.Location);

			// Если вариант не найден
			if (CursorVariant == -1)
			{
				// Выключаем выбор и убираем модель курсора
				bCursorValid = false;
				CursorVariant = 0;
				Cursor->SetActorHiddenInGame(true);
			}
			else
			{
				// Включаем выбор и отображаем модель курсора
				bCursorValid = true;
				Cursor->SetActorHiddenInGame(false);
			}
		}
	}
	else
	{ // Режим удаления
		// Если мышка на модуле ловящем хит
		if (Hit.Actor != NULL)
		{
			// Выделяем его (SetRenderCustomDepth)
			SelectedActorPtr = Hit.Actor.Get(false);
			TArray<UStaticMeshComponent*> comps;
			SelectedActorPtr->GetComponents(comps);
			for (auto comp : comps){ comp->SetRenderCustomDepth(true); }
		}
	}
}
コード例 #2
0
AMapTile * AMapPlayerController::GetTileUnderCursor()
{
  AMapTile * tile = NULL;
  FHitResult TraceResult(ForceInit);
  GetHitResultUnderCursorByChannel(UEngineTypes::ConvertToTraceType(COLLISION_MAP_TILE), false, TraceResult);
  if (TraceResult.GetActor() != NULL) {
    if (Cast<AMapTile>(TraceResult.GetActor())) {
      tile = Cast<AMapTile>(TraceResult.GetActor());
    }
    if (Cast<AMapBasicEntity>(TraceResult.GetActor())) {
      tile = Cast<AMapBasicEntity>(TraceResult.GetActor())->AssignedTiles[0];
    }
  }
  return tile;
}
コード例 #3
0
TArray<AMapBasicEntity*> AMapPlayerController::GetEntitiesInTrace()
{
  TArray<AMapBasicEntity*> R;
  FHitResult TraceResult(ForceInit);
  GetHitResultUnderCursorByChannel(UEngineTypes::ConvertToTraceType(ECC_Pawn), false, TraceResult);
  if (TraceResult.GetActor() != nullptr)
  {
    if (Cast<AMapBasicEntity>(TraceResult.GetActor()) != NULL) {
      R.Add(Cast<AMapBasicEntity>(TraceResult.GetActor()));
    }
    if (Cast<AMapTile>(TraceResult.GetActor())) {
      R.Append(Cast<AMapTile>(TraceResult.GetActor())->AssignedEntity);
    }
  }
  return R;
}