Пример #1
0
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);
}
Пример #2
0
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();
}