void BodyInst::SetAngularVelocity(float vx, float vy, float vz, myBody *b) { b->angularVelocity[0] = vx; b->angularVelocity[1] = vy; b->angularVelocity[2] = vz; CalculateOrientation(b); }
void APlayerOvi::Tick(float DeltaSeconds){ //get own deltaTime DeltaSeconds = TimeManager::Instance()->GetDeltaTime(DeltaSeconds); Super::Tick(DeltaSeconds); //initilize raycast query param //Initialize TraceParam if (!m_isValid) { //Get ATowardsTheLightGameMode if (!m_gameMode) m_gameMode = Cast<ATowardsTheLightGameMode>(UGameplayStatics::GetGameMode(this)); m_gameMode->FindActualPlayer(); static FName FireTraceIdent = FName(TEXT("Platform")); FCollisionQueryParams TraceParams(FireTraceIdent, true, this); TraceParams.bTraceAsyncScene = true; TraceParams.bFindInitialOverlaps = false; TraceParams.bTraceComplex = true; TArray<AActor *> ignorados; for (TActorIterator<ATappable > ActorItr(GetWorld()); ActorItr; ++ActorItr) { if (ActorItr->ActorHasTag("Tappable")) ignorados.Add(*ActorItr); } for (TActorIterator<ACheckPoint > checkItr(GetWorld()); checkItr; ++checkItr) ignorados.Add(*checkItr); for (TActorIterator<ATutorial > tutItr(GetWorld()); tutItr; ++tutItr) ignorados.Add(*tutItr); if (ignorados.Num() > 0) TraceParams.AddIgnoredActors(ignorados); m_TraceParams = TraceParams; m_isValid = true; } //pause animations if is game paused Mesh->bPauseAnims = isPlayerPaused(); //first tick initialize viewport properties, dont work at begin play if (m_limitViewPort0 == 0 && m_limitViewPort1 == 0) { m_limitViewPort0 = GEngine->GameViewport->Viewport->GetSizeXY().X * 0.45; m_limitViewPort1 = GEngine->GameViewport->Viewport->GetSizeXY().X * 0.55; } //update elapsed time if push button animation is running if (m_isPushingButton) { m_elapsedButton += DeltaSeconds; if (m_elapsedButton >= 1.0f) { m_elapsedButton = 0.0f; m_isPushingButton = false; } } if (m_isPickingPortal) { m_elapsedPortal += DeltaSeconds; float t = 1.0f - (m_elapsedPortal / 1.2f); Mesh->SetRelativeScale3D(FVector(t, t, t)); if (m_elapsedPortal >= 0.6f) { m_elapsedPortal = 0.0f; m_isPickingPortal = false; Mesh->SetRelativeScale3D(FVector(1, 1, 1)); } } if (m_isPickingAltar) { m_elapsedAltar += DeltaSeconds; if (m_elapsedAltar >= 0.7f) { m_elapsedAltar = 0.0f; m_isPickingAltar = false; } } //get last position for this frame. m_lastPosition = GetActorLocation(); float value = 0.0f; if (isInputEnabled()) value = UpdateState(); else{ value = 0; m_doJump = false; } DoMovement(DeltaSeconds, value); if (!m_isPickingPortal) { DoJump(DeltaSeconds); CalculateGravity(DeltaSeconds); } CheckCollision(); CalculateOrientation(); }