Unreal Snake Game 1.0.0
SG_WorldUtils.h
1// Snake Game, Copyright LifeEXE. All Rights Reserved.
2
3#pragma once
4
5#include "SnakeGame/Core/Types.h"
6#include "CoreMinimal.h"
7#include "Components/StaticMeshComponent.h"
8#include "InputAction.h"
9#include "InputMappingContext.h"
10#include "EnhancedActionKeyMapping.h"
11
12namespace SnakeGame
13{
15{
16public:
17 static FVector LinkPositionToVector(const SnakeGame::Position& Position, uint32 CellSize, const SnakeGame::Dim& Dims)
18 {
19 return FVector((Dims.height - 1 - Position.y) * CellSize, Position.x * CellSize, 0.0) + FVector(CellSize * 0.5);
20 }
21
22 static void ScaleMesh(UStaticMeshComponent* Mesh, const FVector& WorldSize)
23 {
24 if (Mesh && Mesh->GetStaticMesh())
25 {
26 const FBox Box = Mesh->GetStaticMesh()->GetBoundingBox();
27 const auto Size = Box.GetSize();
28
29 check(!Size.IsZero());
30 Mesh->SetRelativeScale3D(FVector(WorldSize / Size));
31 }
32 }
33
34 static FText FormatSeconds(float TimeSeconds)
35 {
36 const int32 TotalSeconds = FMath::RoundToInt(TimeSeconds);
37 // const int32 Hours = TotalSeconds / 3600;
38 const int32 Minutes = TotalSeconds / 60; // if you want to display hours: Minutes = (TotalSeconds / 60) % 60;
39 const int32 Seconds = TotalSeconds % 60;
40 const FString FormattedTime = FString::Printf(TEXT("%02i:%02i"), Minutes, Seconds);
41 return FText::FromString(FormattedTime);
42 }
43
44 static FText FormatScore(uint32 Score)
45 {
46 const FString FormattedScore = FString::Printf(TEXT("%02i"), Score);
47 return FText::FromString(FormattedScore);
48 }
49
50 static FString FindActionKeyName(const TObjectPtr<UInputMappingContext>& InputMapping, const TObjectPtr<UInputAction>& Action)
51 {
52 auto* FoundAcionKeyMapping = InputMapping->GetMappings().FindByPredicate([&](const FEnhancedActionKeyMapping& Mapping) //
53 { return Mapping.Action == Action; });
54
55 return FoundAcionKeyMapping ? FoundAcionKeyMapping->Key.GetDisplayName().ToString() : FString{};
56 }
57
58 static void SetUIInput(UWorld* World, bool Enabled)
59 {
60 if (!World) return;
61 if (auto* PC = World->GetFirstPlayerController())
62 {
63 PC->SetShowMouseCursor(Enabled);
64 Enabled ? PC->SetInputMode(FInputModeGameAndUI().SetHideCursorDuringCapture(false)) : PC->SetInputMode(FInputModeGameOnly());
65 }
66 }
67};
68} // namespace SnakeGame
Definition: SG_WorldUtils.h:15
Definition: SnakeGame.Build.cs:6
Definition: Types.h:12
Definition: Types.h:18