mirror of
https://github.com/borgesdan/xn65
synced 2024-12-29 21:54:47 +01:00
Implementação de Keyboard e mudanças em Game
This commit is contained in:
parent
3fe3cc7066
commit
3274acf478
@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
# Add source to this project's executable.
|
# Add source to this project's executable.
|
||||||
add_executable (xna WIN32 "xna.cpp" "xna.h" "platform/window-dx.cpp" "platform/device-dx.cpp" "platform/adapter-dx.cpp" "platform/swapchain-dx.cpp" "platform/rendertarget-dx.cpp" "platform/texture-dx.cpp" "platform/blendstate-dx.cpp" "platform/game-dx.cpp" "platform/clock-dx.cpp" "csharp/stream.cpp" "platform/gdevicemanager-dx.cpp" "platform/vertexinput-dx.cpp" "platform/shader-dx.cpp" "platform/rasterizerstate-dx.cpp" "platform/vertexbuffer-dx.cpp" "platform/indexbuffer-dx.cpp" "common/matrix.cpp" "platform/constbuffer-dx.cpp" "platform/databuffer-dx.cpp" "platform/samplerstate-dx.cpp" "platform/spritebatch-dx.cpp" "platform/spritefont-dx.cpp" "platform/depthstencilstate-dx.cpp")
|
add_executable (xna WIN32 "xna.cpp" "xna.h" "platform/window-dx.cpp" "platform/device-dx.cpp" "platform/adapter-dx.cpp" "platform/swapchain-dx.cpp" "platform/rendertarget-dx.cpp" "platform/texture-dx.cpp" "platform/blendstate-dx.cpp" "platform/game-dx.cpp" "platform/clock-dx.cpp" "csharp/stream.cpp" "platform/gdevicemanager-dx.cpp" "platform/vertexinput-dx.cpp" "platform/shader-dx.cpp" "platform/rasterizerstate-dx.cpp" "platform/vertexbuffer-dx.cpp" "platform/indexbuffer-dx.cpp" "common/matrix.cpp" "platform/constbuffer-dx.cpp" "platform/databuffer-dx.cpp" "platform/samplerstate-dx.cpp" "platform/spritebatch-dx.cpp" "platform/spritefont-dx.cpp" "platform/depthstencilstate-dx.cpp" "platform/keyboard-dx.cpp")
|
||||||
|
|
||||||
if (CMAKE_VERSION VERSION_GREATER 3.12)
|
if (CMAKE_VERSION VERSION_GREATER 3.12)
|
||||||
set_property(TARGET xna PROPERTY CXX_STANDARD 20)
|
set_property(TARGET xna PROPERTY CXX_STANDARD 20)
|
||||||
|
@ -87,6 +87,174 @@ namespace xna {
|
|||||||
HiDef
|
HiDef
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum class Keys {
|
||||||
|
None = 0,
|
||||||
|
Back = 8,
|
||||||
|
Tab = 9,
|
||||||
|
Enter = 13, // 0x0000000D
|
||||||
|
Pause = 19, // 0x00000013
|
||||||
|
CapsLock = 20, // 0x00000014
|
||||||
|
Kana = 21, // 0x00000015
|
||||||
|
Kanji = 25, // 0x00000019
|
||||||
|
Escape = 27, // 0x0000001B
|
||||||
|
ImeConvert = 28, // 0x0000001C
|
||||||
|
ImeNoConvert = 29, // 0x0000001D
|
||||||
|
Space = 32, // 0x00000020
|
||||||
|
PageUp = 33, // 0x00000021
|
||||||
|
PageDown = 34, // 0x00000022
|
||||||
|
End = 35, // 0x00000023
|
||||||
|
Home = 36, // 0x00000024
|
||||||
|
Left = 37, // 0x00000025
|
||||||
|
Up = 38, // 0x00000026
|
||||||
|
Right = 39, // 0x00000027
|
||||||
|
Down = 40, // 0x00000028
|
||||||
|
Select = 41, // 0x00000029
|
||||||
|
Print = 42, // 0x0000002A
|
||||||
|
Execute = 43, // 0x0000002B
|
||||||
|
PrintScreen = 44, // 0x0000002C
|
||||||
|
Insert = 45, // 0x0000002D
|
||||||
|
Delete = 46, // 0x0000002E
|
||||||
|
Help = 47, // 0x0000002F
|
||||||
|
D0 = 48, // 0x00000030
|
||||||
|
D1 = 49, // 0x00000031
|
||||||
|
D2 = 50, // 0x00000032
|
||||||
|
D3 = 51, // 0x00000033
|
||||||
|
D4 = 52, // 0x00000034
|
||||||
|
D5 = 53, // 0x00000035
|
||||||
|
D6 = 54, // 0x00000036
|
||||||
|
D7 = 55, // 0x00000037
|
||||||
|
D8 = 56, // 0x00000038
|
||||||
|
D9 = 57, // 0x00000039
|
||||||
|
A = 65, // 0x00000041
|
||||||
|
B = 66, // 0x00000042
|
||||||
|
C = 67, // 0x00000043
|
||||||
|
D = 68, // 0x00000044
|
||||||
|
E = 69, // 0x00000045
|
||||||
|
F = 70, // 0x00000046
|
||||||
|
G = 71, // 0x00000047
|
||||||
|
H = 72, // 0x00000048
|
||||||
|
I = 73, // 0x00000049
|
||||||
|
J = 74, // 0x0000004A
|
||||||
|
K = 75, // 0x0000004B
|
||||||
|
L = 76, // 0x0000004C
|
||||||
|
M = 77, // 0x0000004D
|
||||||
|
N = 78, // 0x0000004E
|
||||||
|
O = 79, // 0x0000004F
|
||||||
|
P = 80, // 0x00000050
|
||||||
|
Q = 81, // 0x00000051
|
||||||
|
R = 82, // 0x00000052
|
||||||
|
S = 83, // 0x00000053
|
||||||
|
T = 84, // 0x00000054
|
||||||
|
U = 85, // 0x00000055
|
||||||
|
V = 86, // 0x00000056
|
||||||
|
W = 87, // 0x00000057
|
||||||
|
X = 88, // 0x00000058
|
||||||
|
Y = 89, // 0x00000059
|
||||||
|
Z = 90, // 0x0000005A
|
||||||
|
LeftWindows = 91, // 0x0000005B
|
||||||
|
RightWindows = 92, // 0x0000005C
|
||||||
|
Apps = 93, // 0x0000005D
|
||||||
|
Sleep = 95, // 0x0000005F
|
||||||
|
NumPad0 = 96, // 0x00000060
|
||||||
|
NumPad1 = 97, // 0x00000061
|
||||||
|
NumPad2 = 98, // 0x00000062
|
||||||
|
NumPad3 = 99, // 0x00000063
|
||||||
|
NumPad4 = 100, // 0x00000064
|
||||||
|
NumPad5 = 101, // 0x00000065
|
||||||
|
NumPad6 = 102, // 0x00000066
|
||||||
|
NumPad7 = 103, // 0x00000067
|
||||||
|
NumPad8 = 104, // 0x00000068
|
||||||
|
NumPad9 = 105, // 0x00000069
|
||||||
|
Multiply = 106, // 0x0000006A
|
||||||
|
Add = 107, // 0x0000006B
|
||||||
|
Separator = 108, // 0x0000006C
|
||||||
|
Subtract = 109, // 0x0000006D
|
||||||
|
Decimal = 110, // 0x0000006E
|
||||||
|
Divide = 111, // 0x0000006F
|
||||||
|
F1 = 112, // 0x00000070
|
||||||
|
F2 = 113, // 0x00000071
|
||||||
|
F3 = 114, // 0x00000072
|
||||||
|
F4 = 115, // 0x00000073
|
||||||
|
F5 = 116, // 0x00000074
|
||||||
|
F6 = 117, // 0x00000075
|
||||||
|
F7 = 118, // 0x00000076
|
||||||
|
F8 = 119, // 0x00000077
|
||||||
|
F9 = 120, // 0x00000078
|
||||||
|
F10 = 121, // 0x00000079
|
||||||
|
F11 = 122, // 0x0000007A
|
||||||
|
F12 = 123, // 0x0000007B
|
||||||
|
F13 = 124, // 0x0000007C
|
||||||
|
F14 = 125, // 0x0000007D
|
||||||
|
F15 = 126, // 0x0000007E
|
||||||
|
F16 = 127, // 0x0000007F
|
||||||
|
F17 = 128, // 0x00000080
|
||||||
|
F18 = 129, // 0x00000081
|
||||||
|
F19 = 130, // 0x00000082
|
||||||
|
F20 = 131, // 0x00000083
|
||||||
|
F21 = 132, // 0x00000084
|
||||||
|
F22 = 133, // 0x00000085
|
||||||
|
F23 = 134, // 0x00000086
|
||||||
|
F24 = 135, // 0x00000087
|
||||||
|
NumLock = 144, // 0x00000090
|
||||||
|
Scroll = 145, // 0x00000091
|
||||||
|
LeftShift = 160, // 0x000000A0
|
||||||
|
RightShift = 161, // 0x000000A1
|
||||||
|
LeftControl = 162, // 0x000000A2
|
||||||
|
RightControl = 163, // 0x000000A3
|
||||||
|
LeftAlt = 164, // 0x000000A4
|
||||||
|
RightAlt = 165, // 0x000000A5
|
||||||
|
BrowserBack = 166, // 0x000000A6
|
||||||
|
BrowserForward = 167, // 0x000000A7
|
||||||
|
BrowserRefresh = 168, // 0x000000A8
|
||||||
|
BrowserStop = 169, // 0x000000A9
|
||||||
|
BrowserSearch = 170, // 0x000000AA
|
||||||
|
BrowserFavorites = 171, // 0x000000AB
|
||||||
|
BrowserHome = 172, // 0x000000AC
|
||||||
|
VolumeMute = 173, // 0x000000AD
|
||||||
|
VolumeDown = 174, // 0x000000AE
|
||||||
|
VolumeUp = 175, // 0x000000AF
|
||||||
|
MediaNextTrack = 176, // 0x000000B0
|
||||||
|
MediaPreviousTrack = 177, // 0x000000B1
|
||||||
|
MediaStop = 178, // 0x000000B2
|
||||||
|
MediaPlayPause = 179, // 0x000000B3
|
||||||
|
LaunchMail = 180, // 0x000000B4
|
||||||
|
SelectMedia = 181, // 0x000000B5
|
||||||
|
LaunchApplication1 = 182, // 0x000000B6
|
||||||
|
LaunchApplication2 = 183, // 0x000000B7
|
||||||
|
OemSemicolon = 186, // 0x000000BA
|
||||||
|
OemPlus = 187, // 0x000000BB
|
||||||
|
OemComma = 188, // 0x000000BC
|
||||||
|
OemMinus = 189, // 0x000000BD
|
||||||
|
OemPeriod = 190, // 0x000000BE
|
||||||
|
OemQuestion = 191, // 0x000000BF
|
||||||
|
OemTilde = 192, // 0x000000C0
|
||||||
|
ChatPadGreen = 202, // 0x000000CA
|
||||||
|
ChatPadOrange = 203, // 0x000000CB
|
||||||
|
OemOpenBrackets = 219, // 0x000000DB
|
||||||
|
OemPipe = 220, // 0x000000DC
|
||||||
|
OemCloseBrackets = 221, // 0x000000DD
|
||||||
|
OemQuotes = 222, // 0x000000DE
|
||||||
|
Oem8 = 223, // 0x000000DF
|
||||||
|
OemBackslash = 226, // 0x000000E2
|
||||||
|
ProcessKey = 229, // 0x000000E5
|
||||||
|
OemCopy = 242, // 0x000000F2
|
||||||
|
OemAuto = 243, // 0x000000F3
|
||||||
|
OemEnlW = 244, // 0x000000F4
|
||||||
|
Attn = 246, // 0x000000F6
|
||||||
|
Crsel = 247, // 0x000000F7
|
||||||
|
Exsel = 248, // 0x000000F8
|
||||||
|
EraseEof = 249, // 0x000000F9
|
||||||
|
Play = 250, // 0x000000FA
|
||||||
|
Zoom = 251, // 0x000000FB
|
||||||
|
Pa1 = 253, // 0x000000FD
|
||||||
|
OemClear = 254, // 0x000000FE
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class KeyState {
|
||||||
|
Up,
|
||||||
|
Down,
|
||||||
|
};
|
||||||
|
|
||||||
enum class PresentInterval {
|
enum class PresentInterval {
|
||||||
Default,
|
Default,
|
||||||
One,
|
One,
|
||||||
|
@ -131,6 +131,10 @@ namespace xna {
|
|||||||
using pVertexShader = std::shared_ptr<VertexShader>;
|
using pVertexShader = std::shared_ptr<VertexShader>;
|
||||||
struct Viewport;
|
struct Viewport;
|
||||||
using PViewport = std::shared_ptr<Viewport>;
|
using PViewport = std::shared_ptr<Viewport>;
|
||||||
|
|
||||||
|
//Input
|
||||||
|
struct KeyboardState;
|
||||||
|
using PKeyboardState = std::shared_ptr<KeyboardState>;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
@ -18,6 +18,7 @@ namespace xna {
|
|||||||
virtual void Stop() = 0;
|
virtual void Stop() = 0;
|
||||||
virtual TimeSpan ElapsedTime() = 0;
|
virtual TimeSpan ElapsedTime() = 0;
|
||||||
virtual TimeSpan TotalTime() = 0;
|
virtual TimeSpan TotalTime() = 0;
|
||||||
|
virtual bool IsActive() = 0;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@ namespace xna {
|
|||||||
protected:
|
protected:
|
||||||
virtual void Draw(GameTime const& gameTime) = 0;
|
virtual void Draw(GameTime const& gameTime) = 0;
|
||||||
virtual void Initialize() = 0;
|
virtual void Initialize() = 0;
|
||||||
|
virtual void LoadContent() = 0;
|
||||||
virtual void Update(GameTime const& gameTime) = 0;
|
virtual void Update(GameTime const& gameTime) = 0;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@ namespace xna {
|
|||||||
public:
|
public:
|
||||||
virtual ~IGraphicsDeviceManager(){}
|
virtual ~IGraphicsDeviceManager(){}
|
||||||
virtual void ApplyChanges() = 0;
|
virtual void ApplyChanges() = 0;
|
||||||
|
virtual bool Initialize() = 0;
|
||||||
virtual void ToggleFullScreen() = 0;
|
virtual void ToggleFullScreen() = 0;
|
||||||
virtual Int PreferredBackBufferWidth() const = 0;
|
virtual Int PreferredBackBufferWidth() const = 0;
|
||||||
virtual Int PreferredBackBufferHeight() const = 0;
|
virtual Int PreferredBackBufferHeight() const = 0;
|
||||||
|
@ -16,6 +16,7 @@ namespace xna {
|
|||||||
public:
|
public:
|
||||||
virtual ~IGraphicsDevice() {}
|
virtual ~IGraphicsDevice() {}
|
||||||
virtual void Clear() = 0;
|
virtual void Clear() = 0;
|
||||||
|
virtual void Clear(Color const& color) = 0;
|
||||||
virtual bool Initialize(GameWindow& gameWindow) = 0;
|
virtual bool Initialize(GameWindow& gameWindow) = 0;
|
||||||
virtual bool Present() = 0;
|
virtual bool Present() = 0;
|
||||||
virtual PGraphicsAdapter Adapter() const = 0;
|
virtual PGraphicsAdapter Adapter() const = 0;
|
||||||
|
@ -7,8 +7,6 @@
|
|||||||
namespace xna {
|
namespace xna {
|
||||||
class ISpriteBatch {
|
class ISpriteBatch {
|
||||||
public:
|
public:
|
||||||
static constexpr Matrix _identity = Matrix::Identity();
|
|
||||||
|
|
||||||
virtual ~ISpriteBatch(){}
|
virtual ~ISpriteBatch(){}
|
||||||
virtual void Begin(
|
virtual void Begin(
|
||||||
SpriteSortMode sortMode = SpriteSortMode::Deferred,
|
SpriteSortMode sortMode = SpriteSortMode::Deferred,
|
||||||
@ -17,7 +15,7 @@ namespace xna {
|
|||||||
DepthStencilState * depthStencil = nullptr,
|
DepthStencilState * depthStencil = nullptr,
|
||||||
RasterizerState* rasterizerState = nullptr,
|
RasterizerState* rasterizerState = nullptr,
|
||||||
//Effect
|
//Effect
|
||||||
Matrix const& transformMatrix = _identity
|
Matrix const& transformMatrix = Matrix::Identity()
|
||||||
) = 0;
|
) = 0;
|
||||||
virtual void End() = 0;
|
virtual void End() = 0;
|
||||||
virtual void Draw(Texture2D& texture, Vector2 const& position, Color const& color) = 0;
|
virtual void Draw(Texture2D& texture, Vector2 const& position, Color const& color) = 0;
|
||||||
|
21
framework/input/keyboard.hpp
Normal file
21
framework/input/keyboard.hpp
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#ifndef XNA_INPUT_KEYBOARD_HPP
|
||||||
|
#define XNA_INPUT_KEYBOARD_HPP
|
||||||
|
|
||||||
|
#include "../default.hpp"
|
||||||
|
|
||||||
|
namespace xna {
|
||||||
|
struct IKeyboardState {
|
||||||
|
public:
|
||||||
|
virtual bool IsKeyDown(Keys key) const = 0;
|
||||||
|
virtual bool IsKeyUp(Keys key) const = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
class IKeyboard {
|
||||||
|
public:
|
||||||
|
virtual ~IKeyboard(){}
|
||||||
|
static KeyboardState GetState();
|
||||||
|
static bool IsConnected();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -17,6 +17,10 @@ namespace xna {
|
|||||||
virtual void Stop() override;
|
virtual void Stop() override;
|
||||||
virtual TimeSpan ElapsedTime() override;
|
virtual TimeSpan ElapsedTime() override;
|
||||||
virtual TimeSpan TotalTime() override;
|
virtual TimeSpan TotalTime() override;
|
||||||
|
|
||||||
|
virtual constexpr bool IsActive() override {
|
||||||
|
return !_suspended && !_stopped;
|
||||||
|
}
|
||||||
|
|
||||||
inline SteadyClock::time_point ClockNow() {
|
inline SteadyClock::time_point ClockNow() {
|
||||||
return SteadyClock::now();
|
return SteadyClock::now();
|
||||||
@ -40,8 +44,7 @@ namespace xna {
|
|||||||
SteadyClock::time_point _end;
|
SteadyClock::time_point _end;
|
||||||
long long _total{ 0 };
|
long long _total{ 0 };
|
||||||
bool _suspended{ false };
|
bool _suspended{ false };
|
||||||
bool _stopped { false };
|
bool _stopped { true };
|
||||||
static constexpr double _millisecondMask = 100'000'000.0;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
#include "adapter-dx.hpp"
|
#include "adapter-dx.hpp"
|
||||||
#include "blendstate-dx.hpp"
|
#include "blendstate-dx.hpp"
|
||||||
#include "gdeviceinfo-dx.hpp"
|
#include "gdeviceinfo-dx.hpp"
|
||||||
|
#include "../common/color.hpp"
|
||||||
|
|
||||||
namespace xna {
|
namespace xna {
|
||||||
GraphicsDevice::GraphicsDevice() {
|
GraphicsDevice::GraphicsDevice() {
|
||||||
@ -148,4 +149,15 @@ namespace xna {
|
|||||||
void GraphicsDevice::Clear() {
|
void GraphicsDevice::Clear() {
|
||||||
_context->ClearRenderTargetView(_renderTarget2D->_renderTargetView, _backgroundColor);
|
_context->ClearRenderTargetView(_renderTarget2D->_renderTargetView, _backgroundColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GraphicsDevice::Clear(Color const& color) {
|
||||||
|
const auto v4 = color.ToVector4();
|
||||||
|
|
||||||
|
_backgroundColor[0] = v4.X;
|
||||||
|
_backgroundColor[1] = v4.Y;
|
||||||
|
_backgroundColor[2] = v4.Z;
|
||||||
|
_backgroundColor[3] = v4.W;
|
||||||
|
|
||||||
|
_context->ClearRenderTargetView(_renderTarget2D->_renderTargetView, _backgroundColor);
|
||||||
|
}
|
||||||
}
|
}
|
@ -30,6 +30,7 @@ namespace xna {
|
|||||||
}
|
}
|
||||||
|
|
||||||
virtual void Clear() override;
|
virtual void Clear() override;
|
||||||
|
virtual void Clear(Color const& color) override;
|
||||||
virtual bool Initialize(GameWindow& gameWindow) override;
|
virtual bool Initialize(GameWindow& gameWindow) override;
|
||||||
virtual bool Present() override;
|
virtual bool Present() override;
|
||||||
|
|
||||||
@ -78,7 +79,7 @@ namespace xna {
|
|||||||
PRenderTarget2D _renderTarget2D{ nullptr };
|
PRenderTarget2D _renderTarget2D{ nullptr };
|
||||||
xna::Viewport _viewport{};
|
xna::Viewport _viewport{};
|
||||||
PBlendState _blendState{ nullptr };
|
PBlendState _blendState{ nullptr };
|
||||||
bool _usevsync{ false };
|
bool _usevsync{ true };
|
||||||
|
|
||||||
bool createDevice();
|
bool createDevice();
|
||||||
};
|
};
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
#include "dxgi.h"
|
#include "dxgi.h"
|
||||||
#include "d3d11.h"
|
#include "d3d11.h"
|
||||||
#include <d3dcompiler.h>
|
#include <d3dcompiler.h>
|
||||||
#include <DirectXMath.h>
|
#include <DirectXMath.h>
|
||||||
|
#define NOMINMAX
|
||||||
|
#include <Windows.h>
|
@ -16,8 +16,10 @@ namespace xna {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int Game::Run() {
|
int Game::Run() {
|
||||||
|
Initialize();
|
||||||
|
|
||||||
if (_graphicsDevice == nullptr) {
|
if (_graphicsDevice == nullptr) {
|
||||||
MessageBox(nullptr, "O dispositivo gráfico não foi inicializar corretamente", "Xna Game Engine", MB_OK);
|
MessageBox(nullptr, "O dispositivo gráfico não foi inicializado corretamente", "Xna Game Engine", MB_OK);
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -25,38 +27,37 @@ namespace xna {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int Game::startLoop() {
|
int Game::startLoop() {
|
||||||
MSG msg{};
|
MSG msg{};
|
||||||
_clock.Start();
|
_clock.Start();
|
||||||
|
|
||||||
GameTime gameTime{};
|
|
||||||
TimeSpan endElapsedTime{};
|
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
|
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
|
||||||
{
|
{
|
||||||
TranslateMessage(&msg);
|
TranslateMessage(&msg);
|
||||||
DispatchMessage(&msg);
|
DispatchMessage(&msg);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
auto elapsed = _clock.ElapsedTime();
|
tick();
|
||||||
gameTime.ElapsedGameTime = elapsed - endElapsedTime;
|
|
||||||
gameTime.TotalGameTime = _clock.TotalTime();
|
|
||||||
|
|
||||||
this->Update(gameTime);
|
|
||||||
|
|
||||||
elapsed = _clock.ElapsedTime();
|
|
||||||
gameTime.ElapsedGameTime = elapsed - endElapsedTime;
|
|
||||||
gameTime.TotalGameTime = _clock.TotalTime();
|
|
||||||
|
|
||||||
this->Draw(gameTime);
|
|
||||||
|
|
||||||
_graphicsDevice->Present();
|
|
||||||
|
|
||||||
endElapsedTime = _clock.ElapsedTime();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} while (msg.message != WM_QUIT);
|
} while (msg.message != WM_QUIT);
|
||||||
|
|
||||||
return static_cast<int>(msg.wParam);
|
return static_cast<int>(msg.wParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Game::tick() {
|
||||||
|
_clock.Reset();
|
||||||
|
|
||||||
|
this->Update(_currentGameTime);
|
||||||
|
|
||||||
|
_currentGameTime.ElapsedGameTime = _clock.ElapsedTime();
|
||||||
|
_currentGameTime.TotalGameTime = _clock.TotalTime();
|
||||||
|
|
||||||
|
this->Draw(_currentGameTime);
|
||||||
|
|
||||||
|
_graphicsDevice->Present();
|
||||||
|
|
||||||
|
_currentGameTime.ElapsedGameTime = _clock.ElapsedTime();
|
||||||
|
_currentGameTime.TotalGameTime = _clock.TotalTime();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,8 @@ namespace xna {
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void Draw(GameTime const& gameTime) override{}
|
virtual void Draw(GameTime const& gameTime) override{}
|
||||||
virtual void Initialize() override{}
|
virtual void Initialize() override { LoadContent(); }
|
||||||
|
virtual void LoadContent() override{}
|
||||||
virtual void Update(GameTime const& gameTime) override{}
|
virtual void Update(GameTime const& gameTime) override{}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -39,7 +40,9 @@ namespace xna {
|
|||||||
GameClock _clock{};
|
GameClock _clock{};
|
||||||
GameTime _currentGameTime{};
|
GameTime _currentGameTime{};
|
||||||
|
|
||||||
int startLoop();
|
private:
|
||||||
|
int startLoop();
|
||||||
|
void tick();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,21 +5,26 @@
|
|||||||
#include "gdeviceinfo-dx.hpp"
|
#include "gdeviceinfo-dx.hpp"
|
||||||
|
|
||||||
namespace xna {
|
namespace xna {
|
||||||
GraphicsDeviceManager::GraphicsDeviceManager(Game* game) : _game(game){
|
GraphicsDeviceManager::GraphicsDeviceManager(Game*& game) : _game(game) {
|
||||||
|
}
|
||||||
|
|
||||||
|
bool GraphicsDeviceManager::Initialize() {
|
||||||
GraphicsDeviceInformation information;
|
GraphicsDeviceInformation information;
|
||||||
|
|
||||||
const auto adp = GraphicsAdapter::DefaultAdapter();
|
const auto adp = GraphicsAdapter::DefaultAdapter();
|
||||||
information.Adapter(adp);
|
information.Adapter(adp);
|
||||||
information.GraphicsProfile(xna::GraphicsProfile::HiDef);
|
information.GraphicsProfile(xna::GraphicsProfile::HiDef);
|
||||||
|
|
||||||
PresentationParameters parameters;
|
PresentationParameters parameters;
|
||||||
parameters.BackBufferWidth = _backBufferWidth;
|
parameters.BackBufferWidth = _backBufferWidth;
|
||||||
parameters.BackBufferHeight = _backBufferHeight;
|
parameters.BackBufferHeight = _backBufferHeight;
|
||||||
information.PresentationParameters(parameters);
|
information.PresentationParameters(parameters);
|
||||||
|
|
||||||
information.Window(game->Window());
|
information.Window(_game->Window());
|
||||||
|
|
||||||
CreateDevice(information);
|
CreateDevice(information);
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphicsDeviceManager::ApplyChanges() {
|
void GraphicsDeviceManager::ApplyChanges() {
|
||||||
@ -31,7 +36,8 @@ namespace xna {
|
|||||||
|
|
||||||
void GraphicsDeviceManager::CreateDevice(GraphicsDeviceInformation const& info) {
|
void GraphicsDeviceManager::CreateDevice(GraphicsDeviceInformation const& info) {
|
||||||
_device = New<GraphicsDevice>(info);
|
_device = New<GraphicsDevice>(info);
|
||||||
auto window = _game->Window();
|
//auto window = _game->Window();
|
||||||
|
auto window = info.Window();
|
||||||
|
|
||||||
if (!window->Create()) {
|
if (!window->Create()) {
|
||||||
MessageBox(nullptr, "Falha na criação da janela", "Xna Game Engine", MB_OK);
|
MessageBox(nullptr, "Falha na criação da janela", "Xna Game Engine", MB_OK);
|
||||||
|
@ -6,11 +6,12 @@
|
|||||||
namespace xna {
|
namespace xna {
|
||||||
class GraphicsDeviceManager : public IGraphicsDeviceManager {
|
class GraphicsDeviceManager : public IGraphicsDeviceManager {
|
||||||
public:
|
public:
|
||||||
GraphicsDeviceManager(Game* game);
|
GraphicsDeviceManager(Game*& game);
|
||||||
|
|
||||||
virtual ~GraphicsDeviceManager() override{}
|
virtual ~GraphicsDeviceManager() override{}
|
||||||
|
|
||||||
virtual void ApplyChanges() override;
|
virtual void ApplyChanges() override;
|
||||||
|
virtual bool Initialize() override;
|
||||||
virtual void ToggleFullScreen() override;
|
virtual void ToggleFullScreen() override;
|
||||||
|
|
||||||
virtual constexpr Int PreferredBackBufferWidth() const {
|
virtual constexpr Int PreferredBackBufferWidth() const {
|
||||||
@ -36,8 +37,8 @@ namespace xna {
|
|||||||
virtual void ChangeDevice() override;
|
virtual void ChangeDevice() override;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static constexpr int DefaultBackBufferWidth = 800;
|
static constexpr int DefaultBackBufferWidth = 1280;//800;
|
||||||
static constexpr int DefaultBackBufferHeight = 480;
|
static constexpr int DefaultBackBufferHeight = 720;// 480;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Game*& _game;
|
Game*& _game;
|
||||||
@ -45,7 +46,6 @@ namespace xna {
|
|||||||
Int _backBufferHeight{ DefaultBackBufferHeight };
|
Int _backBufferHeight{ DefaultBackBufferHeight };
|
||||||
bool _isDeviceDirty{ false };
|
bool _isDeviceDirty{ false };
|
||||||
PGraphicsDevice _device;
|
PGraphicsDevice _device;
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
1
framework/platform/keyboard-dx.cpp
Normal file
1
framework/platform/keyboard-dx.cpp
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include "keyboard-dx.hpp"
|
53
framework/platform/keyboard-dx.hpp
Normal file
53
framework/platform/keyboard-dx.hpp
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
#ifndef XNA_PLATFORM_KEYBOARD_DX_HPP
|
||||||
|
#define XNA_PLATFORM_KEYBOARD_DX_HPP
|
||||||
|
|
||||||
|
#include "../input/keyboard.hpp"
|
||||||
|
#include <Keyboard.h>
|
||||||
|
|
||||||
|
namespace xna {
|
||||||
|
struct KeyboardState : public IKeyboardState {
|
||||||
|
public:
|
||||||
|
KeyboardState() = default;
|
||||||
|
KeyboardState(DirectX::Keyboard::State const& state) :_state(state) {}
|
||||||
|
|
||||||
|
virtual bool IsKeyDown(Keys key) const override {
|
||||||
|
const auto k = static_cast<DirectX::Keyboard::Keys>(key);
|
||||||
|
return _state.IsKeyDown(k);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual bool IsKeyUp(Keys key) const override {
|
||||||
|
const auto k = static_cast<DirectX::Keyboard::Keys>(key);
|
||||||
|
return _state.IsKeyUp(k);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
DirectX::Keyboard::State _state{};
|
||||||
|
};
|
||||||
|
|
||||||
|
class Keyboard : public IKeyboard {
|
||||||
|
public:
|
||||||
|
friend class IKeyboard;
|
||||||
|
friend class GameWindow;
|
||||||
|
|
||||||
|
Keyboard() = default;
|
||||||
|
|
||||||
|
private:
|
||||||
|
inline static sptr<DirectX::Keyboard> initializeKeyboard() {
|
||||||
|
return New<DirectX::Keyboard>();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline static sptr<DirectX::Keyboard> _dxKeyboard = initializeKeyboard();
|
||||||
|
};
|
||||||
|
|
||||||
|
inline KeyboardState IKeyboard::GetState() {
|
||||||
|
|
||||||
|
const auto state = Keyboard::_dxKeyboard->GetState();
|
||||||
|
return KeyboardState(state);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool IKeyboard::IsConnected() {
|
||||||
|
return Keyboard::_dxKeyboard->IsConnected();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -23,7 +23,7 @@ namespace xna {
|
|||||||
DepthStencilState* depthStencil = nullptr,
|
DepthStencilState* depthStencil = nullptr,
|
||||||
RasterizerState* rasterizerState = nullptr,
|
RasterizerState* rasterizerState = nullptr,
|
||||||
//Effect
|
//Effect
|
||||||
Matrix const& transformMatrix = _identity
|
Matrix const& transformMatrix = Matrix::Identity()
|
||||||
) override;
|
) override;
|
||||||
|
|
||||||
virtual void End() override;
|
virtual void End() override;
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#include "window-dx.hpp"
|
#include "window-dx.hpp"
|
||||||
|
#include "keyboard-dx.hpp"
|
||||||
|
|
||||||
namespace xna {
|
namespace xna {
|
||||||
GameWindow::GameWindow() {
|
GameWindow::GameWindow() {
|
||||||
@ -136,6 +137,20 @@ namespace xna {
|
|||||||
case WM_DESTROY:
|
case WM_DESTROY:
|
||||||
PostQuitMessage(0);
|
PostQuitMessage(0);
|
||||||
return 0;
|
return 0;
|
||||||
|
case WM_ACTIVATE:
|
||||||
|
case WM_ACTIVATEAPP:
|
||||||
|
Keyboard::_dxKeyboard->ProcessMessage(msg, wParam, lParam);
|
||||||
|
break;
|
||||||
|
case WM_SYSKEYDOWN:
|
||||||
|
if (!(wParam == VK_RETURN && (lParam & 0x60000000) == 0x20000000)) {
|
||||||
|
Keyboard::_dxKeyboard->ProcessMessage(msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case WM_KEYDOWN:
|
||||||
|
case WM_KEYUP:
|
||||||
|
case WM_SYSKEYUP:
|
||||||
|
Keyboard::_dxKeyboard->ProcessMessage(msg, wParam, lParam);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return DefWindowProc(hWnd, msg, wParam, lParam);
|
return DefWindowProc(hWnd, msg, wParam, lParam);
|
||||||
|
@ -15,24 +15,60 @@ using namespace xna;
|
|||||||
class Game1 : public Game {
|
class Game1 : public Game {
|
||||||
public:
|
public:
|
||||||
Game1() {
|
Game1() {
|
||||||
graphics = New<GraphicsDeviceManager>(this);
|
auto _game = reinterpret_cast<Game*>(this);
|
||||||
|
graphics = New<GraphicsDeviceManager>(_game);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Initialize() override {
|
||||||
|
graphics->Initialize();
|
||||||
|
|
||||||
|
Game::Initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
void LoadContent() override {
|
||||||
|
spriteBatch = New<SpriteBatch>(*_graphicsDevice);
|
||||||
|
|
||||||
XnaErrorCode err;
|
XnaErrorCode err;
|
||||||
texture = Texture2D::FromStream(*_graphicsDevice, "D:\\sprite.jpg", &err);
|
texture = Texture2D::FromStream(*_graphicsDevice, "D:\\sprite.jpg", &err);
|
||||||
|
|
||||||
spriteBatch = New<SpriteBatch>(*_graphicsDevice);
|
Game::LoadContent();
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void Update(GameTime const& gameTime) override {
|
void Update(GameTime const& gameTime) override {
|
||||||
|
|
||||||
|
const auto state = Keyboard::GetState();
|
||||||
|
|
||||||
|
if (state.IsKeyDown(Keys::Right)) {
|
||||||
|
position.X += 1 * gameTime.ElapsedGameTime.TotalMilliseconds();
|
||||||
|
}
|
||||||
|
if (state.IsKeyDown(Keys::Left)) {
|
||||||
|
position.X -= 1 * gameTime.ElapsedGameTime.TotalMilliseconds();
|
||||||
|
}
|
||||||
|
if (state.IsKeyDown(Keys::Up)) {
|
||||||
|
position.Y -= 1 * gameTime.ElapsedGameTime.TotalMilliseconds();
|
||||||
|
}
|
||||||
|
if (state.IsKeyDown(Keys::Down)) {
|
||||||
|
position.Y += 1 * gameTime.ElapsedGameTime.TotalMilliseconds();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*if (position.X > 1280 || position.X < 0)
|
||||||
|
vel *= -1;
|
||||||
|
|
||||||
|
if (gameTime.ElapsedGameTime.TotalMilliseconds() > 1) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
position.X += 0.05 * (gameTime.ElapsedGameTime.TotalMilliseconds() * vel);*/
|
||||||
|
//position.X += 2 * vel;
|
||||||
|
|
||||||
Game::Update(gameTime);
|
Game::Update(gameTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void Draw(GameTime const& gameTime) override {
|
void Draw(GameTime const& gameTime) override {
|
||||||
_graphicsDevice->Clear();
|
_graphicsDevice->Clear(Colors::CornflowerBlue);
|
||||||
|
|
||||||
spriteBatch->Begin();
|
spriteBatch->Begin();
|
||||||
spriteBatch->Draw(*texture, Vector2(20, 20), nullptr, Colors::White, 0, {0,0}, 0.5F, SpriteEffects::None, 0);
|
spriteBatch->Draw(*texture, position, nullptr, Colors::White, 0, { 0,0 }, 0.5F, SpriteEffects::None, 0);
|
||||||
spriteBatch->End();
|
spriteBatch->End();
|
||||||
|
|
||||||
Game::Draw(gameTime);
|
Game::Draw(gameTime);
|
||||||
@ -42,6 +78,8 @@ private:
|
|||||||
PGraphicsDeviceManager graphics = nullptr;
|
PGraphicsDeviceManager graphics = nullptr;
|
||||||
PSpriteBatch spriteBatch = nullptr;
|
PSpriteBatch spriteBatch = nullptr;
|
||||||
PTexture2D texture = nullptr;
|
PTexture2D texture = nullptr;
|
||||||
|
Vector2 position{};
|
||||||
|
float vel = 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
int APIENTRY WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nCmdShow) {
|
int APIENTRY WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nCmdShow) {
|
||||||
|
@ -15,5 +15,6 @@
|
|||||||
#include "platform/texture-dx.hpp"
|
#include "platform/texture-dx.hpp"
|
||||||
#include "platform/spritebatch-dx.hpp"
|
#include "platform/spritebatch-dx.hpp"
|
||||||
#include "common/color.hpp"
|
#include "common/color.hpp"
|
||||||
|
#include "platform/keyboard-dx.hpp"
|
||||||
|
|
||||||
// TODO: Reference additional headers your program requires here.
|
// TODO: Reference additional headers your program requires here.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user