diff options
Diffstat (limited to 'OpenSim/Framework')
-rw-r--r-- | OpenSim/Framework/PrimitiveBaseShape.cs | 178 |
1 files changed, 56 insertions, 122 deletions
diff --git a/OpenSim/Framework/PrimitiveBaseShape.cs b/OpenSim/Framework/PrimitiveBaseShape.cs index 5056c04..49745bc 100644 --- a/OpenSim/Framework/PrimitiveBaseShape.cs +++ b/OpenSim/Framework/PrimitiveBaseShape.cs | |||
@@ -1026,117 +1026,109 @@ namespace OpenSim.Framework | |||
1026 | { | 1026 | { |
1027 | // m_log.DebugFormat("[EXTRAPARAMS]: Called ExtraParamsToBytes()"); | 1027 | // m_log.DebugFormat("[EXTRAPARAMS]: Called ExtraParamsToBytes()"); |
1028 | 1028 | ||
1029 | ushort FlexiEP = 0x10; | 1029 | const byte FlexiEP = 0x10; |
1030 | ushort LightEP = 0x20; | 1030 | const byte LightEP = 0x20; |
1031 | ushort SculptEP = 0x30; | 1031 | const byte SculptEP = 0x30; |
1032 | ushort ProjectionEP = 0x40; | 1032 | const byte ProjectionEP = 0x40; |
1033 | 1033 | ||
1034 | int i = 0; | 1034 | int TotalBytesLength = 1; // ExtraParamsNum |
1035 | uint TotalBytesLength = 1; // ExtraParamsNum | ||
1036 | 1035 | ||
1037 | uint ExtraParamsNum = 0; | 1036 | uint ExtraParamsNum = 0; |
1038 | if (_flexiEntry) | 1037 | if (_flexiEntry) |
1039 | { | 1038 | { |
1040 | ExtraParamsNum++; | 1039 | ExtraParamsNum++; |
1041 | TotalBytesLength += 16;// data | 1040 | TotalBytesLength += 16 + 2 + 4;// data |
1042 | TotalBytesLength += 2 + 4; // type | ||
1043 | } | 1041 | } |
1044 | 1042 | ||
1045 | if (_lightEntry) | 1043 | if (_lightEntry) |
1046 | { | 1044 | { |
1047 | ExtraParamsNum++; | 1045 | ExtraParamsNum++; |
1048 | TotalBytesLength += 16;// data | 1046 | TotalBytesLength += 16 + 2 + 4; // data |
1049 | TotalBytesLength += 2 + 4; // type | ||
1050 | } | 1047 | } |
1051 | 1048 | ||
1052 | if (_sculptEntry) | 1049 | if (_sculptEntry) |
1053 | { | 1050 | { |
1054 | ExtraParamsNum++; | 1051 | ExtraParamsNum++; |
1055 | TotalBytesLength += 17;// data | 1052 | TotalBytesLength += 17 + 2 + 4;// data |
1056 | TotalBytesLength += 2 + 4; // type | ||
1057 | } | 1053 | } |
1058 | 1054 | ||
1059 | if (_projectionEntry) | 1055 | if (_projectionEntry) |
1060 | { | 1056 | { |
1061 | ExtraParamsNum++; | 1057 | ExtraParamsNum++; |
1062 | TotalBytesLength += 28;// data | 1058 | TotalBytesLength += 28 + 2 + 4; // data |
1063 | TotalBytesLength += 2 + 4;// type | ||
1064 | } | 1059 | } |
1065 | 1060 | ||
1066 | byte[] returnbytes = new byte[TotalBytesLength]; | 1061 | byte[] returnBytes = new byte[TotalBytesLength]; |
1062 | |||
1063 | returnBytes[0] = (byte)ExtraParamsNum; | ||
1067 | 1064 | ||
1068 | // uint paramlength = ExtraParamsNum; | 1065 | if(ExtraParamsNum == 0) |
1066 | return returnBytes; | ||
1069 | 1067 | ||
1070 | // Stick in the number of parameters | 1068 | int i = 1; |
1071 | returnbytes[i++] = (byte)ExtraParamsNum; | ||
1072 | 1069 | ||
1073 | if (_flexiEntry) | 1070 | if (_flexiEntry) |
1074 | { | 1071 | { |
1075 | byte[] FlexiData = GetFlexiBytes(); | 1072 | returnBytes[i] = FlexiEP; // 2 bytes id code |
1073 | i += 2; | ||
1074 | returnBytes[i] = 16; // 4 bytes size | ||
1075 | i += 4; | ||
1076 | 1076 | ||
1077 | returnbytes[i++] = (byte)(FlexiEP % 256); | 1077 | // Softness is packed in the upper bits of tension and drag |
1078 | returnbytes[i++] = (byte)((FlexiEP >> 8) % 256); | 1078 | returnBytes[i] = (byte)((_flexiSoftness & 2) << 6); |
1079 | returnBytes[i + 1] = (byte)((_flexiSoftness & 1) << 7); | ||
1079 | 1080 | ||
1080 | returnbytes[i++] = (byte)(FlexiData.Length % 256); | 1081 | returnBytes[i++] |= (byte)((byte)(_flexiTension * 10.01f) & 0x7F); |
1081 | returnbytes[i++] = (byte)((FlexiData.Length >> 8) % 256); | 1082 | returnBytes[i++] |= (byte)((byte)(_flexiDrag * 10.01f) & 0x7F); |
1082 | returnbytes[i++] = (byte)((FlexiData.Length >> 16) % 256); | 1083 | returnBytes[i++] = (byte)((_flexiGravity + 10.0f) * 10.01f); |
1083 | returnbytes[i++] = (byte)((FlexiData.Length >> 24) % 256); | 1084 | returnBytes[i++] = (byte)(_flexiWind * 10.01f); |
1084 | Array.Copy(FlexiData, 0, returnbytes, i, FlexiData.Length); | 1085 | Vector3 lForce = new Vector3(_flexiForceX, _flexiForceY, _flexiForceZ); |
1085 | i += FlexiData.Length; | 1086 | lForce.GetBytes().CopyTo(returnBytes, i); |
1087 | i += 12; | ||
1086 | } | 1088 | } |
1087 | 1089 | ||
1088 | if (_lightEntry) | 1090 | if (_lightEntry) |
1089 | { | 1091 | { |
1090 | byte[] LightData = GetLightBytes(); | 1092 | returnBytes[i] = LightEP; |
1091 | 1093 | i += 2; | |
1092 | returnbytes[i++] = (byte)(LightEP % 256); | 1094 | returnBytes[i] = 16; |
1093 | returnbytes[i++] = (byte)((LightEP >> 8) % 256); | 1095 | i += 4; |
1094 | 1096 | ||
1095 | returnbytes[i++] = (byte)(LightData.Length % 256); | 1097 | // Alpha channel in color is intensity |
1096 | returnbytes[i++] = (byte)((LightData.Length >> 8) % 256); | 1098 | Color4 tmpColor = new Color4(_lightColorR, _lightColorG, _lightColorB, _lightIntensity); |
1097 | returnbytes[i++] = (byte)((LightData.Length >> 16) % 256); | 1099 | tmpColor.GetBytes().CopyTo(returnBytes, i); |
1098 | returnbytes[i++] = (byte)((LightData.Length >> 24) % 256); | 1100 | Utils.FloatToBytes(_lightRadius).CopyTo(returnBytes, i + 4); |
1099 | Array.Copy(LightData, 0, returnbytes, i, LightData.Length); | 1101 | Utils.FloatToBytes(_lightCutoff).CopyTo(returnBytes, i + 8); |
1100 | i += LightData.Length; | 1102 | Utils.FloatToBytes(_lightFalloff).CopyTo(returnBytes, i + 12); |
1103 | i += 16; | ||
1101 | } | 1104 | } |
1102 | 1105 | ||
1103 | if (_sculptEntry) | 1106 | if (_sculptEntry) |
1104 | { | 1107 | { |
1105 | byte[] SculptData = GetSculptBytes(); | 1108 | returnBytes[i] = SculptEP; |
1106 | 1109 | i += 2; | |
1107 | returnbytes[i++] = (byte)(SculptEP % 256); | 1110 | returnBytes[i] = 17; |
1108 | returnbytes[i++] = (byte)((SculptEP >> 8) % 256); | 1111 | i += 4; |
1109 | 1112 | ||
1110 | returnbytes[i++] = (byte)(SculptData.Length % 256); | 1113 | _sculptTexture.GetBytes().CopyTo(returnBytes, i); |
1111 | returnbytes[i++] = (byte)((SculptData.Length >> 8) % 256); | 1114 | i += 16; |
1112 | returnbytes[i++] = (byte)((SculptData.Length >> 16) % 256); | 1115 | returnBytes[i++] = _sculptType; |
1113 | returnbytes[i++] = (byte)((SculptData.Length >> 24) % 256); | ||
1114 | Array.Copy(SculptData, 0, returnbytes, i, SculptData.Length); | ||
1115 | i += SculptData.Length; | ||
1116 | } | 1116 | } |
1117 | 1117 | ||
1118 | if (_projectionEntry) | 1118 | if (_projectionEntry) |
1119 | { | 1119 | { |
1120 | byte[] ProjectionData = GetProjectionBytes(); | 1120 | returnBytes[i] = ProjectionEP; |
1121 | 1121 | i += 2; | |
1122 | returnbytes[i++] = (byte)(ProjectionEP % 256); | 1122 | returnBytes[i] = 28; |
1123 | returnbytes[i++] = (byte)((ProjectionEP >> 8) % 256); | 1123 | i += 4; |
1124 | returnbytes[i++] = (byte)((ProjectionData.Length) % 256); | ||
1125 | returnbytes[i++] = (byte)((ProjectionData.Length >> 16) % 256); | ||
1126 | returnbytes[i++] = (byte)((ProjectionData.Length >> 20) % 256); | ||
1127 | returnbytes[i++] = (byte)((ProjectionData.Length >> 24) % 256); | ||
1128 | Array.Copy(ProjectionData, 0, returnbytes, i, ProjectionData.Length); | ||
1129 | i += ProjectionData.Length; | ||
1130 | } | ||
1131 | 1124 | ||
1132 | if (!_flexiEntry && !_lightEntry && !_sculptEntry && !_projectionEntry) | 1125 | _projectionTextureID.GetBytes().CopyTo(returnBytes, i); |
1133 | { | 1126 | Utils.FloatToBytes(_projectionFOV).CopyTo(returnBytes, i + 16); |
1134 | byte[] returnbyte = new byte[1]; | 1127 | Utils.FloatToBytes(_projectionFocus).CopyTo(returnBytes, i + 20); |
1135 | returnbyte[0] = 0; | 1128 | Utils.FloatToBytes(_projectionAmb).CopyTo(returnBytes, i + 24); |
1136 | return returnbyte; | ||
1137 | } | 1129 | } |
1138 | 1130 | ||
1139 | return returnbytes; | 1131 | return returnBytes; |
1140 | } | 1132 | } |
1141 | 1133 | ||
1142 | public void ReadInUpdateExtraParam(ushort type, bool inUse, byte[] data) | 1134 | public void ReadInUpdateExtraParam(ushort type, bool inUse, byte[] data) |
@@ -1283,16 +1275,6 @@ namespace OpenSim.Framework | |||
1283 | //m_log.Info("[SCULPT]:" + SculptUUID.ToString()); | 1275 | //m_log.Info("[SCULPT]:" + SculptUUID.ToString()); |
1284 | } | 1276 | } |
1285 | 1277 | ||
1286 | public byte[] GetSculptBytes() | ||
1287 | { | ||
1288 | byte[] data = new byte[17]; | ||
1289 | |||
1290 | _sculptTexture.GetBytes().CopyTo(data, 0); | ||
1291 | data[16] = (byte)_sculptType; | ||
1292 | |||
1293 | return data; | ||
1294 | } | ||
1295 | |||
1296 | public void ReadFlexiData(byte[] data, int pos) | 1278 | public void ReadFlexiData(byte[] data, int pos) |
1297 | { | 1279 | { |
1298 | if (data.Length-pos >= 16) | 1280 | if (data.Length-pos >= 16) |
@@ -1324,25 +1306,6 @@ namespace OpenSim.Framework | |||
1324 | } | 1306 | } |
1325 | } | 1307 | } |
1326 | 1308 | ||
1327 | public byte[] GetFlexiBytes() | ||
1328 | { | ||
1329 | byte[] data = new byte[16]; | ||
1330 | int i = 0; | ||
1331 | |||
1332 | // Softness is packed in the upper bits of tension and drag | ||
1333 | data[i] = (byte)((_flexiSoftness & 2) << 6); | ||
1334 | data[i + 1] = (byte)((_flexiSoftness & 1) << 7); | ||
1335 | |||
1336 | data[i++] |= (byte)((byte)(_flexiTension * 10.01f) & 0x7F); | ||
1337 | data[i++] |= (byte)((byte)(_flexiDrag * 10.01f) & 0x7F); | ||
1338 | data[i++] = (byte)((_flexiGravity + 10.0f) * 10.01f); | ||
1339 | data[i++] = (byte)(_flexiWind * 10.01f); | ||
1340 | Vector3 lForce = new Vector3(_flexiForceX, _flexiForceY, _flexiForceZ); | ||
1341 | lForce.GetBytes().CopyTo(data, i); | ||
1342 | |||
1343 | return data; | ||
1344 | } | ||
1345 | |||
1346 | public void ReadLightData(byte[] data, int pos) | 1309 | public void ReadLightData(byte[] data, int pos) |
1347 | { | 1310 | { |
1348 | if (data.Length - pos >= 16) | 1311 | if (data.Length - pos >= 16) |
@@ -1373,21 +1336,6 @@ namespace OpenSim.Framework | |||
1373 | } | 1336 | } |
1374 | } | 1337 | } |
1375 | 1338 | ||
1376 | public byte[] GetLightBytes() | ||
1377 | { | ||
1378 | byte[] data = new byte[16]; | ||
1379 | |||
1380 | // Alpha channel in color is intensity | ||
1381 | Color4 tmpColor = new Color4(_lightColorR,_lightColorG,_lightColorB,_lightIntensity); | ||
1382 | |||
1383 | tmpColor.GetBytes().CopyTo(data, 0); | ||
1384 | Utils.FloatToBytes(_lightRadius).CopyTo(data, 4); | ||
1385 | Utils.FloatToBytes(_lightCutoff).CopyTo(data, 8); | ||
1386 | Utils.FloatToBytes(_lightFalloff).CopyTo(data, 12); | ||
1387 | |||
1388 | return data; | ||
1389 | } | ||
1390 | |||
1391 | public void ReadProjectionData(byte[] data, int pos) | 1339 | public void ReadProjectionData(byte[] data, int pos) |
1392 | { | 1340 | { |
1393 | byte[] ProjectionTextureUUID = new byte[16]; | 1341 | byte[] ProjectionTextureUUID = new byte[16]; |
@@ -1412,19 +1360,6 @@ namespace OpenSim.Framework | |||
1412 | } | 1360 | } |
1413 | } | 1361 | } |
1414 | 1362 | ||
1415 | public byte[] GetProjectionBytes() | ||
1416 | { | ||
1417 | byte[] data = new byte[28]; | ||
1418 | |||
1419 | _projectionTextureID.GetBytes().CopyTo(data, 0); | ||
1420 | Utils.FloatToBytes(_projectionFOV).CopyTo(data, 16); | ||
1421 | Utils.FloatToBytes(_projectionFocus).CopyTo(data, 20); | ||
1422 | Utils.FloatToBytes(_projectionAmb).CopyTo(data, 24); | ||
1423 | |||
1424 | return data; | ||
1425 | } | ||
1426 | |||
1427 | |||
1428 | /// <summary> | 1363 | /// <summary> |
1429 | /// Creates a OpenMetaverse.Primitive and populates it with converted PrimitiveBaseShape values | 1364 | /// Creates a OpenMetaverse.Primitive and populates it with converted PrimitiveBaseShape values |
1430 | /// </summary> | 1365 | /// </summary> |
@@ -1436,7 +1371,6 @@ namespace OpenSim.Framework | |||
1436 | new Quaternion(0.0f, 0.0f, 0.0f, 1.0f)); | 1371 | new Quaternion(0.0f, 0.0f, 0.0f, 1.0f)); |
1437 | } | 1372 | } |
1438 | 1373 | ||
1439 | |||
1440 | /// <summary> | 1374 | /// <summary> |
1441 | /// Creates a OpenMetaverse.Primitive and populates it with converted PrimitiveBaseShape values | 1375 | /// Creates a OpenMetaverse.Primitive and populates it with converted PrimitiveBaseShape values |
1442 | /// </summary> | 1376 | /// </summary> |