// © 2025 Naked People Team. All Rights Reserved. #include "NakedDesireGameMode.h" #include "Kismet/GameplayStatics.h" #include "NakedDesire/Clothing/ClothingItem.h" #include "NakedDesire/Clothing/ClothingItemInstance.h" #include "UObject/ConstructorHelpers.h" #include "NakedDesire/Interactables/Wardrobe.h" #include "NakedDesire/MissionBuilder/MissionsConfig.h" #include "NakedDesire/MissionBuilder/MissionsManager.h" #include "NakedDesire/Player/NakedDesireCharacter.h" #include "NakedDesire/SaveGame/GlobalSaveGameData.h" #include "NakedDesire/SaveGame/SaveSubsystem.h" void ANakedDesireGameMode::RestartGame() { UGameplayStatics::OpenLevel(this, "City"); } AWardrobe* ANakedDesireGameMode::GetWardrobe() const { return Wardrobe; } void ANakedDesireGameMode::BuyItem(UClothingItemInstance* ClothingItemInstance) { USaveSubsystem* SaveSubsystem = UGameplayStatics::GetGameInstance(GetWorld())->GetSubsystem(); UGlobalSaveGameData* SaveGame = SaveSubsystem->GetCurrentSave(); if (!SaveGame) { UE_LOG(LogTemp, Error, TEXT("ANakedDesireGameMode::BuyItem Couldn't load save game")); return; } if (SaveGame->Money < ClothingItemInstance->GetClothingItem()->BasePrice) return; SaveGame->Money -= ClothingItemInstance->GetClothingItem()->BasePrice; Wardrobe->AddItem(ClothingItemInstance); } void ANakedDesireGameMode::OnHourChanged(int32 Hour) { USaveSubsystem* SaveSubsystem = UGameplayStatics::GetGameInstance(GetWorld())->GetSubsystem(); UGlobalSaveGameData* SaveGame = SaveSubsystem->GetCurrentSave(); if (!SaveGame) { UE_LOG(LogTemp, Error, TEXT("ANakedDesireGameMode::BuyItem Couldn't load save game")); return; } if (Hour == 4) { SaveGame->DaysPassed++; RefreshDailyMissions(); } } void ANakedDesireGameMode::BeginPlay() { Super::BeginPlay(); if (AActor* FoundActor = UGameplayStatics::GetActorOfClass(GetWorld(), AWardrobe::StaticClass())) { if (AWardrobe* WardrobeActor = Cast(FoundActor)) { Wardrobe = WardrobeActor; } } } void ANakedDesireGameMode::RefreshDailyMissions() { const ANakedDesireCharacter* Player = Cast(UGameplayStatics::GetPlayerCharacter(GetWorld(), 0)); if (!Player) return; USaveSubsystem* SaveSubsystem = UGameplayStatics::GetGameInstance(GetWorld())->GetSubsystem(); int ClampedIndex = FMath::Clamp(SaveSubsystem->GetCurrentSave()->DaysPassed , 0, MissionsConfig->DailyMissions.Num() - 1); Player->MissionsManager->RefreshDailyMissions(MissionsConfig->DailyMissions[ClampedIndex].Missions); }