MethaneAsteroids

Форк
0
/
AsteroidsAppController.cpp 
128 строк · 5.5 Кб
1
/******************************************************************************
2

3
Copyright 2019-2020 Evgeny Gorodetskiy
4

5
Licensed under the Apache License, Version 2.0 (the "License"),
6
you may not use this file except in compliance with the License.
7
You may obtain a copy of the License at
8

9
    http://www.apache.org/licenses/LICENSE-2.0
10

11
Unless required by applicable law or agreed to in writing, software
12
distributed under the License is distributed on an "AS IS" BASIS,
13
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
See the License for the specific language governing permissions and
15
limitations under the License.
16

17
*******************************************************************************
18

19
FILE: AsteroidsAppController.cpp
20
Asteroids application controller.
21

22
******************************************************************************/
23

24
#include "AsteroidsAppController.h"
25
#include "AsteroidsApp.h"
26

27
#include <Methane/Instrumentation.h>
28
#include <Methane/Checks.hpp>
29

30
namespace Methane::Samples
31
{
32

33
AsteroidsAppController::AsteroidsAppController(AsteroidsApp& asteroids_app, const ActionByKeyboardState& action_by_keyboard_state)
34
    : Controller("ASTEROIDS SETTINGS")
35
    , pin::Keyboard::ActionControllerBase<AsteroidsAppAction>(action_by_keyboard_state, {})
36
    , m_asteroids_app(asteroids_app)
37
{
38
    META_FUNCTION_TASK();
39
}
40

41
void AsteroidsAppController::OnKeyboardChanged(pin::Keyboard::Key key,
42
                                               pin::Keyboard::KeyState key_state,
43
                                               const pin::Keyboard::StateChange& state_change)
44
{
45
    META_FUNCTION_TASK();
46
    pin::Keyboard::ActionControllerBase<AsteroidsAppAction>::OnKeyboardChanged(key, key_state, state_change);
47
}
48

49
void AsteroidsAppController::OnKeyboardStateAction(AsteroidsAppAction action)
50
{
51
    META_FUNCTION_TASK();
52
    const uint32_t asteroids_complexity = m_asteroids_app.GetAsteroidsComplexity();
53
    switch(action)
54
    {
55
    case AsteroidsAppAction::SwitchParallelRendering:
56
        m_asteroids_app.SetParallelRenderingEnabled(!m_asteroids_app.IsParallelRenderingEnabled());
57
        break;
58

59
    case AsteroidsAppAction::SwitchMeshLodsColoring:
60
        m_asteroids_app.GetAsteroidsArray().SetMeshLodColoringEnabled(!m_asteroids_app.GetAsteroidsArray().IsMeshLodColoringEnabled());
61
        break;
62

63
    case AsteroidsAppAction::IncreaseMeshLodComplexity:
64
        m_asteroids_app.GetAsteroidsArray().SetMinMeshLodScreenSize(m_asteroids_app.GetAsteroidsArray().GetMinMeshLodScreenSize() / 2.F);
65
        break;
66

67
    case AsteroidsAppAction::DecreaseMeshLodComplexity:
68
        m_asteroids_app.GetAsteroidsArray().SetMinMeshLodScreenSize(m_asteroids_app.GetAsteroidsArray().GetMinMeshLodScreenSize() * 2.F);
69
        break;
70

71
    case AsteroidsAppAction::IncreaseComplexity:
72
        m_asteroids_app.SetAsteroidsComplexity(asteroids_complexity + 1);
73
        break;
74

75
    case AsteroidsAppAction::DecreaseComplexity:
76
        m_asteroids_app.SetAsteroidsComplexity(asteroids_complexity > 1 ? asteroids_complexity - 1 : 0);
77
        break;
78

79
    case AsteroidsAppAction::SetComplexity0:
80
    case AsteroidsAppAction::SetComplexity1:
81
    case AsteroidsAppAction::SetComplexity2:
82
    case AsteroidsAppAction::SetComplexity3:
83
    case AsteroidsAppAction::SetComplexity4:
84
    case AsteroidsAppAction::SetComplexity5:
85
    case AsteroidsAppAction::SetComplexity6:
86
    case AsteroidsAppAction::SetComplexity7:
87
    case AsteroidsAppAction::SetComplexity8:
88
    case AsteroidsAppAction::SetComplexity9:
89
        m_asteroids_app.SetAsteroidsComplexity(static_cast<uint32_t>(action) - static_cast<uint32_t>(AsteroidsAppAction::SetComplexity0));
90
        break;
91
        
92
    default:
93
        META_UNEXPECTED_ARG(action);
94
    }
95
}
96

97
std::string AsteroidsAppController::GetKeyboardActionName(AsteroidsAppAction action) const
98
{
99
    META_FUNCTION_TASK();
100
    switch(action)
101
    {
102
    case AsteroidsAppAction::SwitchParallelRendering:   return "switch parallel rendering";
103
    case AsteroidsAppAction::SwitchMeshLodsColoring:    return "switch mesh LOD coloring";
104
    case AsteroidsAppAction::IncreaseMeshLodComplexity: return "increase mesh LOD complexity";
105
    case AsteroidsAppAction::DecreaseMeshLodComplexity: return "decrease mesh LOD complexity";
106
    case AsteroidsAppAction::IncreaseComplexity:        return "increase scene complexity";
107
    case AsteroidsAppAction::DecreaseComplexity:        return "decrease scene complexity";
108
    case AsteroidsAppAction::SetComplexity0:            return "set 0 scene complexity";
109
    case AsteroidsAppAction::SetComplexity1:            return "set 1 scene complexity";
110
    case AsteroidsAppAction::SetComplexity2:            return "set 2 scene complexity";
111
    case AsteroidsAppAction::SetComplexity3:            return "set 3 scene complexity";
112
    case AsteroidsAppAction::SetComplexity4:            return "set 4 scene complexity";
113
    case AsteroidsAppAction::SetComplexity5:            return "set 5 scene complexity";
114
    case AsteroidsAppAction::SetComplexity6:            return "set 6 scene complexity";
115
    case AsteroidsAppAction::SetComplexity7:            return "set 7 scene complexity";
116
    case AsteroidsAppAction::SetComplexity8:            return "set 8 scene complexity";
117
    case AsteroidsAppAction::SetComplexity9:            return "set 9 scene complexity";
118
    default:                                            META_UNEXPECTED_ARG_RETURN(action, "");
119
    }
120
}
121

122
Platform::Input::IHelpProvider::HelpLines AsteroidsAppController::GetHelp() const
123
{
124
    META_FUNCTION_TASK();
125
    return GetKeyboardHelp();
126
}
127

128
} // namespace Methane::Graphics
129

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.