diff --git a/source/io/ctrl.c b/source/io/ctrl.c index 3ab135a..c049964 100644 --- a/source/io/ctrl.c +++ b/source/io/ctrl.c @@ -19,7 +19,7 @@ enum CtrlType { ESCAPE }; -struct CtrlRecord { +struct Record { u16 id; u8 type; @@ -40,19 +40,11 @@ struct CtrlRecord { }; struct RecordBuffer { - struct CtrlRecord records[IO_BUF_SIZE]; + struct Record records[IO_BUF_SIZE]; size_t count; pthread_mutex_t mutex; }; -struct RecordBuffer NewInputBuffer() -{ - struct RecordBuffer buf; - buf.count = 0; - buf.mutex = PTHREAD_MUTEX_INITIALIZER; - return buf; -} - struct Axis { union { struct { @@ -263,7 +255,7 @@ struct Axis *CtrlGet(struct Ctrl *ctrl, u16f code, u8f type) return code_bkt->axis; } -void update_key(struct Axis *axis, struct CtrlRecord *record) +void update_key(struct Axis *axis, struct Record *record) { if (record->data.key.is_down) axis->last_pressed = record->timestamp; @@ -273,13 +265,13 @@ void update_key(struct Axis *axis, struct CtrlRecord *record) axis->data.key.is_down = record->data.key.is_down; } -void update_axis(struct Axis *axis, struct CtrlRecord *record) +void update_axis(struct Axis *axis, struct Record *record) { axis->data.axis.value = record->data.axis.value; axis->last_pressed = record->timestamp; } -void update_joystick(struct Axis *axis, struct CtrlRecord *record) +void update_joystick(struct Axis *axis, struct Record *record) { axis->data.joystick.x = record->data.joystick.x; axis->data.joystick.y = record->data.joystick.y; @@ -289,7 +281,7 @@ void update_joystick(struct Axis *axis, struct CtrlRecord *record) bool CtrlPoll(struct Ctrl *ctrl, struct RecordBuffer *rec_buf) { for (size_t i = 0; i < rec_buf->count; i++) { - struct CtrlRecord *rec = &rec_buf->records[i]; + struct Record *rec = &rec_buf->records[i]; struct Axis *axis = find_axis(&ctrl->binds, rec->id, rec->type); if (axis == nullptr) diff --git a/source/io/ctrl.h b/source/io/ctrl.h index 068ab6d..f81db90 100644 --- a/source/io/ctrl.h +++ b/source/io/ctrl.h @@ -19,7 +19,7 @@ enum CtrlType { ESCAPE }; -struct CtrlRecord { +struct Record { u16 id; u8 type; @@ -40,13 +40,11 @@ struct CtrlRecord { }; struct RecordBuffer { - struct CtrlRecord records[IO_BUF_SIZE]; + struct Record records[IO_BUF_SIZE]; size_t count; pthread_mutex_t mutex; }; -struct RecordBuffer NewInputBuffer(); - struct Axis { union { struct { @@ -105,7 +103,7 @@ struct Ctrl { pthread_mutex_t mutex; }; -struct Ctrl NewCtrl(struct ctrl_dict *codes, struct ctrl_dict *binds, struct Axis *axes); +struct Ctrl NewCtrl(); bool CtrlMap(struct Ctrl *ctrl, u16f code, u16f bind, u8f type); diff --git a/source/io/input.c b/source/io/input.c index 472ac92..d842757 100644 --- a/source/io/input.c +++ b/source/io/input.c @@ -32,12 +32,12 @@ void *block_input(void *args_ptr) return nullptr; } -void StartInput(Ctrl *ctrl, struct RecordBuffer *buf) +void StartInput(struct Ctrl *ctrl, struct RecordBuffer *buf) { pthread_create(&ctrl->thread, nullptr, block_input, buf); } -void JoinInput(Ctrl *ctrl) +void JoinInput(struct Ctrl *ctrl) { pthread_join(ctrl->thread, nullptr); } \ No newline at end of file diff --git a/source/io/platforms/winhandler.c b/source/io/platforms/winhandler.c index f049086..3dc5eac 100644 --- a/source/io/platforms/winhandler.c +++ b/source/io/platforms/winhandler.c @@ -68,7 +68,7 @@ bool WinGetRefreshRate(u32f *out) return true; } -void set_key_record(struct CtrlRecord *record, KEY_EVENT_RECORD win_key) +void set_key_record(struct Record *record, KEY_EVENT_RECORD win_key) { record->type = KEY; record->id = win_key.wVirtualKeyCode; @@ -78,7 +78,7 @@ void set_key_record(struct CtrlRecord *record, KEY_EVENT_RECORD win_key) record->type = ESCAPE; } -bool set_mouse_record(struct CtrlRecord *record, MOUSE_EVENT_RECORD win_mouse) +bool set_mouse_record(struct Record *record, MOUSE_EVENT_RECORD win_mouse) { switch (win_mouse.dwEventFlags) { case MOUSE_WHEELED: @@ -103,7 +103,7 @@ bool set_mouse_record(struct CtrlRecord *record, MOUSE_EVENT_RECORD win_mouse) return true; } -bool dispatch_record(struct CtrlRecord *record, INPUT_RECORD win_record) +bool dispatch_record(struct Record *record, INPUT_RECORD win_record) { switch (win_record.EventType) { case KEY_EVENT: @@ -140,7 +140,7 @@ bool WinBlockInput(struct RecordBuffer *buf) pthread_mutex_lock(&buf->mutex); for (size_t i = 0; i < count; i++) { - struct CtrlRecord record; + struct Record record; record.timestamp = now; bool include = dispatch_record(&record, win_buf[i]); diff --git a/source/main.c b/source/main.c index 0607a04..3d62caf 100644 --- a/source/main.c +++ b/source/main.c @@ -90,49 +90,19 @@ const struct CtrlBind ctrl_binds[12] = { { MOUSE, 0, JOYSTICK } }; -void Draw(struct Terminal *term) +void Draw(struct Instance *game) { - pthread_mutex_lock(&term->mutex); - - struct TChar4 term_blks[term->area]; - - pthread_cond_signal(&term->is_initialized); - pthread_mutex_unlock(&term->mutex); - - size_t buf_size = TermBufSize(term); - char buf[buf_size]; - while (true) { - pthread_mutex_lock(&term->mutex); - pthread_cond_wait(&term->draw_ready, &term->mutex); - - TermOut(term, buf, buf_size); - - pthread_mutex_unlock(&term->mutex); - - puts(buf); + Call(&game->on_draw, game); } } -void Update(struct Terminal *term, struct Ctrl *ctrl, struct RecordBuffer *rec_buf) +void Update(struct Instance *game) { - pthread_mutex_lock(&term->mutex); - pthread_cond_wait(&term->is_initialized, &term->mutex); - pthread_mutex_unlock(&term->mutex); + while (true) { - // Input - pthread_mutex_lock(&rec_buf->mutex); - CtrlPoll(ctrl, rec_buf); - pthread_mutex_unlock(&rec_buf->mutex); - - // Game logic - - - // Draw - pthread_mutex_lock(&term->mutex); - pthread_cond_signal(&term->draw_ready); - pthread_mutex_unlock(&term->mutex); + Call(&game->on_update, game); } } @@ -178,7 +148,7 @@ int main() }; struct Instance game = { - .term = NewTerm(nullptr, 20, 20), + .term = NewTerm(20, 20), .ctrl = NewCtrl(), .on_start = NewDelegate(16), diff --git a/source/term/term.c b/source/term/term.c index 135066c..821d545 100644 --- a/source/term/term.c +++ b/source/term/term.c @@ -27,17 +27,14 @@ struct Terminal { pthread_cond_t draw_ready; }; -struct Terminal NewTerm(struct TChar4 *blks, size_t wid, size_t hgt) +struct Terminal NewTerm(size_t wid, size_t hgt) { - size_t area = wid * hgt; - memset(blks, 0, sizeof(struct TChar4) * area); - return (struct Terminal) { .wid = wid, .hgt = hgt, - .area = area, + .area = wid * hgt, .refresh_rate = 60, - .blks = blks, + .blks = nullptr, .mutex = PTHREAD_MUTEX_INITIALIZER, .is_initialized = PTHREAD_COND_INITIALIZER, diff --git a/source/term/term.h b/source/term/term.h index 3c0d554..d3f9b0e 100644 --- a/source/term/term.h +++ b/source/term/term.h @@ -28,7 +28,7 @@ struct Terminal { pthread_cond_t draw_ready; }; -struct Terminal NewTerm(struct TChar4 *blks, size_t wid, size_t hgt); +struct Terminal NewTerm(size_t wid, size_t hgt); size_t TermBufSize(struct Terminal *term);