91 lines
3.0 KiB
C
91 lines
3.0 KiB
C
static uint8_t inv_selected_item = 0;
|
|
static bool inv_drop_item = false;
|
|
bool inv_is_open = false;
|
|
|
|
static bool inv_item_is_held = false;
|
|
static uint8_t inv_held_item_idx = 0;
|
|
static ItemDrop inv_held_item = {0};
|
|
|
|
static bool inv_swap = false;
|
|
static uint8_t inv_swap_from = 0;
|
|
static uint8_t inv_swap_to = 0;
|
|
|
|
void inventory_draw() {
|
|
inv_drop_item = false;
|
|
inv_swap = false;
|
|
|
|
camera cam = camera_get();
|
|
entity_view *e = game_world_view_active_get_entity(cam.ent_id);
|
|
if (!e || !e->has_items) return;
|
|
|
|
if (IsKeyPressed(KEY_TAB)) {
|
|
inv_is_open = !inv_is_open;
|
|
}
|
|
|
|
if (!inv_is_open || build_is_in_draw_mode) {
|
|
return;
|
|
}
|
|
|
|
float sx = screenWidth/2.0f + 128;
|
|
float sy = screenHeight/2.0f - 96;
|
|
|
|
float x = sx;
|
|
float y = sy;
|
|
|
|
for (int32_t i = 0; i < ITEMS_INVENTORY_SIZE; i += 1) {
|
|
{
|
|
debug_area_status area = check_mouse_area(x, y, 64, 64);
|
|
Color color = RAYWHITE;
|
|
ItemDrop *item = &e->items[i];
|
|
|
|
if (area == DAREA_HOVER) {
|
|
color = YELLOW;
|
|
} else if (area == DAREA_PRESS && !inv_item_is_held) {
|
|
color = VIOLET;
|
|
inv_selected_item = i;
|
|
} else if (area == DAREA_PRESS && inv_item_is_held) {
|
|
color = VIOLET;
|
|
inv_selected_item = i;
|
|
inv_item_is_held = false;
|
|
inv_swap = true;
|
|
inv_swap_from = inv_held_item_idx;
|
|
inv_swap_to = i;
|
|
} else if (area == DAREA_HELD && item->quantity > 0 && !inv_item_is_held) {
|
|
inv_selected_item = i;
|
|
inv_held_item = *item;
|
|
inv_item_is_held = true;
|
|
inv_held_item_idx = i;
|
|
} else if (i == inv_selected_item) {
|
|
color = RED;
|
|
}
|
|
|
|
DrawRectangleLinesEco(x, y, 64, 64, color);
|
|
|
|
if (item->quantity > 0) {
|
|
DrawTexturePro(GetSpriteTexture2D(assets_find(item->kind)), ASSET_SRC_RECT(), ASSET_DST_RECT(x,y), (Vector2){0.5f,0.5f}, 0.0f, WHITE);
|
|
DrawTextEco(zpl_bprintf("%d", item->quantity), x+5, y+5, 16, RAYWHITE, 0.0f);
|
|
}
|
|
}
|
|
x += 64;
|
|
|
|
if ((i+1) % 3 == 0) {
|
|
x = sx;
|
|
y += 64;
|
|
}
|
|
}
|
|
|
|
if (inv_item_is_held) {
|
|
Vector2 mpos = GetMousePosition();
|
|
mpos.x -= 32;
|
|
mpos.y -= 32;
|
|
DrawTexturePro(GetSpriteTexture2D(assets_find(inv_held_item.kind)), ASSET_SRC_RECT(), ASSET_DST_RECT(mpos.x, mpos.y), (Vector2){0.5f,0.5f}, 0.0f, ColorAlpha(WHITE, 0.8f));
|
|
DrawTextEco(zpl_bprintf("%d", inv_held_item.quantity), mpos.x, mpos.y, 16, RAYWHITE, 0.0f);
|
|
|
|
debug_area_status area = check_mouse_area(sx, sy, 64*3, 64*3);
|
|
if (area == DAREA_OUTSIDE && IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) {
|
|
inv_drop_item = true;
|
|
inv_item_is_held = false;
|
|
}
|
|
}
|
|
}
|