Я пересоздал репозиторий из-за большого количества мусора в прошлом

This commit is contained in:
Jiga228
2025-09-14 15:00:44 +07:00
commit 78a25b305b
74 changed files with 3428 additions and 0 deletions
+38
View File
@@ -0,0 +1,38 @@
#include "World.h"
#include "Game/SaveMap/SaveMap.h"
World::World(GameInstance& game_instance) : game_instance(game_instance)
{
}
World::~World()
{
for (auto& actor : actors)
delete actor;
actors.clear();
}
void World::BeginPlay()
{
for (auto& i : actors)
i->BeginPlay();
}
void World::Tick(double delta_time)
{
for (auto& i : actors)
i->Tick(delta_time);
}
std::shared_ptr<SaveMap> World::save()
{
std::shared_ptr<SaveMap> save = std::make_shared<SaveMap>("World");
save->SaveListObject("Actors", std::move(reinterpret_cast<std::list<ISave*>&>(actors)));
return save;
}
void World::load(std::shared_ptr<SaveMap> save)
{
actors = std::move(reinterpret_cast<std::list<Actor*>&>(save->GetListObject("Actors")));
}
+73
View File
@@ -0,0 +1,73 @@
#pragma once
#include <list>
#include <vector>
#include <string>
#include "RTTI.h"
#include "Game/Actors/Actor.h"
class GameInstance;
class World : public ISave
{
GameInstance& game_instance;
// Actors only
std::list<Actor*> actors;
public:
World(GameInstance& game_instance);
~World() override;
virtual void BeginPlay();
virtual void Tick(double delta_time);
GameInstance& GetGameInstance() const { return game_instance; }
#pragma region ISave
std::shared_ptr<SaveMap> save() override;
void load(std::shared_ptr<SaveMap> save) override;
#pragma endregion
template<class T, class Container = std::vector<T*>>
Container GetActorsByClass()
{
Container list;
for (auto i = actors.cbegin(); i != actors.cend(); ++i)
{
if (RTTI::IsA<T>(*i))
list.push_back(*i);
}
return list;
}
template<class T>
T* SpawnActorFormClass(const Vector3D& loc = { 0, 0, 0 }, const Vector3D& rot = { 0, 0, 0 })
{
T* object = new T();
object->SetActorLocate(loc);
object->SetActorRotate(rot);
actors.push_back(object);
return object;
}
template<class Container = std::vector<Actor*>>
Container GetActorsByTag(std::string tag)
{
Container container;
for (auto& i : actors)
{
const std::list<std::string>& tags = i->GetTags();
for (auto& j : tags)
{
if (j == tag)
container.push_back(i);
}
}
return container;
}
};