diff options
author | Melanie Thielker | 2008-07-31 12:31:31 +0000 |
---|---|---|
committer | Melanie Thielker | 2008-07-31 12:31:31 +0000 |
commit | c441a03ea3120c52af3fdffb284194f2609127cf (patch) | |
tree | 539b48d22ab51f45dc09f930dbeb1b7f6ba703a8 /OpenSim/Region/ScriptEngine/Common | |
parent | Thank you, HomerHorwitz, for a patch that add PERMISSION_CONTROL_CAMERA (diff) | |
download | opensim-SC_OLD-c441a03ea3120c52af3fdffb284194f2609127cf.zip opensim-SC_OLD-c441a03ea3120c52af3fdffb284194f2609127cf.tar.gz opensim-SC_OLD-c441a03ea3120c52af3fdffb284194f2609127cf.tar.bz2 opensim-SC_OLD-c441a03ea3120c52af3fdffb284194f2609127cf.tar.xz |
Thank you, HomerHorwitz, for a patch that implements llSetCameraParams/llClearCameraParams.
Fixes Mantis #1867
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Common')
-rw-r--r-- | OpenSim/Region/ScriptEngine/Common/BuiltIn_Commands_BaseClass.cs | 25 | ||||
-rw-r--r-- | OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs | 68 |
2 files changed, 91 insertions, 2 deletions
diff --git a/OpenSim/Region/ScriptEngine/Common/BuiltIn_Commands_BaseClass.cs b/OpenSim/Region/ScriptEngine/Common/BuiltIn_Commands_BaseClass.cs index 551c6f6..cd2aa45 100644 --- a/OpenSim/Region/ScriptEngine/Common/BuiltIn_Commands_BaseClass.cs +++ b/OpenSim/Region/ScriptEngine/Common/BuiltIn_Commands_BaseClass.cs | |||
@@ -2425,5 +2425,30 @@ namespace OpenSim.Region.ScriptEngine.Common | |||
2425 | // Can not be public const? | 2425 | // Can not be public const? |
2426 | public static readonly vector ZERO_VECTOR = new vector(0.0, 0.0, 0.0); | 2426 | public static readonly vector ZERO_VECTOR = new vector(0.0, 0.0, 0.0); |
2427 | public static readonly rotation ZERO_ROTATION = new rotation(0.0, 0, 0.0, 1.0); | 2427 | public static readonly rotation ZERO_ROTATION = new rotation(0.0, 0, 0.0, 1.0); |
2428 | |||
2429 | // constants for llSetCameraParams | ||
2430 | public const int CAMERA_PITCH = 0; | ||
2431 | public const int CAMERA_FOCUS_OFFSET = 1; | ||
2432 | public const int CAMERA_FOCUS_OFFSET_X = 2; | ||
2433 | public const int CAMERA_FOCUS_OFFSET_Y = 3; | ||
2434 | public const int CAMERA_FOCUS_OFFSET_Z = 4; | ||
2435 | public const int CAMERA_POSITION_LAG = 5; | ||
2436 | public const int CAMERA_FOCUS_LAG = 6; | ||
2437 | public const int CAMERA_DISTANCE = 7; | ||
2438 | public const int CAMERA_BEHINDNESS_ANGLE = 8; | ||
2439 | public const int CAMERA_BEHINDNESS_LAG = 9; | ||
2440 | public const int CAMERA_POSITION_THRESHOLD = 10; | ||
2441 | public const int CAMERA_FOCUS_THRESHOLD = 11; | ||
2442 | public const int CAMERA_ACTIVE = 12; | ||
2443 | public const int CAMERA_POSITION = 13; | ||
2444 | public const int CAMERA_POSITION_X = 14; | ||
2445 | public const int CAMERA_POSITION_Y = 15; | ||
2446 | public const int CAMERA_POSITION_Z = 16; | ||
2447 | public const int CAMERA_FOCUS = 17; | ||
2448 | public const int CAMERA_FOCUS_X = 18; | ||
2449 | public const int CAMERA_FOCUS_Y = 19; | ||
2450 | public const int CAMERA_FOCUS_Z = 20; | ||
2451 | public const int CAMERA_POSITION_LOCKED = 21; | ||
2452 | public const int CAMERA_FOCUS_LOCKED = 22; | ||
2428 | } | 2453 | } |
2429 | } | 2454 | } |
diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs index c386e38..bdca67c 100644 --- a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs +++ b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs | |||
@@ -6917,13 +6917,77 @@ namespace OpenSim.Region.ScriptEngine.Common | |||
6917 | public void llSetCameraParams(LSL_Types.list rules) | 6917 | public void llSetCameraParams(LSL_Types.list rules) |
6918 | { | 6918 | { |
6919 | m_host.AddScriptLPS(1); | 6919 | m_host.AddScriptLPS(1); |
6920 | NotImplemented("llSetCameraParams"); | 6920 | |
6921 | // our key in the object we are in | ||
6922 | LLUUID invItemID=InventorySelf(); | ||
6923 | if (invItemID == LLUUID.Zero) return; | ||
6924 | |||
6925 | // the object we are in | ||
6926 | LLUUID objectID = m_host.ParentUUID; | ||
6927 | if(objectID == LLUUID.Zero) return; | ||
6928 | |||
6929 | // we need the permission first, to know which avatar we want to set the camera for | ||
6930 | LLUUID agentID = m_host.TaskInventory[invItemID].PermsGranter; | ||
6931 | if (agentID == LLUUID.Zero) return; | ||
6932 | if ((m_host.TaskInventory[invItemID].PermsMask & BuiltIn_Commands_BaseClass.PERMISSION_CONTROL_CAMERA) == 0) return; | ||
6933 | |||
6934 | ScenePresence presence = World.GetScenePresence(agentID); | ||
6935 | |||
6936 | // we are not interested in child-agents | ||
6937 | if(presence.IsChildAgent) return; | ||
6938 | |||
6939 | SortedDictionary<int, float> parameters = new SortedDictionary<int, float>(); | ||
6940 | object[] data = rules.Data; | ||
6941 | for(int i = 0; i < data.Length; ++i) { | ||
6942 | int type = Convert.ToInt32(data[i++]); | ||
6943 | if(i >= data.Length) break; // odd number of entries => ignore the last | ||
6944 | |||
6945 | // some special cases: Vector parameters are split into 3 float parameters (with type+1, type+2, type+3) | ||
6946 | switch(type) { | ||
6947 | case BuiltIn_Commands_BaseClass.CAMERA_FOCUS: | ||
6948 | case BuiltIn_Commands_BaseClass.CAMERA_FOCUS_OFFSET: | ||
6949 | case BuiltIn_Commands_BaseClass.CAMERA_POSITION: | ||
6950 | LSL_Types.Vector3 v = (LSL_Types.Vector3)data[i]; | ||
6951 | parameters.Add(type + 1, (float)v.x); | ||
6952 | parameters.Add(type + 2, (float)v.y); | ||
6953 | parameters.Add(type + 3, (float)v.z); | ||
6954 | break; | ||
6955 | default: | ||
6956 | // TODO: clean that up as soon as the implicit casts are in | ||
6957 | if(data[i] is LSL_Types.LSLFloat) | ||
6958 | parameters.Add(type, (float)((LSL_Types.LSLFloat)data[i]).value); | ||
6959 | else if(data[i] is LSL_Types.LSLInteger) | ||
6960 | parameters.Add(type, (float)((LSL_Types.LSLInteger)data[i]).value); | ||
6961 | else parameters.Add(type, Convert.ToSingle(data[i])); | ||
6962 | break; | ||
6963 | } | ||
6964 | } | ||
6965 | if(parameters.Count > 0) presence.ControllingClient.SendSetFollowCamProperties(objectID, parameters); | ||
6921 | } | 6966 | } |
6922 | 6967 | ||
6923 | public void llClearCameraParams() | 6968 | public void llClearCameraParams() |
6924 | { | 6969 | { |
6925 | m_host.AddScriptLPS(1); | 6970 | m_host.AddScriptLPS(1); |
6926 | NotImplemented("llClearCameraParams"); | 6971 | |
6972 | // our key in the object we are in | ||
6973 | LLUUID invItemID=InventorySelf(); | ||
6974 | if (invItemID == LLUUID.Zero) return; | ||
6975 | |||
6976 | // the object we are in | ||
6977 | LLUUID objectID = m_host.ParentUUID; | ||
6978 | if(objectID == LLUUID.Zero) return; | ||
6979 | |||
6980 | // we need the permission first, to know which avatar we want to clear the camera for | ||
6981 | LLUUID agentID = m_host.TaskInventory[invItemID].PermsGranter; | ||
6982 | if (agentID == LLUUID.Zero) return; | ||
6983 | if ((m_host.TaskInventory[invItemID].PermsMask & BuiltIn_Commands_BaseClass.PERMISSION_CONTROL_CAMERA) == 0) return; | ||
6984 | |||
6985 | ScenePresence presence = World.GetScenePresence(agentID); | ||
6986 | |||
6987 | // we are not interested in child-agents | ||
6988 | if(presence.IsChildAgent) return; | ||
6989 | |||
6990 | presence.ControllingClient.SendClearFollowCamProperties(objectID); | ||
6927 | } | 6991 | } |
6928 | 6992 | ||
6929 | public double llListStatistics(int operation, LSL_Types.list src) | 6993 | public double llListStatistics(int operation, LSL_Types.list src) |