HandmadeHero/project/engine.h

163 lines
2.3 KiB
C
Raw Normal View History

2023-09-15 18:35:27 -07:00
/*
Services the engine provides to the platform layer
*/
#pragma once
#include "platform.h"
#define NS_ENGINE_BEGIN namespace engine {
#define NS_ENGINE_END }
NS_ENGINE_BEGIN
struct OffscreenBuffer
{
void* Memory; // Lets use directly mess with the "pixel's memory buffer"
u32 Width;
u32 Height;
u32 Pitch;
u32 BytesPerPixel;
};
2023-09-17 18:20:11 -07:00
// TODO : Will be gutting this once we have other stuff lifted.
2023-09-16 15:41:07 -07:00
struct SoundBuffer
{
s16* Samples;
u32 RunningSampleIndex;
s32 SamplesPerSecond;
s32 NumSamples;
};
2023-09-17 18:20:11 -07:00
struct DigitalBtn
{
s32 HalfTransitions;
b32 State;
};
#define DigitalBtn_Up 0
#define DigitalBtn_Down 1
struct AnalogAxis
{
f32 Start;
f32 End;
f32 Min;
f32 Max;
};
struct AnalogStick
{
AnalogAxis X;
AnalogAxis Y;
};
struct KeyboardState
{
DigitalBtn W;
DigitalBtn A;
DigitalBtn S;
DigitalBtn D;
};
struct MousesState
{
DigitalBtn Left;
DigitalBtn Middle;
DigitalBtn Right;
};
struct XInputPadState
{
struct
{
AnalogStick Left;
AnalogStick Right;
} Stick;
AnalogAxis LeftTrigger;
AnalogAxis RightTrigger;
union {
DigitalBtn Btns[14];
struct {
struct {
DigitalBtn Up;
DigitalBtn Down;
DigitalBtn Left;
DigitalBtn Right;
} DPad;
DigitalBtn A;
DigitalBtn B;
DigitalBtn X;
DigitalBtn Y;
DigitalBtn Back;
DigitalBtn Start;
DigitalBtn LeftShoulder;
DigitalBtn RightShoulder;
};
};
b32 using_analog()
{
return true;
};
};
struct DualsensePadState
{
struct
{
AnalogStick Left;
AnalogStick Right;
} Stick;
AnalogAxis L2;
AnalogAxis R2;
union {
DigitalBtn Btns[14];
struct {
struct {
DigitalBtn Up;
DigitalBtn Down;
DigitalBtn Left;
DigitalBtn Right;
} DPad;
DigitalBtn X;
DigitalBtn Circle;
DigitalBtn Square;
DigitalBtn Triangle;
DigitalBtn Share;
DigitalBtn Options;
DigitalBtn L1;
DigitalBtn R1;
};
};
b32 using_analog()
{
return true;
};
};
struct ControllerState
{
KeyboardState* Keyboard;
MousesState* Mouse;
XInputPadState* XPad;
DualsensePadState* DSPad;
};
struct InputState
{
ControllerState Controllers[4];
};
b32 input_using_analog();
2023-09-15 18:35:27 -07:00
// Needs a contextual reference to four things:
// Timing, Input, Bitmap Buffer, Sound Buffer
2023-09-17 18:20:11 -07:00
void update_and_render( InputState* input, OffscreenBuffer* back_buffer, SoundBuffer* sound_buffer );
2023-09-15 18:35:27 -07:00
NS_ENGINE_END