Skip to content

Commit 05b9aad

Browse files
committed
Binary serializing sprites
1 parent c79f353 commit 05b9aad

15 files changed

+88
-38
lines changed

src/Components/IsometricSpriteComponent.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55

66
void IsometricSpriteComponent::Render(Renderer* renderer)
77
{
8-
auto spriteBounds = sprite->sprite.Bounds().Size();
8+
auto spriteBounds = sprite->Get().Bounds().Size();
99
auto position = owner->ScreenCenter() + offsetFromCenter - spriteBounds + baseSize / 2;
1010
int layer = GetScene()->GetService<PathFinderService>()->GetCell(GetScene()->isometricSettings.WorldToTile(owner->Center())).height;
1111

1212
auto depth = GetScene()->isometricSettings.GetTileDepth(owner->Center(), layer + 1, layerOffset);
1313

14-
renderer->RenderSprite(&sprite->sprite, position, depth);
14+
renderer->RenderSprite(&sprite->Get(), position, depth);
1515
}

src/Components/ParticleSystemComponent.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ void ParticleEffect::Stop()
9797

9898
void ParticleSystemComponent::OnAdded()
9999
{
100-
effect.emplace(GetResource<SpriteResource>("particle")->sprite, 100);
100+
effect.emplace(GetResource<SpriteResource>("particle")->Get(), 100);
101101
}
102102

103103
void ParticleSystemComponent::Render(Renderer* renderer)

src/Components/SpriteComponent.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ void SpriteComponent::Render(Renderer* renderer)
1515
: scene->isometricSettings.GetTileDepth(owner->Center(), depth);
1616

