mirror of
https://github.com/borgesdan/xn65
synced 2024-12-29 21:54:47 +01:00
Implementa GameServices
This commit is contained in:
parent
b194a27dad
commit
319b545a03
@ -39,7 +39,7 @@ add_executable (xna WIN32
|
||||
"content/manager.cpp"
|
||||
"content/reader.cpp"
|
||||
"csharp/binary.cpp"
|
||||
"content/decstream.cpp" "content/lzx/decoder.cpp" "content/lzx/decoderstream.cpp" "content/typereadermanager.cpp" "csharp/object.cpp" "csharp/type.cpp" "platform/init-dx.cpp")
|
||||
"content/decstream.cpp" "content/lzx/decoder.cpp" "content/lzx/decoderstream.cpp" "content/typereadermanager.cpp" "csharp/object.cpp" "csharp/type.cpp" "platform/init-dx.cpp" "game/servicecontainer.cpp")
|
||||
|
||||
if (CMAKE_VERSION VERSION_GREATER 3.12)
|
||||
set_property(TARGET xna PROPERTY CXX_STANDARD 20)
|
||||
|
@ -7,20 +7,26 @@
|
||||
#include <algorithm>
|
||||
#include <filesystem>
|
||||
#include <map>
|
||||
#include "../game/servicecontainer.hpp"
|
||||
|
||||
namespace xna {
|
||||
class ContentManager {
|
||||
public:
|
||||
friend class ContentReader;
|
||||
|
||||
ContentManager(String const& rootDirectory) :
|
||||
ContentManager(String const& rootDirectory, sptr<GameServiceContainer> const& services) :
|
||||
_rootDirectory(rootDirectory),
|
||||
_services(services),
|
||||
_path(rootDirectory){};
|
||||
|
||||
virtual ~ContentManager(){
|
||||
Unload();
|
||||
}
|
||||
|
||||
sptr<GameServiceContainer> Services() {
|
||||
return _services;
|
||||
}
|
||||
|
||||
constexpr String RootDirectory() const {
|
||||
return _rootDirectory;
|
||||
}
|
||||
@ -74,6 +80,7 @@ namespace xna {
|
||||
std::map<String, sptr<void>> _loadedAssets;
|
||||
inline const static String contentExtension = ".xnb";
|
||||
std::vector<Byte> byteBuffer;
|
||||
sptr<GameServiceContainer> _services = nullptr;
|
||||
};
|
||||
}
|
||||
|
||||
|
15
framework/csharp/service.hpp
Normal file
15
framework/csharp/service.hpp
Normal file
@ -0,0 +1,15 @@
|
||||
#ifndef XNA_CSHARP_SERVICE_HPP
|
||||
#define XNA_CSHARP_SERVICE_HPP
|
||||
|
||||
#include "../default.hpp"
|
||||
#include "type.hpp"
|
||||
#include <any>
|
||||
|
||||
namespace xna {
|
||||
class IServiceProvider {
|
||||
public:
|
||||
virtual std::any GetService(Type& serviceType) = 0;
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
@ -53,6 +53,7 @@ namespace xna {
|
||||
class GraphicsDeviceManager;
|
||||
class IGameTime;
|
||||
class IGameComponent;
|
||||
class GameServiceContainer;
|
||||
|
||||
//Graphics
|
||||
class BlendState;
|
||||
|
@ -1,12 +1,11 @@
|
||||
#ifndef XNA_GAME_GAME_HPP
|
||||
#define XNA_GAME_GAME_HPP
|
||||
|
||||
#include "../enums.hpp"
|
||||
#include "../forward.hpp"
|
||||
#include "../types.hpp"
|
||||
#include "../default.hpp"
|
||||
#include "time.hpp"
|
||||
#include "window.hpp"
|
||||
#include "../game/component.hpp"
|
||||
#include "component.hpp"
|
||||
#include "servicecontainer.hpp"
|
||||
|
||||
namespace xna {
|
||||
class IGame {
|
||||
@ -18,6 +17,7 @@ namespace xna {
|
||||
virtual sptr<GameWindow> Window() = 0;
|
||||
virtual sptr<GraphicsDevice> GetGraphicsDevice() = 0;
|
||||
virtual sptr<GameComponentCollection> Components() = 0;
|
||||
virtual sptr<GameServiceContainer> Services() = 0;
|
||||
|
||||
protected:
|
||||
virtual void Draw(GameTime const& gameTime) = 0;
|
||||
|
18
framework/game/servicecontainer.cpp
Normal file
18
framework/game/servicecontainer.cpp
Normal file
@ -0,0 +1,18 @@
|
||||
#include "servicecontainer.hpp"
|
||||
|
||||
namespace xna {
|
||||
void GameServiceContainer::AddService(Type& type, std::any& provider)
|
||||
{
|
||||
auto hashCode = type.GetHashCode();
|
||||
services.insert({ hashCode, provider });
|
||||
}
|
||||
|
||||
std::any GameServiceContainer::GetService(Type& serviceType)
|
||||
{
|
||||
auto hashCode = serviceType.GetHashCode();
|
||||
|
||||
return services.contains(hashCode)
|
||||
? services[hashCode]
|
||||
: std::any();
|
||||
}
|
||||
}
|
@ -2,12 +2,19 @@
|
||||
#define XNA_GAME_SERVICECONTAINER_HPP
|
||||
|
||||
#include "../default.hpp"
|
||||
#include "../csharp/service.hpp"
|
||||
#include <map>
|
||||
|
||||
namespace xna {
|
||||
class IServiceProvider {
|
||||
};
|
||||
class GameServiceContainer : public IServiceProvider {
|
||||
public:
|
||||
void AddService(Type& type, std::any& provider);
|
||||
|
||||
class GameServiceContainer {
|
||||
// Inherited via IServiceProvider
|
||||
std::any GetService(Type& serviceType) override;
|
||||
|
||||
private:
|
||||
std::map<size_t, std::any> services;
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -13,6 +13,8 @@
|
||||
|
||||
namespace xna {
|
||||
Game::Game() {
|
||||
_services = New<GameServiceContainer>();
|
||||
|
||||
_gameWindow = New<GameWindow>();
|
||||
_gameWindow->Color(255, 155, 55);
|
||||
_gameWindow->Title("XN65");
|
||||
|
@ -5,6 +5,7 @@
|
||||
#include "../game/game.hpp"
|
||||
#include "dxheaders.hpp"
|
||||
#include "dx/StepTimer.hpp"
|
||||
#include "../content/manager.hpp"
|
||||
|
||||
namespace xna {
|
||||
class Game : public IGame {
|
||||
@ -30,6 +31,14 @@ namespace xna {
|
||||
return _gameComponents;
|
||||
}
|
||||
|
||||
sptr<GameServiceContainer> Services() override {
|
||||
return _services;
|
||||
}
|
||||
|
||||
sptr<ContentManager> Content() {
|
||||
return contentManager;
|
||||
}
|
||||
|
||||
constexpr void EnableGameComponents(bool value) {
|
||||
_enabledGameComponents = value;
|
||||
}
|
||||
@ -52,14 +61,16 @@ namespace xna {
|
||||
|
||||
GameTime _currentGameTime{};
|
||||
DX::StepTimer _stepTimer;
|
||||
|
||||
sptr<ContentManager> contentManager;
|
||||
sptr<GameServiceContainer> _services = nullptr;
|
||||
|
||||
private:
|
||||
int startLoop();
|
||||
void step();
|
||||
sptr<GameComponentCollection> _gameComponents = nullptr;
|
||||
std::vector<sptr<IGameComponent>> _drawableGameComponents;
|
||||
size_t _drawableGameComponentsCount{ 0 };
|
||||
bool _enabledGameComponents{ false };
|
||||
bool _enabledGameComponents{ false };
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -9,12 +9,12 @@ using namespace xna;
|
||||
namespace xna {
|
||||
class Game1 : public Game {
|
||||
public:
|
||||
Game1() {
|
||||
Game1() : Game() {
|
||||
auto _game = reinterpret_cast<Game*>(this);
|
||||
graphics = New<GraphicsDeviceManager>(_game);
|
||||
graphics->PreferredBackBufferWidth(1280);
|
||||
graphics->PreferredBackBufferHeight(720);
|
||||
contentManager = New<ContentManager>("Content");
|
||||
contentManager = New<ContentManager>("Content", _services);
|
||||
}
|
||||
|
||||
void Initialize() override {
|
||||
@ -65,8 +65,7 @@ namespace xna {
|
||||
MouseState currentState{};
|
||||
MouseState oldState{};
|
||||
float vel = 1;
|
||||
int var = 0;
|
||||
sptr<ContentManager> contentManager;
|
||||
int var = 0;
|
||||
Texture2D tx;
|
||||
};
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user