mirror of
https://github.com/minetest-mods/i3.git
synced 2024-12-25 10:20:47 +01:00
Add API to manage waypoints
This commit is contained in:
parent
d9a16bf39d
commit
a0a3394e18
@ -31,6 +31,7 @@ exclude_files = {
|
|||||||
"tests/test_custom_recipes.lua",
|
"tests/test_custom_recipes.lua",
|
||||||
"tests/test_operators.lua",
|
"tests/test_operators.lua",
|
||||||
"tests/test_tabs.lua",
|
"tests/test_tabs.lua",
|
||||||
|
"tests/test_waypoints.lua",
|
||||||
|
|
||||||
".install",
|
".install",
|
||||||
".luarocks",
|
".luarocks",
|
||||||
|
43
API.md
43
API.md
@ -309,6 +309,49 @@ A map of all compressed item groups, indexed by stereotypes.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### Waypoints
|
||||||
|
|
||||||
|
`i3` allows you to manage the waypoints of a specific player.
|
||||||
|
|
||||||
|
#### `i3.add_waypoint(player_name, def)`
|
||||||
|
|
||||||
|
Add a waypoint to specific player.
|
||||||
|
|
||||||
|
- `player_name` is the player name.
|
||||||
|
- `def` is the waypoint definition table.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```Lua
|
||||||
|
i3.add_waypoint("Test", {
|
||||||
|
player = "singleplayer",
|
||||||
|
pos = {x = 0, y = 2, z = 0},
|
||||||
|
color = 0xffff00,
|
||||||
|
-- image = "heart.png" (optional)
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
#### `i3.remove_waypoint(player_name, waypoint_name)`
|
||||||
|
|
||||||
|
Remove a waypoint for specific player.
|
||||||
|
|
||||||
|
- `player_name` is the player name.
|
||||||
|
- `waypoint_name` is the waypoint name.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```Lua
|
||||||
|
i3.remove_waypoint("singleplayer", "Test")
|
||||||
|
```
|
||||||
|
|
||||||
|
#### `i3.get_waypoints(player_name)`
|
||||||
|
|
||||||
|
Return a table of all waypoints of a specific player.
|
||||||
|
|
||||||
|
- `player_name` is the player name.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
### Miscellaneous
|
### Miscellaneous
|
||||||
|
|
||||||
#### `i3.hud_notif(name, msg[, img])`
|
#### `i3.hud_notif(name, msg[, img])`
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
![logo](https://user-images.githubusercontent.com/7883281/145490041-d91d6bd6-a654-438d-b208-4d5736845ab7.png)
|
![logo](https://user-images.githubusercontent.com/7883281/145490041-d91d6bd6-a654-438d-b208-4d5736845ab7.png)
|
||||||
|
|
||||||
[![MIT License](https://img.shields.io/apm/l/atomic-design-ui.svg?)](https://github.com/tterb/atomic-design-ui/blob/master/LICENSEs) [![GitHub Release](https://img.shields.io/github/release/minetest-mods/i3.svg?style=flat)]() ![workflow](https://github.com/minetest-mods/i3/actions/workflows/luacheck.yml/badge.svg) [![ContentDB](https://content.minetest.net/packages/jp/i3/shields/downloads/)](https://content.minetest.net/packages/jp/i3/) [![PayPal](https://img.shields.io/badge/paypal-donate-yellow.svg)](https://www.paypal.me/jpg84240)
|
[![GitHub Release](https://img.shields.io/github/release/minetest-mods/i3.svg?style=flat)]() ![workflow](https://github.com/minetest-mods/i3/actions/workflows/luacheck.yml/badge.svg) [![ContentDB](https://content.minetest.net/packages/jp/i3/shields/downloads/)](https://content.minetest.net/packages/jp/i3/) [![PayPal](https://img.shields.io/badge/paypal-donate-yellow.svg)](https://www.paypal.me/jpg84240)
|
||||||
|
|
||||||
#### **`i3`** is a next-generation inventory for Minetest.
|
#### **`i3`** is a next-generation inventory for Minetest.
|
||||||
|
|
||||||
|
3
init.lua
3
init.lua
@ -20,7 +20,7 @@ local function lf(path)
|
|||||||
end
|
end
|
||||||
|
|
||||||
i3 = {
|
i3 = {
|
||||||
version = 1123,
|
version = 113,
|
||||||
data = core.deserialize(storage:get_string"data") or {},
|
data = core.deserialize(storage:get_string"data") or {},
|
||||||
|
|
||||||
settings = {
|
settings = {
|
||||||
@ -121,6 +121,7 @@ end
|
|||||||
|
|
||||||
if i3.settings.debug_mode then
|
if i3.settings.debug_mode then
|
||||||
lf("/tests/test_tabs.lua")()
|
lf("/tests/test_tabs.lua")()
|
||||||
|
lf("/tests/test_waypoints.lua")()
|
||||||
-- lf("/tests/test_operators.lua")()
|
-- lf("/tests/test_operators.lua")()
|
||||||
lf("/tests/test_compression.lua")()
|
lf("/tests/test_compression.lua")()
|
||||||
lf("/tests/test_custom_recipes.lua")()
|
lf("/tests/test_custom_recipes.lua")()
|
||||||
|
84
src/api.lua
84
src/api.lua
@ -1,10 +1,10 @@
|
|||||||
local http = ...
|
local http = ...
|
||||||
local make_fs, get_inventory_fs = i3.files.gui()
|
local make_fs, get_inventory_fs = i3.files.gui()
|
||||||
|
|
||||||
IMPORT("gmatch", "split")
|
|
||||||
IMPORT("S", "err", "fmt", "reg_items")
|
|
||||||
IMPORT("sorter", "sort_inventory", "play_sound")
|
IMPORT("sorter", "sort_inventory", "play_sound")
|
||||||
|
IMPORT("get_player_by_name", "add_hud_waypoint")
|
||||||
IMPORT("sort", "concat", "copy", "insert", "remove")
|
IMPORT("sort", "concat", "copy", "insert", "remove")
|
||||||
|
IMPORT("gmatch", "split", "S", "err", "fmt", "reg_items", "pos_to_str")
|
||||||
IMPORT("true_str", "true_table", "is_str", "is_func", "is_table", "clean_name")
|
IMPORT("true_str", "true_table", "is_str", "is_func", "is_table", "clean_name")
|
||||||
|
|
||||||
function i3.register_craft_type(name, def)
|
function i3.register_craft_type(name, def)
|
||||||
@ -204,10 +204,10 @@ function i3.remove_tab(name)
|
|||||||
return err "i3.remove_tab: tab name missing"
|
return err "i3.remove_tab: tab name missing"
|
||||||
end
|
end
|
||||||
|
|
||||||
for i, def in ipairs(i3.tabs) do
|
for i = #i3.tabs, 1, -1 do
|
||||||
if name == def.name then
|
local def = i3.tabs[i]
|
||||||
|
if def and name == def.name then
|
||||||
remove(i3.tabs, i)
|
remove(i3.tabs, i)
|
||||||
break
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -315,7 +315,6 @@ function i3.hud_notif(name, msg, img)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local data = i3.data[name]
|
local data = i3.data[name]
|
||||||
|
|
||||||
if not data then
|
if not data then
|
||||||
return err "i3.hud_notif: no player data initialized"
|
return err "i3.hud_notif: no player data initialized"
|
||||||
end
|
end
|
||||||
@ -358,3 +357,76 @@ i3.add_sorting_method("numerical", {
|
|||||||
return list
|
return list
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
function i3.add_waypoint(name, def)
|
||||||
|
if not true_str(name) then
|
||||||
|
return err "i3.add_waypoint: name missing"
|
||||||
|
elseif not true_table(def) then
|
||||||
|
return err "i3.add_waypoint: definition missing"
|
||||||
|
elseif not true_str(def.player) then
|
||||||
|
return err "i3.add_waypoint: player name missing"
|
||||||
|
end
|
||||||
|
|
||||||
|
local data = i3.data[def.player]
|
||||||
|
if not data then
|
||||||
|
return err "i3.add_waypoint: no player data initialized"
|
||||||
|
end
|
||||||
|
|
||||||
|
local player = get_player_by_name(def.player)
|
||||||
|
local id = player and add_hud_waypoint(player, name, def.pos, def.color, def.image) or nil
|
||||||
|
|
||||||
|
insert(data.waypoints, {
|
||||||
|
name = name,
|
||||||
|
pos = pos_to_str(def.pos, 1),
|
||||||
|
color = def.color,
|
||||||
|
image = def.image,
|
||||||
|
id = id,
|
||||||
|
})
|
||||||
|
|
||||||
|
if data.subcat == 5 then
|
||||||
|
data.scrbar_inv += 1000
|
||||||
|
end
|
||||||
|
|
||||||
|
i3.set_fs(player)
|
||||||
|
end
|
||||||
|
|
||||||
|
function i3.remove_waypoint(player_name, name)
|
||||||
|
if not true_str(player_name) then
|
||||||
|
return err "i3.remove_waypoint: player name missing"
|
||||||
|
elseif not true_str(name) then
|
||||||
|
return err "i3.remove_waypoint: waypoint name missing"
|
||||||
|
end
|
||||||
|
|
||||||
|
local data = i3.data[player_name]
|
||||||
|
if not data then
|
||||||
|
return err "i3.remove_waypoint: no player data initialized"
|
||||||
|
end
|
||||||
|
|
||||||
|
local player = get_player_by_name(player_name)
|
||||||
|
|
||||||
|
for i = #data.waypoints, 1, -1 do
|
||||||
|
local waypoint = data.waypoints[i]
|
||||||
|
if waypoint and name == waypoint.name then
|
||||||
|
if player then
|
||||||
|
player:hud_remove(waypoint.id)
|
||||||
|
end
|
||||||
|
|
||||||
|
remove(data.waypoints, i)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
i3.set_fs(player)
|
||||||
|
end
|
||||||
|
|
||||||
|
function i3.get_waypoints(player_name)
|
||||||
|
if not true_str(player_name) then
|
||||||
|
return err "i3.get_waypoints: player name missing"
|
||||||
|
end
|
||||||
|
|
||||||
|
local data = i3.data[player_name]
|
||||||
|
if not data then
|
||||||
|
return err "i3.get_waypoints: no player data initialized"
|
||||||
|
end
|
||||||
|
|
||||||
|
return data.waypoints
|
||||||
|
end
|
||||||
|
@ -613,13 +613,15 @@ local function reset_data(data)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local function add_hud_waypoint(player, name, pos, color)
|
local function add_hud_waypoint(player, name, pos, color, image)
|
||||||
return player:hud_add {
|
return player:hud_add {
|
||||||
hud_elem_type = "waypoint",
|
hud_elem_type = image and "image_waypoint" or "waypoint",
|
||||||
name = name,
|
name = name,
|
||||||
text = "m",
|
text = image or "m",
|
||||||
|
scale = {x = 5, y = 5},
|
||||||
world_pos = pos,
|
world_pos = pos,
|
||||||
number = color,
|
number = color,
|
||||||
|
image = image,
|
||||||
z_index = -300,
|
z_index = -300,
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
@ -165,7 +165,7 @@ local function init_waypoints(player)
|
|||||||
|
|
||||||
for _, v in ipairs(data.waypoints) do
|
for _, v in ipairs(data.waypoints) do
|
||||||
if not v.hide then
|
if not v.hide then
|
||||||
local id = add_hud_waypoint(player, v.name, str_to_pos(v.pos), v.color)
|
local id = add_hud_waypoint(player, v.name, str_to_pos(v.pos), v.color, v.image)
|
||||||
v.id = id
|
v.id = id
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
12
tests/test_waypoints.lua
Normal file
12
tests/test_waypoints.lua
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
core.after(5, function()
|
||||||
|
i3.add_waypoint("Test", {
|
||||||
|
player = "singleplayer",
|
||||||
|
pos = {x = 0, y = 2, z = 0},
|
||||||
|
color = 0xffff00,
|
||||||
|
-- image = "heart.png",
|
||||||
|
})
|
||||||
|
|
||||||
|
core.after(5, function()
|
||||||
|
i3.remove_waypoint("singleplayer", "Test")
|
||||||
|
end)
|
||||||
|
end)
|
Loading…
Reference in New Issue
Block a user