parent
3c437b3b9d
commit
0364575ba2
2
API.md
2
API.md
|
@ -12,6 +12,8 @@
|
|||
* `conquer.get_sessions() --> table of Session`
|
||||
* `conquer.get_selected_units(player) -> table of ObjectRefs`
|
||||
* `conquer.select_unit(player, object_ref) --> boolean`
|
||||
* `conquer.select_units(player, list_of_object_refs) --> int`
|
||||
* Returns number of units selected.
|
||||
* `conquer.deselect_unit(player, object_ref) --> boolean`
|
||||
* `conquer.deselect_all_units(player) --> boolean`
|
||||
* `conquer.get_unit_type(name) --> Unit type def`
|
||||
|
|
3
init.lua
3
init.lua
|
@ -2,7 +2,8 @@ conquer = {}
|
|||
|
||||
conquer.S = minetest.get_translator("conquer")
|
||||
|
||||
assert(minetest.features.pathfinder_works, "This mod requires Minetest 5.2 or later")
|
||||
assert(minetest.features.pathfinder_works, "This mod requires Minetest 5.4 or later")
|
||||
assert(minetest.get_objects_in_area, "This mod requires Minetest 5.4 or later")
|
||||
|
||||
dofile(minetest.get_modpath("conquer") .. "/src/init.lua")
|
||||
|
||||
|
|
2
mod.conf
2
mod.conf
|
@ -1,4 +1,4 @@
|
|||
name = conquer
|
||||
description = Command your troops to victory in this mini-game
|
||||
optional_depends = sfinv, default, wool, farming
|
||||
min_minetest_version = 5.2
|
||||
min_minetest_version = 5.4
|
||||
|
|
26
src/api.lua
26
src/api.lua
|
@ -224,6 +224,32 @@ function conquer.select_unit(player, obj)
|
|||
return true
|
||||
end
|
||||
|
||||
function conquer.select_units(player, objs)
|
||||
assert(player.get_player_name, "select_unit expects a player")
|
||||
assert(type(objs) == "table")
|
||||
|
||||
local session, country = conquer.get_session_country(player)
|
||||
if not session then
|
||||
return 0
|
||||
end
|
||||
|
||||
local context = _selected_units(player)
|
||||
context.selected_units = context.selected_units or {}
|
||||
|
||||
local count = 0
|
||||
for i=1, #objs do
|
||||
local entity = objs[i]:get_luaentity()
|
||||
if entity and entity.select and entity:select(session, country) then
|
||||
table.insert(context.selected_units, objs[i])
|
||||
count = count + 1
|
||||
end
|
||||
end
|
||||
|
||||
conquer.run_on_selected_units_changed(player, session, country, get_selected_units_raw(player))
|
||||
|
||||
return count
|
||||
end
|
||||
|
||||
function conquer.deselect_unit(player, unit)
|
||||
assert(player.get_player_name, "deselect_unit expects a player")
|
||||
assert(unit.get_luaentity, "deselect_unit expects a unit")
|
||||
|
|
|
@ -0,0 +1,64 @@
|
|||
local selections = {}
|
||||
|
||||
minetest.register_on_leaveplayer(function(player)
|
||||
selections[player:get_player_name()] = nil
|
||||
end)
|
||||
|
||||
local function cancel(_, player, _)
|
||||
local pname = player:get_player_name()
|
||||
if selections[pname] then
|
||||
selections[pname] = nil
|
||||
minetest.chat_send_all(minetest.colorize("#808080",
|
||||
conquer.S("Cancelled selection.")))
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_craftitem("conquer:box_select", {
|
||||
description = "Box Select",
|
||||
inventory_image = "conquer_box_select.png",
|
||||
|
||||
range = 25,
|
||||
|
||||
groups = { not_in_creative_inventory = 1 },
|
||||
|
||||
on_place = cancel,
|
||||
on_secondary_use = cancel,
|
||||
|
||||
on_use = function(_, player, pointed_thing)
|
||||
if not player then
|
||||
return
|
||||
end
|
||||
|
||||
if pointed_thing.type == "object" then
|
||||
pointed_thing.ref:punch(player, 1.0, { full_punch_interval=1.0 }, nil)
|
||||
return player:get_wielded_item()
|
||||
end
|
||||
|
||||
if pointed_thing.type ~= "node" then
|
||||
return player:get_wielded_item()
|
||||
end
|
||||
|
||||
local pname = player:get_player_name()
|
||||
local selected = selections[pname]
|
||||
if selected then
|
||||
conquer.deselect_all_units(player)
|
||||
|
||||
local min, max = vector.sort(pointed_thing.under, selected)
|
||||
min.y = min.y - 10
|
||||
max.y = max.y + 10
|
||||
|
||||
local objs = minetest.get_objects_in_area(min, max)
|
||||
local count = conquer.select_units(player, objs)
|
||||
|
||||
minetest.chat_send_all(minetest.colorize("#808080",
|
||||
conquer.S("Selected @1 units.", count)))
|
||||
selections[pname] = nil
|
||||
else
|
||||
selections[pname] = vector.new(pointed_thing.under)
|
||||
minetest.chat_send_all(minetest.colorize("#808080",
|
||||
conquer.S("Now select another position, or right-click to cancel.")))
|
||||
end
|
||||
|
||||
return player:get_wielded_item()
|
||||
end,
|
||||
})
|
|
@ -132,9 +132,9 @@ local modes = {
|
|||
context.hotbar = player:hud_add({
|
||||
hud_elem_type = "inventory",
|
||||
position = conquer.hud_position,
|
||||
offset = {x = -83, y = -70},
|
||||
offset = {x = -112, y = -70},
|
||||
text = "main",
|
||||
number = 3,
|
||||
number = 4,
|
||||
item = player:get_wield_index(),
|
||||
direction = 0
|
||||
})
|
||||
|
@ -143,11 +143,12 @@ local modes = {
|
|||
|
||||
set_inv = function(_, player, inv, _)
|
||||
inv:set_list("main", {
|
||||
ItemStack("conquer:box_select"),
|
||||
ItemStack("conquer:keep"),
|
||||
ItemStack("conquer:barracks"),
|
||||
ItemStack("conquer:farm"),
|
||||
})
|
||||
player:hud_set_hotbar_itemcount(3)
|
||||
player:hud_set_hotbar_itemcount(4)
|
||||
end,
|
||||
},
|
||||
}
|
||||
|
@ -235,7 +236,7 @@ conquer.register_on_join_session(function(player)
|
|||
local inv = player:get_inventory()
|
||||
inv:set_size("mainbackup", inv:get_size("main"))
|
||||
inv:set_list("mainbackup", inv:get_list("main"))
|
||||
inv:set_size("main", 3)
|
||||
inv:set_size("main", 4)
|
||||
inv:set_list("main", {})
|
||||
end)
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@ dofile(dir .. "/hudinv.lua")
|
|||
dofile(dir .. "/gui.lua")
|
||||
dofile(dir .. "/helpgui.lua")
|
||||
dofile(dir .. "/chatcmd.lua")
|
||||
dofile(dir .. "/box_select.lua")
|
||||
dofile(dir .. "/content/init.lua")
|
||||
|
||||
local function chat_send_country(_, country, message, color)
|
||||
|
|
|
@ -60,7 +60,7 @@ function conquer.register_wand(name, def)
|
|||
conquer.deselect_all_units(player)
|
||||
else
|
||||
local node_def = minetest.registered_nodes[node.name]
|
||||
if node_def.on_punch then
|
||||
if node_def and node_def.on_punch then
|
||||
node_def.on_punch(pointed_thing.under, node, player)
|
||||
end
|
||||
end
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 5.5 KiB |
Binary file not shown.
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 6.7 KiB |
Loading…
Reference in New Issue