void ABrainNormalInteractiveObject::Load()
{
	if (!GetName().IsEmpty())
	{
		if (UBrainGameInstance* gameInstance = Cast<UBrainGameInstance>(GetGameInstance()))
		{
			if (UBrainSaveManager* saveManager = gameInstance->GetSaveManager())
			{
				FBrainNIOSaveData savedData = saveManager->GetDataFromSave<FBrainNIOSaveData>(GetName());
				if (savedData._loadFromfile)
				{
					// Movement Counters and Energy
					_countRotation = savedData._countRotation;
					_countTranslation = savedData._countTranslation;
					_countScale = savedData._countScale;
					_countShear = savedData._countShear;

					// Load Translation
					SetActorLocation(savedData._location);
					_currentTranslation = savedData._location;
					_targetTranslation = savedData._location;

					SetActorRotation(savedData._rotation);
					_currentRotation = savedData._rotation;
					_targetRotation = savedData._rotation;

					SetActorScale3D(savedData._scale);
					_currentScale = savedData._scale;
					_targetScale = savedData._scale;

					_cachedTransform = GetTransform();
					SetActorTransform(FTransform(Shear(savedData._shearFirstAxis, savedData._shearSecondAxis)) * _cachedTransform);
				}
			}
		}
	}
}
void AMobileEnemy::doMovement(float DeltaSeconds){
  switch (m_state){
  case INITIAL_DELAY:
    if (m_timer < InitialDelay) {
      m_timer += DeltaSeconds;
      m_isMoving = false;
    }
    else{
      m_timer = 0;
      m_state = TO_RIGHT;
    }
    break;
  case TO_RIGHT:
  {
    m_isMoving = true;
    float dist = Speed * DeltaSeconds;
    float difDistance = m_totalDistance - m_currentDistance;
    if (difDistance < dist)
      dist = difDistance;

    if (m_currentDistance < m_totalDistance){
      m_currentDistance += dist;
      FVector location = m_nextPosition;
      location += dist * m_rightVector;
      //SetActorLocation(location);
      m_nextPosition = location;
      CheckCollision();
    }
    else{
      m_state = RIGHT_DELAY;
      m_currentDistance = 0;
    }
  }
    break;
  case TO_LEFT:
  {
    m_isMoving = true;
    float dist = Speed * DeltaSeconds;
    float difDistance = m_totalDistance - m_currentDistance;
    if (difDistance < dist)
      dist = difDistance;

    if (m_currentDistance < m_totalDistance){
      m_currentDistance += dist;
      FVector location = m_nextPosition;
      location += dist * -m_rightVector;
      m_nextPosition = location;
      //SetActorLocation(location);
      CheckCollision();
    }
    else{
      m_state = LEFT_DELAY;
      m_currentDistance = 0;
    }
  }
    break;
  case RIGHT_DELAY:
    m_isMoving = false;
    if (m_timer < RightDelay)
      m_timer += DeltaSeconds;
    else{
      m_timer = 0;
      m_state = TO_LEFT;
      if (HasRotation){
        FTransform transform = GetTransform();
        FQuat quat = transform.GetRotation() * FQuat::MakeFromEuler(FVector(0, 0, 180));
        transform.SetRotation(quat);
        SetActorTransform(transform);
      }
    }
    break;
  case LEFT_DELAY:
    m_isMoving = false;
    if (m_timer < LeftDelay)
      m_timer += DeltaSeconds;
    else{
      m_timer = 0;
      m_state = TO_RIGHT;
      if (HasRotation){
        FTransform transform = GetTransform();
        FQuat quat = transform.GetRotation() * FQuat::MakeFromEuler(FVector(0, 0, 180));
        transform.SetRotation(quat);
        SetActorTransform(transform);
      }
    }
    break;
  }
}
Example #3
0
void APlayerOvi::Rotate(const FVector& rotation) {
  FTransform transform = GetTransform();
  FQuat q = transform.GetRotation() * FQuat::MakeFromEuler(rotation);
  transform.SetRotation(q);
  SetActorTransform(transform);
}