summaryrefslogtreecommitdiffstats
path: root/src/game/client/experiments.cc
blob: eb415f708934e9f9914b854419c7d36ab1219dfa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include "client/pch.hh"

#include "client/experiments.hh"

#include "shared/world/dimension.hh"
#include "shared/world/item_registry.hh"

#include "shared/game_items.hh"
#include "shared/game_voxels.hh"

#include "client/gui/chat.hh"
#include "client/gui/hotbar.hh"
#include "client/gui/status_lines.hh"

#include "client/io/glfw.hh"

#include "client/world/player_target.hh"

#include "client/globals.hh"
#include "client/session.hh"

static void on_glfw_mouse_button(const io::GlfwMouseButtonEvent& event)
{
    if(!globals::gui_screen && session::is_ingame()) {
        if((event.action == GLFW_PRESS) && world::player_target::voxel) {
            if(event.button == GLFW_MOUSE_BUTTON_LEFT) {
                experiments::attack();
                return;
            }

            if(event.button == GLFW_MOUSE_BUTTON_RIGHT) {
                experiments::interact();
                return;
            }
        }
    }
}

void experiments::init(void)
{
    globals::dispatcher.sink<io::GlfwMouseButtonEvent>().connect<&on_glfw_mouse_button>();
}

void experiments::init_late(void)
{
    gui::hotbar::slots[0] = game_items::cobblestone;
    gui::hotbar::slots[1] = game_items::stone;
    gui::hotbar::slots[2] = game_items::dirt;
    gui::hotbar::slots[3] = game_items::grass;
    gui::hotbar::slots[4] = game_items::oak_leaves;
    gui::hotbar::slots[5] = game_items::oak_planks;
    gui::hotbar::slots[6] = game_items::oak_log;
    gui::hotbar::slots[7] = game_items::glass;
    gui::hotbar::slots[8] = game_items::slime;
}

void experiments::shutdown(void)
{
}

void experiments::update(void)
{
}

void experiments::update_late(void)
{
}

void experiments::attack(void)
{
    globals::dimension->set_voxel(nullptr, world::player_target::coord);
}

void experiments::interact(void)
{
    auto active_item = gui::hotbar::slots[gui::hotbar::active_slot];

    if(active_item) {
        if(auto place_voxel = active_item->get_place_voxel()) {
            globals::dimension->set_voxel(place_voxel, world::player_target::coord + world::player_target::normal);
            return;
        }
    }
}