载入中...
搜索中...
未找到
SpriteAnimation.cpp
浏览该文件的文档.
8const Value* field(const Value& value, const char* name) { return value.isObject() ? value.find(name) : nullptr; }
30 if (!schema || !schema->isString() || schema->asString() != "eve.sprite-animation" || !version ||
32 !number(field(value, "duration"), out.duration_) || out.duration_ <= 0 || !frames || frames->empty() ||
35 Diagnostic::error(DiagnosticCode::ParseError, "invalid sprite timeline", {}, {}, "asset.sprite-animation"));
43 DiagnosticCode::ParseError, "missing sprite image reference", {}, {}, "asset.sprite-animation"));
47 if (!image || !image->isString() || !name || !name->isString() || !filter || !filter->isString() ||
49 !number(field(key, "time"), frame.time) || !number(field(key, "pixelsPerUnit"), frame.pixelsPerUnit) ||
60 frame.rect[0] + frame.rect[2] > frame.imageSize[0] || frame.rect[1] + frame.rect[3] > frame.imageSize[1] ||
63 DiagnosticCode::ParseError, "sprite key bounds or timing invalid", {}, {}, "asset.sprite-animation"));
68Result<SpriteAnimationClip> SpriteAnimationClip::load(const EvpackResourceReader& reader, const AssetRef& ref,
72 if (payload.value().chunks.size() != 1 || payload.value().chunks.front().kind != EvpackChunkKind::Definition)
74 DiagnosticCode::ParseError, "sprite timeline requires one definition", {}, {}, "asset.sprite-animation"));
82 DiagnosticCode::ParseError, "invalid sprite sample time or empty clip", {}, {}, "asset.sprite-animation"));
JSON-free versioned runtime metadata codec.
static Result< AssetRef > parse(std::string_view text)
Parse an asset://<canonical UUID> reference.
Definition ResourceRef.cpp:20
static Diagnostic error(DiagnosticCode code, std::string message, std::string path={}, DiagnosticDetails details={}, std::string source={})
Construct an error diagnostic with the standard error severity.
Definition Diagnostic.h:125
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
Immutable reader retaining an admitted pack by shared ownership.
Definition EvpackResourceReader.h:29
Result< RuntimeAssetPayload > read(const AssetRef &asset, std::string_view expectedType, const EvpackCapabilities &capabilities, std::uint64_t maximumDecodedBytes) const
Resolve, type-check, variant-select and decode a canonical runtime asset.
Definition EvpackResourceReader.cpp:10
Immutable validated sprite timeline. No GPU/ECS objects, scheduler, callbacks or mutable playback clo...
Definition SpriteAnimation.h:27
static Result< SpriteAnimationClip > decode(const Value &definition)
Decode eve.sprite-animation/1; reject unknown versions, ignore unknown fields.
Definition SpriteAnimation.cpp:23
static Result< SpriteAnimationClip > load(const EvpackResourceReader &reader, const AssetRef &asset, const EvpackCapabilities &capabilities)
Load an immutable runtime definition; reader is borrowed only during this call.
Definition SpriteAnimation.cpp:68
Result< SpriteAnimationFrame > sample(double seconds) const
Sample a held key; loop wraps at duration, non-loop playback holds the final frame.
Definition SpriteAnimation.cpp:79
Definition AssetCooker.cpp:17
Result< Value > decodeRuntimeDefinition(std::span< const std::uint8_t > bytes, const RuntimeDefinitionLimits &limits)
Decode a bounded EVDEF\0\1 metadata tree without a JSON parser.
Definition RuntimeDefinition.cpp:246
@ Definition
std::variant< std::monostate, std::int64_t, double, std::string, bool > Value
Definition Database.h:26
const EditorValue * field(const EditorValue &value, const char *name)
Definition RoadNetworkEditTarget.cpp:15
@ ParseError
Actual runtime device capabilities used for variant selection.
Definition Evpack.h:92
Owning sprite key snapshot; pixel rectangles and pivots use top-left coordinates.
Definition SpriteAnimation.h:12