mirror of
https://github.com/borgesdan/xn65
synced 2024-12-29 21:54:47 +01:00
Implementações em Game
This commit is contained in:
parent
d2dcf4fe88
commit
34d9533261
@ -5,8 +5,8 @@ namespace xna {
|
||||
impl = unew<PlatformImplementation>();
|
||||
services = snew<GameServiceContainer>();
|
||||
auto iservice = reinterpret_pointer_cast<IServiceProvider>(services);
|
||||
_contentManager = snew<ContentManager>(services, "");
|
||||
_contentManager->mainGameService = iservice;
|
||||
contentManager = snew<ContentManager>(services, "");
|
||||
contentManager->mainGameService = iservice;
|
||||
|
||||
_gameWindow = snew<GameWindow>();
|
||||
_gameWindow->impl->Color(146, 150, 154);
|
||||
@ -16,6 +16,9 @@ namespace xna {
|
||||
GraphicsDeviceManager::DefaultBackBufferHeight, false);
|
||||
|
||||
_gameComponents = snew<GameComponentCollection>();
|
||||
|
||||
IsFixedTimeStep(isFixedTimeStep);
|
||||
TargetElapsedTime(targetElapsedTime);
|
||||
}
|
||||
|
||||
void Game::Exit() {
|
||||
@ -34,7 +37,7 @@ namespace xna {
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
else {
|
||||
Step();
|
||||
Tick();
|
||||
}
|
||||
|
||||
} while (msg.message != WM_QUIT);
|
||||
@ -42,7 +45,7 @@ namespace xna {
|
||||
return static_cast<int>(msg.wParam);
|
||||
}
|
||||
|
||||
void Game::Step()
|
||||
void Game::Tick()
|
||||
{
|
||||
impl->_stepTimer.Tick([&]()
|
||||
{
|
||||
@ -59,6 +62,9 @@ namespace xna {
|
||||
}
|
||||
|
||||
int Game::Run() {
|
||||
if (isRunning)
|
||||
return EXIT_FAILURE;
|
||||
|
||||
try {
|
||||
if (!_gameWindow->impl->Create()) {
|
||||
Exception::Throw(Exception::FAILED_TO_CREATE);
|
||||
@ -72,6 +78,7 @@ namespace xna {
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
isRunning = true;
|
||||
return StartGameLoop();
|
||||
}
|
||||
catch (std::exception& e) {
|
||||
@ -138,10 +145,10 @@ namespace xna {
|
||||
}
|
||||
|
||||
sptr<GameWindow> Game::Window() { return _gameWindow; }
|
||||
sptr<GraphicsDevice> Game::GetGraphicsDevice() { return graphicsDevice; }
|
||||
sptr<GameComponentCollection> Game::Components() { return _gameComponents; }
|
||||
sptr<GraphicsDevice> Game::Device() const { return graphicsDevice; }
|
||||
sptr<GameComponentCollection> Game::Components() const { return _gameComponents; }
|
||||
sptr<GameServiceContainer> Game::Services() { return services; }
|
||||
sptr<ContentManager> Game::Content() { return _contentManager; }
|
||||
sptr<ContentManager> Game::Content() const { return contentManager; }
|
||||
void Game::EnableGameComponents(bool value) { _enabledGameComponents = value; }
|
||||
|
||||
void Game::AttachGraphicsDevice(sptr<GraphicsDevice> const& device) {
|
||||
@ -158,4 +165,44 @@ namespace xna {
|
||||
_gameWindow->impl->Update();
|
||||
}
|
||||
}
|
||||
|
||||
void Game::Content(sptr<ContentManager> const& value) {
|
||||
contentManager = value;
|
||||
auto iservice = reinterpret_pointer_cast<IServiceProvider>(services);
|
||||
contentManager->mainGameService = iservice;
|
||||
}
|
||||
|
||||
void Game::IsFixedTimeStep(bool value) {
|
||||
isFixedTimeStep = value;
|
||||
impl->_stepTimer.SetFixedTimeStep(value);
|
||||
}
|
||||
|
||||
bool Game::IsMouseVisible() const {
|
||||
if (!Mouse::impl)
|
||||
return false;
|
||||
|
||||
return Mouse::impl->_dxMouse->IsVisible();
|
||||
}
|
||||
|
||||
void Game::IsMouseVisible(bool value) {
|
||||
if (!Mouse::impl)
|
||||
return;
|
||||
|
||||
Mouse::impl->_dxMouse->SetVisible(value);
|
||||
}
|
||||
void Game::TargetElapsedTime(TimeSpan const& value) {
|
||||
if (!isFixedTimeStep)
|
||||
return;
|
||||
|
||||
const auto ticks = targetElapsedTime.Ticks();
|
||||
impl->_stepTimer.SetTargetElapsedTicks(ticks);
|
||||
}
|
||||
|
||||
void Game::ResetElapsedTime() const {
|
||||
impl->_stepTimer.ResetElapsedTime();
|
||||
}
|
||||
|
||||
void Game::RunOneFrame() {
|
||||
Tick();
|
||||
}
|
||||
}
|
||||
|
@ -5,18 +5,50 @@
|
||||
#include "time.hpp"
|
||||
|
||||
namespace xna {
|
||||
//Provides basic graphics device initialization, game logic, and rendering code.
|
||||
class Game : public std::enable_shared_from_this<Game> {
|
||||
public:
|
||||
Game();
|
||||
void Exit();
|
||||
int Run();
|
||||
sptr<GameWindow> Window();
|
||||
sptr<GraphicsDevice> GetGraphicsDevice();
|
||||
sptr<GameComponentCollection> Components();
|
||||
sptr<GameServiceContainer> Services();
|
||||
sptr<ContentManager> Content();
|
||||
void EnableGameComponents(bool value);
|
||||
|
||||
//Gets the collection of GameComponents owned by the game.
|
||||
sptr<GameComponentCollection> Components() const;
|
||||
//Gets or sets the current ContentManager.
|
||||
sptr<ContentManager> Content() const;
|
||||
//Gets or sets the current ContentManager.
|
||||
void Content(sptr<ContentManager> const& value);
|
||||
//Gets the current GraphicsDevice.
|
||||
sptr<GraphicsDevice> Device() const;
|
||||
//Gets or sets a value indicating whether to use fixed time steps.
|
||||
//The default value for IsFixedTimeStep is true.
|
||||
constexpr bool IsFixedTimeStep() const { return isFixedTimeStep; }
|
||||
//Gets or sets a value indicating whether to use fixed time steps.
|
||||
//The default value for IsFixedTimeStep is true.
|
||||
void IsFixedTimeStep(bool value);
|
||||
//Gets or sets a value indicating whether the mouse cursor should be visible.
|
||||
bool IsMouseVisible() const;
|
||||
//Gets or sets a value indicating whether the mouse cursor should be visible.
|
||||
void IsMouseVisible(bool value);
|
||||
//Gets the GameServiceContainer holding all the service providers attached to the Game.
|
||||
sptr<GameServiceContainer> Services();
|
||||
//Gets or sets the target time between calls to Update when IsFixedTimeStep is true.
|
||||
constexpr TimeSpan TargetElapsedTime() const { return targetElapsedTime; }
|
||||
//Gets or sets the target time between calls to Update when IsFixedTimeStep is true.
|
||||
void TargetElapsedTime(TimeSpan const& value);
|
||||
//Gets the underlying operating system window.
|
||||
sptr<GameWindow> Window();
|
||||
|
||||
//Exits the game.
|
||||
void Exit();
|
||||
//Resets the elapsed time counter.
|
||||
void ResetElapsedTime() const;
|
||||
//Call this method to initialize the game, begin running the game loop, and start processing events for the game.
|
||||
int Run();
|
||||
//Run the game through what would happen in a single tick of the game clock; this method is designed for debugging only.
|
||||
void RunOneFrame();
|
||||
//Updates the game's clock and calls Update and Draw.
|
||||
void Tick();
|
||||
|
||||
void EnableGameComponents(bool value);
|
||||
void AttachGraphicsDevice(sptr<GraphicsDevice> const& graphicsDevice);
|
||||
void ResizeWindow(int width, int heigth);
|
||||
|
||||
@ -25,8 +57,7 @@ namespace xna {
|
||||
virtual void Initialize();
|
||||
virtual void LoadContent(){}
|
||||
virtual void Update(GameTime const& gameTime);
|
||||
int StartGameLoop();
|
||||
void Step();
|
||||
int StartGameLoop();
|
||||
|
||||
public:
|
||||
sptr<GraphicsDevice> graphicsDevice = nullptr;
|
||||
@ -38,11 +69,14 @@ namespace xna {
|
||||
sptr<GameComponentCollection> _gameComponents = nullptr;
|
||||
sptr<GameWindow> _gameWindow{ nullptr };
|
||||
sptr<AudioEngine> _audioEngine = nullptr;
|
||||
sptr<ContentManager> _contentManager;
|
||||
sptr<ContentManager> contentManager;
|
||||
std::vector<sptr<IGameComponent>> _drawableGameComponents;
|
||||
size_t _drawableGameComponentsCount{ 0 };
|
||||
bool _enabledGameComponents{ false };
|
||||
GameTime _currentGameTime{};
|
||||
bool isFixedTimeStep{ true };
|
||||
TimeSpan targetElapsedTime{ TimeSpan::FromTicks(166667L) };
|
||||
bool isRunning{ false };
|
||||
|
||||
public:
|
||||
struct PlatformImplementation;
|
||||
|
@ -73,7 +73,7 @@ namespace PlatformerStarterKit {
|
||||
auto keyboardState = Keyboard::GetState();
|
||||
auto gamepadState = GamePad::GetState(PlayerIndex::One);
|
||||
|
||||
if (gamepadState.Buttons.Back == ButtonState::Pressed)
|
||||
if (gamepadState.Buttons().Back() == ButtonState::Pressed)
|
||||
Exit();
|
||||
|
||||
bool continuePressed =
|
||||
|
@ -92,7 +92,7 @@ namespace PlatformerStarterKit {
|
||||
auto gamePadState = xna::GamePad::GetState(xna::PlayerIndex::One);
|
||||
auto keyboardState = xna::Keyboard::GetState();
|
||||
|
||||
movement = gamePadState.ThumbSticks.Left().X * MoveStickScale;
|
||||
movement = gamePadState.ThumbSticks().Left().X * MoveStickScale;
|
||||
|
||||
if (std::abs(movement) < 0.5f)
|
||||
movement = 0.0f;
|
||||
|
Loading…
x
Reference in New Issue
Block a user