1717
renderer->RenderSprite(
18-
&sprite->sprite,
19-
owner->Center() + offsetFromCenter - sprite->sprite.Bounds().Size() * scale / 2,
18+
&sprite->Get(),
19+
owner->Center() + offsetFromCenter - sprite->Get().Bounds().Size() * scale / 2,
2020
spriteDepth,
2121
scale,
2222
owner->Rotation(),

src/Renderer/SpriteAtlas.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ void SpriteAtlas::GetFrame(const int frameIndex, Sprite* outSprite) const
1717
const Vector2 cell(col, row);
1818

1919
*outSprite = Sprite(
20-
_atlas->sprite.GetTexture(),
20+
_atlas->Get().GetTexture(),
2121
Rectangle(
2222
cell * (_cellSize + Vector2(8, 8)),
2323
_cellSize));

src/Renderer/SpriteFont.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ SpriteFont::SpriteFont(SpriteResource* fontSprite, int rows, int cols)
66
: _characterAtlas(fontSprite, std::vector<AtlasAnimation>(), rows, cols, Vector2(0, 0), Vector2(16, 16)),
77
_characterDimensions({ 16, 16})
88
{
9-
auto size = fontSprite->sprite.Bounds().Size();
9+
auto size = fontSprite->Get().Bounds().Size();
1010
//Assert((int)size.x % cols == 0, "Font sprite not multiple of character width");
1111
//Assert((int)size.y % rows == 0, "Font sprite not multiple of character height");
1212
}

src/Resource/ResourceManager.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
#include "Tools/Console.hpp"
88
#include "Resource/ScriptResource.hpp"
99

10-
ConsoleVar<std::string> assetPath("asset-path", "assets", true);
10+
ConsoleVar<std::string> assetPath("asset-path", "../assets", true);
1111

1212
void ResourceManager::LoadResourceFromFile(const char* filePath, const char* resourceName, const char* resourceType)
1313
{

src/Resource/ResourceManager.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
#include <optional>
99

1010
struct Engine;
11+
class BinaryStreamWriter;
12+
class BinaryStreamReader;
1113

1214
struct ResourceSettings
1315
{
@@ -23,6 +25,9 @@ struct BaseResource
2325
{
2426
public:
2527
virtual bool LoadFromFile(const ResourceSettings& settings) { return false; }
28+
virtual bool WriteToBinary(const ResourceSettings& settings, BinaryStreamWriter& writer) { return false; }
29+
virtual bool LoadFromBinary(BinaryStreamReader& reader) { return false; }
30+
2631
virtual bool TryCleanup() { return false; }
2732

2833
template<typename TResource>

src/Resource/SpriteResource.cpp

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
#include <SDL_image.h>
22
#include <memory>
3+
#include <System/BinaryStreamReader.hpp>
34

45
#include "SpriteResource.hpp"
56
#include "System/Logger.hpp"
67
#include "Renderer/Texture.hpp"
78

89
struct TextureManager
910
{
10-
void AddTexture(Texture* texture)
11+
Texture* AddTexture(std::unique_ptr<Texture> texture)
1112
{
12-
textures.emplace_back(texture);
13+
auto ptr = texture.get();
14+
textures.emplace_back(std::move(texture));
15+
return ptr;
1316
}
1417

1518
std::vector<std::unique_ptr<Texture>> textures;
@@ -32,11 +35,28 @@ bool SpriteResource::LoadFromFile(const ResourceSettings& settings)
3235
return false;
3336
}
3437

35-
auto texture = new Texture(surface);
36-
g_textureManager.AddTexture(texture);
38+
auto texture = g_textureManager.AddTexture(std::make_unique<Texture>(surface));
3739
SDL_FreeSurface(surface);
3840

39-
sprite = Sprite(texture, Rectangle(Vector2(0, 0), texture->Size()));
41+
_resource.emplace(texture, Rectangle(Vector2(0, 0), texture->Size()));
4042

4143
return true;
4244
}
45+
46+
bool SpriteResource::WriteToBinary(const ResourceSettings& settings, BinaryStreamWriter& writer)
47+
{
48+
return writer.TryWriteFile(settings.path);
49+
}
50+
51+
bool SpriteResource::LoadFromBinary(BinaryStreamReader& reader)
52+
{
53+
const unsigned char* data = reader.Data();
54+
auto ops = SDL_RWFromMem(const_cast<void*>(reinterpret_cast<const void*>(data)), reader.TotalSize());
55+
SDL_Surface* loadedSurface = IMG_LoadPNG_RW(ops);
56+
auto texture = g_textureManager.AddTexture(std::make_unique<Texture>(loadedSurface));
57+
SDL_FreeSurface(loadedSurface);
58+
59+
_resource.emplace(texture, Rectangle(Vector2(0, 0), texture->Size()));
60+
61+
return true;
62+
}

src/Resource/SpriteResource.hpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
#pragma once
22

3+
#include <System/BinaryStreamWriter.hpp>
34
#include "Renderer/Sprite.hpp"
45
#include "ResourceManager.hpp"
56

6-
struct SpriteResource : BaseResource
7+
struct SpriteResource : ResourceTemplate<Sprite>
78
{
8-
bool LoadFromFile(const ResourceSettings& settings);
9-
10-
Sprite sprite;
9+
bool LoadFromFile(const ResourceSettings& settings) override;
10+
bool WriteToBinary(const ResourceSettings& settings, BinaryStreamWriter& writer) override;
11+
bool LoadFromBinary(BinaryStreamReader& reader) override;
1112
};

src/Resource/TilemapResource.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -510,7 +510,7 @@ void DtoToSegment(MapSegment* segment, MapSegmentDto& segmentDto)
510510
{
511511
auto tileBounds = tilePropertiesDto.bounds.As<float>();
512512

513-
Sprite* tileSprite = &GetResource<SpriteResource>(tilePropertiesDto.spriteResource.c_str())->sprite;
513+
Sprite* tileSprite = &GetResource<SpriteResource>(tilePropertiesDto.spriteResource.c_str())->Get();
514514
segment->tileProperties.push_back(new TileProperties(
515515
Sprite(tileSprite->GetTexture(), tileBounds, tilePropertiesDto.bounds.As<float>()),
516516
0,

0 commit comments

Comments
 (0)