5#include "CoreMinimal.h"
6#include "GameFramework/GameUserSettings.h"
7#include "SnakeGame/Core/Types.h"
8#include "SG_GameUserSettings.generated.h"
11enum class EGameSpeed : uint8
19enum class EGridSize : uint8
36 TArray<FString> GameSpeedOptions()
const {
return OptionNames(GameSpeeds); }
37 FString CurrentGameSpeedOption()
const {
return CurrentSpeed.Name; }
39 TArray<FString> GridSizeOptions()
const {
return OptionNames(GridSizes); }
40 FString CurrentGridSizeOption()
const {
return CurrentGridSize.Name; }
42 void SaveSnakeSettings(EGameSpeed GameSpeed, EGridSize GridSize);
44 EGameSpeed GameSpeedByName(
const FString& Name)
const {
return FindOptionByNameOrDefault(GameSpeeds, Name, EGameSpeed::Snake); }
45 EGridSize GridSizeByName(
const FString& Name)
const {
return FindOptionByNameOrDefault(GridSizes, Name, EGridSize::Size_50x15); }
47 float GameSpeed()
const {
return CurrentSpeed.Value; }
56 const TMap<EGameSpeed, FSpeedData> GameSpeeds
58 {EGameSpeed::Worm, {
"Worm", 0.3f}},
59 {EGameSpeed::Snake, {
"Snake", 0.1f}},
60 {EGameSpeed::Python, {
"Python", 0.05f}},
68 const TMap<EGridSize, FGridData> GridSizes
75 FSpeedData CurrentSpeed{GameSpeeds[EGameSpeed::Snake]};
76 FGridData CurrentGridSize{GridSizes[EGridSize::Size_50x15]};
78 template <
typename MapType,
typename EnumType>
79 EnumType FindOptionByNameOrDefault(
const MapType& Map,
const FString& Name, EnumType Default)
const
81 const auto* Founded = Algo::FindByPredicate(Map, [Name](
const auto& Pair) {
return Pair.Value.Name.Equals(Name); });
82 return Founded ? Founded->Key : Default;
85 template <
typename MapType>
86 TArray<FString> OptionNames(
const MapType& Map)
const
88 TArray<FString> Names;
89 Algo::Transform(Map, Names, [](
const auto& Pair) {
return Pair.Value.Name; });
Definition: SG_GameUserSettings.h:28
Definition: SG_GameUserSettings.h:64
Definition: SG_GameUserSettings.h:52