From 9e7d19bfd1608f93a33a8df8271dfb74e118c04c Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Sun, 27 Dec 2020 16:48:47 +1100 Subject: [PATCH] Eliminate Mouse_X/Y completely, start work on new keybinding changed event --- src/Event.c | 14 +++++++------- src/Event.h | 26 +++++++++++++------------- src/Input.c | 9 +++------ src/Input.h | 3 --- src/LScreens.c | 2 +- src/LScreens.h | 2 +- src/Launcher.c | 6 +++--- 7 files changed, 28 insertions(+), 34 deletions(-) diff --git a/src/Event.c b/src/Event.c index 5ab8b94ba..e95facc33 100644 --- a/src/Event.c +++ b/src/Event.c @@ -143,13 +143,6 @@ void Event_RaiseBlock(struct Event_Block* handlers, IVec3 coords, BlockID oldBlo } } -void Event_RaiseMove(struct Event_PointerMove* handlers, int idx, int xDelta, int yDelta) { - int i; - for (i = 0; i < handlers->Count; i++) { - handlers->Handlers[i](handlers->Objs[i], idx, xDelta, yDelta); - } -} - void Event_RaiseChat(struct Event_Chat* handlers, const cc_string* msg, int msgType) { int i; for (i = 0; i < handlers->Count; i++) { @@ -177,3 +170,10 @@ void Event_RaiseRawMove(struct Event_RawMove* handlers, float xDelta, float yDel handlers->Handlers[i](handlers->Objs[i], xDelta, yDelta); } } + +void Event_RaiseBind(struct Event_Bind* handlers, int binding, int pressed) { + int i; + for (i = 0; i < handlers->Count; i++) { + handlers->Handlers[i](handlers->Objs[i], binding, pressed); + } +} diff --git a/src/Event.h b/src/Event.h index 2d0921fbc..197f5f015 100644 --- a/src/Event.h +++ b/src/Event.h @@ -39,12 +39,6 @@ struct Event_Block { void* Objs[EVENT_MAX_CALLBACKS]; int Count; }; -typedef void (*Event_PointerMove_Callback)(void* obj, int idx, int xDelta, int yDelta); -struct Event_PointerMove { - Event_PointerMove_Callback Handlers[EVENT_MAX_CALLBACKS]; - void* Objs[EVENT_MAX_CALLBACKS]; int Count; -}; - typedef void (*Event_Chat_Callback)(void* obj, const cc_string* msg, int msgType); struct Event_Chat { Event_Chat_Callback Handlers[EVENT_MAX_CALLBACKS]; @@ -69,6 +63,12 @@ struct Event_RawMove { void* Objs[EVENT_MAX_CALLBACKS]; int Count; }; +typedef void (*Event_Bind_Callback)(void* obj, int binding, int pressed); +struct Event_Bind { + Event_Bind_Callback Handlers[EVENT_MAX_CALLBACKS]; + void* Objs[EVENT_MAX_CALLBACKS]; int Count; +}; + /* Registers a callback function for the given event. */ /* NOTE: Trying to register a callback twice or over EVENT_MAX_CALLBACKS callbacks will terminate the game. */ CC_API void Event_Register(struct Event_Void* handlers, void* obj, Event_Void_Callback handler); @@ -90,8 +90,6 @@ void Event_RaiseEntry(struct Event_Entry* handlers, struct Stream* stream, const /* Calls all registered callbacks for an event which takes block change arguments. */ /* These are the coordinates/location of the change, block there before, block there now. */ void Event_RaiseBlock(struct Event_Block* handlers, IVec3 coords, BlockID oldBlock, BlockID block); -/* Calls all registered callbacks for an event which has pointer movement arguments. */ -void Event_RaiseMove(struct Event_PointerMove* handlers, int idx, int xDelta, int yDelta); /* Calls all registered callbacks for an event which has chat message type and contents. */ /* See MsgType enum in Chat.h for what types of messages there are. */ void Event_RaiseChat(struct Event_Chat* handlers, const cc_string* msg, int msgType); @@ -102,6 +100,8 @@ void Event_RaiseInput(struct Event_Input* handlers, int key, cc_bool repeating); void Event_RaiseString(struct Event_String* handlers, const cc_string* str); /* Calls all registered callbacks for an event which has raw pointer movement arguments. */ void Event_RaiseRawMove(struct Event_RawMove* handlers, float xDelta, float yDelta); +/* Calls all registered callbacks for an event which has key binding arguments. */ +void Event_RaiseBind(struct Event_Bind* handlers, int binding, int pressed); void Event_UnregisterAll(void); /* NOTE: Event_UnregisterAll must be updated if events lists are changed */ @@ -172,14 +172,14 @@ CC_VAR extern struct _InputEventsList { struct Event_Int Up; /* Key or button is released. Arg is a member of Key enumeration */ struct Event_Float Wheel; /* Mouse wheel is moved/scrolled (Arg is wheel delta) */ struct Event_String TextChanged; /* Text in the on-screen input keyboard changed (for Mobile) */ - struct Event_Int BindChanged; /* Key binding changed. Arg is a member of KeyBind enumeration*/ + struct Event_Bind BindChanged; /* Key binding changed. Arg is a member of KeyBind enumeration*/ } InputEvents; CC_VAR extern struct _PointerEventsList { - struct Event_PointerMove Moved; /* Pointer position changed (Arg is delta from last position) */ - struct Event_Int Down; /* Left mouse or touch is pressed (Arg is index) */ - struct Event_Int Up; /* Left mouse or touch is released (Arg is index) */ - struct Event_RawMove RawMoved; /* Raw pointer position changed (Arg is delta) */ + struct Event_Int Moved; /* Pointer position changed (Arg is index) */ + struct Event_Int Down; /* Left mouse or touch is pressed (Arg is index) */ + struct Event_Int Up; /* Left mouse or touch is released (Arg is index) */ + struct Event_RawMove RawMoved; /* Raw pointer position changed (Arg is delta) */ } PointerEvents; CC_VAR extern struct _NetEventsList { diff --git a/src/Input.c b/src/Input.c index 1a3627b30..2c228b195 100644 --- a/src/Input.c +++ b/src/Input.c @@ -265,7 +265,6 @@ void Input_Clear(void) { /*########################################################################################################################* *----------------------------------------------------------Mouse----------------------------------------------------------* *#########################################################################################################################*/ -int Mouse_X, Mouse_Y; struct Pointer Pointers[INPUT_MAX_POINTERS]; cc_bool Input_RawMode; @@ -282,8 +281,6 @@ void Mouse_ScrollWheel(float delta) { } void Pointer_SetPosition(int idx, int x, int y) { - int deltaX = x - Mouse_X, deltaY = y - Mouse_Y; - Mouse_X = x; Mouse_Y = y; if (x == Pointers[idx].x && y == Pointers[idx].y) return; /* TODO: reset to -1, -1 when pointer is removed */ Pointers[idx].x = x; Pointers[idx].y = y; @@ -291,7 +288,7 @@ void Pointer_SetPosition(int idx, int x, int y) { #ifdef CC_BUILD_TOUCH if (Input_TouchMode && !(touches[idx].type & TOUCH_TYPE_GUI)) return; #endif - Event_RaiseMove(&PointerEvents.Moved, idx, deltaX, deltaY); + Event_RaiseInt(&PointerEvents.Moved, idx); } @@ -358,7 +355,7 @@ static void KeyBind_Save(void) { void KeyBind_Set(KeyBind binding, int key) { KeyBinds[binding] = key; KeyBind_Save(); - Event_RaiseInt(&InputEvents.BindChanged, binding); + Event_RaiseBind(&InputEvents.BindChanged, binding, KeyBind_IsPressed(binding)); } /* Initialises and loads key bindings from options */ @@ -964,7 +961,7 @@ static void OnMouseWheel(void* obj, float delta) { } } -static void OnPointerMove(void* obj, int idx, int xDelta, int yDelta) { +static void OnPointerMove(void* obj, int idx) { struct Screen* s; int i, x = Pointers[idx].x, y = Pointers[idx].y; diff --git a/src/Input.h b/src/Input.h index f5a166e39..ab0905d1a 100644 --- a/src/Input.h +++ b/src/Input.h @@ -95,9 +95,6 @@ void Input_RemoveTouch(long id, int x, int y); /* Data for mouse and touch */ extern struct Pointer { int x, y; } Pointers[INPUT_MAX_POINTERS]; -/* (OBSOLETE) X and Y coordinates of the mouse. Use Mouse_SetPosition to change. */ -extern int Mouse_X, Mouse_Y; - /* Raises InputEvents.Wheel with the given wheel delta. */ void Mouse_ScrollWheel(float delta); /* Sets X and Y position of the given pointer, always raising PointerEvents.Moved. */ diff --git a/src/LScreens.c b/src/LScreens.c index 4d8380a2c..b9ccc5b68 100644 --- a/src/LScreens.c +++ b/src/LScreens.c @@ -147,7 +147,7 @@ static void LScreen_MouseUp(struct LScreen* s, int idx) { } } -static void LScreen_MouseMove(struct LScreen* s, int idx, int deltaX, int deltaY) { +static void LScreen_MouseMove(struct LScreen* s, int idx) { struct LWidget* over = LScreen_WidgetAt(s, idx); struct LWidget* prev = s->hoveredWidget; cc_bool overSame = prev == over; diff --git a/src/LScreens.h b/src/LScreens.h index 78f5e38f8..99a76260e 100644 --- a/src/LScreens.h +++ b/src/LScreens.h @@ -21,7 +21,7 @@ typedef void (*LWidget_Func)(struct LScreen* s, struct LWidget* w); void (*KeyPress)(struct LScreen* s, char c); \ void (*MouseDown)(struct LScreen* s, int idx); \ void (*MouseUp)(struct LScreen* s, int idx); \ - void (*MouseMove)(struct LScreen* s, int idx, int deltaX, int deltaY); \ + void (*MouseMove)(struct LScreen* s, int idx); \ void (*MouseWheel)(struct LScreen* s, float delta); \ void (*TextChanged)(struct LScreen* s, const cc_string* str); \ LWidget_Func HoverWidget; /* Called when mouse is moved over a given widget. */ \ diff --git a/src/Launcher.c b/src/Launcher.c index 57bf6e6f3..43fd2f290 100644 --- a/src/Launcher.c +++ b/src/Launcher.c @@ -52,7 +52,7 @@ void Launcher_SetScreen(struct LScreen* screen) { screen->Layout(screen); /* for hovering over active button etc */ for (i = 0; i < Pointers_Count; i++) { - screen->MouseMove(screen, i, 0, 0); + screen->MouseMove(screen, i); } Launcher_Redraw(); @@ -219,9 +219,9 @@ static void OnPointerUp(void* obj, int idx) { activeScreen->MouseUp(activeScreen, idx); } -static void OnPointerMove(void* obj, int idx, int deltaX, int deltaY) { +static void OnPointerMove(void* obj, int idx) { if (!activeScreen) return; - activeScreen->MouseMove(activeScreen, idx, deltaX, deltaY); + activeScreen->MouseMove(activeScreen, idx); }