aboutsummaryrefslogtreecommitdiff
path: root/serialize_lib/init.lua
blob: 20ffa4d6ef8815254e612c54dff45bb8762ff75a (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
-- serialize_lib
--[[
	Copyright (C) 2020  Moritz Blei (orwell96) and contributors

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU Affero General Public License as
    published by the Free Software Foundation, either version 3 of the
    License, or (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Affero General Public License for more details.
]]--

serialize_lib = {}

--[[ Configuration table
Whenever asked for a "config", the following table structure is expected:
config = {
	skip_empty_tables = false	-- if true, does not store empty tables
								-- On next read, keys that mapped to empty tables resolve to nil
								-- Used by: write_table_to_file
}
Not all functions use all of the parameters, so you can simplify your config sometimes
]]

-- log utils
-- =========


function serialize_lib.log_error(text)
	minetest.log("error", "[serialize_lib] ("..(minetest.get_current_modname() or "?").."): "..(text or "<nil>"))
end
function serialize_lib.log_warn(text)
	minetest.log("warning", "[serialize_lib] ("..(minetest.get_current_modname() or "?").."): "..(text or "<nil>"))
end
function serialize_lib.log_info(text)
	minetest.log("action", "[serialize_lib] ("..(minetest.get_current_modname() or "?").."): "..(text or "<nil>"))
end
function serialize_lib.log_debug(text)
	minetest.log("action", "[serialize_lib] ("..(minetest.get_current_modname() or "?")..") DEBUG: "..(text or "<nil>"))
end

-- basic serialization/deserialization
-- ===================================

local mp = minetest.get_modpath(minetest.get_current_modname())
serialize_lib.serialize = dofile(mp.."/serialize.lua")
dofile(mp.."/atomic.lua")

local ser = serialize_lib.serialize

-- Opens the passed filename, and returns deserialized table
-- When an error occurs, logs an error and returns false
function serialize_lib.read_table_from_file(filename)
	local succ, ret = pcall(ser.read_from_file, filename)
	if not succ then
		serialize_lib.log_error(ret)
	end
	return ret
end

-- Writes table into file
-- When an error occurs, logs an error and returns false
function serialize_lib.write_table_to_file(root_table, filename)
	local succ, ret = pcall(ser.write_to_file, root_table, filename)
	if not succ then
		serialize_lib.log_error(ret)
	end
	return ret
end


= key; } virtual ~JoystickAxisCmb() = default; bool isTriggered(const irr::SEvent::SJoystickEvent &ev) const override; u16 axis_to_compare; // if -1, thresh must be smaller than the axis value in order to trigger // if 1, thresh must be bigger than the axis value in order to trigger int direction; s16 thresh; }; struct JoystickLayout { std::vector<JoystickButtonCmb> button_keys; std::vector<JoystickAxisCmb> axis_keys; JoystickAxisLayout axes[JA_COUNT]; s16 axes_deadzone; }; class JoystickController { public: JoystickController(); void onJoystickConnect(const std::vector<irr::SJoystickInfo> &joystick_infos); bool handleEvent(const irr::SEvent::SJoystickEvent &ev); void clear(); bool wasKeyDown(GameKeyType b) { bool r = m_past_keys_pressed[b]; m_past_keys_pressed[b] = false; return r; } bool wasKeyReleased(GameKeyType b) { return m_keys_released[b]; } void clearWasKeyReleased(GameKeyType b) { m_keys_released[b] = false; } bool wasKeyPressed(GameKeyType b) { return m_keys_pressed[b]; } void clearWasKeyPressed(GameKeyType b) { m_keys_pressed[b] = false; } bool isKeyDown(GameKeyType b) { return m_keys_down[b]; } s16 getAxis(JoystickAxis axis) { return m_axes_vals[axis]; } s16 getAxisWithoutDead(JoystickAxis axis); f32 doubling_dtime; private: void setLayoutFromControllerName(const std::string &name); JoystickLayout m_layout; s16 m_axes_vals[JA_COUNT]; u8 m_joystick_id = 0; std::bitset<KeyType::INTERNAL_ENUM_COUNT> m_keys_down; std::bitset<KeyType::INTERNAL_ENUM_COUNT> m_keys_pressed; f32 m_internal_time; f32 m_past_pressed_time[KeyType::INTERNAL_ENUM_COUNT]; std::bitset<KeyType::INTERNAL_ENUM_COUNT> m_past_keys_pressed; std::bitset<KeyType::INTERNAL_ENUM_COUNT> m_keys_released; };