Unreal Snake Game 1.0.0
SG_GameMode.h
1// Snake Game, Copyright LifeEXE. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "GameFramework/GameModeBase.h"
7#include "SnakeGame/Core/Game.h"
8#include "Engine/DataTable.h"
9#include "InputActionValue.h"
10#include "SG_GameMode.generated.h"
11
12class ASG_Grid;
13class AExponentialHeightFog;
14class ASG_Snake;
15class UInputAction;
16class UInputMappingContext;
17class ASG_Food;
18class ASG_HUD;
19
20UCLASS()
21class SNAKEGAME_API ASG_GameMode : public AGameModeBase
22{
23 GENERATED_BODY()
24
25public:
27 virtual void StartPlay() override;
28 virtual void Tick(float DeltaSeconds) override;
29
30protected:
31 UPROPERTY(EditDefaultsOnly, Category = "Settings")
32 bool bOverrideUserSettings{false};
33
34 UPROPERTY(EditDefaultsOnly, meta = (ClampMin = "10", ClampMax = "100", EditCondition = "bOverrideUserSettings", EditConditionHides),
35 Category = "Settings")
36 FUintPoint GridDims{10, 10};
37
38 UPROPERTY(EditDefaultsOnly, meta = (ClampMin = "10", ClampMax = "100", EditCondition = "bOverrideUserSettings", EditConditionHides),
39 Category = "Settings")
40 uint32 CellSize{10};
41
42 UPROPERTY(EditDefaultsOnly, meta = (ClampMin = "4", ClampMax = "10", EditCondition = "bOverrideUserSettings", EditConditionHides),
43 Category = "Settings")
44 uint32 SnakeDefaultSize{5};
45
46 UPROPERTY(EditDefaultsOnly, meta = (ClampMin = "0.01", ClampMax = "10", EditCondition = "bOverrideUserSettings", EditConditionHides),
47 Category = "Settings")
48 float GameSpeed{1.0f};
49
50 UPROPERTY(EditDefaultsOnly, Category = "Design")
51 TSubclassOf<ASG_Grid> GridVisualClass;
52
53 UPROPERTY(EditDefaultsOnly, Category = "Design")
54 TSubclassOf<ASG_Snake> SnakeVisualClass;
55
56 UPROPERTY(EditDefaultsOnly, Category = "Design")
57 TSubclassOf<ASG_Food> FoodVisualClass;
58
59 UPROPERTY(EditDefaultsOnly, Category = "Design")
60 TObjectPtr<UDataTable> ColorsTable;
61
62 UPROPERTY(EditDefaultsOnly, Category = "SnakeInput")
63 TObjectPtr<UInputAction> MoveForwardInputAction;
64
65 UPROPERTY(EditDefaultsOnly, Category = "SnakeInput")
66 TObjectPtr<UInputAction> MoveRightInputAction;
67
68 UPROPERTY(EditDefaultsOnly, Category = "SnakeInput")
69 TObjectPtr<UInputAction> ResetGameInputAction;
70
71 UPROPERTY(EditDefaultsOnly, Category = "SnakeInput")
72 TObjectPtr<UInputMappingContext> InputMapping;
73
74private:
75 UPROPERTY()
76 TObjectPtr<ASG_Grid> GridVisual;
77
78 UPROPERTY()
79 TObjectPtr<ASG_Snake> SnakeVisual;
80
81 UPROPERTY()
82 TObjectPtr<ASG_Food> FoodVisual;
83
84 UPROPERTY()
85 TObjectPtr<AExponentialHeightFog> Fog;
86
87 UPROPERTY()
88 TObjectPtr<ASG_HUD> HUD;
89
90 UFUNCTION(Exec, Category = "Console command")
91 void NextColor();
92
93private:
94 TSharedPtr<SnakeGame::Game> Game;
95 uint32 ColorTableIndex{0};
96 SnakeGame::Input SnakeInput{SnakeGame::Input::Default};
97
98 SnakeGame::Settings MakeSettings() const;
99
100 void FindFog();
101
106 void UpdateColors();
107
108 void SetupInput();
109 void OnMoveForward(const FInputActionValue& Value);
110 void OnMoveRight(const FInputActionValue& Value);
111 void OnGameReset(const FInputActionValue& Value);
112
113 void SubscribeOnGameEvents();
114};
Definition: SG_Food.h:21
Definition: SG_GameMode.h:22
Definition: SG_Grid.h:20
Definition: SG_HUD.h:27
Definition: SG_Snake.h:21
Definition: Types.h:39
Definition: Types.h:60