MCPcopy Create free account
hub / github.com/OpenRCT2/OpenRCT2 / Open

Method Open

src/openrct2/command_line/sprite/SpriteFile.cpp:17–55  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

15namespace OpenRCT2::CommandLine::Sprite
16{
17 std::optional<SpriteFile> SpriteFile::Open(const utf8* path)
18 {
19 try
20 {
21 FileStream stream(path, FileMode::open);
22
23 SpriteFile spriteFile;
24 stream.Read(&spriteFile.Header, sizeof(G1Header));
25
26 if (spriteFile.Header.numEntries > 0)
27 {
28 spriteFile.Entries.reserve(spriteFile.Header.numEntries);
29
30 for (uint32_t i = 0; i < spriteFile.Header.numEntries; ++i)
31 {
32 StoredG1Element entry32bit{};
33 stream.Read(&entry32bit, sizeof(entry32bit));
34 G1Element entry{};
35
36 entry.offset = reinterpret_cast<uint8_t*>(static_cast<uintptr_t>(entry32bit.offset));
37 entry.width = entry32bit.width;
38 entry.height = entry32bit.height;
39 entry.xOffset = entry32bit.xOffset;
40 entry.yOffset = entry32bit.yOffset;
41 entry.flags = entry32bit.flags;
42 entry.zoomedOffset = entry32bit.zoomedOffset;
43 spriteFile.Entries.push_back(std::move(entry));
44 }
45 spriteFile.Data.resize(spriteFile.Header.totalSize);
46 stream.Read(spriteFile.Data.data(), spriteFile.Header.totalSize);
47 }
48 spriteFile.MakeEntriesAbsolute();
49 return spriteFile;
50 }
51 catch (IOException&)
52 {
53 return std::nullopt;
54 }
55 }
56
57 void SpriteFile::MakeEntriesAbsolute()
58 {

Callers

nothing calls this directly

Calls 4

MakeEntriesAbsoluteMethod · 0.80
ReadMethod · 0.45
push_backMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected