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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 D=q$A* literal 0 HcmV?d00001