Toast Engine
Loading...
Searching...
No Matches
fracture_pattern.hpp
1
7
8#pragma once
9#include <array>
10#include <cstdint>
11#include <optional>
12#include <string_view>
13
14namespace physics {
15
16enum class FracturePattern : uint8_t {
17 brittle,
18 granular,
19 fibrous,
20 ductile,
21};
22
23inline constexpr std::array<std::string_view, 4> k_fracture_pattern_names {"brittle", "granular", "fibrous", "ductile"};
24
25[[nodiscard]]
26constexpr auto fracturePatternName(FracturePattern pattern) -> std::string_view {
27 auto index = static_cast<size_t>(pattern);
28 return index < k_fracture_pattern_names.size() ? k_fracture_pattern_names[index] : std::string_view {};
29}
30
31[[nodiscard]]
32constexpr auto fracturePatternFromName(std::string_view name) -> std::optional<FracturePattern> {
33 for (size_t i = 0; i < k_fracture_pattern_names.size(); ++i) {
34 if (k_fracture_pattern_names[i] == name) {
35 return static_cast<FracturePattern>(i);
36 }
37 }
38 return std::nullopt;
39}
40
42[[nodiscard]]
43constexpr auto shatters(FracturePattern pattern) -> bool {
44 return pattern != FracturePattern::ductile;
45}
46
47}