From 53bbe14c638bc2c95bb5f2fc5b6970b532665a18 Mon Sep 17 00:00:00 2001 From: Starbeamrainbowlabs Date: Tue, 27 Jun 2023 19:39:57 +0100 Subject: [PATCH] update cloud wand to use new wea_c.pos interface --- .../lib/selection/selection.lua | 52 +++++++++++-------- worldeditadditions_core/core/pos.lua | 2 + 2 files changed, 33 insertions(+), 21 deletions(-) diff --git a/worldeditadditions/lib/selection/selection.lua b/worldeditadditions/lib/selection/selection.lua index fbf0d4d..c9ef190 100644 --- a/worldeditadditions/lib/selection/selection.lua +++ b/worldeditadditions/lib/selection/selection.lua @@ -9,28 +9,39 @@ local Vector3 = wea_c.Vector3 ---Selection helpers and modifiers local selection = {} ---- Additively adds a point to the current selection or +--- Additively adds a point to the current selection defined by pos1..pos2 or -- makes a selection from the provided point. -- @param name string Player name. -- @param pos vector The position to include. -function selection.add_point(name, pos) - if pos ~= nil then - local created_new = not worldedit.pos1[name] or not worldedit.pos2[name] - -- print("[set_pos1]", name, "("..pos.x..", "..pos.y..", "..pos.z..")") - if not worldedit.pos1[name] then worldedit.pos1[name] = Vector3.clone(pos) end - if not worldedit.pos2[name] then worldedit.pos2[name] = Vector3.clone(pos) end +function selection.add_point(name, newpos) + if newpos ~= nil then + print("DEBUG:selection.add_point newpos", newpos) + local has_pos1 = not not wea_c.pos.get1(name) + local has_pos2 = not not wea_c.pos.get2(name) + local created_new = not has_pos1 or not has_pos2 + if not has_pos1 then wea_c.pos.set1(name, Vector3.clone(newpos)) end + if not has_pos2 then wea_c.pos.set2(name, Vector3.clone(newpos)) end + - worldedit.marker_update(name) + -- Now no longer needed, given that the new sysstem uses an event listener to push updates to the selected region automatically + -- worldedit.marker_update(name) - local volume_before = worldedit.volume(worldedit.pos1[name], worldedit.pos2[name]) + local pos1, pos2 = wea_c.pos.get1(name), wea_c.pos.get2(name) - worldedit.pos1[name], worldedit.pos2[name] = Vector3.expand_region( - Vector3.clone(worldedit.pos1[name]), - Vector3.clone(worldedit.pos2[name]), - pos + local volume_before = worldedit.volume(pos1, pos2) + + + local new_pos1, new_pos2 = Vector3.expand_region( + Vector3.clone(pos1), + Vector3.clone(pos2), + newpos ) - local volume_after = worldedit.volume(worldedit.pos1[name], worldedit.pos2[name]) + wea_c.pos.set1(name, new_pos1) + wea_c.pos.set2(name, new_pos2) + + + local volume_after = worldedit.volume(new_pos1, new_pos2) local volume_difference = volume_after - volume_before if volume_difference == 0 and created_new then @@ -42,21 +53,20 @@ function selection.add_point(name, pos) msg = msg..volume_difference.." node" if volume_difference ~= 1 then msg = msg.."s" end - worldedit.marker_update(name) + -- Done automatically + -- worldedit.marker_update(name) worldedit.player_notify(name, msg) else - worldedit.player_notify(name, "Error: Too far away (try raising your maxdist with //farwand maxdist )") + worldedit.player_notify(name, "Error. Too far away (try raising your maxdist with //farwand maxdist )") -- print("[set_pos1]", name, "nil") end end ---- Clears current selection. +--- Clears current selection, *but only pos1 and pos2! -- @param name string Player name. function selection.clear_points(name) - worldedit.pos1[name] = nil - worldedit.pos2[name] = nil - worldedit.marker_update(name) - worldedit.set_pos[name] = nil + wea_c.pos.clear(name) + -- worldedit.marker_update(name) worldedit.player_notify(name, "Region cleared") end diff --git a/worldeditadditions_core/core/pos.lua b/worldeditadditions_core/core/pos.lua index 924e2ed..4b5f2e5 100644 --- a/worldeditadditions_core/core/pos.lua +++ b/worldeditadditions_core/core/pos.lua @@ -146,6 +146,7 @@ end -- @param pos Vector3 The position to set. -- @returns bool Whether the operation was successful or not (players aren't allowed more than positions_count_limit number of positions at a time). local function set(player_name, i, pos) + -- It's a shame that Lua doesn't have a throw/raise, 'cause we could sure use it here if i > positions_count_limit then return false end ensure_player(player_name) @@ -196,6 +197,7 @@ local function clear(player_name) if worldedit then if worldedit.pos1 then worldedit.pos1[player_name] = nil end if worldedit.pos2 then worldedit.pos2[player_name] = nil end + if worldedit.set_pos then worldedit.set_pos[player_name] = nil end end anchor:emit("clear", { player_name = player_name }) end