diff --git a/Bindings/Raylib.cs b/Bindings/Raylib.cs index 2a53f16..238ab7e 100644 --- a/Bindings/Raylib.cs +++ b/Bindings/Raylib.cs @@ -1,6 +1,7 @@ // Raylib - https://github.com/raysan5/raylib/blob/master/src/raylib.h using System; +using System.Collections.Generic; using System.IO; using System.Runtime.InteropServices; @@ -1198,7 +1199,43 @@ namespace Raylib // Get dropped files names [DllImport(nativeLibName,CallingConvention = CallingConvention.Cdecl)] - public static extern string[] GetDroppedFiles(ref int count); + private static extern IntPtr GetDroppedFiles( ref int count); + // Get Dropped files Pointer translation + public static string[] GetDroppedFiles() + { + int count = 0; + IntPtr pointer = GetDroppedFiles(ref count); + + string[] s = new string[count]; + char[] word; + int i, j, size; + + //TODO: this is a mess, find a better way + unsafe + { + byte** str = (byte**)pointer.ToPointer(); + + i = 0; + while (i < count) + { + j = 0; + while (str[i][j] != 0) + j++; + size = j; + word = new char[size]; + j = 0; + while (str[i][j] != 0) + { + word[j] = (char)str[i][j]; + j++; + } + s[i] = new string(word); + + i++; + } + } + return s; + } // Clear dropped files paths buffer [DllImport(nativeLibName,CallingConvention = CallingConvention.Cdecl)] diff --git a/Examples/core/core_drop_files.cs b/Examples/core/core_drop_files.cs index 9192623..0a26d19 100644 --- a/Examples/core/core_drop_files.cs +++ b/Examples/core/core_drop_files.cs @@ -35,12 +35,14 @@ public partial class core_drop_files // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { - // Update - //---------------------------------------------------------------------------------- - if (IsFileDropped()) - { - droppedFiles = GetDroppedFiles(ref count); - } + // Update + //---------------------------------------------------------------------------------- + if (IsFileDropped()) + { + droppedFiles = GetDroppedFiles(); + count = droppedFiles.Length; + } + //---------------------------------------------------------------------------------- // Draw diff --git a/Examples/models/models_material_pbr.cs b/Examples/models/models_material_pbr.cs index 1a55075..e8ddc59 100644 --- a/Examples/models/models_material_pbr.cs +++ b/Examples/models/models_material_pbr.cs @@ -105,9 +105,9 @@ public partial class models_material_pbr BeginMode3D(camera); - DrawModel(model, Vector3Zero(), 1.0f, WHITE); + DrawModel(model, Vector3Zero(), 1.0f, WHITE); - DrawGrid(10, 1.0f); + DrawGrid(10, 1.0f); EndMode3D(); @@ -138,7 +138,6 @@ public partial class models_material_pbr // Get required locations points for PBR material // NOTE: Those location names must be available and used in the shader code - mat.shader.locs[(int)ShaderLocationIndex.LOC_MAP_ALBEDO] = GetShaderLocation(mat.shader, "albedo.sampler"); mat.shader.locs[(int)ShaderLocationIndex.LOC_MAP_METALNESS] = GetShaderLocation(mat.shader, "metalness.sampler"); mat.shader.locs[(int)ShaderLocationIndex.LOC_MAP_NORMAL] = GetShaderLocation(mat.shader, "normals.sampler"); @@ -152,7 +151,7 @@ public partial class models_material_pbr // Set view matrix location mat.shader.locs[(int)ShaderLocationIndex.LOC_MATRIX_MODEL] = GetShaderLocation(mat.shader, "matModel"); - mat.shader.locs[(int)ShaderLocationIndex.LOC_MATRIX_VIEW] = GetShaderLocation(mat.shader, "view"); + mat.shader.locs[(int)ShaderLocationIndex.LOC_MATRIX_VIEW] = GetShaderLocation(mat.shader, "view"); //TODO: figure out why this is the one run warning we get, and it may be all that's needed to fix lights. mat.shader.locs[(int)ShaderLocationIndex.LOC_VECTOR_VIEW] = GetShaderLocation(mat.shader, "viewPos"); // Set PBR standard maps diff --git a/Examples/models/models_mesh_picking.cs b/Examples/models/models_mesh_picking.cs index b1d4d6f..697ba4d 100644 --- a/Examples/models/models_mesh_picking.cs +++ b/Examples/models/models_mesh_picking.cs @@ -32,20 +32,20 @@ public partial class models_mesh_picking // Define the camera to look into our 3d world Camera3D camera; - camera.position = new Vector3( 20.0f, 20.0f, 20.0f ); // Camera3D position - camera.target = new Vector3( 0.0f, 8.0f, 0.0f ); // Camera3D looking at point - camera.up = new Vector3( 0.0f, 1.6f, 0.0f ); // Camera3D up vector (rotation towards target) - camera.fovy = 45.0f; // Camera3D field-of-view Y - camera.type = CAMERA_PERSPECTIVE; // Camera3D mode type + camera.position = new Vector3( 20.0f, 20.0f, 20.0f ); // Camera3D position + camera.target = new Vector3( 0.0f, 8.0f, 0.0f ); // Camera3D looking at point + camera.up = new Vector3( 0.0f, 1.6f, 0.0f ); // Camera3D up vector (rotation towards target) + camera.fovy = 45.0f; // Camera3D field-of-view Y + camera.type = CAMERA_PERSPECTIVE; // Camera3D mode type Ray ray; // Picking ray - Model tower = LoadModel("resources/models/turret.obj"); // Load OBJ model - Texture2D texture = LoadTexture("resources/models/turret_diffuse.png"); // Load model texture + Model tower = LoadModel("resources/models/turret.obj"); // Load OBJ model + Texture2D texture = LoadTexture("resources/models/turret_diffuse.png"); // Load model texture tower.material.maps[(int)MAP_ALBEDO].texture = texture; // Set model diffuse texture - Vector3 towerPos = new Vector3( 0.0f, 0.0f, 0.0f ); // Set model position - BoundingBox towerBBox = MeshBoundingBox(tower.mesh); // Get mesh bounding box + Vector3 towerPos = new Vector3( 0.0f, 0.0f, 0.0f ); // Set model position + BoundingBox towerBBox = MeshBoundingBox(tower.mesh); // Get mesh bounding box bool hitMeshBBox = false; bool hitTriangle = false; @@ -59,13 +59,16 @@ public partial class models_mesh_picking SetCameraMode(camera, (int)CAMERA_FREE); // Set a free camera mode SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key + + //---------------------------------------------------------------------------------- + // Main game loop + //-------------------------------------------------------------------------------------- + while (!WindowShouldClose()) // Detect window close button or ESC key { - // Update - //---------------------------------------------------------------------------------- - UpdateCamera(ref camera); // Update camera + //---------------------------------------------------------------------------------- + // Update + //---------------------------------------------------------------------------------- + UpdateCamera(ref camera); // Update camera // Display information about closest hit RayHitInfo nearestHit = new RayHitInfo(); @@ -121,7 +124,6 @@ public partial class models_mesh_picking } hitMeshBBox = false; //---------------------------------------------------------------------------------- - // Draw //---------------------------------------------------------------------------------- BeginDrawing(); diff --git a/Examples/text/text_ttf_loading.cs b/Examples/text/text_ttf_loading.cs index 49ee752..fa6d639 100644 --- a/Examples/text/text_ttf_loading.cs +++ b/Examples/text/text_ttf_loading.cs @@ -44,8 +44,7 @@ public partial class text_ttf_loading int currentFontFilter = 0; // FILTER_POINT // NOTE: Drag and drop support only available for desktop platforms: Windows, Linux, OSX - int count = 0; - string[] droppedFiles; + string[] droppedFiles; SetTargetFPS(60); //-------------------------------------------------------------------------------------- @@ -83,12 +82,13 @@ public partial class text_ttf_loading // Load a dropped TTF file dynamically (at current fontSize) if (IsFileDropped()) { - droppedFiles = GetDroppedFiles(ref count); + droppedFiles = GetDroppedFiles(); + - if (count == 1) // Only support one ttf file dropped + if (droppedFiles.Length == 1) // Only support one ttf file dropped { UnloadFont(font); - font = LoadFontEx(droppedFiles[0], (int)fontSize, 0, null); + font = LoadFontEx(droppedFiles[0].ToString(), (int)fontSize, 0, null); ClearDroppedFiles(); } } @@ -108,6 +108,7 @@ public partial class text_ttf_loading DrawTextEx(font, msg, fontPosition, fontSize, 0, BLACK); // TODO: It seems texSize measurement is not accurate due to chars offsets... + //TODO also fix the format text parts //DrawRectangleLines(fontPosition.x, fontPosition.y, textSize.x, textSize.y, RED); DrawRectangle(0, screenHeight - 80, screenWidth, 80, LIGHTGRAY);