diff options
Diffstat (limited to 'OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs')
-rw-r--r-- | OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs | 59 |
1 files changed, 14 insertions, 45 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs index 58b7b00..e1b9e08 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs | |||
@@ -946,17 +946,26 @@ namespace OpenSim.Region.ClientStack.Linden | |||
946 | continue; | 946 | continue; |
947 | } | 947 | } |
948 | 948 | ||
949 | PrimitiveBaseShape pbs = PrimitiveBaseShape.CreateBox(); | 949 | OSDArray face_list = (OSDArray)inner_instance_list["face_list"]; |
950 | |||
951 | PrimitiveBaseShape pbs = null; | ||
952 | if (inner_instance_list.ContainsKey("mesh")) // seems to happen always but ... | ||
953 | { | ||
954 | int meshindx = inner_instance_list["mesh"].AsInteger(); | ||
955 | if (meshAssets.Count > meshindx) | ||
956 | pbs = PrimitiveBaseShape.CreateMesh(face_list.Count, meshAssets[meshindx]); | ||
957 | } | ||
958 | if(pbs == null) // fallback | ||
959 | pbs = PrimitiveBaseShape.CreateBox(); | ||
950 | 960 | ||
951 | Primitive.TextureEntry textureEntry | 961 | Primitive.TextureEntry textureEntry |
952 | = new Primitive.TextureEntry(Primitive.TextureEntry.WHITE_TEXTURE); | 962 | = new Primitive.TextureEntry(Primitive.TextureEntry.WHITE_TEXTURE); |
953 | 963 | ||
954 | |||
955 | OSDArray face_list = (OSDArray)inner_instance_list["face_list"]; | ||
956 | for (uint face = 0; face < face_list.Count; face++) | 964 | for (uint face = 0; face < face_list.Count; face++) |
957 | { | 965 | { |
958 | OSDMap faceMap = (OSDMap)face_list[(int)face]; | 966 | OSDMap faceMap = (OSDMap)face_list[(int)face]; |
959 | Primitive.TextureEntryFace f = pbs.Textures.CreateFace(face); | 967 | |
968 | Primitive.TextureEntryFace f = textureEntry.CreateFace(face); //clone the default | ||
960 | if (faceMap.ContainsKey("fullbright")) | 969 | if (faceMap.ContainsKey("fullbright")) |
961 | f.Fullbright = faceMap["fullbright"].AsBoolean(); | 970 | f.Fullbright = faceMap["fullbright"].AsBoolean(); |
962 | if (faceMap.ContainsKey("diffuse_color")) | 971 | if (faceMap.ContainsKey("diffuse_color")) |
@@ -986,51 +995,11 @@ namespace OpenSim.Region.ClientStack.Linden | |||
986 | 995 | ||
987 | if (textures.Count > textureNum) | 996 | if (textures.Count > textureNum) |
988 | f.TextureID = textures[textureNum]; | 997 | f.TextureID = textures[textureNum]; |
989 | else | 998 | |
990 | f.TextureID = Primitive.TextureEntry.WHITE_TEXTURE; | ||
991 | |||
992 | textureEntry.FaceTextures[face] = f; | 999 | textureEntry.FaceTextures[face] = f; |
993 | } | 1000 | } |
994 | |||
995 | pbs.TextureEntry = textureEntry.GetBytes(); | 1001 | pbs.TextureEntry = textureEntry.GetBytes(); |
996 | 1002 | ||
997 | if (inner_instance_list.ContainsKey("mesh")) // seems to happen always but ... | ||
998 | { | ||
999 | int meshindx = inner_instance_list["mesh"].AsInteger(); | ||
1000 | if (meshAssets.Count > meshindx) | ||
1001 | { | ||
1002 | pbs.SculptEntry = true; | ||
1003 | pbs.SculptType = (byte)SculptType.Mesh; | ||
1004 | pbs.SculptTexture = meshAssets[meshindx]; // actual asset UUID after meshs suport introduction | ||
1005 | // data will be requested from asset on rez (i hope) | ||
1006 | } | ||
1007 | } | ||
1008 | |||
1009 | // faces number to pbs shape | ||
1010 | switch(face_list.Count) | ||
1011 | { | ||
1012 | case 1: | ||
1013 | case 2: | ||
1014 | pbs.ProfileCurve = (byte)ProfileCurve.Circle; | ||
1015 | pbs.PathCurve = (byte)PathCurve.Circle; | ||
1016 | break; | ||
1017 | |||
1018 | case 3: | ||
1019 | case 4: | ||
1020 | pbs.ProfileCurve = (byte)ProfileCurve.Circle; | ||
1021 | pbs.PathCurve = (byte)PathCurve.Line; | ||
1022 | break; | ||
1023 | case 5: | ||
1024 | pbs.ProfileCurve = (byte)ProfileCurve.EqualTriangle; | ||
1025 | pbs.PathCurve = (byte)PathCurve.Line; | ||
1026 | break; | ||
1027 | |||
1028 | default: | ||
1029 | pbs.ProfileCurve = (byte)ProfileCurve.Square; | ||
1030 | pbs.PathCurve = (byte)PathCurve.Line; | ||
1031 | break; | ||
1032 | } | ||
1033 | |||
1034 | Vector3 position = inner_instance_list["position"].AsVector3(); | 1003 | Vector3 position = inner_instance_list["position"].AsVector3(); |
1035 | Quaternion rotation = inner_instance_list["rotation"].AsQuaternion(); | 1004 | Quaternion rotation = inner_instance_list["rotation"].AsQuaternion(); |
1036 | 1005 | ||