summaryrefslogtreecommitdiff
path: root/indra/newview/scripts/lua
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/scripts/lua')
-rw-r--r--indra/newview/scripts/lua/require/LLAgent.lua13
-rw-r--r--indra/newview/scripts/lua/require/LLChat.lua1
-rw-r--r--indra/newview/scripts/lua/require/LLListener.lua (renamed from indra/newview/scripts/lua/require/LLChatListener.lua)26
-rw-r--r--indra/newview/scripts/lua/test_LLChatListener.lua6
-rw-r--r--indra/newview/scripts/lua/test_autopilot.lua22
5 files changed, 52 insertions, 16 deletions
diff --git a/indra/newview/scripts/lua/require/LLAgent.lua b/indra/newview/scripts/lua/require/LLAgent.lua
index 7b12493acc..4a1132fe7e 100644
--- a/indra/newview/scripts/lua/require/LLAgent.lua
+++ b/indra/newview/scripts/lua/require/LLAgent.lua
@@ -80,6 +80,11 @@ function LLAgent.teleport(...)
return leap.request('LLTeleportHandler', args).message
end
+-- Call with no arguments to sit on the ground.
+-- Otherwise specify "obj_uuid" to sit on,
+-- or region "position" {x, y, z} where to find closest object to sit on.
+-- For example: LLAgent.requestSit{position=LLAgent.getRegionPosition()}
+-- Your avatar should be close enough to the object you want to sit on
function LLAgent.requestSit(...)
local args = mapargs('obj_uuid,position', ...)
args.op = 'requestSit'
@@ -90,6 +95,11 @@ function LLAgent.requestStand()
leap.send('LLAgent', {op = 'requestStand'})
end
+-- ***************************************************************************
+-- Autopilot
+-- ***************************************************************************
+LLAgent.autoPilotPump = "LLAutopilot"
+
-- Start the autopilot to move to "target_global" location using specified parameters
-- LLAgent.startAutoPilot{ target_global array of target global {x, y, z} position
-- [, allow_flying] allow flying during autopilot [default: true]
@@ -97,6 +107,7 @@ end
-- [, behavior_name] name of the autopilot behavior [default: (script name)]
-- [, target_rotation] array of [x, y, z, w] quaternion values [default: no target]
-- [, rotation_threshold] target maximum angle from target facing rotation [default: 0.03 radians]
+-- an event with "success" flag is sent to "LLAutopilot" event pump, when auto pilot is terminated
function LLAgent.startAutoPilot(...)
local args = mapargs('target_global,allow_flying,stop_distance,behavior_name,target_rotation,rotation_threshold', ...)
args.op = 'startAutoPilot'
@@ -109,7 +120,7 @@ function LLAgent.setAutoPilotTarget(target_global)
end
-- Start the autopilot to move to the specified target location
--- either "leader_id" (uuid of target) or "avatar_name" (avatar full name) should be specified
+-- either "leader_id" (uuid of target) or "avatar_name" (avatar full name: use just first name for 'Resident') should be specified
-- "allow_flying" [default: true], "stop_distance" [default: autopilot guess]
function LLAgent.startFollowPilot(...)
local args = mapargs('leader_id,avatar_name,allow_flying,stop_distance', ...)
diff --git a/indra/newview/scripts/lua/require/LLChat.lua b/indra/newview/scripts/lua/require/LLChat.lua
index bc0fc86d22..3ac3bab746 100644
--- a/indra/newview/scripts/lua/require/LLChat.lua
+++ b/indra/newview/scripts/lua/require/LLChat.lua
@@ -5,6 +5,7 @@ local LLChat = {}
-- ***************************************************************************
-- Nearby chat
-- ***************************************************************************
+LLChat.nearbyChatPump = "LLNearbyChat"
-- 0 is public nearby channel, other channels are used to communicate with LSL scripts
function LLChat.sendNearby(msg, channel)
diff --git a/indra/newview/scripts/lua/require/LLChatListener.lua b/indra/newview/scripts/lua/require/LLListener.lua
index 82b28966ce..e3bfb6b358 100644
--- a/indra/newview/scripts/lua/require/LLChatListener.lua
+++ b/indra/newview/scripts/lua/require/LLListener.lua
@@ -3,29 +3,31 @@ local inspect = require 'inspect'
local leap = require 'leap'
local util = require 'util'
-local LLChatListener = {}
+local LLListener = {}
local waitfor = {}
local listener_name = {}
+local pump = {}
-function LLChatListener:new()
+function LLListener:new()
local obj = setmetatable({}, self)
self.__index = self
- obj.name = 'Chat_listener'
+ obj.name = 'Listener'
return obj
end
-util.classctor(LLChatListener)
+util.classctor(LLListener)
-function LLChatListener:handleMessages(event_data)
+function LLListener:handleMessages(event_data)
print(inspect(event_data))
return true
end
-function LLChatListener:start()
+function LLListener:start(pump_name)
+ pump = pump_name
waitfor = leap.WaitFor(-1, self.name)
- function waitfor:filter(pump, data)
- if pump == "LLNearbyChat" then
+ function waitfor:filter(pump_, data)
+ if pump == pump_ then
return data
end
end
@@ -37,12 +39,12 @@ function LLChatListener:start()
end
end)
- listener_name = leap.request(leap.cmdpump(), {op='listen', source='LLNearbyChat', listener="ChatListener", tweak=true}).listener
+ listener_name = leap.request(leap.cmdpump(), {op='listen', source=pump, listener="LLListener", tweak=true}).listener
end
-function LLChatListener:stop()
- leap.send(leap.cmdpump(), {op='stoplistening', source='LLNearbyChat', listener=listener_name})
+function LLListener:stop()
+ leap.send(leap.cmdpump(), {op='stoplistening', source=pump, listener=listener_name})
waitfor:close()
end
-return LLChatListener
+return LLListener
diff --git a/indra/newview/scripts/lua/test_LLChatListener.lua b/indra/newview/scripts/lua/test_LLChatListener.lua
index 4a4d40bee5..1df2880f3d 100644
--- a/indra/newview/scripts/lua/test_LLChatListener.lua
+++ b/indra/newview/scripts/lua/test_LLChatListener.lua
@@ -1,4 +1,4 @@
-local LLChatListener = require 'LLChatListener'
+local LLListener = require 'LLListener'
local LLChat = require 'LLChat'
local UI = require 'UI'
@@ -22,7 +22,7 @@ function openOrEcho(message)
end
end
-local listener = LLChatListener()
+local listener = LLListener()
function listener:handleMessages(event_data)
if string.find(event_data.message, '[LUA]') then
@@ -36,4 +36,4 @@ function listener:handleMessages(event_data)
return true
end
-listener:start()
+listener:start(LLChat.nearbyChatPump)
diff --git a/indra/newview/scripts/lua/test_autopilot.lua b/indra/newview/scripts/lua/test_autopilot.lua
new file mode 100644
index 0000000000..0560477d38
--- /dev/null
+++ b/indra/newview/scripts/lua/test_autopilot.lua
@@ -0,0 +1,22 @@
+local LLAgent = require 'LLAgent'
+local LLListener = require 'LLListener'
+
+local pos = LLAgent.getGlobalPosition()
+pos[1]+=10 -- delta x
+pos[2]+=5 -- delta y
+LLAgent.requestStand()
+LLAgent.startAutoPilot{target_global=pos,allow_flying=false,stop_distance=1}
+
+local listener = LLListener()
+
+function listener:handleMessages(event_data)
+ if event_data.success then
+ print('Destination is reached')
+ LLAgent.requestSit()
+ else
+ print('Failed to reach destination')
+ end
+ return false
+end
+
+listener:start(LLAgent.autoPilotPump)