Polyphase Game Engine
Loading...
Searching...
No Matches
InputPromptMap.h
Go to the documentation of this file.
1#pragma once
2
3#include "Asset.h"
4#include "AssetRef.h"
5#include "EngineTypes.h"
6#include "Input/InputTypes.h"
7
8#include <string>
9#include <vector>
10#include <unordered_map>
11
12class Texture;
13class Font;
14
15enum class InputPromptKind : uint8_t
16{
17 Sprite,
18 Glyph,
19 Text,
20
21 Count
22};
23
25{
26 // Platform::Count is the "Any" sentinel — entry applies to every platform
27 // unless overridden by a more specific row.
29
30 // For Keyboard/Mouse paths gamepad type is ignored. For Gamepad paths,
31 // GamepadType::Count is the "Any controller" sentinel.
33
34 // Canonical key from MakeInputPath() — e.g. "Keyboard/F", "Gamepad.Button/A".
35 std::string mInputPath;
36
38
39 TextureRef mSprite; // valid when mKind == Sprite
40 FontRef mGlyphFont; // valid when mKind == Glyph
41 uint32_t mGlyphCodepoint = 0; // valid when mKind == Glyph
42
43 // Always populated — used directly when mKind == Text, and as the final
44 // fallback when Sprite/Glyph resolution fails.
45 std::string mFallbackText;
46};
47
49{
50public:
51
53
55 virtual ~InputPromptMap();
56
57 virtual void LoadStream(Stream& stream, Platform platform) override;
58 virtual void SaveStream(Stream& stream, Platform platform) override;
59 virtual void Create() override;
60 virtual void Destroy() override;
61 virtual void GatherProperties(std::vector<Property>& outProps) override;
62
63 virtual glm::vec4 GetTypeColor() override;
64 virtual const char* GetTypeName() override;
65
66 std::vector<InputPromptEntry>& GetEntries();
67 const std::vector<InputPromptEntry>& GetEntries() const;
68
69 // Best-match lookup. Returns nullptr when no entry covers the request.
70 // Match priority: exact (platform, deviceType, path) > path+anyDevice >
71 // path+anyPlatform > path-only (any/any).
72 const InputPromptEntry* Find(Platform platform,
73 GamepadType deviceType,
74 const std::string& inputPath) const;
75
76 // Rebuild the lookup index from mEntries. Call after editor mutations.
77 void RebuildIndex();
78
79private:
80
81 static bool HandlePropChange(Datum* datum, uint32_t index, const void* newValue);
82
83 std::vector<InputPromptEntry> mEntries;
84
85 // Cached fast-path index — same data shape used at Find time.
86 // Key: "<platform>|<gamepadType>|<inputPath>".
87 std::unordered_map<std::string, size_t> mIndex;
88 bool mIndexDirty = true;
89};
Platform
Definition EngineTypes.h:31
InputPromptKind
Definition InputPromptMap.h:16
GamepadType
Definition InputTypes.h:27
#define POLYPHASE_API
Definition PolyphaseAPI.h:31
Definition AssetRef.h:18
Definition Asset.h:119
virtual void Create()
Definition Asset.cpp:77
virtual void SaveStream(Stream &stream, Platform platform)
Definition Asset.cpp:284
virtual glm::vec4 GetTypeColor()
Definition Asset.cpp:302
virtual const char * GetTypeName()
Definition Asset.cpp:307
virtual void GatherProperties(std::vector< Property > &outProps) override
Definition Asset.cpp:297
virtual void LoadStream(Stream &stream, Platform platform)
Definition Asset.cpp:270
virtual void Destroy()
Definition Asset.cpp:92
Definition Datum.h:169
Definition Font.h:20
Definition InputPromptMap.h:49
DECLARE_ASSET(InputPromptMap, Asset)
Definition Stream.h:21
Definition Texture.h:10
Definition InputPromptMap.h:25
FontRef mGlyphFont
Definition InputPromptMap.h:40
GamepadType mGamepadType
Definition InputPromptMap.h:32
Platform mPlatform
Definition InputPromptMap.h:28
TextureRef mSprite
Definition InputPromptMap.h:39
InputPromptKind mKind
Definition InputPromptMap.h:37
std::string mInputPath
Definition InputPromptMap.h:35
uint32_t mGlyphCodepoint
Definition InputPromptMap.h:41
std::string mFallbackText
Definition InputPromptMap.h:45