From c8900e8ddfa424e7758ef953227f2cba7d0ab173 Mon Sep 17 00:00:00 2001 From: Linus Probert Date: Thu, 11 Oct 2018 20:12:11 +0200 Subject: [PATCH] Controller button rendering based on controller type Also added in the last button textures that I'd left out previously. --- assets/Extras/Controller.png | Bin 1573 -> 1930 bytes src/defines.h | 5 +++++ src/input.c | 6 +----- src/main.c | 13 ++++++++++--- src/skillbar.c | 14 +++++++------- src/skillbar.h | 2 +- src/tooltip.c | 22 +++++++++++----------- src/tooltip.h | 2 +- 8 files changed, 36 insertions(+), 28 deletions(-) diff --git a/assets/Extras/Controller.png b/assets/Extras/Controller.png index 8ee96deb771a35a36d5f42d2a9b8b15dc76c35aa..d40f97a6d7c8b929ce923951315e34fa25a52fda 100644 GIT binary patch delta 1929 zcmV;42X^?S42lns7k^*~1^@s6t;KZc000M3Nkl+ZFYdh?^Wr!6?H5bK@mD9`!+T~a11BBV5eC8t9_6@>C=dppa$H9g z2!l^Ku7gP*1wr<99uOHK>r7xJ&^M5V%IABQW?}cim435ytTD@TeL7)Iz>(94Pt(27m^DW%l{IOl9odrhf zkDUL4TD=js_};rQR4ZjXYpyAE1Yb`5=6-0foCT%f(4n86G?aRR@03IWD%FPeOAaC=EAIi*)MF`=C~DpoTVoy?<`!lL4sJ8>yY9kj8m|FbLV4 z2ST1et=<5LAdms5YJH|gM390=`;cpPfqpI+%0kx$!@u5TJEH8{G z*W^C`thr{42|8zD|5ZxYG|tLOYQEsmvp~*Kt2dOXkQxWXVuH`{1-$;_PcPwfH?H6{ zd#dp7tbgue?dhHue|cd9zpb87_^sVn_&9vki$Agd3gaiPDtx}O0z7!&#mCADSXh@S z89;Rf-#U6%NL$CJD>&=;bOo)BvJ{@<3&{ciz4c@Moz-10zSjCNzqRW(7HF*>^SS3( zAX?ul1OTW&M2_2d3ZDu@V3Pj|1BA*HbYkzkU>t@IhWRpRZ=azqDX8~VWyFjs6 zv{nv+fa2wruMC0|kq~4AFOU3q9`z*?M)ZV#>h5)%d;0+!n_H>*+gH@-dU5BIB1iCz zy}-3wO|<^GX(*-2ZFq664vz0JGZQpnvrF&31Q?>&(tf$9+)e17V+crM-=R?(GL} z!zulXJD;$A@-(Kj`ue~q_+GPsJSO;Lf<6HHq8nMZvAKoCnQ7}ZXwwnTqt!~;+kn}b zX>p6}(DH3#g}5&Bl|j&FfN|A1O#F?_E#t89m8GzLBb0&`{ao{{n;}Y&bZ6MP8Gp$W z|JdITVAV=F%af%egCQXOLl1%WgOB|3kNq7XVhi}_krLP zYV}59Gf}Bmt2dYrpMo#Hm-?M=h=1rt0R2hpUJS$(;%QK%giH|MMM{fvTgtik`gsyx z*OykmUf-p^0EDSvNKAmt$unPB2>A>qt~z<-#{ozaMO)px@{OhNVQZmY^NpyU$X<*}|k$<7{U3NHc zh@>^#2A_=)#S@$?cIY}OJDdUN#=2ibKCLX7lf@2QCuK+GTVlRjP%83C+u1Z(c5xJ6cfywXu5OUTr*?-x#&v*f ze5ZUF2Vu(q0}L?000SIj^ndCF2}(x4UXbwCZ+%6kgZK4gIW`%@YwicCUwKKY!}s;Q z5zzx&xu{l>FF$^e@oHo-}OjEqmE zBgv*t^bhHz1P66N9023m{&{L@N-Zoz8q}Irl`Tp z3`lFN3t4389N+OEDFfv)X9i@2J`VI7S@n0N3$XURrg%W3TECkaX0gGlUwoI#wt$()?x=KJbcpM{{!nah5%r4;!IqS9k8@{D*4s8-7O z@bNz{(&WS$>c@+@gE0#vy=dU^#%e`+FR#MOCmuQKRkgfO z`jG>twXS+xvVWxTw^FTIL5RpozZGas5X!-H_t(0pRV&JYwJ!eL`@Ns19|c*sAANqiW#(B2_RsR>Bn;jL;4x0f0l>=RRbv7E#^?B;l9|o*S>>AC=ij!s zv@wA)x6XDPO(RUB;miw$p9L~5zZED`AvX?)#YDIguH)0c|5+8j@^}@Wyf+H}ta*a1 zH>Xzo=70Ju{%&4Z`0mLLzRx_c;%}YpVBz`$g%2AI;N?pz9*qXPD6gkP0M`|4^U$u~ zn#ZOqB<8W{3M7xR6kZ9}(+dFT-H-Wa%@Zr0-2IsEp4g2ADcM;=eNGr%x27i;DS^mn-0=6=CfqXu1%-rd8I4-li zG6-@YQ;_DoEb{R@Y6~-s7zuyl`6Jx^@(sIt`_BB~sybcQkB^jc1h4G{9zJcO`~MTI zQZC)35BKgH)0^S36%X`{|GK=0GGNUCk@5B8BPDHn?k4J`qE?OvgZHShobjShQU1fd z`+sPL$4Xk$o6{V?@$}AfkznFw<7s|zO{8}^9rJGRA8ym${hf8-Piw)xm;@Z+n(P{t3Uq(1-S#rvo`l#1tCC;L1=g#E(Z*C^xSobYvd z5jU0>FQhJ@=YTR99F#u4*Y6H;o^q)e_kTgk15uw(3VRcO`^z`$hI94TkB_iDcN0q_ zKOGnaZ#4_ZV}ea2&;ig^=MiPQd;6%DipFWsR7X6I)~Xfj29!%h@rZ0}dDB=SuFJeK z2-*xVNqNSJ-`(5S4im2|h3SJ(PQ?3}=8c;nt{~~jaN=epOZ>z?5AbT$${=r+u78ZK z0q!q7g!(T&vdd5W6CrIO6iV+}Je_0WKaN1%Hvs0s6ct?wTAr)O#{x!&4>kCb`saBf;eSR*-s|xX|-kfoH>W zvgJovf8rM+v=P9?g!L!}VovciD1Smi2E^|oq{X=@ zMHz$a>E$-0@u?BO?V>2a8E>DfE-NK^o8P4uJvJ0dnJqmUG@&6BS`QE>mcbH}8 z*eqGKcY}wAhl#+_68#8OQK}>J`MlhfE?vgI7qFEfoUO_lr*1I)Mu;X1*#$Bu%>h@< zz%)&}08N;*E)aijKjh#22~GSg;HAy+<77P0cR*^xWsRE=!)Ur0Vj9vXW;^@~+c-FK TBhYY500000NkvXXu0mjfYlRpU diff --git a/src/defines.h b/src/defines.h index c465c0f..dc591e0 100644 --- a/src/defines.h +++ b/src/defines.h @@ -91,4 +91,9 @@ typedef enum Direction_t { UP, DOWN, LEFT, RIGHT } Direction; +#define CONTROLLER_BTN(xindex, mode) CLIP16(xindex, mode == 1 ? 0 : 16) +#define CONTROLLER_TRIGGER(xindex, mode) CLIP16(xindex + (mode == 1 ? 16 : 0), 32) +#define CONTROLLER_BUMPER(xindex, mode) CLIP16(xindex + (mode == 1 ? 16 : 0), 48) +#define CONTROLLER_OPT(xindex, mode) CLIP16(xindex + (mode == 2 ? 16 : 0), 64) + #endif // DEFINES_H_ diff --git a/src/input.c b/src/input.c index 1767b65..251c1aa 100644 --- a/src/input.c +++ b/src/input.c @@ -119,6 +119,7 @@ get_event_button(SDL_Event *event) case SDL_CONTROLLER_BUTTON_BACK: key = KEY_ESC; break; case SDL_CONTROLLER_BUTTON_LEFTSTICK: + case SDL_CONTROLLER_BUTTON_RIGHTSTICK: key = KEY_SPACE; break; default: key = 0; break; @@ -142,11 +143,6 @@ get_axis_motion(SDL_Event *event) return key; } -static Uint32 -get_button_modkey(SDL_Event *event) { - -} - static Uint32 get_event_modkey(SDL_Event *event) { diff --git a/src/main.c b/src/main.c index 1356eee..b37fbe9 100644 --- a/src/main.c +++ b/src/main.c @@ -170,6 +170,7 @@ static SDL_Rect statsGuiViewport; static SDL_Rect minimapViewport; static SDL_Rect menuViewport; static Input input; +static Uint8 controllerMode = 0; #ifdef DEBUG static Sprite *fpsSprite = NULL; @@ -217,7 +218,13 @@ bool initSDL(void) gController = SDL_GameControllerOpen(i); if (gController) { - info("Game controller connected: %s", SDL_GameControllerName(gController)); + const char *ctrlName = SDL_GameControllerName(gController); + info("Game controller connected: %s", ctrlName); + if (ctrlName[0] == 'P' && ctrlName[1] == 'S' && ctrlName[2] == '4') + controllerMode = 2; + else + controllerMode = 1; + break; } } @@ -301,7 +308,7 @@ initGame(void) gCamera = camera_create(gRenderer); gRoomMatrix = roommatrix_create(); gGui = gui_create(gCamera); - skillbar_set_controller_mode(gController != NULL); + skillbar_set_controller_mode(controllerMode); gSkillBar = skillbar_create(gCamera); item_builder_init(gRenderer); #ifdef DEBUG @@ -543,7 +550,7 @@ init(void) hiscore_init(); initMainMenu(); - tooltip_set_controller_mode(gController != NULL); + tooltip_set_controller_mode(controllerMode); howto_tooltip = tooltip_create(how_to_play_tooltip, gCamera); new_skill_tooltip = tooltip_create(skills_tooltip, gCamera); new_artifact_tooltip = tooltip_create(artifacts_tooltip, gCamera); diff --git a/src/skillbar.c b/src/skillbar.c index 60fa34d..6ebe29d 100644 --- a/src/skillbar.c +++ b/src/skillbar.c @@ -28,10 +28,10 @@ #include "update_data.h" #include "gui.h" -static bool controller_mode = false; +static Uint8 controller_mode = 0; void -skillbar_set_controller_mode(bool ctrl_mode) +skillbar_set_controller_mode(Uint8 ctrl_mode) { controller_mode = ctrl_mode; } @@ -70,11 +70,11 @@ load_texture(SkillBar *bar, const char *path, SDL_Renderer *renderer) } } else { Uint8 i = 0; - linkedlist_append(&bar->sprites, create_controller_button_sprite(POS(i++ * 32 + 16, 16), CLIP16(0, 0))); - linkedlist_append(&bar->sprites, create_controller_button_sprite(POS(i++ * 32 + 16, 16), CLIP16(16, 0))); - linkedlist_append(&bar->sprites, create_controller_button_sprite(POS(i++ * 32 + 16, 16), CLIP16(32, 0))); - linkedlist_append(&bar->sprites, create_controller_button_sprite(POS(i++ * 32 + 16, 16), CLIP16(48, 0))); - linkedlist_append(&bar->sprites, create_controller_button_sprite(POS(i++ * 32 + 16, 20), CLIP16(48, 48))); + linkedlist_append(&bar->sprites, create_controller_button_sprite(POS(i++ * 32 + 16, 16), CONTROLLER_BTN(0, controller_mode))); + linkedlist_append(&bar->sprites, create_controller_button_sprite(POS(i++ * 32 + 16, 16), CONTROLLER_BTN(16, controller_mode))); + linkedlist_append(&bar->sprites, create_controller_button_sprite(POS(i++ * 32 + 16, 16), CONTROLLER_BTN(32, controller_mode))); + linkedlist_append(&bar->sprites, create_controller_button_sprite(POS(i++ * 32 + 16, 16), CONTROLLER_BTN(48, controller_mode))); + linkedlist_append(&bar->sprites, create_controller_button_sprite(POS(i++ * 32 + 16, 20), CONTROLLER_BUMPER(32, controller_mode))); } } diff --git a/src/skillbar.h b/src/skillbar.h index 6c9437f..cd3b839 100644 --- a/src/skillbar.h +++ b/src/skillbar.h @@ -46,7 +46,7 @@ typedef struct SkillBar { } SkillBar; void -skillbar_set_controller_mode(bool ctrl_mode); +skillbar_set_controller_mode(Uint8 ctrl_mode); SkillBar * skillbar_create(Camera*); diff --git a/src/tooltip.c b/src/tooltip.c index 60e309e..aa49c91 100644 --- a/src/tooltip.c +++ b/src/tooltip.c @@ -23,7 +23,7 @@ #include "gui.h" #include "texturecache.h" -static bool controller_mode = false; +static Uint8 controller_mode = 0; static bool render_button_texture_for(const char *text, Position pos, Camera *cam) @@ -35,21 +35,21 @@ render_button_texture_for(const char *text, Position pos, Camera *cam) Texture *t = texturecache_add("Extras/Controller.png"); SDL_Rect clip; if (strcmp(text, "1") == 0) { - clip = CLIP16(0, 0); + clip = CONTROLLER_BTN(0, controller_mode); } else if (strcmp(text, "2") == 0) { - clip = CLIP16(16, 0); + clip = CONTROLLER_BTN(16, controller_mode); } else if (strcmp(text, "3") == 0) { - clip = CLIP16(32, 0); + clip = CONTROLLER_BTN(32, controller_mode); } else if (strcmp(text, "4") == 0) { - clip = CLIP16(48, 0); + clip = CONTROLLER_BTN(48, controller_mode); } else if (strcmp(text, "5") == 0) { - clip = CLIP16(48, 48); + clip = CONTROLLER_BUMPER(32, controller_mode); } else if (strcmp(text, "ESC") == 0) { - clip = CLIP16(0, 64); - } else if (strcmp(text, "SHIFT") == 0) { - clip = CLIP16(16, 48); + clip = CONTROLLER_OPT(32, controller_mode); + } else if (strcmp(text, "ENTER") == 0) { + clip = CONTROLLER_OPT(0, controller_mode); } else if (strcmp(text, "SPACE") == 0) { - clip = CLIP16(16, 32); + clip = CLIP16(0, 80); } else { return false; } @@ -118,7 +118,7 @@ tooltip_create(char **content, Camera *cam) } void -tooltip_set_controller_mode(bool ctrl_mode) +tooltip_set_controller_mode(Uint8 ctrl_mode) { controller_mode = ctrl_mode; } diff --git a/src/tooltip.h b/src/tooltip.h index 63fa25a..880a043 100644 --- a/src/tooltip.h +++ b/src/tooltip.h @@ -25,4 +25,4 @@ Sprite * tooltip_create(char **content, Camera*); void -tooltip_set_controller_mode(bool); \ No newline at end of file +tooltip_set_controller_mode(Uint8 ctrl_mode); \ No newline at end of file