aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs')
-rw-r--r--OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs59
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