3d movement
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
#include "Global.h"
|
#include "Global.h"
|
||||||
#include "bx/constants.h"
|
#include "bx/bx.h"
|
||||||
|
#include "bx/float4x4_t.h"
|
||||||
#include "bx/math.h"
|
#include "bx/math.h"
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
@@ -9,89 +10,77 @@ namespace
|
|||||||
Game::GameInstance* GameInst = nullptr;
|
Game::GameInstance* GameInst = nullptr;
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
void Vec2::Normalize()
|
void Transform::CreateTransform(float* out, bx::Vec3 pos, bx::Quaternion rot, bx::Vec3 scale)
|
||||||
{
|
|
||||||
float len = bx::sqrt(X * X + Y * Y);
|
|
||||||
X /= len;
|
|
||||||
Y /= len;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Vec3::Normalize()
|
|
||||||
{
|
|
||||||
float len = bx::sqrt(X * X + Y * Y + Z * Z);
|
|
||||||
X /= len;
|
|
||||||
Y /= len;
|
|
||||||
Z /= len;
|
|
||||||
}
|
|
||||||
|
|
||||||
Quat Quat::FromEuler(float x, float y, float z)
|
|
||||||
{
|
|
||||||
x *= bx::kPi / 180.0f;
|
|
||||||
y *= bx::kPi / 180.0f;
|
|
||||||
z *= bx::kPi / 180.0f;
|
|
||||||
|
|
||||||
float cX = bx::cos(x);
|
|
||||||
float cY = bx::cos(y);
|
|
||||||
float cZ = bx::cos(z);
|
|
||||||
float sX = bx::sin(x);
|
|
||||||
float sY = bx::sin(y);
|
|
||||||
float sZ = bx::sin(z);
|
|
||||||
|
|
||||||
return Quat{cX * cY * cZ - sX * sY * sZ,
|
|
||||||
sY * cX * cZ - sX * sZ * cY,
|
|
||||||
sX * sY * cZ + sZ * cX * cY,
|
|
||||||
sX * cY * cZ + sY * sZ * cX};
|
|
||||||
}
|
|
||||||
|
|
||||||
Quat Quat::FromEuler(Vec3 rot)
|
|
||||||
{
|
|
||||||
return Quat::FromEuler(rot.X, rot.Y, rot.Z);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Mat4::CreateTransform(float* out, Vec3 pos, Quat rot, Vec3 scale)
|
|
||||||
{
|
{
|
||||||
if (out == nullptr) return;
|
if (out == nullptr) return;
|
||||||
float rMat[16]{0};
|
float rMat[16]{0};
|
||||||
float tMat[16]{0};
|
float tMat[16]{0};
|
||||||
float sMat[16]{0};
|
float sMat[16]{0};
|
||||||
bx::mtxFromQuaternion(rMat, bx::Quaternion{rot.X, rot.Y, rot.Z, rot.W});
|
bx::mtxFromQuaternion(rMat, bx::Quaternion{rot.x, rot.y, rot.z, rot.w});
|
||||||
bx::mtxTranslate(tMat, pos.X, pos.Y, pos.Z);
|
bx::mtxTranslate(tMat, pos.x, pos.y, pos.z);
|
||||||
bx::mtxScale(sMat, scale.X, scale.Y, scale.Z);
|
bx::mtxScale(sMat, scale.x, scale.y, scale.z);
|
||||||
float buf[16]{0};
|
float buf[16]{0};
|
||||||
bx::mtxMul(buf, rMat, sMat);
|
bx::mtxMul(buf, rMat, sMat);
|
||||||
bx::mtxMul(out, buf, tMat);
|
bx::mtxMul(out, buf, tMat);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Mat4::TranslateLocal(Vec3 offset)
|
void Transform::Translate(bx::Vec3 offset)
|
||||||
{
|
{
|
||||||
M[12] += offset.X;
|
Position = bx::add(Position, offset);
|
||||||
M[13] += offset.Y;
|
|
||||||
M[14] += offset.Z;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Mat4::Rotate(Vec3 rotation)
|
void Transform::TranslateLocal(bx::Vec3 offset)
|
||||||
|
{
|
||||||
|
UpdateMatrix();
|
||||||
|
float offsetPtr[4]{offset.x, offset.y, offset.z, 0.0f};
|
||||||
|
float localOffset[4]{0.0f};
|
||||||
|
bx::vec4MulMtx(localOffset, offsetPtr, MI.M);
|
||||||
|
Position = bx::add(Position, {localOffset[0], localOffset[1], localOffset[2]});
|
||||||
|
}
|
||||||
|
|
||||||
|
void Transform::Rotate(bx::Vec3 rotation)
|
||||||
{
|
{
|
||||||
float rot[16]{0};
|
float rot[16]{0};
|
||||||
bx::mtxRotateXYZ(rot, rotation.X, rotation.Y, rotation.Z);
|
bx::mtxRotateXYZ(rot, rotation.x, rotation.y, rotation.z);
|
||||||
float temp[16]{0};
|
float temp[16]{0};
|
||||||
bx::mtxMul(temp, M, rot);
|
bx::mtxMul(temp, rot, Rotation.M);
|
||||||
for (int32_t i = 0; i < 16; ++i)
|
bx::memCopy(Rotation.M, temp, sizeof(temp));
|
||||||
M[i] = temp[i];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Vec3 Mat4::Right()
|
void Transform::RotateLocal(bx::Vec3 rotation)
|
||||||
{
|
{
|
||||||
return {M[0], M[1], M[2]};
|
float rot[16]{0};
|
||||||
|
bx::mtxRotateXYZ(rot, rotation.x, rotation.y, rotation.z);
|
||||||
|
float temp[16]{0};
|
||||||
|
bx::mtxMul(temp, Rotation.M, rot);
|
||||||
|
bx::memCopy(Rotation.M, temp, sizeof(temp));
|
||||||
}
|
}
|
||||||
|
|
||||||
Vec3 Mat4::Up()
|
bx::Vec3 Transform::Right() const
|
||||||
{
|
{
|
||||||
return {M[4], M[5], M[6]};
|
return {M.M[0], M.M[1], M.M[2]};
|
||||||
}
|
}
|
||||||
|
|
||||||
Vec3 Mat4::Forward()
|
bx::Vec3 Transform::Up() const
|
||||||
{
|
{
|
||||||
return {M[8], M[9], M[10]};
|
return {M.M[4], M.M[5], M.M[6]};
|
||||||
|
}
|
||||||
|
|
||||||
|
bx::Vec3 Transform::Forward() const
|
||||||
|
{
|
||||||
|
return {M.M[8], M.M[9], M.M[10]};
|
||||||
|
}
|
||||||
|
|
||||||
|
void Transform::UpdateMatrix()
|
||||||
|
{
|
||||||
|
Mat4 pos;
|
||||||
|
Mat4 scale;
|
||||||
|
bx::mtxTranslate(pos.M, Position.x, Position.y, Position.z);
|
||||||
|
bx::mtxScale(scale.M, Scale.x, Scale.y, Scale.z);
|
||||||
|
Mat4 temp;
|
||||||
|
bx::mtxMul(temp.M, scale.M, Rotation.M);
|
||||||
|
bx::mtxMul(M.M, pos.M, temp.M);
|
||||||
|
bx::mtxInverse(MI.M, M.M);
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace Game
|
namespace Game
|
||||||
|
|||||||
@@ -1,53 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include <bx/math.h>
|
|
||||||
#include <cstdint>
|
|
||||||
|
|
||||||
struct SharedData;
|
#include "bx/math.h"
|
||||||
|
|
||||||
struct IVec2
|
|
||||||
{
|
|
||||||
int32_t X = 0;
|
|
||||||
int32_t Y = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct IVec3
|
|
||||||
{
|
|
||||||
int32_t X = 0;
|
|
||||||
int32_t Y = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct Vec2
|
|
||||||
{
|
|
||||||
float X = 0.0f;
|
|
||||||
float Y = 0.0f;
|
|
||||||
|
|
||||||
void Normalize();
|
|
||||||
};
|
|
||||||
|
|
||||||
struct Vec3
|
|
||||||
{
|
|
||||||
float X = 0.0f;
|
|
||||||
float Y = 0.0f;
|
|
||||||
float Z = 0.0f;
|
|
||||||
|
|
||||||
bx::Vec3 ToBX()
|
|
||||||
{
|
|
||||||
return {X, Y, Z};
|
|
||||||
};
|
|
||||||
|
|
||||||
void Normalize();
|
|
||||||
};
|
|
||||||
|
|
||||||
struct Quat
|
|
||||||
{
|
|
||||||
float X = 0.0f;
|
|
||||||
float Y = 0.0f;
|
|
||||||
float Z = 0.0f;
|
|
||||||
float W = 1.0f;
|
|
||||||
|
|
||||||
static Quat FromEuler(float x, float y, float z);
|
|
||||||
static Quat FromEuler(Vec3 rot);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct Mat4
|
struct Mat4
|
||||||
{
|
{
|
||||||
@@ -69,15 +22,30 @@ struct Mat4
|
|||||||
0.0,
|
0.0,
|
||||||
1.0,
|
1.0,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void CreateTransform(float* out, Vec3 pos, Quat rot = {}, Vec3 scale = {1.0f, 1.0f, 1.0f});
|
|
||||||
void TranslateLocal(Vec3 offset);
|
|
||||||
void Rotate(Vec3 rotation);
|
|
||||||
Vec3 Right();
|
|
||||||
Vec3 Up();
|
|
||||||
Vec3 Forward();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct Transform
|
||||||
|
{
|
||||||
|
Mat4 M;
|
||||||
|
Mat4 MI;
|
||||||
|
bx::Vec3 Position{0.0f, 0.0f, 0.0f};
|
||||||
|
Mat4 Rotation;
|
||||||
|
bx::Vec3 Scale{1.0f, 1.0f, 1.0f};
|
||||||
|
|
||||||
|
static void CreateTransform(float* out, bx::Vec3 pos, bx::Quaternion rot, bx::Vec3 scale);
|
||||||
|
void Translate(bx::Vec3 offset);
|
||||||
|
void TranslateLocal(bx::Vec3 offset);
|
||||||
|
void Rotate(bx::Vec3 rotation);
|
||||||
|
void RotateLocal(bx::Vec3 rotation);
|
||||||
|
bx::Vec3 Right() const;
|
||||||
|
bx::Vec3 Up() const;
|
||||||
|
bx::Vec3 Forward() const;
|
||||||
|
const float* GetPtr();
|
||||||
|
void UpdateMatrix();
|
||||||
|
};
|
||||||
|
|
||||||
|
struct SharedData;
|
||||||
|
|
||||||
namespace Game
|
namespace Game
|
||||||
{
|
{
|
||||||
struct GameInstance;
|
struct GameInstance;
|
||||||
|
|||||||
506
src/game/Input.h
506
src/game/Input.h
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
enum class ScanCode
|
enum class ScanCode
|
||||||
{
|
{
|
||||||
SDL_SCANCODE_UNKNOWN = 0,
|
UNKNOWN = 0,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \name Usage page 0x07
|
* \name Usage page 0x07
|
||||||
@@ -11,55 +11,55 @@ enum class ScanCode
|
|||||||
*/
|
*/
|
||||||
/* @{ */
|
/* @{ */
|
||||||
|
|
||||||
SDL_SCANCODE_A = 4,
|
A = 4,
|
||||||
SDL_SCANCODE_B = 5,
|
B = 5,
|
||||||
SDL_SCANCODE_C = 6,
|
C = 6,
|
||||||
SDL_SCANCODE_D = 7,
|
D = 7,
|
||||||
SDL_SCANCODE_E = 8,
|
E = 8,
|
||||||
SDL_SCANCODE_F = 9,
|
F = 9,
|
||||||
SDL_SCANCODE_G = 10,
|
G = 10,
|
||||||
SDL_SCANCODE_H = 11,
|
H = 11,
|
||||||
SDL_SCANCODE_I = 12,
|
I = 12,
|
||||||
SDL_SCANCODE_J = 13,
|
J = 13,
|
||||||
SDL_SCANCODE_K = 14,
|
K = 14,
|
||||||
SDL_SCANCODE_L = 15,
|
L = 15,
|
||||||
SDL_SCANCODE_M = 16,
|
M = 16,
|
||||||
SDL_SCANCODE_N = 17,
|
N = 17,
|
||||||
SDL_SCANCODE_O = 18,
|
O = 18,
|
||||||
SDL_SCANCODE_P = 19,
|
P = 19,
|
||||||
SDL_SCANCODE_Q = 20,
|
Q = 20,
|
||||||
SDL_SCANCODE_R = 21,
|
R = 21,
|
||||||
SDL_SCANCODE_S = 22,
|
S = 22,
|
||||||
SDL_SCANCODE_T = 23,
|
T = 23,
|
||||||
SDL_SCANCODE_U = 24,
|
U = 24,
|
||||||
SDL_SCANCODE_V = 25,
|
V = 25,
|
||||||
SDL_SCANCODE_W = 26,
|
W = 26,
|
||||||
SDL_SCANCODE_X = 27,
|
X = 27,
|
||||||
SDL_SCANCODE_Y = 28,
|
Y = 28,
|
||||||
SDL_SCANCODE_Z = 29,
|
Z = 29,
|
||||||
|
|
||||||
SDL_SCANCODE_1 = 30,
|
_1 = 30,
|
||||||
SDL_SCANCODE_2 = 31,
|
_2 = 31,
|
||||||
SDL_SCANCODE_3 = 32,
|
_3 = 32,
|
||||||
SDL_SCANCODE_4 = 33,
|
_4 = 33,
|
||||||
SDL_SCANCODE_5 = 34,
|
_5 = 34,
|
||||||
SDL_SCANCODE_6 = 35,
|
_6 = 35,
|
||||||
SDL_SCANCODE_7 = 36,
|
_7 = 36,
|
||||||
SDL_SCANCODE_8 = 37,
|
_8 = 37,
|
||||||
SDL_SCANCODE_9 = 38,
|
_9 = 38,
|
||||||
SDL_SCANCODE_0 = 39,
|
_0 = 39,
|
||||||
|
|
||||||
SDL_SCANCODE_RETURN = 40,
|
RETURN = 40,
|
||||||
SDL_SCANCODE_ESCAPE = 41,
|
ESCAPE = 41,
|
||||||
SDL_SCANCODE_BACKSPACE = 42,
|
BACKSPACE = 42,
|
||||||
SDL_SCANCODE_TAB = 43,
|
TAB = 43,
|
||||||
SDL_SCANCODE_SPACE = 44,
|
SPACE = 44,
|
||||||
|
|
||||||
SDL_SCANCODE_MINUS = 45,
|
MINUS = 45,
|
||||||
SDL_SCANCODE_EQUALS = 46,
|
EQUALS = 46,
|
||||||
SDL_SCANCODE_LEFTBRACKET = 47,
|
LEFTBRACKET = 47,
|
||||||
SDL_SCANCODE_RIGHTBRACKET = 48,
|
RIGHTBRACKET = 48,
|
||||||
SDL_SCANCODE_BACKSLASH = 49, /**< Located at the lower left of the return
|
BACKSLASH = 49, /**< Located at the lower left of the return
|
||||||
* key on ISO keyboards and at the right end
|
* key on ISO keyboards and at the right end
|
||||||
* of the QWERTY row on ANSI keyboards.
|
* of the QWERTY row on ANSI keyboards.
|
||||||
* Produces REVERSE SOLIDUS (backslash) and
|
* Produces REVERSE SOLIDUS (backslash) and
|
||||||
@@ -73,21 +73,21 @@ enum class ScanCode
|
|||||||
* layout, and ASTERISK and MICRO SIGN in a
|
* layout, and ASTERISK and MICRO SIGN in a
|
||||||
* French Windows layout.
|
* French Windows layout.
|
||||||
*/
|
*/
|
||||||
SDL_SCANCODE_NONUSHASH = 50, /**< ISO USB keyboards actually use this code
|
NONUSHASH = 50, /**< ISO USB keyboards actually use this code
|
||||||
* instead of 49 for the same key, but all
|
* instead of 49 for the same key, but all
|
||||||
* OSes I've seen treat the two codes
|
* OSes I've seen treat the two codes
|
||||||
* identically. So, as an implementor, unless
|
* identically. So, as an implementor, unless
|
||||||
* your keyboard generates both of those
|
* your keyboard generates both of those
|
||||||
* codes and your OS treats them differently,
|
* codes and your OS treats them differently,
|
||||||
* you should generate SDL_SCANCODE_BACKSLASH
|
* you should generate BACKSLASH
|
||||||
* instead of this code. As a user, you
|
* instead of this code. As a user, you
|
||||||
* should not rely on this code because SDL
|
* should not rely on this code because SDL
|
||||||
* will never generate it with most (all?)
|
* will never generate it with most (all?)
|
||||||
* keyboards.
|
* keyboards.
|
||||||
*/
|
*/
|
||||||
SDL_SCANCODE_SEMICOLON = 51,
|
SEMICOLON = 51,
|
||||||
SDL_SCANCODE_APOSTROPHE = 52,
|
APOSTROPHE = 52,
|
||||||
SDL_SCANCODE_GRAVE = 53, /**< Located in the top left corner (on both ANSI
|
GRAVE = 53, /**< Located in the top left corner (on both ANSI
|
||||||
* and ISO keyboards). Produces GRAVE ACCENT and
|
* and ISO keyboards). Produces GRAVE ACCENT and
|
||||||
* TILDE in a US Windows layout and in US and UK
|
* TILDE in a US Windows layout and in US and UK
|
||||||
* Mac layouts on ANSI keyboards, GRAVE ACCENT
|
* Mac layouts on ANSI keyboards, GRAVE ACCENT
|
||||||
@@ -104,60 +104,60 @@ enum class ScanCode
|
|||||||
* SIGN in a Swiss German, German, or French Mac
|
* SIGN in a Swiss German, German, or French Mac
|
||||||
* layout on ANSI keyboards.
|
* layout on ANSI keyboards.
|
||||||
*/
|
*/
|
||||||
SDL_SCANCODE_COMMA = 54,
|
COMMA = 54,
|
||||||
SDL_SCANCODE_PERIOD = 55,
|
PERIOD = 55,
|
||||||
SDL_SCANCODE_SLASH = 56,
|
SLASH = 56,
|
||||||
|
|
||||||
SDL_SCANCODE_CAPSLOCK = 57,
|
CAPSLOCK = 57,
|
||||||
|
|
||||||
SDL_SCANCODE_F1 = 58,
|
F1 = 58,
|
||||||
SDL_SCANCODE_F2 = 59,
|
F2 = 59,
|
||||||
SDL_SCANCODE_F3 = 60,
|
F3 = 60,
|
||||||
SDL_SCANCODE_F4 = 61,
|
F4 = 61,
|
||||||
SDL_SCANCODE_F5 = 62,
|
F5 = 62,
|
||||||
SDL_SCANCODE_F6 = 63,
|
F6 = 63,
|
||||||
SDL_SCANCODE_F7 = 64,
|
F7 = 64,
|
||||||
SDL_SCANCODE_F8 = 65,
|
F8 = 65,
|
||||||
SDL_SCANCODE_F9 = 66,
|
F9 = 66,
|
||||||
SDL_SCANCODE_F10 = 67,
|
F10 = 67,
|
||||||
SDL_SCANCODE_F11 = 68,
|
F11 = 68,
|
||||||
SDL_SCANCODE_F12 = 69,
|
F12 = 69,
|
||||||
|
|
||||||
SDL_SCANCODE_PRINTSCREEN = 70,
|
PRINTSCREEN = 70,
|
||||||
SDL_SCANCODE_SCROLLLOCK = 71,
|
SCROLLLOCK = 71,
|
||||||
SDL_SCANCODE_PAUSE = 72,
|
PAUSE = 72,
|
||||||
SDL_SCANCODE_INSERT = 73, /**< insert on PC, help on some Mac keyboards (but
|
INSERT = 73, /**< insert on PC, help on some Mac keyboards (but
|
||||||
does send code 73, not 117) */
|
does send code 73, not 117) */
|
||||||
SDL_SCANCODE_HOME = 74,
|
HOME = 74,
|
||||||
SDL_SCANCODE_PAGEUP = 75,
|
PAGEUP = 75,
|
||||||
SDL_SCANCODE_DELETE = 76,
|
DELETE = 76,
|
||||||
SDL_SCANCODE_END = 77,
|
END = 77,
|
||||||
SDL_SCANCODE_PAGEDOWN = 78,
|
PAGEDOWN = 78,
|
||||||
SDL_SCANCODE_RIGHT = 79,
|
RIGHT = 79,
|
||||||
SDL_SCANCODE_LEFT = 80,
|
LEFT = 80,
|
||||||
SDL_SCANCODE_DOWN = 81,
|
DOWN = 81,
|
||||||
SDL_SCANCODE_UP = 82,
|
UP = 82,
|
||||||
|
|
||||||
SDL_SCANCODE_NUMLOCKCLEAR = 83, /**< num lock on PC, clear on Mac keyboards
|
NUMLOCKCLEAR = 83, /**< num lock on PC, clear on Mac keyboards
|
||||||
*/
|
*/
|
||||||
SDL_SCANCODE_KP_DIVIDE = 84,
|
KP_DIVIDE = 84,
|
||||||
SDL_SCANCODE_KP_MULTIPLY = 85,
|
KP_MULTIPLY = 85,
|
||||||
SDL_SCANCODE_KP_MINUS = 86,
|
KP_MINUS = 86,
|
||||||
SDL_SCANCODE_KP_PLUS = 87,
|
KP_PLUS = 87,
|
||||||
SDL_SCANCODE_KP_ENTER = 88,
|
KP_ENTER = 88,
|
||||||
SDL_SCANCODE_KP_1 = 89,
|
KP_1 = 89,
|
||||||
SDL_SCANCODE_KP_2 = 90,
|
KP_2 = 90,
|
||||||
SDL_SCANCODE_KP_3 = 91,
|
KP_3 = 91,
|
||||||
SDL_SCANCODE_KP_4 = 92,
|
KP_4 = 92,
|
||||||
SDL_SCANCODE_KP_5 = 93,
|
KP_5 = 93,
|
||||||
SDL_SCANCODE_KP_6 = 94,
|
KP_6 = 94,
|
||||||
SDL_SCANCODE_KP_7 = 95,
|
KP_7 = 95,
|
||||||
SDL_SCANCODE_KP_8 = 96,
|
KP_8 = 96,
|
||||||
SDL_SCANCODE_KP_9 = 97,
|
KP_9 = 97,
|
||||||
SDL_SCANCODE_KP_0 = 98,
|
KP_0 = 98,
|
||||||
SDL_SCANCODE_KP_PERIOD = 99,
|
KP_PERIOD = 99,
|
||||||
|
|
||||||
SDL_SCANCODE_NONUSBACKSLASH = 100, /**< This is the additional key that ISO
|
NONUSBACKSLASH = 100, /**< This is the additional key that ISO
|
||||||
* keyboards have over ANSI ones,
|
* keyboards have over ANSI ones,
|
||||||
* located between left shift and Y.
|
* located between left shift and Y.
|
||||||
* Produces GRAVE ACCENT and TILDE in a
|
* Produces GRAVE ACCENT and TILDE in a
|
||||||
@@ -167,134 +167,134 @@ enum class ScanCode
|
|||||||
* LESS-THAN SIGN and GREATER-THAN SIGN
|
* LESS-THAN SIGN and GREATER-THAN SIGN
|
||||||
* in a Swiss German, German, or French
|
* in a Swiss German, German, or French
|
||||||
* layout. */
|
* layout. */
|
||||||
SDL_SCANCODE_APPLICATION = 101, /**< windows contextual menu, compose */
|
APPLICATION = 101, /**< windows contextual menu, compose */
|
||||||
SDL_SCANCODE_POWER = 102, /**< The USB document says this is a status flag,
|
POWER = 102, /**< The USB document says this is a status flag,
|
||||||
* not a physical key - but some Mac keyboards
|
* not a physical key - but some Mac keyboards
|
||||||
* do have a power key. */
|
* do have a power key. */
|
||||||
SDL_SCANCODE_KP_EQUALS = 103,
|
KP_EQUALS = 103,
|
||||||
SDL_SCANCODE_F13 = 104,
|
F13 = 104,
|
||||||
SDL_SCANCODE_F14 = 105,
|
F14 = 105,
|
||||||
SDL_SCANCODE_F15 = 106,
|
F15 = 106,
|
||||||
SDL_SCANCODE_F16 = 107,
|
F16 = 107,
|
||||||
SDL_SCANCODE_F17 = 108,
|
F17 = 108,
|
||||||
SDL_SCANCODE_F18 = 109,
|
F18 = 109,
|
||||||
SDL_SCANCODE_F19 = 110,
|
F19 = 110,
|
||||||
SDL_SCANCODE_F20 = 111,
|
F20 = 111,
|
||||||
SDL_SCANCODE_F21 = 112,
|
F21 = 112,
|
||||||
SDL_SCANCODE_F22 = 113,
|
F22 = 113,
|
||||||
SDL_SCANCODE_F23 = 114,
|
F23 = 114,
|
||||||
SDL_SCANCODE_F24 = 115,
|
F24 = 115,
|
||||||
SDL_SCANCODE_EXECUTE = 116,
|
EXECUTE = 116,
|
||||||
SDL_SCANCODE_HELP = 117, /**< AL Integrated Help Center */
|
HELP = 117, /**< AL Integrated Help Center */
|
||||||
SDL_SCANCODE_MENU = 118, /**< Menu (show menu) */
|
MENU = 118, /**< Menu (show menu) */
|
||||||
SDL_SCANCODE_SELECT = 119,
|
SELECT = 119,
|
||||||
SDL_SCANCODE_STOP = 120, /**< AC Stop */
|
STOP = 120, /**< AC Stop */
|
||||||
SDL_SCANCODE_AGAIN = 121, /**< AC Redo/Repeat */
|
AGAIN = 121, /**< AC Redo/Repeat */
|
||||||
SDL_SCANCODE_UNDO = 122, /**< AC Undo */
|
UNDO = 122, /**< AC Undo */
|
||||||
SDL_SCANCODE_CUT = 123, /**< AC Cut */
|
CUT = 123, /**< AC Cut */
|
||||||
SDL_SCANCODE_COPY = 124, /**< AC Copy */
|
COPY = 124, /**< AC Copy */
|
||||||
SDL_SCANCODE_PASTE = 125, /**< AC Paste */
|
PASTE = 125, /**< AC Paste */
|
||||||
SDL_SCANCODE_FIND = 126, /**< AC Find */
|
FIND = 126, /**< AC Find */
|
||||||
SDL_SCANCODE_MUTE = 127,
|
MUTE = 127,
|
||||||
SDL_SCANCODE_VOLUMEUP = 128,
|
VOLUMEUP = 128,
|
||||||
SDL_SCANCODE_VOLUMEDOWN = 129,
|
VOLUMEDOWN = 129,
|
||||||
/* not sure whether there's a reason to enable these */
|
/* not sure whether there's a reason to enable these */
|
||||||
/* SDL_SCANCODE_LOCKINGCAPSLOCK = 130, */
|
/* LOCKINGCAPSLOCK = 130, */
|
||||||
/* SDL_SCANCODE_LOCKINGNUMLOCK = 131, */
|
/* LOCKINGNUMLOCK = 131, */
|
||||||
/* SDL_SCANCODE_LOCKINGSCROLLLOCK = 132, */
|
/* LOCKINGSCROLLLOCK = 132, */
|
||||||
SDL_SCANCODE_KP_COMMA = 133,
|
KP_COMMA = 133,
|
||||||
SDL_SCANCODE_KP_EQUALSAS400 = 134,
|
KP_EQUALSAS400 = 134,
|
||||||
|
|
||||||
SDL_SCANCODE_INTERNATIONAL1 = 135, /**< used on Asian keyboards, see
|
INTERNATIONAL1 = 135, /**< used on Asian keyboards, see
|
||||||
footnotes in USB doc */
|
footnotes in USB doc */
|
||||||
SDL_SCANCODE_INTERNATIONAL2 = 136,
|
INTERNATIONAL2 = 136,
|
||||||
SDL_SCANCODE_INTERNATIONAL3 = 137, /**< Yen */
|
INTERNATIONAL3 = 137, /**< Yen */
|
||||||
SDL_SCANCODE_INTERNATIONAL4 = 138,
|
INTERNATIONAL4 = 138,
|
||||||
SDL_SCANCODE_INTERNATIONAL5 = 139,
|
INTERNATIONAL5 = 139,
|
||||||
SDL_SCANCODE_INTERNATIONAL6 = 140,
|
INTERNATIONAL6 = 140,
|
||||||
SDL_SCANCODE_INTERNATIONAL7 = 141,
|
INTERNATIONAL7 = 141,
|
||||||
SDL_SCANCODE_INTERNATIONAL8 = 142,
|
INTERNATIONAL8 = 142,
|
||||||
SDL_SCANCODE_INTERNATIONAL9 = 143,
|
INTERNATIONAL9 = 143,
|
||||||
SDL_SCANCODE_LANG1 = 144, /**< Hangul/English toggle */
|
LANG1 = 144, /**< Hangul/English toggle */
|
||||||
SDL_SCANCODE_LANG2 = 145, /**< Hanja conversion */
|
LANG2 = 145, /**< Hanja conversion */
|
||||||
SDL_SCANCODE_LANG3 = 146, /**< Katakana */
|
LANG3 = 146, /**< Katakana */
|
||||||
SDL_SCANCODE_LANG4 = 147, /**< Hiragana */
|
LANG4 = 147, /**< Hiragana */
|
||||||
SDL_SCANCODE_LANG5 = 148, /**< Zenkaku/Hankaku */
|
LANG5 = 148, /**< Zenkaku/Hankaku */
|
||||||
SDL_SCANCODE_LANG6 = 149, /**< reserved */
|
LANG6 = 149, /**< reserved */
|
||||||
SDL_SCANCODE_LANG7 = 150, /**< reserved */
|
LANG7 = 150, /**< reserved */
|
||||||
SDL_SCANCODE_LANG8 = 151, /**< reserved */
|
LANG8 = 151, /**< reserved */
|
||||||
SDL_SCANCODE_LANG9 = 152, /**< reserved */
|
LANG9 = 152, /**< reserved */
|
||||||
|
|
||||||
SDL_SCANCODE_ALTERASE = 153, /**< Erase-Eaze */
|
ALTERASE = 153, /**< Erase-Eaze */
|
||||||
SDL_SCANCODE_SYSREQ = 154,
|
SYSREQ = 154,
|
||||||
SDL_SCANCODE_CANCEL = 155, /**< AC Cancel */
|
CANCEL = 155, /**< AC Cancel */
|
||||||
SDL_SCANCODE_CLEAR = 156,
|
CLEAR = 156,
|
||||||
SDL_SCANCODE_PRIOR = 157,
|
PRIOR = 157,
|
||||||
SDL_SCANCODE_RETURN2 = 158,
|
RETURN2 = 158,
|
||||||
SDL_SCANCODE_SEPARATOR = 159,
|
SEPARATOR = 159,
|
||||||
SDL_SCANCODE_OUT = 160,
|
OUT = 160,
|
||||||
SDL_SCANCODE_OPER = 161,
|
OPER = 161,
|
||||||
SDL_SCANCODE_CLEARAGAIN = 162,
|
CLEARAGAIN = 162,
|
||||||
SDL_SCANCODE_CRSEL = 163,
|
CRSEL = 163,
|
||||||
SDL_SCANCODE_EXSEL = 164,
|
EXSEL = 164,
|
||||||
|
|
||||||
SDL_SCANCODE_KP_00 = 176,
|
KP_00 = 176,
|
||||||
SDL_SCANCODE_KP_000 = 177,
|
KP_000 = 177,
|
||||||
SDL_SCANCODE_THOUSANDSSEPARATOR = 178,
|
THOUSANDSSEPARATOR = 178,
|
||||||
SDL_SCANCODE_DECIMALSEPARATOR = 179,
|
DECIMALSEPARATOR = 179,
|
||||||
SDL_SCANCODE_CURRENCYUNIT = 180,
|
CURRENCYUNIT = 180,
|
||||||
SDL_SCANCODE_CURRENCYSUBUNIT = 181,
|
CURRENCYSUBUNIT = 181,
|
||||||
SDL_SCANCODE_KP_LEFTPAREN = 182,
|
KP_LEFTPAREN = 182,
|
||||||
SDL_SCANCODE_KP_RIGHTPAREN = 183,
|
KP_RIGHTPAREN = 183,
|
||||||
SDL_SCANCODE_KP_LEFTBRACE = 184,
|
KP_LEFTBRACE = 184,
|
||||||
SDL_SCANCODE_KP_RIGHTBRACE = 185,
|
KP_RIGHTBRACE = 185,
|
||||||
SDL_SCANCODE_KP_TAB = 186,
|
KP_TAB = 186,
|
||||||
SDL_SCANCODE_KP_BACKSPACE = 187,
|
KP_BACKSPACE = 187,
|
||||||
SDL_SCANCODE_KP_A = 188,
|
KP_A = 188,
|
||||||
SDL_SCANCODE_KP_B = 189,
|
KP_B = 189,
|
||||||
SDL_SCANCODE_KP_C = 190,
|
KP_C = 190,
|
||||||
SDL_SCANCODE_KP_D = 191,
|
KP_D = 191,
|
||||||
SDL_SCANCODE_KP_E = 192,
|
KP_E = 192,
|
||||||
SDL_SCANCODE_KP_F = 193,
|
KP_F = 193,
|
||||||
SDL_SCANCODE_KP_XOR = 194,
|
KP_XOR = 194,
|
||||||
SDL_SCANCODE_KP_POWER = 195,
|
KP_POWER = 195,
|
||||||
SDL_SCANCODE_KP_PERCENT = 196,
|
KP_PERCENT = 196,
|
||||||
SDL_SCANCODE_KP_LESS = 197,
|
KP_LESS = 197,
|
||||||
SDL_SCANCODE_KP_GREATER = 198,
|
KP_GREATER = 198,
|
||||||
SDL_SCANCODE_KP_AMPERSAND = 199,
|
KP_AMPERSAND = 199,
|
||||||
SDL_SCANCODE_KP_DBLAMPERSAND = 200,
|
KP_DBLAMPERSAND = 200,
|
||||||
SDL_SCANCODE_KP_VERTICALBAR = 201,
|
KP_VERTICALBAR = 201,
|
||||||
SDL_SCANCODE_KP_DBLVERTICALBAR = 202,
|
KP_DBLVERTICALBAR = 202,
|
||||||
SDL_SCANCODE_KP_COLON = 203,
|
KP_COLON = 203,
|
||||||
SDL_SCANCODE_KP_HASH = 204,
|
KP_HASH = 204,
|
||||||
SDL_SCANCODE_KP_SPACE = 205,
|
KP_SPACE = 205,
|
||||||
SDL_SCANCODE_KP_AT = 206,
|
KP_AT = 206,
|
||||||
SDL_SCANCODE_KP_EXCLAM = 207,
|
KP_EXCLAM = 207,
|
||||||
SDL_SCANCODE_KP_MEMSTORE = 208,
|
KP_MEMSTORE = 208,
|
||||||
SDL_SCANCODE_KP_MEMRECALL = 209,
|
KP_MEMRECALL = 209,
|
||||||
SDL_SCANCODE_KP_MEMCLEAR = 210,
|
KP_MEMCLEAR = 210,
|
||||||
SDL_SCANCODE_KP_MEMADD = 211,
|
KP_MEMADD = 211,
|
||||||
SDL_SCANCODE_KP_MEMSUBTRACT = 212,
|
KP_MEMSUBTRACT = 212,
|
||||||
SDL_SCANCODE_KP_MEMMULTIPLY = 213,
|
KP_MEMMULTIPLY = 213,
|
||||||
SDL_SCANCODE_KP_MEMDIVIDE = 214,
|
KP_MEMDIVIDE = 214,
|
||||||
SDL_SCANCODE_KP_PLUSMINUS = 215,
|
KP_PLUSMINUS = 215,
|
||||||
SDL_SCANCODE_KP_CLEAR = 216,
|
KP_CLEAR = 216,
|
||||||
SDL_SCANCODE_KP_CLEARENTRY = 217,
|
KP_CLEARENTRY = 217,
|
||||||
SDL_SCANCODE_KP_BINARY = 218,
|
KP_BINARY = 218,
|
||||||
SDL_SCANCODE_KP_OCTAL = 219,
|
KP_OCTAL = 219,
|
||||||
SDL_SCANCODE_KP_DECIMAL = 220,
|
KP_DECIMAL = 220,
|
||||||
SDL_SCANCODE_KP_HEXADECIMAL = 221,
|
KP_HEXADECIMAL = 221,
|
||||||
|
|
||||||
SDL_SCANCODE_LCTRL = 224,
|
LCTRL = 224,
|
||||||
SDL_SCANCODE_LSHIFT = 225,
|
LSHIFT = 225,
|
||||||
SDL_SCANCODE_LALT = 226, /**< alt, option */
|
LALT = 226, /**< alt, option */
|
||||||
SDL_SCANCODE_LGUI = 227, /**< windows, command (apple), meta */
|
LGUI = 227, /**< windows, command (apple), meta */
|
||||||
SDL_SCANCODE_RCTRL = 228,
|
RCTRL = 228,
|
||||||
SDL_SCANCODE_RSHIFT = 229,
|
RSHIFT = 229,
|
||||||
SDL_SCANCODE_RALT = 230, /**< alt gr, option */
|
RALT = 230, /**< alt gr, option */
|
||||||
SDL_SCANCODE_RGUI = 231, /**< windows, command (apple), meta */
|
RGUI = 231, /**< windows, command (apple), meta */
|
||||||
|
|
||||||
SDL_SCANCODE_MODE = 257, /**< I'm not sure if this is really not covered
|
MODE = 257, /**< I'm not sure if this is really not covered
|
||||||
* by any of the above, but since there's a
|
* by any of the above, but since there's a
|
||||||
* special SDL_KMOD_MODE for it I'm adding it here
|
* special SDL_KMOD_MODE for it I'm adding it here
|
||||||
*/
|
*/
|
||||||
@@ -312,39 +312,39 @@ enum class ScanCode
|
|||||||
*/
|
*/
|
||||||
/* @{ */
|
/* @{ */
|
||||||
|
|
||||||
SDL_SCANCODE_SLEEP = 258, /**< Sleep */
|
SLEEP = 258, /**< Sleep */
|
||||||
SDL_SCANCODE_WAKE = 259, /**< Wake */
|
WAKE = 259, /**< Wake */
|
||||||
|
|
||||||
SDL_SCANCODE_CHANNEL_INCREMENT = 260, /**< Channel Increment */
|
CHANNEL_INCREMENT = 260, /**< Channel Increment */
|
||||||
SDL_SCANCODE_CHANNEL_DECREMENT = 261, /**< Channel Decrement */
|
CHANNEL_DECREMENT = 261, /**< Channel Decrement */
|
||||||
|
|
||||||
SDL_SCANCODE_MEDIA_PLAY = 262, /**< Play */
|
MEDIA_PLAY = 262, /**< Play */
|
||||||
SDL_SCANCODE_MEDIA_PAUSE = 263, /**< Pause */
|
MEDIA_PAUSE = 263, /**< Pause */
|
||||||
SDL_SCANCODE_MEDIA_RECORD = 264, /**< Record */
|
MEDIA_RECORD = 264, /**< Record */
|
||||||
SDL_SCANCODE_MEDIA_FAST_FORWARD = 265, /**< Fast Forward */
|
MEDIA_FAST_FORWARD = 265, /**< Fast Forward */
|
||||||
SDL_SCANCODE_MEDIA_REWIND = 266, /**< Rewind */
|
MEDIA_REWIND = 266, /**< Rewind */
|
||||||
SDL_SCANCODE_MEDIA_NEXT_TRACK = 267, /**< Next Track */
|
MEDIA_NEXT_TRACK = 267, /**< Next Track */
|
||||||
SDL_SCANCODE_MEDIA_PREVIOUS_TRACK = 268, /**< Previous Track */
|
MEDIA_PREVIOUS_TRACK = 268, /**< Previous Track */
|
||||||
SDL_SCANCODE_MEDIA_STOP = 269, /**< Stop */
|
MEDIA_STOP = 269, /**< Stop */
|
||||||
SDL_SCANCODE_MEDIA_EJECT = 270, /**< Eject */
|
MEDIA_EJECT = 270, /**< Eject */
|
||||||
SDL_SCANCODE_MEDIA_PLAY_PAUSE = 271, /**< Play / Pause */
|
MEDIA_PLAY_PAUSE = 271, /**< Play / Pause */
|
||||||
SDL_SCANCODE_MEDIA_SELECT = 272, /* Media Select */
|
MEDIA_SELECT = 272, /* Media Select */
|
||||||
|
|
||||||
SDL_SCANCODE_AC_NEW = 273, /**< AC New */
|
AC_NEW = 273, /**< AC New */
|
||||||
SDL_SCANCODE_AC_OPEN = 274, /**< AC Open */
|
AC_OPEN = 274, /**< AC Open */
|
||||||
SDL_SCANCODE_AC_CLOSE = 275, /**< AC Close */
|
AC_CLOSE = 275, /**< AC Close */
|
||||||
SDL_SCANCODE_AC_EXIT = 276, /**< AC Exit */
|
AC_EXIT = 276, /**< AC Exit */
|
||||||
SDL_SCANCODE_AC_SAVE = 277, /**< AC Save */
|
AC_SAVE = 277, /**< AC Save */
|
||||||
SDL_SCANCODE_AC_PRINT = 278, /**< AC Print */
|
AC_PRINT = 278, /**< AC Print */
|
||||||
SDL_SCANCODE_AC_PROPERTIES = 279, /**< AC Properties */
|
AC_PROPERTIES = 279, /**< AC Properties */
|
||||||
|
|
||||||
SDL_SCANCODE_AC_SEARCH = 280, /**< AC Search */
|
AC_SEARCH = 280, /**< AC Search */
|
||||||
SDL_SCANCODE_AC_HOME = 281, /**< AC Home */
|
AC_HOME = 281, /**< AC Home */
|
||||||
SDL_SCANCODE_AC_BACK = 282, /**< AC Back */
|
AC_BACK = 282, /**< AC Back */
|
||||||
SDL_SCANCODE_AC_FORWARD = 283, /**< AC Forward */
|
AC_FORWARD = 283, /**< AC Forward */
|
||||||
SDL_SCANCODE_AC_STOP = 284, /**< AC Stop */
|
AC_STOP = 284, /**< AC Stop */
|
||||||
SDL_SCANCODE_AC_REFRESH = 285, /**< AC Refresh */
|
AC_REFRESH = 285, /**< AC Refresh */
|
||||||
SDL_SCANCODE_AC_BOOKMARKS = 286, /**< AC Bookmarks */
|
AC_BOOKMARKS = 286, /**< AC Bookmarks */
|
||||||
|
|
||||||
/* @} */ /* Usage page 0x0C */
|
/* @} */ /* Usage page 0x0C */
|
||||||
|
|
||||||
@@ -355,24 +355,24 @@ enum class ScanCode
|
|||||||
*/
|
*/
|
||||||
/* @{ */
|
/* @{ */
|
||||||
|
|
||||||
SDL_SCANCODE_SOFTLEFT = 287, /**< Usually situated below the display on phones and
|
SOFTLEFT = 287, /**< Usually situated below the display on phones and
|
||||||
used as a multi-function feature key for selecting
|
used as a multi-function feature key for selecting
|
||||||
a software defined function shown on the bottom left
|
a software defined function shown on the bottom left
|
||||||
of the display. */
|
of the display. */
|
||||||
SDL_SCANCODE_SOFTRIGHT = 288, /**< Usually situated below the display on phones and
|
SOFTRIGHT = 288, /**< Usually situated below the display on phones and
|
||||||
used as a multi-function feature key for selecting
|
used as a multi-function feature key for selecting
|
||||||
a software defined function shown on the bottom right
|
a software defined function shown on the bottom right
|
||||||
of the display. */
|
of the display. */
|
||||||
SDL_SCANCODE_CALL = 289, /**< Used for accepting phone calls. */
|
CALL = 289, /**< Used for accepting phone calls. */
|
||||||
SDL_SCANCODE_ENDCALL = 290, /**< Used for rejecting phone calls. */
|
ENDCALL = 290, /**< Used for rejecting phone calls. */
|
||||||
|
|
||||||
/* @} */ /* Mobile keys */
|
/* @} */ /* Mobile keys */
|
||||||
|
|
||||||
/* Add any other keys here. */
|
/* Add any other keys here. */
|
||||||
|
|
||||||
SDL_SCANCODE_RESERVED = 400, /**< 400-500 reserved for dynamic keycodes */
|
RESERVED = 400, /**< 400-500 reserved for dynamic keycodes */
|
||||||
|
|
||||||
SDL_SCANCODE_COUNT = 512 /**< not a key, just marks the number of scancodes for array bounds */
|
COUNT = 512 /**< not a key, just marks the number of scancodes for array bounds */
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace Game
|
namespace Game
|
||||||
|
|||||||
@@ -56,15 +56,18 @@ namespace Game
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
float scale = 1.0f + TestX * 0.4f;
|
float scale = 1.0f + TestX * 0.4f;
|
||||||
Mat4::CreateTransform(Transform.M,
|
Transform::CreateTransform(
|
||||||
Vec3{TestX * 10.0f - 40.0f, TestY * 10.0f - 40.0f, (float)TestX},
|
Transform.M.M,
|
||||||
Quat::FromEuler(time * 10.0f + TestX, time * 5.0f * TestY, 0.0f),
|
bx::Vec3{TestX * 10.0f - 40.0f, TestY * 10.0f - 40.0f, (float)TestX},
|
||||||
|
bx::fromEuler(
|
||||||
|
{static_cast<float>(time * 10.0f + TestX), static_cast<float>(time * 5.0f * TestY), 0.0f}),
|
||||||
{scale, scale, scale});
|
{scale, scale, scale});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Mat4::CreateTransform(Transform.M, {0.0f, -30.0f, 100.0f}, {}, {100.0f, 10.0f, 100.0f});
|
Transform::CreateTransform(
|
||||||
|
Transform.M.M, {0.0f, -30.0f, 100.0f}, bx::Quaternion(0.0f, 0.0f, 0.0f, 1.0f), {100.0f, 10.0f, 100.0f});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} // namespace Game
|
} // namespace Game
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "Global.h"
|
|
||||||
#include "../engine/Shared.h"
|
#include "../engine/Shared.h"
|
||||||
|
#include "Global.h"
|
||||||
#include "Log.h"
|
#include "Log.h"
|
||||||
#include <bgfx/bgfx.h>
|
#include <bgfx/bgfx.h>
|
||||||
|
|
||||||
@@ -13,7 +13,7 @@ namespace Game
|
|||||||
{
|
{
|
||||||
int32_t TestX = -1;
|
int32_t TestX = -1;
|
||||||
int32_t TestY = -1;
|
int32_t TestY = -1;
|
||||||
Mat4 Transform;
|
Transform Transform;
|
||||||
uint16_t MaterialIdx = 0;
|
uint16_t MaterialIdx = 0;
|
||||||
uint16_t ModelIdx = 0;
|
uint16_t ModelIdx = 0;
|
||||||
|
|
||||||
@@ -21,8 +21,7 @@ namespace Game
|
|||||||
void Update();
|
void Update();
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename T, uint32_t C>
|
template <typename T, uint32_t C> class EntityManager
|
||||||
class EntityManager
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
uint16_t Count = 0;
|
uint16_t Count = 0;
|
||||||
@@ -38,7 +37,7 @@ namespace Game
|
|||||||
}
|
}
|
||||||
EntitySize = sizeof(T);
|
EntitySize = sizeof(T);
|
||||||
Data = reinterpret_cast<T*>(ptr);
|
Data = reinterpret_cast<T*>(ptr);
|
||||||
return C*sizeof(T);
|
return C * sizeof(T);
|
||||||
}
|
}
|
||||||
|
|
||||||
T* New()
|
T* New()
|
||||||
@@ -88,4 +87,4 @@ namespace Game
|
|||||||
void Setup(GameData& data);
|
void Setup(GameData& data);
|
||||||
void Update();
|
void Update();
|
||||||
};
|
};
|
||||||
}
|
} // namespace Game
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
#include "../Mesh.h"
|
#include "../Mesh.h"
|
||||||
#include "Rendering.h"
|
#include "Rendering.h"
|
||||||
#include "bgfx/defines.h"
|
#include "bgfx/defines.h"
|
||||||
|
#include "bx/math.h"
|
||||||
#include "bx/timer.h"
|
#include "bx/timer.h"
|
||||||
#include <bgfx/bgfx.h>
|
#include <bgfx/bgfx.h>
|
||||||
#include <bx/file.h>
|
#include <bx/file.h>
|
||||||
@@ -179,26 +180,24 @@ namespace Game
|
|||||||
constexpr float moveSpeed = 10.0f;
|
constexpr float moveSpeed = 10.0f;
|
||||||
constexpr float rotSpeed = 1.0f;
|
constexpr float rotSpeed = 1.0f;
|
||||||
|
|
||||||
float forwardInput =
|
float forwardInput = (GetKey(ScanCode::W) ? 1.0f : 0.0f) + (GetKey(ScanCode::S) ? -1.0f : 0.0f);
|
||||||
(GetKey(ScanCode::SDL_SCANCODE_W) ? 1.0f : 0.0f) + (GetKey(ScanCode::SDL_SCANCODE_S) ? -1.0f : 0.0f);
|
float rightInput = (GetKey(ScanCode::D) ? 1.0f : 0.0f) + (GetKey(ScanCode::A) ? -1.0f : 0.0f);
|
||||||
float rightInput =
|
bx::Vec3 moveInput = bx::Vec3{rightInput, forwardInput, 0.0f};
|
||||||
(GetKey(ScanCode::SDL_SCANCODE_D) ? 1.0f : 0.0f) + (GetKey(ScanCode::SDL_SCANCODE_A) ? -1.0f : 0.0f);
|
moveInput = bx::normalize(moveInput);
|
||||||
Vec2 moveInput = Vec2{rightInput, forwardInput};
|
bx::Vec3 inputVec = {moveInput.x * delta * moveSpeed, 0.0f, moveInput.y * delta * moveSpeed};
|
||||||
moveInput.Normalize();
|
|
||||||
Vec3 inputVec = {moveInput.X * delta * moveSpeed, 0.0f, moveInput.Y * delta * moveSpeed};
|
|
||||||
|
|
||||||
Vec3 camForward = Cam.Transform.Forward();
|
bx::Vec3 camForward = Cam.Transform.Forward();
|
||||||
Vec3 camRight = Cam.Transform.Right();
|
bx::Vec3 camRight = Cam.Transform.Right();
|
||||||
|
|
||||||
Vec3 rotInput = {shared.Window.MouseDeltaY * delta, shared.Window.MouseDeltaX * delta, 0.0f};
|
bx::Vec3 rotInput = {shared.Window.MouseDeltaY * delta, shared.Window.MouseDeltaX * delta, 0.0f};
|
||||||
Cam.Transform.Rotate({0.0f, rotInput.Y, 0.0f});
|
Cam.FreelookXRot += rotInput.x;
|
||||||
// TODO: split transform into rot matrix and translation
|
Cam.FreelookYRot += rotInput.y;
|
||||||
|
bx::mtxRotateY(Cam.Transform.Rotation.M, Cam.FreelookYRot);
|
||||||
|
Cam.Transform.RotateLocal({Cam.FreelookXRot, 0.0f, 0.0f});
|
||||||
|
|
||||||
// Cam.Transform.Translate(
|
|
||||||
// {camForward.X * forwardInput, camForward.Y * forwardInput, camForward.Z * forwardInput});
|
|
||||||
Cam.Transform.TranslateLocal({0.0f, 0.0f, -forwardInput});
|
Cam.Transform.TranslateLocal({0.0f, 0.0f, -forwardInput});
|
||||||
Cam.Transform.TranslateLocal({-rightInput, 0.0f, 0.0f});
|
Cam.Transform.TranslateLocal({-rightInput, 0.0f, 0.0f});
|
||||||
bgfx::dbgTextPrintf(1, 4, 0x0f, "Cam forward: %.2f %.2f %.2f", camForward.X, camForward.Y, camForward.Z);
|
bgfx::dbgTextPrintf(1, 4, 0x0f, "Cam forward: %.2f %.2f %.2f", camForward.x, camForward.y, camForward.z);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set view and projection matrix for view 0.
|
// Set view and projection matrix for view 0.
|
||||||
@@ -210,7 +209,8 @@ namespace Game
|
|||||||
0.1f,
|
0.1f,
|
||||||
1000.0f,
|
1000.0f,
|
||||||
bgfx::getCaps()->homogeneousDepth);
|
bgfx::getCaps()->homogeneousDepth);
|
||||||
bgfx::setViewTransform(0, Cam.Transform.M, proj);
|
Cam.Transform.UpdateMatrix();
|
||||||
|
bgfx::setViewTransform(0, Cam.Transform.M.M, proj);
|
||||||
|
|
||||||
// Set view 0 default viewport.
|
// Set view 0 default viewport.
|
||||||
bgfx::setViewRect(0, 0, 0, shared.Window.WindowWidth, shared.Window.WindowHeight);
|
bgfx::setViewRect(0, 0, 0, shared.Window.WindowWidth, shared.Window.WindowHeight);
|
||||||
@@ -224,7 +224,7 @@ namespace Game
|
|||||||
Cube* c = GetInstance().GameLevel.Cubes.Get(i);
|
Cube* c = GetInstance().GameLevel.Cubes.Get(i);
|
||||||
if (c)
|
if (c)
|
||||||
{
|
{
|
||||||
bgfx::setTransform(c->Transform.M);
|
bgfx::setTransform(c->Transform.M.M);
|
||||||
|
|
||||||
Model& currentModel = Models[c->ModelIdx];
|
Model& currentModel = Models[c->ModelIdx];
|
||||||
Material& currentMaterial = Materials[c->MaterialIdx];
|
Material& currentMaterial = Materials[c->MaterialIdx];
|
||||||
|
|||||||
@@ -113,7 +113,9 @@ namespace Game
|
|||||||
|
|
||||||
struct Camera
|
struct Camera
|
||||||
{
|
{
|
||||||
Mat4 Transform;
|
float FreelookXRot = 0.0f;
|
||||||
|
float FreelookYRot = 0.0f;
|
||||||
|
Transform Transform;
|
||||||
};
|
};
|
||||||
|
|
||||||
class GameRendering
|
class GameRendering
|
||||||
|
|||||||
Reference in New Issue
Block a user