载入中...
搜索中...
未找到
Hd2dRuntime.cpp
浏览该文件的文档.
1#include <exception>
2#include <utility>
3#include "hd2d/Hd2d.h"
6namespace {} // namespace
10 hd2d::Hd2D* module,
11 graphics::Graphics* graphics,
12 graphics::Camera3D* camera,
13 const IHd2dTextureResolver& textures) {
14 if (document.value().kind != "sprite" || !module || !graphics)
15 return eve::editing::failed<hd2d::Sprite3D*>(
16 EditorStatus::Rejected, RuleId("editor.hd2d.sprite"),
17 "HD2D sprite publication requires sprite preset, module and Graphics");
18 auto texture = textures.texture(document.value().sourceAsset);
19 if (!texture.ok()) return Result<hd2d::Sprite3D*>::failure(texture.status());
20 if (!texture.value())
21 return eve::editing::failed<hd2d::Sprite3D*>(EditorStatus::NotFound, RuleId("editor.hd2d.texture"),
22 "HD2D sprite texture resolver returned no texture");
23 std::unique_ptr<hd2d::Sprite3D> candidate;
24 try {
25 candidate.reset(module->newSprite(graphics));
26 if (!candidate)
27 return eve::editing::failed<hd2d::Sprite3D*>(EditorStatus::Failed, RuleId("editor.hd2d.sprite-create"),
28 "HD2D failed to create Sprite3D");
29 const auto& v = document.value();
30 candidate->setTexture(texture.value());
31 candidate->setFrameGrid(v.columns, v.rows);
32 candidate->setFrameIndex(v.frame);
33 candidate->setFlipX(v.flipX);
34 candidate->setFlipY(v.flipY);
35 candidate->setSize(v.size[0], v.size[1]);
36 candidate->setTint(v.tint[0], v.tint[1], v.tint[2], v.tint[3]);
37 candidate->setVisible(v.visible);
38 candidate->setCamera(camera);
39 candidate->play(v.animStart, v.animEnd, v.fps);
40 } catch (const std::exception& e) {
41 return eve::editing::failed<hd2d::Sprite3D*>(EditorStatus::Failed, RuleId("editor.hd2d.sprite-build"),
42 e.what());
43 }
44 sprite_ = std::move(candidate);
45 tilemap_.reset();
46 revision_ = document.revision();
47 return eve::editing::applied<hd2d::Sprite3D*>(sprite_.get());
48}
50 hd2d::Hd2D* module) {
51 if (document.value().kind != "tilemap" || !module)
52 return eve::editing::failed<hd2d::TileMap3D*>(EditorStatus::Rejected, RuleId("editor.hd2d.tilemap"),
53 "HD2D tilemap publication requires tilemap preset and module");
54 std::unique_ptr<hd2d::TileMap3D> candidate;
55 try {
56 candidate.reset(module->newTileMap3D());
57 if (!candidate)
58 return eve::editing::failed<hd2d::TileMap3D*>(EditorStatus::Failed, RuleId("editor.hd2d.tilemap-create"),
59 "HD2D failed to create TileMap3D");
60 const auto& v = document.value();
61 candidate->setSideDepth(v.sideDepth);
62 candidate->setHeightScale(v.heightScale);
63 candidate->setWallUV(v.wallUv[0], v.wallUv[1], v.wallUv[2], v.wallUv[3]);
64 candidate->setTint(v.tint[0], v.tint[1], v.tint[2], v.tint[3]);
65 } catch (const std::exception& e) {
66 return eve::editing::failed<hd2d::TileMap3D*>(EditorStatus::Failed, RuleId("editor.hd2d.tilemap-build"),
67 e.what());
68 }
69 tilemap_ = std::move(candidate);
70 sprite_.reset();
71 revision_ = document.revision();
72 return eve::editing::applied<hd2d::TileMap3D*>(tilemap_.get());
73}
74} // namespace eve::hd2d_editing
float camera[2]
float v
Move-only operation result carrying either a value or Status.
Definition Result.h:155
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
std::uint64_t revision() const override
Return the current revision.
EVENGINE_API_BACKENDS public API.
HD-2D module: tilemap-to-3D extrusion + 2D sprites as 3D billboards.
Definition Hd2d.h:356
Sprite3D * newSprite(graphics::Graphics *gfx)
Create a 3D billboard sprite bound to the given Graphics.
Definition Hd2d.cpp:18
TileMap3D * newTileMap3D()
Create a tilemap-to-3D builder.
Definition Hd2d.cpp:16
~Hd2dDocumentRuntime()
Hd 2 d document runtime.
Hd2dDocumentRuntime()
Hd 2 d document runtime.
Result< hd2d::Sprite3D * > publishSprite(const Hd2dDocumentTarget &, hd2d::Hd2D *, graphics::Graphics *, graphics::Camera3D *, const IHd2dTextureResolver &)
Publish sprite.
Result< hd2d::TileMap3D * > publishTileMap(const Hd2dDocumentTarget &, hd2d::Hd2D *)
Publish tile map.
Revisioned HD-2D sprite/tilemap presentation asset.
Definition Hd2dTarget.h:62
const Hd2dAssetValue & value() const
Value.
Definition Hd2dTarget.h:94
Resolves an HD-2D sprite texture.
Definition Hd2dTarget.h:124
virtual Result< graphics::Texture * > texture(const std::string &) const =0
Texture.
editing::RuleId RuleId
Definition Hd2dTarget.h:40