mirror of
https://github.com/Kapendev/parin.git
synced 2025-04-26 21:19:56 +03:00
Added mouse support and changed some stuff for ldc and gdc again.
This commit is contained in:
parent
ac06401bba
commit
dbb8bc905a
7 changed files with 170 additions and 108 deletions
3
TODO.md
3
TODO.md
|
@ -2,11 +2,10 @@
|
|||
|
||||
* Work on dialogue system.
|
||||
* Work on UI buttons that work like RPGMaker.
|
||||
* Test engine on Windows.
|
||||
|
||||
# TODO
|
||||
|
||||
* Dialogue functionality in dialogue.d must be implemented.
|
||||
* UI functionality must be implemented.
|
||||
* Collision functionality must be implemented.
|
||||
* Add more parsing options for fmt.d and strconv.d.
|
||||
* Write tests.
|
||||
|
|
|
@ -266,7 +266,9 @@ const(char)* toStrz(const(char)[] str) {
|
|||
static char[1024] buf = void;
|
||||
auto result = buf[];
|
||||
|
||||
result[0 .. str.length] = str;
|
||||
foreach (i, c; str) {
|
||||
result[i] = c;
|
||||
}
|
||||
result[str.length] = '\0';
|
||||
return result.ptr;
|
||||
}
|
||||
|
|
|
@ -6,8 +6,11 @@
|
|||
|
||||
module popka.core.sumtype;
|
||||
|
||||
struct None {};
|
||||
/// The none type.
|
||||
struct None {}
|
||||
|
||||
/// A data structure that can hold one of several possible types.
|
||||
/// Note that generic types are not currently supported.
|
||||
struct SumType(A...) {
|
||||
template memberName(T) {
|
||||
mixin("enum memberName = \"" ~ ((T.stringof[0] >= 'A' && T.stringof[0] <= 'Z') ? cast(char) (T.stringof[0] + 32) : T.stringof[0]) ~ T.stringof[1 .. $] ~ "\";");
|
||||
|
@ -61,6 +64,14 @@ struct SumType(A...) {
|
|||
|
||||
alias Optional(T) = SumType!(None, T);
|
||||
|
||||
bool isNone(T)(T optional) {
|
||||
return optional.kind == optional.noneKind;
|
||||
}
|
||||
|
||||
bool isSome(T)(T optional) {
|
||||
return optional.kind != optional.noneKind;
|
||||
}
|
||||
|
||||
bool hasCommonBase(T)() {
|
||||
alias Base = typeof(T.init.data.tupleof[0]);
|
||||
|
||||
|
@ -76,7 +87,14 @@ bool hasCommonBase(T)() {
|
|||
|
||||
mixin template AddBase(T) {
|
||||
T base;
|
||||
alias data this;
|
||||
alias base this;
|
||||
}
|
||||
|
||||
unittest {}
|
||||
unittest {
|
||||
auto optional = Optional!int();
|
||||
assert(optional.isNone);
|
||||
optional = 69;
|
||||
assert(optional.isSome);
|
||||
optional = None();
|
||||
assert(optional.isNone);
|
||||
}
|
||||
|
|
|
@ -566,7 +566,10 @@ bool isWindowOpen() {
|
|||
popkaFullscreenFlag = false;
|
||||
ray.ToggleFullscreen();
|
||||
if (!isFullscreen) {
|
||||
windowSize(popkaFullscreenLastWindowSize);
|
||||
auto size = popkaFullscreenLastWindowSize;
|
||||
auto screen = screenSize;
|
||||
ray.SetWindowSize(cast(int) size.x, cast(int) size.y);
|
||||
ray.SetWindowPosition(cast(int) (screen.x * 0.5f - size.x * 0.5f), cast(int) (screen.y * 0.5f - size.y * 0.5f));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -612,17 +615,25 @@ void toggleFullscreen() {
|
|||
popkaFullscreenFlag = true;
|
||||
if (!isFullscreen) {
|
||||
popkaFullscreenLastWindowSize = windowSize;
|
||||
windowSize(screenSize);
|
||||
auto size = screenSize;
|
||||
auto screen = screenSize;
|
||||
ray.SetWindowSize(cast(int) size.x, cast(int) size.y);
|
||||
ray.SetWindowPosition(cast(int) (screen.x * 0.5f - size.x * 0.5f), cast(int) (screen.y * 0.5f - size.y * 0.5f));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Vec2 screenSize(uint id) {
|
||||
return Vec2(ray.GetMonitorWidth(id), ray.GetMonitorHeight(id));
|
||||
}
|
||||
|
||||
Vec2 screenSize() {
|
||||
return screenSize(ray.GetCurrentMonitor());
|
||||
auto id = ray.GetCurrentMonitor();
|
||||
return Vec2(ray.GetMonitorWidth(id), ray.GetMonitorHeight(id));
|
||||
}
|
||||
|
||||
float screenWidth() {
|
||||
return screenSize.x;
|
||||
}
|
||||
|
||||
float screenHeight() {
|
||||
return screenSize.y;
|
||||
}
|
||||
|
||||
Vec2 windowSize() {
|
||||
|
@ -633,10 +644,12 @@ Vec2 windowSize() {
|
|||
}
|
||||
}
|
||||
|
||||
void windowSize(Vec2 size) {
|
||||
auto screen = screenSize;
|
||||
ray.SetWindowSize(cast(int) size.x, cast(int) size.y);
|
||||
ray.SetWindowPosition(cast(int) (screen.x * 0.5f - size.x * 0.5f), cast(int) (screen.y * 0.5f - size.y * 0.5f));
|
||||
float windowWidth() {
|
||||
return windowSize.x;
|
||||
}
|
||||
|
||||
float windowHeight() {
|
||||
return windowSize.y;
|
||||
}
|
||||
|
||||
Vec2 resolution() {
|
||||
|
@ -647,6 +660,36 @@ Vec2 resolution() {
|
|||
}
|
||||
}
|
||||
|
||||
float resolutionWidth() {
|
||||
return resolution.x;
|
||||
}
|
||||
|
||||
float resolutionHeight() {
|
||||
return resolution.y;
|
||||
}
|
||||
|
||||
Vec2 mousePosition() {
|
||||
if (isResolutionLocked) {
|
||||
auto window = windowSize;
|
||||
auto minRatio = min(window.x / popkaView.width, window.y / popkaView.height);
|
||||
auto targetSize = popkaView.size * Vec2(minRatio);
|
||||
return Vec2(
|
||||
clamp((ray.GetMouseX() - (window.x - targetSize.x) * 0.5f) / minRatio, 0.0f, popkaView.width),
|
||||
clamp((ray.GetMouseY() - (window.y - targetSize.y) * 0.5f) / minRatio, 0.0f, popkaView.height),
|
||||
);
|
||||
} else {
|
||||
return Vec2(ray.GetMouseX(), ray.GetMouseY());
|
||||
}
|
||||
}
|
||||
|
||||
float mouseX() {
|
||||
return mousePosition.x;
|
||||
}
|
||||
|
||||
float mouseY() {
|
||||
return mousePosition.y;
|
||||
}
|
||||
|
||||
int fps() {
|
||||
return ray.GetFPS();
|
||||
}
|
||||
|
|
98
vendor/ray/raylib.d
vendored
98
vendor/ray/raylib.d
vendored
|
@ -175,25 +175,25 @@ enum RAYWHITE = Color( 245, 245, 245, 255 ); // My own White (raylib logo)
|
|||
// Vector2, 2 components
|
||||
struct Vector2
|
||||
{
|
||||
float x; // Vector x component
|
||||
float y; // Vector y component
|
||||
float x = 0.0f; // Vector x component
|
||||
float y = 0.0f; // Vector y component
|
||||
}
|
||||
|
||||
// Vector3, 3 components
|
||||
struct Vector3
|
||||
{
|
||||
float x; // Vector x component
|
||||
float y; // Vector y component
|
||||
float z; // Vector z component
|
||||
float x = 0.0f; // Vector x component
|
||||
float y = 0.0f; // Vector y component
|
||||
float z = 0.0f; // Vector z component
|
||||
}
|
||||
|
||||
// Vector4, 4 components
|
||||
struct Vector4
|
||||
{
|
||||
float x; // Vector x component
|
||||
float y; // Vector y component
|
||||
float z; // Vector z component
|
||||
float w; // Vector w component
|
||||
float x = 0.0f; // Vector x component
|
||||
float y = 0.0f; // Vector y component
|
||||
float z = 0.0f; // Vector z component
|
||||
float w = 0.0f; // Vector w component
|
||||
}
|
||||
|
||||
// Quaternion, 4 components (Vector4 alias)
|
||||
|
@ -202,22 +202,22 @@ alias Quaternion = Vector4;
|
|||
// Matrix, 4x4 components, column major, OpenGL style, right-handed
|
||||
struct Matrix
|
||||
{
|
||||
float m0;
|
||||
float m4;
|
||||
float m8;
|
||||
float m12; // Matrix first row (4 components)
|
||||
float m1;
|
||||
float m5;
|
||||
float m9;
|
||||
float m13; // Matrix second row (4 components)
|
||||
float m2;
|
||||
float m6;
|
||||
float m10;
|
||||
float m14; // Matrix third row (4 components)
|
||||
float m3;
|
||||
float m7;
|
||||
float m11;
|
||||
float m15; // Matrix fourth row (4 components)
|
||||
float m0 = 0.0f;
|
||||
float m4 = 0.0f;
|
||||
float m8 = 0.0f;
|
||||
float m12 = 0.0f; // Matrix first row (4 components)
|
||||
float m1 = 0.0f;
|
||||
float m5 = 0.0f;
|
||||
float m9 = 0.0f;
|
||||
float m13 = 0.0f; // Matrix second row (4 components)
|
||||
float m2 = 0.0f;
|
||||
float m6 = 0.0f;
|
||||
float m10 = 0.0f;
|
||||
float m14 = 0.0f; // Matrix third row (4 components)
|
||||
float m3 = 0.0f;
|
||||
float m7 = 0.0f;
|
||||
float m11 = 0.0f;
|
||||
float m15 = 0.0f; // Matrix fourth row (4 components)
|
||||
}
|
||||
|
||||
// Color, 4 components, R8G8B8A8 (32bit)
|
||||
|
@ -232,10 +232,10 @@ struct Color
|
|||
// Rectangle, 4 components
|
||||
struct Rectangle
|
||||
{
|
||||
float x; // Rectangle top-left corner position x
|
||||
float y; // Rectangle top-left corner position y
|
||||
float width; // Rectangle width
|
||||
float height; // Rectangle height
|
||||
float x = 0.0f; // Rectangle top-left corner position x
|
||||
float y = 0.0f; // Rectangle top-left corner position y
|
||||
float width = 0.0f; // Rectangle width
|
||||
float height = 0.0f; // Rectangle height
|
||||
}
|
||||
|
||||
// Image, pixel data stored in CPU memory (RAM)
|
||||
|
@ -313,7 +313,7 @@ struct Camera3D
|
|||
Vector3 position; // Camera position
|
||||
Vector3 target; // Camera target it looks-at
|
||||
Vector3 up; // Camera up vector (rotation over its axis)
|
||||
float fovy; // Camera field-of-view aperture in Y (degrees) in perspective, used as near plane width in orthographic
|
||||
float fovy = 0.0f; // Camera field-of-view aperture in Y (degrees) in perspective, used as near plane width in orthographic
|
||||
int projection; // Camera projection: CAMERA_PERSPECTIVE or CAMERA_ORTHOGRAPHIC
|
||||
}
|
||||
|
||||
|
@ -324,8 +324,8 @@ struct Camera2D
|
|||
{
|
||||
Vector2 offset; // Camera offset (displacement from target)
|
||||
Vector2 target; // Camera target (rotation and zoom origin)
|
||||
float rotation; // Camera rotation in degrees
|
||||
float zoom; // Camera zoom (scaling), should be 1.0f by default
|
||||
float rotation = 0.0f; // Camera rotation in degrees
|
||||
float zoom = 0.0f; // Camera zoom (scaling), should be 1.0f by default
|
||||
}
|
||||
|
||||
// Mesh, vertex data and vao/vbo
|
||||
|
@ -366,7 +366,7 @@ struct MaterialMap
|
|||
{
|
||||
Texture2D texture; // Material map texture
|
||||
Color color; // Material map color
|
||||
float value; // Material map value
|
||||
float value = 0.0f; // Material map value
|
||||
}
|
||||
|
||||
// Material, includes shader and maps
|
||||
|
@ -374,7 +374,7 @@ struct Material
|
|||
{
|
||||
Shader shader; // Material shader
|
||||
MaterialMap* maps; // Material maps array (MAX_MATERIAL_MAPS)
|
||||
float[4] params; // Material generic parameters (if required)
|
||||
float[4] params = [0.0f, 0.0f, 0.0f, 0.0f]; // Material generic parameters (if required)
|
||||
}
|
||||
|
||||
// Transform, vertex transformation data
|
||||
|
@ -430,7 +430,7 @@ struct Ray
|
|||
struct RayCollision
|
||||
{
|
||||
bool hit; // Did the ray hit something?
|
||||
float distance; // Distance to the nearest hit
|
||||
float distance = 0.0f; // Distance to the nearest hit
|
||||
Vector3 point; // Point of the nearest hit
|
||||
Vector3 normal; // Surface normal of hit
|
||||
}
|
||||
|
@ -491,14 +491,14 @@ struct VrDeviceInfo
|
|||
{
|
||||
int hResolution; // Horizontal resolution in pixels
|
||||
int vResolution; // Vertical resolution in pixels
|
||||
float hScreenSize; // Horizontal size in meters
|
||||
float vScreenSize; // Vertical size in meters
|
||||
float vScreenCenter; // Screen center in meters
|
||||
float eyeToScreenDistance; // Distance between eye and display in meters
|
||||
float lensSeparationDistance; // Lens separation distance in meters
|
||||
float interpupillaryDistance; // IPD (distance between pupils) in meters
|
||||
float[4] lensDistortionValues; // Lens distortion constant parameters
|
||||
float[4] chromaAbCorrection; // Chromatic aberration correction parameters
|
||||
float hScreenSize = 0.0f; // Horizontal size in meters
|
||||
float vScreenSize = 0.0f; // Vertical size in meters
|
||||
float vScreenCenter = 0.0f; // Screen center in meters
|
||||
float eyeToScreenDistance = 0.0f; // Distance between eye and display in meters
|
||||
float lensSeparationDistance = 0.0f; // Lens separation distance in meters
|
||||
float interpupillaryDistance = 0.0f; // IPD (distance between pupils) in meters
|
||||
float[4] lensDistortionValues = [0.0f, 0.0f, 0.0f, 0.0f]; // Lens distortion constant parameters
|
||||
float[4] chromaAbCorrection = [0.0f, 0.0f, 0.0f, 0.0f]; // Chromatic aberration correction parameters
|
||||
}
|
||||
|
||||
// VrStereoConfig, VR stereo rendering configuration for simulator
|
||||
|
@ -506,12 +506,12 @@ struct VrStereoConfig
|
|||
{
|
||||
Matrix[2] projection; // VR projection matrices (per eye)
|
||||
Matrix[2] viewOffset; // VR view offset matrices (per eye)
|
||||
float[2] leftLensCenter; // VR left lens center
|
||||
float[2] rightLensCenter; // VR right lens center
|
||||
float[2] leftScreenCenter; // VR left screen center
|
||||
float[2] rightScreenCenter; // VR right screen center
|
||||
float[2] scale; // VR distortion scale
|
||||
float[2] scaleIn; // VR distortion scale in
|
||||
float[2] leftLensCenter = [0.0f, 0.0f]; // VR left lens center
|
||||
float[2] rightLensCenter = [0.0f, 0.0f]; // VR right lens center
|
||||
float[2] leftScreenCenter = [0.0f, 0.0f]; // VR left screen center
|
||||
float[2] rightScreenCenter = [0.0f, 0.0f]; // VR right screen center
|
||||
float[2] scale = [0.0f, 0.0f]; // VR distortion scale
|
||||
float[2] scaleIn = [0.0f, 0.0f]; // VR distortion scale in
|
||||
}
|
||||
|
||||
// File path list
|
||||
|
|
54
vendor/ray/raymath.d
vendored
54
vendor/ray/raymath.d
vendored
|
@ -98,25 +98,25 @@ extern (D) auto Vector3ToFloat(T)(auto ref T vec)
|
|||
// Vector2 type
|
||||
struct Vector2
|
||||
{
|
||||
float x;
|
||||
float y;
|
||||
float x = 0.0f;
|
||||
float y = 0.0f;
|
||||
}
|
||||
|
||||
// Vector3 type
|
||||
struct Vector3
|
||||
{
|
||||
float x;
|
||||
float y;
|
||||
float z;
|
||||
float x = 0.0f;
|
||||
float y = 0.0f;
|
||||
float z = 0.0f;
|
||||
}
|
||||
|
||||
// Vector4 type
|
||||
struct Vector4
|
||||
{
|
||||
float x;
|
||||
float y;
|
||||
float z;
|
||||
float w;
|
||||
float x = 0.0f;
|
||||
float y = 0.0f;
|
||||
float z = 0.0f;
|
||||
float w = 0.0f;
|
||||
}
|
||||
|
||||
// Quaternion type
|
||||
|
@ -125,33 +125,33 @@ alias Quaternion = Vector4;
|
|||
// Matrix type (OpenGL style 4x4 - right handed, column major)
|
||||
struct Matrix
|
||||
{
|
||||
float m0;
|
||||
float m4;
|
||||
float m8;
|
||||
float m12; // Matrix first row (4 components)
|
||||
float m1;
|
||||
float m5;
|
||||
float m9;
|
||||
float m13; // Matrix second row (4 components)
|
||||
float m2;
|
||||
float m6;
|
||||
float m10;
|
||||
float m14; // Matrix third row (4 components)
|
||||
float m3;
|
||||
float m7;
|
||||
float m11;
|
||||
float m15; // Matrix fourth row (4 components)
|
||||
float m0 = 0.0f;
|
||||
float m4 = 0.0f;
|
||||
float m8 = 0.0f;
|
||||
float m12 = 0.0f; // Matrix first row (4 components)
|
||||
float m1 = 0.0f;
|
||||
float m5 = 0.0f;
|
||||
float m9 = 0.0f;
|
||||
float m13 = 0.0f; // Matrix second row (4 components)
|
||||
float m2 = 0.0f;
|
||||
float m6 = 0.0f;
|
||||
float m10 = 0.0f;
|
||||
float m14 = 0.0f; // Matrix third row (4 components)
|
||||
float m3 = 0.0f;
|
||||
float m7 = 0.0f;
|
||||
float m11 = 0.0f;
|
||||
float m15 = 0.0f; // Matrix fourth row (4 components)
|
||||
}
|
||||
|
||||
// NOTE: Helper types to be used instead of array return types for *ToFloat functions
|
||||
struct float3
|
||||
{
|
||||
float[3] v;
|
||||
float[3] v = [0.0f, 0.0f, 0.0f];
|
||||
}
|
||||
|
||||
struct float16
|
||||
{
|
||||
float[16] v;
|
||||
float[16] v = [0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f];
|
||||
}
|
||||
|
||||
// Required for: sinf(), cosf(), tan(), atan2f(), sqrtf(), floor(), fminf(), fmaxf(), fabs()
|
||||
|
|
34
vendor/ray/rlgl.d
vendored
34
vendor/ray/rlgl.d
vendored
|
@ -272,22 +272,22 @@ enum RL_BLEND_COLOR = 0x8005; // GL_BLEND_COLOR
|
|||
// Matrix, 4x4 components, column major, OpenGL style, right handed
|
||||
struct Matrix
|
||||
{
|
||||
float m0;
|
||||
float m4;
|
||||
float m8;
|
||||
float m12; // Matrix first row (4 components)
|
||||
float m1;
|
||||
float m5;
|
||||
float m9;
|
||||
float m13; // Matrix second row (4 components)
|
||||
float m2;
|
||||
float m6;
|
||||
float m10;
|
||||
float m14; // Matrix third row (4 components)
|
||||
float m3;
|
||||
float m7;
|
||||
float m11;
|
||||
float m15; // Matrix fourth row (4 components)
|
||||
float m0 = 0.0f;
|
||||
float m4 = 0.0f;
|
||||
float m8 = 0.0f;
|
||||
float m12 = 0.0f; // Matrix first row (4 components)
|
||||
float m1 = 0.0f;
|
||||
float m5 = 0.0f;
|
||||
float m9 = 0.0f;
|
||||
float m13 = 0.0f; // Matrix second row (4 components)
|
||||
float m2 = 0.0f;
|
||||
float m6 = 0.0f;
|
||||
float m10 = 0.0f;
|
||||
float m14 = 0.0f; // Matrix third row (4 components)
|
||||
float m3 = 0.0f;
|
||||
float m7 = 0.0f;
|
||||
float m11 = 0.0f;
|
||||
float m15 = 0.0f; // Matrix fourth row (4 components)
|
||||
}
|
||||
|
||||
// Dynamic vertex buffers (position + texcoords + colors + indices arrays)
|
||||
|
@ -333,7 +333,7 @@ struct rlRenderBatch
|
|||
|
||||
rlDrawCall* draws; // Draw calls array, depends on textureId
|
||||
int drawCounter; // Draw calls counter
|
||||
float currentDepth; // Current depth value for next draw
|
||||
float currentDepth = 0.0f; // Current depth value for next draw
|
||||
}
|
||||
|
||||
// OpenGL version
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue