载入中...
搜索中...
未找到
PixelMaterial.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
5#include "common/Result.h"
6
7#include <cstdint>
8#include <span>
9#include <string>
10#include <string_view>
11#include <vector>
12
13namespace eve::pixelworld {
14
16enum class MaterialId : std::uint16_t {
17 Air = 0,
18 Stone,
19 Sand,
20 Water,
21 Oil,
22 Fire,
23 Steam,
24 Wood,
25 Ice,
26 Lava,
27 Smoke,
29 Acid,
30};
31
33enum class MaterialState : std::uint8_t { Empty, Solid, Powder, Liquid, Gas, Energy };
34
38 std::string name = "air";
40 std::uint16_t density = 0;
41 std::uint8_t viscosity = 0;
42 std::uint8_t thermalConductivity = 0;
43 std::uint16_t heatCapacity = 1;
44 std::int16_t ignitionTemperature = 32767;
45 std::int16_t meltingTemperature = 32767;
46 std::int16_t boilingTemperature = 32767;
47 std::uint16_t defaultLifetime = 0;
48 bool flammable = false;
49 std::int16_t defaultTemperature = 20;
50 std::uint16_t blastResistance = 100;
52 std::uint32_t displayRgba = 0xFF00FFFFU;
54 std::vector<std::string> tags;
55};
56
58enum class TemperatureDirection : std::uint8_t { AtOrBelow, AtOrAbove };
59
70
82
85public:
87 [[nodiscard]] static eve::Result<MaterialCatalog> create(
88 std::vector<MaterialDefinition> definitions,
89 std::vector<MaterialReactionRule> reactions = {},
90 std::vector<MaterialPhaseRule> phaseRules = {});
92 static MaterialCatalog builtIn();
93
95 [[nodiscard]] eve::Result<MaterialId> resolve(std::string_view name) const;
97 const MaterialDefinition& definition(MaterialId id) const noexcept;
99 std::span<const MaterialDefinition> definitions() const noexcept;
101 std::span<const MaterialReactionRule> reactions() const noexcept;
103 std::span<const MaterialPhaseRule> phaseRules() const noexcept;
105 bool canReact(MaterialId id) const noexcept;
107 bool canPhaseTransition(MaterialId id) const noexcept;
109 std::uint64_t fingerprint() const noexcept;
110
111private:
112 std::vector<MaterialDefinition> definitions_;
113 std::vector<MaterialReactionRule> reactions_;
114 std::vector<MaterialPhaseRule> phaseRules_;
115 std::vector<std::uint8_t> reactionMask_;
116 std::vector<std::uint8_t> phaseMask_;
117 std::uint64_t fingerprint_ = 0;
118};
119
120} // namespace eve::pixelworld
#define EVENGINE_API_FOUNDATION
每个链接组(link group)各自的导出宏。
Definition Export.h:106
std::string name
Move-only, checked operation results for the common layer.
Battle::Reactions reactions
LogicalId definition
const std::map< std::string, Value > & definitions
Move-only operation result carrying either a value or Status.
Definition Result.h:155
Owning immutable material and reaction table used by one PixelWorld.
MaterialId
Compact stable material identifier stored in each authoritative cell.
TemperatureDirection
Comparison direction for a deterministic temperature transition.
MaterialState
Broad movement class for one pixel material.
Immutable validated properties for one catalog material.
std::uint32_t displayRgba
Canonical preview/render color encoded as 0xRRGGBBAA.
std::vector< std::string > tags
Canonical sorted semantic tags used by authoring and rule queries.
Data-driven phase transition evaluated after heat diffusion.
Deterministically ordered binary material reaction.