summaryrefslogtreecommitdiffstats
path: root/game/client/experiments.cc
blob: 70353b57ec29a2e5d6b6834ba00da91b49e75218 (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
#include "client/pch.hh"

#include "client/experiments.hh"

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

#include "client/chat.hh"
#include "client/glfw.hh"
#include "client/globals.hh"
#include "client/hotbar.hh"
#include "client/player_target.hh"
#include "client/session.hh"
#include "client/status_lines.hh"

static void on_glfw_mouse_button(const GlfwMouseButtonEvent& event)
{
    if(!globals::gui_screen && session::is_ingame()) {
        if((event.action == GLFW_PRESS) && (player_target::voxel != NULL_VOXEL_ID)) {
            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<GlfwMouseButtonEvent>().connect<&on_glfw_mouse_button>();
}

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

void experiments::deinit(void)
{
}

void experiments::update(void)
{
}

void experiments::update_late(void)
{
}

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

void experiments::interact(void)
{
    if(auto info = item_registry::find(hotbar::slots[hotbar::active_slot])) {
        if(info->place_voxel != NULL_VOXEL_ID) {
            globals::dimension->set_voxel(info->place_voxel, player_target::coord + player_target::normal);
        }
    }
}