ResourceManager

This commit is contained in:
Isuru Samarathunga
2025-09-07 20:55:54 +05:30
parent 798674137f
commit 3861059a23
28 changed files with 819 additions and 177 deletions

View File

@ -0,0 +1,34 @@
#include <Game.hpp>
#include <Player.hpp>
#include <Map.hpp>
namespace ia::iae::game
{
RefPtr<iae::Scene> scene;
VOID Game::Initialize()
{
const auto player = MakeRefPtr<Player>(m_engine);
player->SetLocalPosition({200, 150, 0});
const auto map = MakeRefPtr<TiledMap>(m_engine);
scene = m_engine->CreateScene();
scene->AddNode(map);
scene->AddNode(player);
m_engine->ChangeScene(scene);
}
VOID Game::Terminate()
{
}
VOID Game::Update()
{
}
}

View File

@ -1,118 +1,20 @@
#include <IAEngine/Components/SoundEmitter.hpp>
#include <IAEngine/Components/SpriteRenderer.hpp>
#include <IAEngine/IAEngine.hpp>
#include <Game.hpp>
#include <IAEngine/Audio.hpp>
#include <iacore/file.hpp>
namespace ia
{
SIZE_T Find(IN CONST Vector<UINT8> &vec, IN SIZE_T start)
{
UINT8 Sig[5] = {0x89, 0x50, 0x4E, 0x47, 0x0D};
for (SIZE_T i = start; i < vec.size(); i++)
{
if (!memcmp(&vec[i], Sig, sizeof(Sig)))
return i;
}
return SIZE_MAX;
}
iae::Engine g_engine;
RefPtr<iae::Scene> scene;
RefPtr<iae::Node> sprite;
VOID InitializeGame()
{
auto s = iae::Audio::CreateSound(File::ReadToVector("Res/Audio/SFX/gunshot.wav"));
s.LoopTimes() = 0;
sprite = MakeRefPtr<iae::Node>();
const auto spriteRenderer = sprite->AddComponent<iae::SpriteRendererComponent>();
{
const auto data = File::ReadToVector("Res/Graphics/iae/010_1.iae");
IA_RELEASE_ASSERT(!memcmp(&data[0], "iae.", 4));
const auto frameCount = *reinterpret_cast<CONST UINT32 *>(&data[6]);
INT32 off = 10;
for (INT32 i = 0; i < frameCount; i++)
{
const auto t = g_engine.CreateTexture(&data[off], data.size() - off);
spriteRenderer->AddTexture(t);
off = Find(data, off + 1);
if (off == SIZE_MAX)
break;
}
}
iae::SpriteRendererComponent::Animation anim;
anim.ShouldLoop = false;
anim.Keys.pushBack(
iae::SpriteRendererComponent::AnimationKeyFrame{.Duration = 500,
.ColorOverlay = iam::Vec4f{0.25f, 0.0f, 0.0f, 1.0f},
.ShouldInterpolate = true,
.TextureHandle = 0});
anim.Keys.pushBack(
iae::SpriteRendererComponent::AnimationKeyFrame{.Duration = 500,
.ColorOverlay = iam::Vec4f{0.5f, 0.0f, 0.0f, 1.0f},
.ShouldInterpolate = true,
.TextureHandle = 1});
anim.Keys.pushBack(
iae::SpriteRendererComponent::AnimationKeyFrame{.Duration = 500,
.ColorOverlay = iam::Vec4f{0.75f, 0.0f, 0.0f, 1.0f},
.ShouldInterpolate = true,
.TextureHandle = 2});
anim.Keys.pushBack(
iae::SpriteRendererComponent::AnimationKeyFrame{.Duration = 500,
.ColorOverlay = iam::Vec4f{1.0f, 0.0f, 0.0f, 1.0f},
.ShouldInterpolate = true,
.TextureHandle = 3});
spriteRenderer->AddAnimation(anim);
spriteRenderer->BakeAnimations();
// const auto soundEmitter = sprite->AddComponent<iae::SoundEmitterComponent>();
// soundEmitter->SetSound(s);
sprite->SetLocalPosition({100, 100, 0});
scene = g_engine.CreateScene();
scene->AddNode(sprite);
g_engine.ChangeScene(scene);
}
VOID UpdateGame()
{
}
VOID TerminateGame()
{
}
} // namespace ia
ia::iae::Engine g_engine;
int main(int argc, char *argv[])
{
ia::g_engine.Initialize({.GameName = "IAE Sandbox", .WindowWidth = 800, .WindowHeight = 600});
ia::InitializeGame();
while (!ia::g_engine.ShouldClose())
g_engine.Initialize({.GameName = "IAE Sandbox", .WindowWidth = 800, .WindowHeight = 600});
const auto game = new ia::iae::game::Game(&g_engine);
game->Initialize();
while (!g_engine.ShouldClose())
{
ia::g_engine.BeginFrame();
ia::UpdateGame();
ia::g_engine.EndFrame();
g_engine.BeginFrame();
game->Update();
g_engine.EndFrame();
}
ia::TerminateGame();
ia::g_engine.Terminate();
game->Terminate();
delete game;
g_engine.Terminate();
return 0;
}

View File

@ -0,0 +1,30 @@
#include <Map.hpp>
namespace ia::iae::game
{
TiledMap::TiledMap(IN Engine *engine) : m_engine(engine)
{
m_musicEmitter = AddComponent<SoundEmitterComponent>();
m_atlasRenderer = AddComponent<AtlasRendererComponent>();
}
VOID TiledMap::OnAdded(IN Scene *scene)
{
Node::OnAdded(scene);
}
VOID TiledMap::OnRemoved()
{
Node::OnRemoved();
}
VOID TiledMap::Draw()
{
Node::Draw();
}
VOID TiledMap::Update()
{
Node::Update();
}
} // namespace ia::iae::game

View File

@ -0,0 +1,34 @@
#include <Player.hpp>
#include <IAEngine/Input.hpp>
#include <IACore/File.hpp>
namespace ia::iae::game
{
Player::Player(IN Engine *engine) : m_engine(engine)
{
m_spriteRenderer = AddComponent<SpriteRendererComponent>();
}
VOID Player::OnAdded(IN Scene *scene)
{
Node::OnAdded(scene);
}
VOID Player::OnRemoved()
{
Node::OnRemoved();
}
VOID Player::Draw()
{
Node::Draw();
}
VOID Player::Update()
{
Node::Update();
}
} // namespace ia::iae::game