MethaneAsteroids
128 строк · 5.5 Кб
1/******************************************************************************
2
3Copyright 2019-2020 Evgeny Gorodetskiy
4
5Licensed under the Apache License, Version 2.0 (the "License"),
6you may not use this file except in compliance with the License.
7You may obtain a copy of the License at
8
9http://www.apache.org/licenses/LICENSE-2.0
10
11Unless required by applicable law or agreed to in writing, software
12distributed under the License is distributed on an "AS IS" BASIS,
13WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14See the License for the specific language governing permissions and
15limitations under the License.
16
17*******************************************************************************
18
19FILE: AsteroidsAppController.cpp
20Asteroids 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
30namespace Methane::Samples
31{
32
33AsteroidsAppController::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{
38META_FUNCTION_TASK();
39}
40
41void AsteroidsAppController::OnKeyboardChanged(pin::Keyboard::Key key,
42pin::Keyboard::KeyState key_state,
43const pin::Keyboard::StateChange& state_change)
44{
45META_FUNCTION_TASK();
46pin::Keyboard::ActionControllerBase<AsteroidsAppAction>::OnKeyboardChanged(key, key_state, state_change);
47}
48
49void AsteroidsAppController::OnKeyboardStateAction(AsteroidsAppAction action)
50{
51META_FUNCTION_TASK();
52const uint32_t asteroids_complexity = m_asteroids_app.GetAsteroidsComplexity();
53switch(action)
54{
55case AsteroidsAppAction::SwitchParallelRendering:
56m_asteroids_app.SetParallelRenderingEnabled(!m_asteroids_app.IsParallelRenderingEnabled());
57break;
58
59case AsteroidsAppAction::SwitchMeshLodsColoring:
60m_asteroids_app.GetAsteroidsArray().SetMeshLodColoringEnabled(!m_asteroids_app.GetAsteroidsArray().IsMeshLodColoringEnabled());
61break;
62
63case AsteroidsAppAction::IncreaseMeshLodComplexity:
64m_asteroids_app.GetAsteroidsArray().SetMinMeshLodScreenSize(m_asteroids_app.GetAsteroidsArray().GetMinMeshLodScreenSize() / 2.F);
65break;
66
67case AsteroidsAppAction::DecreaseMeshLodComplexity:
68m_asteroids_app.GetAsteroidsArray().SetMinMeshLodScreenSize(m_asteroids_app.GetAsteroidsArray().GetMinMeshLodScreenSize() * 2.F);
69break;
70
71case AsteroidsAppAction::IncreaseComplexity:
72m_asteroids_app.SetAsteroidsComplexity(asteroids_complexity + 1);
73break;
74
75case AsteroidsAppAction::DecreaseComplexity:
76m_asteroids_app.SetAsteroidsComplexity(asteroids_complexity > 1 ? asteroids_complexity - 1 : 0);
77break;
78
79case AsteroidsAppAction::SetComplexity0:
80case AsteroidsAppAction::SetComplexity1:
81case AsteroidsAppAction::SetComplexity2:
82case AsteroidsAppAction::SetComplexity3:
83case AsteroidsAppAction::SetComplexity4:
84case AsteroidsAppAction::SetComplexity5:
85case AsteroidsAppAction::SetComplexity6:
86case AsteroidsAppAction::SetComplexity7:
87case AsteroidsAppAction::SetComplexity8:
88case AsteroidsAppAction::SetComplexity9:
89m_asteroids_app.SetAsteroidsComplexity(static_cast<uint32_t>(action) - static_cast<uint32_t>(AsteroidsAppAction::SetComplexity0));
90break;
91
92default:
93META_UNEXPECTED_ARG(action);
94}
95}
96
97std::string AsteroidsAppController::GetKeyboardActionName(AsteroidsAppAction action) const
98{
99META_FUNCTION_TASK();
100switch(action)
101{
102case AsteroidsAppAction::SwitchParallelRendering: return "switch parallel rendering";
103case AsteroidsAppAction::SwitchMeshLodsColoring: return "switch mesh LOD coloring";
104case AsteroidsAppAction::IncreaseMeshLodComplexity: return "increase mesh LOD complexity";
105case AsteroidsAppAction::DecreaseMeshLodComplexity: return "decrease mesh LOD complexity";
106case AsteroidsAppAction::IncreaseComplexity: return "increase scene complexity";
107case AsteroidsAppAction::DecreaseComplexity: return "decrease scene complexity";
108case AsteroidsAppAction::SetComplexity0: return "set 0 scene complexity";
109case AsteroidsAppAction::SetComplexity1: return "set 1 scene complexity";
110case AsteroidsAppAction::SetComplexity2: return "set 2 scene complexity";
111case AsteroidsAppAction::SetComplexity3: return "set 3 scene complexity";
112case AsteroidsAppAction::SetComplexity4: return "set 4 scene complexity";
113case AsteroidsAppAction::SetComplexity5: return "set 5 scene complexity";
114case AsteroidsAppAction::SetComplexity6: return "set 6 scene complexity";
115case AsteroidsAppAction::SetComplexity7: return "set 7 scene complexity";
116case AsteroidsAppAction::SetComplexity8: return "set 8 scene complexity";
117case AsteroidsAppAction::SetComplexity9: return "set 9 scene complexity";
118default: META_UNEXPECTED_ARG_RETURN(action, "");
119}
120}
121
122Platform::Input::IHelpProvider::HelpLines AsteroidsAppController::GetHelp() const
123{
124META_FUNCTION_TASK();
125return GetKeyboardHelp();
126}
127
128} // namespace Methane::Graphics
129