blob: 14637aef0e1214fd156fb53978417f4aecb8ef9e (
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
85
86
87
88
89
|
// SPDX-License-Identifier: BSD-2-Clause
// Copyright (c) 2025 Kirill Dmitrievich
// File: experiments.cc
// Description: Experimental things that are still haven't got their dedicated game system
#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/mouse.hh"
#include "client/world/player_target.hh"
#include "client/globals.hh"
#include "client/session.hh"
static void on_mouse_button(const MouseButtonEvent& event)
{
if(!globals::gui_screen && session::is_ingame()) {
if(event.is_action(GLFW_PRESS) && player_target::voxel) {
if(event.is_button(GLFW_MOUSE_BUTTON_LEFT)) {
experiments::attack();
return;
}
if(event.is_button(GLFW_MOUSE_BUTTON_RIGHT)) {
experiments::interact();
return;
}
}
}
}
void experiments::init(void)
{
globals::dispatcher.sink<MouseButtonEvent>().connect<&on_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::shutdown(void)
{
}
void experiments::update(void)
{
}
void experiments::update_late(void)
{
}
void experiments::attack(void)
{
globals::dimension->set_voxel(nullptr, player_target::coord);
}
void experiments::interact(void)
{
auto active_item = hotbar::slots[hotbar::active_slot];
if(active_item) {
if(auto place_voxel = active_item->get_place_voxel()) {
globals::dimension->set_voxel(place_voxel, player_target::coord + player_target::normal);
return;
}
}
}
|