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; } }
void APlayerOvi::Rotate(const FVector& rotation) { FTransform transform = GetTransform(); FQuat q = transform.GetRotation() * FQuat::MakeFromEuler(rotation); transform.SetRotation(q); SetActorTransform(transform); }