From 0ccbec66ff4113dc6e619265612c9231a33e710b Mon Sep 17 00:00:00 2001 From: Magnus Oblerion <82583559+oblerion@users.noreply.github.com> Date: Wed, 25 Sep 2024 12:00:07 +0200 Subject: [PATCH] Add files via upload --- examples/core/core_input_gamepad_virtual.c | 119 +++++++++++++++++++ examples/core/core_input_gamepad_virtual.png | Bin 0 -> 9415 bytes 2 files changed, 119 insertions(+) create mode 100644 examples/core/core_input_gamepad_virtual.c create mode 100644 examples/core/core_input_gamepad_virtual.png diff --git a/examples/core/core_input_gamepad_virtual.c b/examples/core/core_input_gamepad_virtual.c new file mode 100644 index 000000000..c199d1235 --- /dev/null +++ b/examples/core/core_input_gamepad_virtual.c @@ -0,0 +1,119 @@ +/******************************************************************************************* +* +* raylib [core] example - Minimal Virtual Dpad +* +* Example originally created with raylib 5.0, last time updated with raylib 5.0 +* +* Example create by GreenSnakeLinux (@GreenSnakeLinux), +* lighter by oblerion (@oblerion) and +* reviewed by Ramon Santamaria (@raysan5) +* +* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, +* BSD-like license that allows static linking with closed source software +* +* Copyright (c) 2024 Ramon Santamaria (@raysan5) +* +********************************************************************************************/ + +#include "raylib.h" +#include +//------------------------------------------------------------------------------------ +// Program main entry point +//------------------------------------------------------------------------------------ +int main(void) +{ + // Initialization + //-------------------------------------------------------------------------------------- + const int screenWidth = 800; + const int screenHeight = 450; + + InitWindow(screenWidth, screenHeight, "raylib [core] example - basic window"); + + const int dpad_x = 90; + const int dpad_y = 300; + const int dpad_rad = 25;//radius of each pad + Color dpad_color = BLUE; + int dpad_keydown = -1;//-1 if not down, else 0,1,2,3 + + // collider[4] with x,y + const float dpad_collider[4][2]= + { + {dpad_x,dpad_y-dpad_rad*1.5},//up + {dpad_x-dpad_rad*1.5,dpad_y},//left + {dpad_x+dpad_rad*1.5,dpad_y},//right + {dpad_x,dpad_y+dpad_rad*1.5}//down + }; + const char dpad_label[4]="XYBA"; + + float player_x=100; + float player_y=100; + + SetTargetFPS(60); + //-------------------------------------------------------------------------------------- + + // Main game loop + while (!WindowShouldClose()) // Detect window close button or ESC key + { + // update -------------------------------------------------------------------------- + dpad_keydown = -1; //reset + float input_x=0; + float input_y=0; + if(GetTouchPointCount()>0) + {//use touch pos + input_x = GetTouchX(); + input_y = GetTouchY(); + } + else + {//use mouse pos + input_x = GetMouseX(); + input_y = GetMouseY(); + } + for(int i=0;i<4;i++) + { + //test distance each collider and input < radius + if( fabsf(dpad_collider[i][1]-input_y) + fabsf(dpad_collider[i][0]-input_x) < dpad_rad) + { + dpad_keydown = i; + break; + } + } + // move player + switch(dpad_keydown){ + case 0: player_y -= 50*GetFrameTime(); + break; + case 1: player_x -= 50*GetFrameTime(); + break; + case 2: player_x += 50*GetFrameTime(); + break; + case 3: player_y += 50*GetFrameTime(); + default:; + }; + // draw ---------------------------------------------------------------------------- + BeginDrawing(); + ClearBackground(RAYWHITE); + + for(int i=0;i<4;i++) + { + //draw all pad + DrawCircle(dpad_collider[i][0],dpad_collider[i][1],dpad_rad,dpad_color); + if(i!=dpad_keydown) + { + //draw label + DrawText(TextSubtext(dpad_label,i,1), + dpad_collider[i][0]-5, + dpad_collider[i][1]-5,16,BLACK); + } + + } + DrawText("Player",player_x,player_y,16,BLACK); + EndDrawing(); + } + + // De-Initialization + //-------------------------------------------------------------------------------------- + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- + + return 0; +} + diff --git a/examples/core/core_input_gamepad_virtual.png b/examples/core/core_input_gamepad_virtual.png new file mode 100644 index 0000000000000000000000000000000000000000..c04716fdb98744e178c804e097e8e1860d5346fc GIT binary patch literal 9415 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