parent
51678c647b
commit
3812df5975
@ -0,0 +1,18 @@
|
|||||||
|
#ifndef COORD_INPUT
|
||||||
|
#define COORD_INPUT
|
||||||
|
|
||||||
|
struct p_coord
|
||||||
|
{
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
};
|
||||||
|
|
||||||
|
bool coordValide(struct p_coord coord) {
|
||||||
|
return coord.x>=0 && coord.y>=0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool coordEqual(struct p_coord a, struct p_coord b) {
|
||||||
|
return a.x == b.x && a.y == b.y;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif //COORD_INPUT
|
@ -0,0 +1,56 @@
|
|||||||
|
#ifndef INPUT_ELEMENT_INCLUDED
|
||||||
|
#define INPUT_ELEMENT_INCLUDED
|
||||||
|
|
||||||
|
/*
|
||||||
|
Clique sur un element (param coord du jeu)
|
||||||
|
Deplace Element (params coord du jeu debut et fin)
|
||||||
|
|
||||||
|
Clique sur element UI
|
||||||
|
Fleche pour selectionner element UI
|
||||||
|
Entré -> active element UI
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "Coord.h"
|
||||||
|
|
||||||
|
typedef enum {InputType_None, InputType_ClickGame, InputType_MoveGame, InputType_ActivateUI} InputType;
|
||||||
|
typedef enum {UIAction_Validate, UIAction_Cancel, UIAction_Quit } UIAction;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
union
|
||||||
|
{
|
||||||
|
struct p_coord coord;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
struct p_coord start;
|
||||||
|
struct p_coord end;
|
||||||
|
} move;
|
||||||
|
|
||||||
|
UIAction uiAction;
|
||||||
|
} data;
|
||||||
|
|
||||||
|
InputType type;
|
||||||
|
} InputElement;
|
||||||
|
|
||||||
|
|
||||||
|
InputElement createInputElementNone() {
|
||||||
|
InputElement i = {.type=InputType_None};
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
InputElement createInputElementUIQuit() {
|
||||||
|
InputElement i = {.type=InputType_ActivateUI, .data.uiAction=UIAction_Quit};
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
InputElement createInputElementClickBoard(const struct p_coord newCoord) {
|
||||||
|
InputElement i = {.type=InputType_ClickGame, .data.coord = newCoord};
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
InputElement createInputElementMoveBoard(const struct p_coord newCoord) {
|
||||||
|
InputElement i = {.type=InputType_MoveGame, .data.coord = newCoord};
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif // INPUT_ELEMENT_INCLUDED
|
@ -0,0 +1,65 @@
|
|||||||
|
#ifndef INPUT_PROCESSOR_INCLUDED
|
||||||
|
#define INPUT_PROCESSOR_INCLUDED
|
||||||
|
|
||||||
|
#include "Button.h"
|
||||||
|
#include "Coord.h"
|
||||||
|
#include "InputElement.h"
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
ArrayButton tabButton;
|
||||||
|
struct p_coord selectedCase; ///< Board , (-1;-1) si inexistant
|
||||||
|
} InputProcessor;
|
||||||
|
|
||||||
|
InputElement proccessInput(InputProcessor *inputProcessor, const SDL_Rect boardRect)
|
||||||
|
{
|
||||||
|
SDL_Event event;
|
||||||
|
if (!SDL_PollEvent(&event))
|
||||||
|
{
|
||||||
|
return createInputElementNone();
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (event.type)
|
||||||
|
{
|
||||||
|
case SDL_QUIT:
|
||||||
|
return createInputElementUIQuit();
|
||||||
|
case SDL_MOUSEBUTTONDOWN:
|
||||||
|
{
|
||||||
|
const SDL_Point mousePoint = {.x = event.button.x, .y = event.button.y};
|
||||||
|
if (SDL_PointInRect(&mousePoint, &boardRect))
|
||||||
|
{
|
||||||
|
inputProcessor->selectedCase = screenCoordToGameCoord(mousePoint);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case SDL_MOUSEBUTTONUP:
|
||||||
|
{
|
||||||
|
const SDL_Point mousePoint = {.x = event.button.x, .y = event.button.y};
|
||||||
|
if (SDL_PointInRect(&mousePoint, &boardRect))
|
||||||
|
{
|
||||||
|
if (coordValide(inputProcessor->selectedCase))
|
||||||
|
{
|
||||||
|
struct p_coord newCoord = screenCoordToGameCoord(mousePoint);
|
||||||
|
if (coordEqual(inputProcessor->selectedCase, newCoord)) {
|
||||||
|
return createInputElementClickBoard(newCoord);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return createInputElementMoveBoard(inputProcessor->selectedCase, newCoord);
|
||||||
|
}
|
||||||
|
inputProcessor->selectedCase = newCoord;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (size_t i = 0; i<inputProcessor->tabButton.size; ++i) {
|
||||||
|
inputProcessor->tabButton.button[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif //INPUT_PROCESSOR_INCLUDED
|
Loading…
Reference in new issue