Skip to content

Commit

Permalink
pcmockup: replace dragging with key controls
Browse files Browse the repository at this point in the history
because imgui really does not like other people knowing what it does
  • Loading branch information
Helco committed Dec 7, 2018
1 parent 341a266 commit 1f9ba44
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 62 deletions.
22 changes: 16 additions & 6 deletions pcmockup/debugwindow.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ SDL_Surface* createSDLSurface(int w, int h, Uint32 format)
return surface;
}

void debugWindow_onDrag(Window* window, int button, ImVec2 delta, void* userdata);
void debugWindow_onKeyDown(Window* window, SDL_Keysym sym, void* userdata);

DebugWindow* debugWindow_init(WindowContainer* parent, SDL_Rect bounds, const DebugView* view, Renderer* podRenderer)
Expand All @@ -45,7 +44,6 @@ DebugWindow* debugWindow_init(WindowContainer* parent, SDL_Rect bounds, const De
debugWindow_free(me);
return NULL;
}
window_setDragCallback(imageWindow_asWindow(me->window), debugWindow_onDrag, me);
window_setKeyCallbacks(imageWindow_asWindow(me->window), (WindowKeyCallbacks) {
.down = debugWindow_onKeyDown,
.userdata = me
Expand Down Expand Up @@ -130,17 +128,29 @@ void debugWindow_onDrag(Window* window, int button, ImVec2 delta, void* userdata
void debugWindow_onKeyDown(Window* window, SDL_Keysym sym, void* userdata)
{
UNUSED(window);
real_t delta = real_zero;
static const float zoomSpeed = 0.1f;
static const float moveSpeed = 8.0f;
real_t zoomDelta = real_zero;
xz_t moveDelta = xz_zero;
switch (sym.sym)
{
case (SDLK_PLUS):
case (SDLK_KP_PLUS): delta = real_from_float(0.1f); break;
case (SDLK_KP_PLUS): zoomDelta = real_from_float(zoomSpeed); break;
case (SDLK_MINUS):
case (SDLK_KP_MINUS): delta = real_from_float(-0.1f); break;
case (SDLK_KP_MINUS): zoomDelta = real_from_float(-zoomSpeed); break;
case (SDLK_w):
case (SDLK_UP): moveDelta = xz(real_zero, real_from_float(-moveSpeed)); break;
case (SDLK_s):
case (SDLK_DOWN): moveDelta = xz(real_zero, real_from_float(moveSpeed)); break;
case (SDLK_a):
case (SDLK_LEFT): moveDelta = xz(real_from_float(-moveSpeed), real_zero); break;
case (SDLK_d):
case (SDLK_RIGHT): moveDelta = xz(real_from_float(moveSpeed), real_zero); break;
default: return;
}
DebugWindow* me = (DebugWindow*)userdata;
me->zoom = real_add(me->zoom, real_mul(me->zoom, delta));
me->position = xz_sub(me->position, xz_invScale(moveDelta, me->zoom));
me->zoom = real_add(me->zoom, real_mul(me->zoom, zoomDelta));
debugWindow_updateOffset(me);
}

Expand Down
56 changes: 3 additions & 53 deletions pcmockup/pcmockup.c
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,8 @@ PCMockup *pcmockup_init()
me->pebbleWindow = pebbleWindow_init(
me->windowContainer,
windowGrid_getSingleBounds(&windowGrid, 0),
GSize(RENDERER_WIDTH, RENDERER_HEIGHT)
GSize(RENDERER_WIDTH, RENDERER_HEIGHT),
me->renderer
);
if (me->pebbleWindow == NULL)
{
Expand Down Expand Up @@ -151,58 +152,7 @@ void pcmockup_update(PCMockup *me)
case (SDLK_ESCAPE):
{
me->isRunning = 0;
}
break;
case (SDLK_w):
{
renderer_moveForward(me->renderer);
}
break;
case (SDLK_s):
{
renderer_moveBackwards(me->renderer);
}
break;
case (SDLK_a):
{
renderer_moveLeft(me->renderer);
}
break;
case (SDLK_d):
{
renderer_moveRight(me->renderer);
}
break;
case (SDLK_RIGHT):
{
renderer_rotateRight(me->renderer);
}
break;
case (SDLK_LEFT):
{
renderer_rotateLeft(me->renderer);
}
break;
case (SDLK_UP):
{
renderer_moveUp(me->renderer);
}
break;
case (SDLK_DOWN):
{
renderer_moveDown(me->renderer);
}
break;
case (SDLK_SPACE):
{
Location playerLocation;
playerLocation.angle = real_degToRad(real_from_int(0));
playerLocation.height = real_zero;
playerLocation.position = xz(real_from_int(20), real_from_int(20));

renderer_moveTo(me->renderer, playerLocation);
}
break;
}break;
}
}
windowContainer_handleEvent(me->windowContainer, &event);
Expand Down
2 changes: 1 addition & 1 deletion pcmockup/pcmockup.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ void safeFramebuffer_prepare(SafeFramebuffer* me);
void safeFramebuffer_check(SafeFramebuffer* me);

typedef struct PebbleWindow PebbleWindow;
PebbleWindow* pebbleWindow_init(WindowContainer* parent, SDL_Rect initialBounds, GSize pebbleSize);
PebbleWindow* pebbleWindow_init(WindowContainer* parent, SDL_Rect initialBounds, GSize pebbleSize, Renderer* renderer);
void pebbleWindow_free(PebbleWindow* window);
void pebbleWindow_startUpdate(PebbleWindow* me);
void pebbleWindow_endUpdate(PebbleWindow* me);
Expand Down
38 changes: 36 additions & 2 deletions pcmockup/pebblewindow.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#include "pcmockup.h"
#include "platform.h"
#include <stdio.h>
#include <string.h>

Expand All @@ -10,10 +11,13 @@ struct PebbleWindow
SDL_Color* textureData;
SDL_PixelFormat* texturePixelFormat;
SafeFramebuffer* framebuffer;
Renderer* renderer;
GSize pebbleSize;
};

