#pragma once

// #include <cstdint>
#include <string>
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtc/type_ptr.hpp>

// using u8  = uint8_t;
// using u16 = uint16_t;
// using u32 = uint32_t;
// using u64 = uint64_t;

// using i8  = int8_t;
// using i16 = int16_t;
// using i32 = int32_t;
// using i64 = int64_t;

typedef char unsigned u8;
typedef short unsigned u16;
typedef int unsigned u32;
typedef long long unsigned u64;

typedef char s8;
typedef short s16;
typedef int s32;
typedef long long s64;

typedef s32 b32;

typedef float f32;
typedef double f64;

#define array_count(Array) (sizeof(Array) / sizeof((Array)[0]))

using Matrix4 = glm::mat4;
using Vector3 = glm::vec3;
using string = std::string;

const f32 RADIAN_FACTOR = 3.14159265f / 180.0f;
const u32 MAX_POINT_LIGHTS = 3;
const u32 MAX_SPOT_LIGHTS = 3;
