item router fix rolling counter

efd/v1
Dominik Madarász 2023-01-17 10:47:16 +01:00
parent 267a60af32
commit 3174b8a3c3
4 changed files with 9 additions and 10 deletions

View File

@ -46,7 +46,7 @@ void notification_draw(void) {
for (zpl_isize i = cnt; i >= 0; --i) { for (zpl_isize i = cnt; i >= 0; --i) {
notification *notif = (notifications + i); notification *notif = (notifications + i);
if (nk_begin_titled(game_ui, zpl_bprintf("%dnotif%s", i, notif->title), notif->title, nk_rect(width - 320, ypos, 300, 1200), if (nk_begin_titled(game_ui, zpl_bprintf("%d%fnotif%s", i, ypos, notif->title), notif->title, nk_rect(width - 320, ypos, 300, 1200),
NK_WINDOW_DYNAMIC|NK_WINDOW_NO_SCROLLBAR)) { NK_WINDOW_DYNAMIC|NK_WINDOW_NO_SCROLLBAR)) {
{ {
if (nk_tree_push_id(game_ui, NK_TREE_TAB, notif->title, NK_MAXIMIZED, (int)i)) { if (nk_tree_push_id(game_ui, NK_TREE_TAB, notif->title, NK_MAXIMIZED, (int)i)) {

View File

@ -157,7 +157,6 @@ void tooltip__draw_node(tooltip_node *node) {
nk_layout_row_dynamic(game_ui, 20, 2); nk_layout_row_dynamic(game_ui, 20, 2);
for (zpl_isize i = 0; i < zpl_array_count(desc->links); ++i) { for (zpl_isize i = 0; i < zpl_array_count(desc->links); ++i) {
// todo styling
if (nk_button_label(game_ui, desc->links[i])) { if (nk_button_label(game_ui, desc->links[i])) {
if (node->next) tooltip__clear_node(node->next); if (node->next) tooltip__clear_node(node->next);
if (!node->next) node->next = zpl_malloc(sizeof(tooltip_node)); if (!node->next) node->next = zpl_malloc(sizeof(tooltip_node));

View File

@ -156,6 +156,7 @@ typedef struct {
typedef struct { typedef struct {
uint32_t push_qty; uint32_t push_qty;
uint8_t counter;
} ItemRouter; } ItemRouter;
typedef struct { typedef struct {

View File

@ -75,7 +75,6 @@ void PushItemsOnNodes(ecs_iter_t *it) {
float push_dx[4], push_dy[4]; float push_dx[4], push_dy[4];
uint8_t nodes = CheckForNearbyBelts(&p[i], push_dx, push_dy); uint8_t nodes = CheckForNearbyBelts(&p[i], push_dx, push_dy);
uint8_t num_nodes = (uint8_t)zpl_count_set_bits(nodes); uint8_t num_nodes = (uint8_t)zpl_count_set_bits(nodes);
uint8_t counter = 0;
if (num_nodes == 0) { if (num_nodes == 0) {
// NOTE(zaklaus): We don't have any output nodes yet. // NOTE(zaklaus): We don't have any output nodes yet.
@ -105,22 +104,22 @@ void PushItemsOnNodes(ecs_iter_t *it) {
while (item->quantity > 0 && num_nodes > 0) { while (item->quantity > 0 && num_nodes > 0) {
// NOTE(zaklaus): Use a rolling counter to select an output node. // NOTE(zaklaus): Use a rolling counter to select an output node.
while (!(nodes & (1 << counter)) && counter < 4) ++counter; while (!(nodes & (1 << r[i].counter)) && r[i].counter < 4) ++r[i].counter;
if (counter > 3) { if (r[i].counter > 3) {
counter = 0; r[i].counter = 0;
continue; continue;
} }
uint64_t e = item_spawn(item->kind, zpl_min(r->push_qty, item->quantity)); uint64_t e = item_spawn(item->kind, zpl_min(r->push_qty, item->quantity));
entity_set_position(e, p[i].x + push_dx[counter], p[i].y + push_dy[counter]); entity_set_position(e, p[i].x + push_dx[r[i].counter], p[i].y + push_dy[r[i].counter]);
Velocity *e_vel = ecs_get_mut_ex(it->world, e, Velocity); Velocity *e_vel = ecs_get_mut_ex(it->world, e, Velocity);
e_vel->x = push_dx[counter]; e_vel->x = push_dx[r[i].counter];
e_vel->y = push_dy[counter]; e_vel->y = push_dy[r[i].counter];
item->quantity -= zpl_min(r->push_qty, item->quantity); item->quantity -= zpl_min(r->push_qty, item->quantity);
--num_nodes; --num_nodes;
++counter; ++r[i].counter;
if (item->quantity == 0) { if (item->quantity == 0) {
item_despawn(item_slot_ent); item_despawn(item_slot_ent);