PebbleWindow* pebbleWindow_init(WindowContainer* parent, SDL_Rect initialBounds, GSize pebbleSize)
void pebbleWindow_onKeyDown(Window* window, SDL_Keysym sym, void* userdata);

PebbleWindow* pebbleWindow_init(WindowContainer* parent, SDL_Rect initialBounds, GSize pebbleSize, Renderer* renderer)
{
PebbleWindow* me = (PebbleWindow*)malloc(sizeof(PebbleWindow));
if (me == NULL)
Expand All @@ -27,6 +31,10 @@ PebbleWindow* pebbleWindow_init(WindowContainer* parent, SDL_Rect initialBounds,
pebbleWindow_free(me);
return NULL;
}
window_setKeyCallbacks(imageWindow_asWindow(me->window), (WindowKeyCallbacks) {
.down = pebbleWindow_onKeyDown,
.userdata = me
});

me->textureData = (SDL_Color*)malloc(sizeof(SDL_Color) * pebbleSize.w * pebbleSize.h);
if (me->textureData == NULL)
Expand All @@ -52,7 +60,7 @@ PebbleWindow* pebbleWindow_init(WindowContainer* parent, SDL_Rect initialBounds,
}

me->pebbleSize = pebbleSize;

me->renderer = renderer;
return me;
}

Expand Down Expand Up @@ -118,6 +126,32 @@ void pebbleWindow_endUpdate(PebbleWindow* me)
imageWindow_setImageData(me->window, me->pebbleSize, me->textureData);
}

void pebbleWindow_onKeyDown(Window* window, SDL_Keysym sym, void* userdata)
{
UNUSED(window);
PebbleWindow* me = (PebbleWindow*)userdata;
switch(sym.sym)
{
case (SDLK_w): renderer_moveForward(me->renderer); break;
case (SDLK_s): renderer_moveBackwards(me->renderer); break;
case (SDLK_a): renderer_moveLeft(me->renderer); break;
case (SDLK_d): renderer_moveRight(me->renderer); break;
case (SDLK_UP): renderer_moveUp(me->renderer); break;
case (SDLK_DOWN): renderer_moveDown(me->renderer); break;
case (SDLK_LEFT): renderer_rotateLeft(me->renderer); break;
case (SDLK_RIGHT): renderer_rotateRight(me->renderer); break;
case(SDLK_SPACE):
{
Location playerLocation;
playerLocation.angle = real_degToRad(real_from_int(0));
playerLocation.height = real_zero;
playerLocation.position = xz(real_from_int(20), real_from_int(20));

renderer_moveTo(me->renderer, playerLocation);
}break;
}
}

GColor* pebbleWindow_getPebbleFramebuffer(PebbleWindow* window)
{
return safeFramebuffer_getScreenBuffer(window->framebuffer);
Expand Down

0 comments on commit 1f9ba44

Please sign in to comment.